在Cosmos DB中优化gremlin查询

时间:2017-09-28 13:51:00

标签: gremlin azure-cosmosdb

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

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

此查询在考虑从DB返回的数据大小时会出现问题,因为此查询会返回所选顶点的所有inEoutE。问题是如何在查询结果大小的概念中优化此查询?

2 个答案:

答案 0 :(得分:0)

如上所述,上述查询返回一个包含所有依赖关系和连接的顶点。因此,在大量数据中(当与指定顶点有很多连接时)可能会出现问题。因此,我们可以使用propertiesproperyMapvaluesvalueMap等内容优化查询。总而言之,相关查询结束时valueMap(true)可能很有用,并最大限度地减少了来自Cosmos的传输数据的大小。例如:

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

除了顶点属性之外,布尔值还用于获取顶点的idlabel

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

答案 1 :(得分:0)

您是如何通过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 /服务器的下一个版本中,因此我希望您在提供的遍历示例中获得额外的性能提升该版本可用。