【问题标题】:Which steps/gremlin queries from Tinkerpop 3 are not supported in Cosmos db graphCosmos db 图中不支持来自 Tinkerpop 3 的哪些步骤/gremlin 查询
【发布时间】:2018-09-24 11:30:02
【问题描述】:

我目前正在根据 Cosmos db graph 评估 Neo4j。 由于当前系统位于 cosmos 中,因此我们开始在 cosmos 中构建图。 但是最近发现了一些 tinkerpop3 查询,这些查询在 cosmos db 图中不支持,例如正则表达式、过滤器和其他 lambda 操作。

我们是否在任何地方都有此类受支持/不受支持的操作的列表,以便我们能够更好地在两个数据库之间进行选择,而不会影响我们希望构建的功能。

【问题讨论】:

    标签: neo4j azure-cosmosdb gremlin tinkerpop3


    【解决方案1】:

    CosmosDB 支持的 Gremlin 步骤的完整列表可以在 here 找到。值得澄清的是,TinkerPop 本身不支持正则表达式。您只能通过带有 filter() 步骤的 lambda 表达式来做到这一点:

    gremlin> g = TinkerFactory.createModern().traversal()
    ==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
    gremlin> p = Pattern.compile("(marko|j.*h)")
    ==>(marko|j.*h)
    gremlin> g.V().values('name').filter{p.matcher(it.get()).matches()}
    ==>marko
    ==>josh
    

    虽然这可行,但我知道没有图表可以优化特定的遍历(即它不会基于索引)。事实上,没有图会优化任何 lambda - 图将简单地执行任意代码。您将需要寻找原生支持正则表达式或某种形式的全文搜索的图表。我所知道的在 Gremlin 本身中获得此类支持的唯一一个是 JanusGraphDSE Graph。其他图表本身确实具有这种支持,但不一定以可以直接在 Gremlin 中使用的方式公开。

    TinkerPop 是 adding native support for text predicates 现在似乎有更多图表支持此功能,并且这样做的模式相对一致。我们应该在 TinkerPop 3.4.0 发布时看到这一点。

    【讨论】:

    • 感谢您的澄清。但是 cosmos db 仍然不支持 lambda 表达式。我们可以通过触发类似 SQL 的查询并在 Cosmos 中获取答案然后开始遍历检索到的顶点来做到这一点吗?
    • 我不知道这个问题的答案,但你可以尝试一下。
    猜你喜欢
    • 1970-01-01
    • 2019-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多