【问题标题】:Optimize gremlin queries in Cosmos DB优化 Cosmos DB 中的 gremlin 查询
【发布时间】:2017-09-28 13:51:00
【问题描述】:

我在 Cosmos Graph 的 gremlin 中运行如下查询:

g.V().hasLabel('vertex_label').limit(1)

此查询在从 DB 返回的数据大小方面存在问题,因为此查询返回所选顶点的所有 inEoutE。问题是如何根据查询结果的大小来优化这个查询?

【问题讨论】:

    标签: gremlin azure-cosmosdb


    【解决方案1】:

    如前所述,上述查询返回一个顶点及其所有依赖项和连接。因此,在大量数据中(当与指定顶点有很多连接时)可能会出现问题。因此,我们可以使用propertiesproperyMapvaluesvalueMap 之类的东西来优化我们的查询。总之,相关查询末尾的valueMap(true) 可能很有用,并且可以最大限度地减少从 Cosmos 传输的数据的大小。例如:

    g.V().hasLabel('play').limit(1).valueMap(true)
    

    布尔值用于获取顶点的idlabel 以及顶点属性。

    此外,如果查询结构中有任何优化概念,您可以在this link 中找到更多信息。

    【讨论】:

      【解决方案2】:

      您如何通过 Microsoft.Azure.Graphs SDK 或 Gremlin 服务器使用 CosmosDB Graph?

      如果您使用的是 Microsoft.Azure.Graphs,最新版本(发布时为 0.2.4-preview)支持将 GraphSONFormat 指定为 DocumentClient.CreateGremlinRequest(..) 上的参数。您可以从GraphSONFormat.NormalGraphSONFormat.Compact 中进行选择,如果未提供Compact,则应为默认值。

      对于 CosmosDB Gremlin 服务器,Compact 也是默认行为。

      使用GraphSONFormat.Compact,顶点结果将不包括边,因此,在提取顶点时可以跳过outEinE 提取。如果需要,GraphSONFormat.Normal 将返回完整的 GraphSON 响应。

      附加说明:对 limit() 的优化将包含在 SDK/服务器的下一版本中,因此我希望您在发布时提供的遍历示例有额外的性能提升变得可用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-27
        相关资源
        最近更新 更多