【问题标题】:Gremlin count() query in Datastax is too slowDatastax 中的 Gremlin count() 查询太慢
【发布时间】:2018-10-25 00:19:29
【问题描述】:

我在 datastax 企业中有 3 个节点,并在这些节点上加载了 6500 万个顶点和边。当我使用 dse studio 或 gremlin 控制台并在我的图表上运行 gremlin 查询时,查询太慢了。我定义了任何类型的索引并再次测试但没有效果。 当我运行查询例如“g.v().count()”时,cpu 使用率和 cpu 平均负载没有太大变化,而如果我运行 cql 查询,则分布在所有节点上,所有节点上的 cpu 使用率和 cpu 平均负载是一个重大变化 在这种情况下,高效 gremlin 查询的最佳实践或最佳配置是什么?

【问题讨论】:

  • 请发布更多详细信息 - 查询代码等
  • 例如“g.V().count()”或任何其他查询
  • 再次...更多细节。什么版本的 DSE Graph?您说“任何其他查询”,但您只会得到与g.V().count() 相关的答案 - 这就是您想要的吗?您现在从该遍历中获得了什么样的速度?
  • DSE 图形版本为 5.1,仅对于 100,000 个顶点和边,查询“gE().count()”的时间为 50 秒,查询“gV().count()”为 10秒。对于 6500 万个顶点,我对查询“g.V().count()”有错误

标签: gremlin datastax-enterprise-graph


【解决方案1】:

基于count() 的遍历应该通过带有 Spark 的 OLAP 执行,以获取您正在使用的大小的图形。如果您使用基于标准 OLTP 的遍历,则此类查询的等待时间可能会很长。

请注意,此规则适用于任何必须执行“表扫描”的图形计算(即触摸图形中的所有或很大一部分顶点/边)。此问题也并非特定于 DSE Graph,几乎适用于任何图形数据库。

【讨论】:

  • 非常感谢斯蒂芬
【解决方案2】:

在对不同查询进行多次测试后,我得出这个结论,当您在顶点属性上定义索引并查找特定顶点时,似乎 gremlin 对百万个顶点的计数查询存在问题:g.V().hasLabel('member').has('C_ID','4242833') 时间此查询的时间低于 1 秒,这是可以接受的。问题就在这里,为什么 gremlin 对百万个顶点的计数查询有问题?

【讨论】:

  • 这与 Gremlin 本身无关,而是与 count() 查询的性质有关,该查询最终转化为必须在物理世界中完成的操作。 count(),除非由数据库通过某种计数器进行优化,否则将大致转换为对底层存储设备/硬盘驱动器的完整线性扫描(假设为单节点集群)。在分布式系统中情况会变得更糟,因为count() 还需要扫描 Cassandra 集群中的所有节点。正如斯蒂芬所说,这很容易使用 Gremlin OLAP 完成。您可能需要维护自己的计数器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多