【发布时间】:2017-09-28 13:51:00
【问题描述】:
我在 Cosmos Graph 的 gremlin 中运行如下查询:
g.V().hasLabel('vertex_label').limit(1)
此查询在从 DB 返回的数据大小方面存在问题,因为此查询返回所选顶点的所有 inE 和 outE。问题是如何根据查询结果的大小来优化这个查询?
【问题讨论】:
我在 Cosmos Graph 的 gremlin 中运行如下查询:
g.V().hasLabel('vertex_label').limit(1)
此查询在从 DB 返回的数据大小方面存在问题,因为此查询返回所选顶点的所有 inE 和 outE。问题是如何根据查询结果的大小来优化这个查询?
【问题讨论】:
如前所述,上述查询返回一个顶点及其所有依赖项和连接。因此,在大量数据中(当与指定顶点有很多连接时)可能会出现问题。因此,我们可以使用properties、properyMap、values 和valueMap 之类的东西来优化我们的查询。总之,相关查询末尾的valueMap(true) 可能很有用,并且可以最大限度地减少从 Cosmos 传输的数据的大小。例如:
g.V().hasLabel('play').limit(1).valueMap(true)
布尔值用于获取顶点的id 和label 以及顶点属性。
此外,如果查询结构中有任何优化概念,您可以在this link 中找到更多信息。
【讨论】:
您如何通过 Microsoft.Azure.Graphs SDK 或 Gremlin 服务器使用 CosmosDB Graph?
如果您使用的是 Microsoft.Azure.Graphs,最新版本(发布时为 0.2.4-preview)支持将 GraphSONFormat 指定为 DocumentClient.CreateGremlinRequest(..) 上的参数。您可以从GraphSONFormat.Normal 或GraphSONFormat.Compact 中进行选择,如果未提供Compact,则应为默认值。
对于 CosmosDB Gremlin 服务器,Compact 也是默认行为。
使用GraphSONFormat.Compact,顶点结果将不包括边,因此,在提取顶点时可以跳过outE 和inE 提取。如果需要,GraphSONFormat.Normal 将返回完整的 GraphSON 响应。
附加说明:对 limit() 的优化将包含在 SDK/服务器的下一版本中,因此我希望您在发布时提供的遍历示例有额外的性能提升变得可用。
【讨论】: