微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

优化遍历和查找连接组件的gremlin查询

如何解决优化遍历和查找连接组件的gremlin查询

我试图在一个图中找到一个连接组件中的所有节点,其中包含大约 130M 个顶点和大约 350M 条边。

以下是我用来查找连接组件中节点数的查询 -

输入 - 起始顶点 id/name

输出 - 连接组件中的节点数。

查询 - malloc()

上述查询大约需要 52 秒

RepeatStep 大约需要 29 秒

有没有办法优化Repeatstep中的线性遍历或WherePredicateatep中的查找?

上述查询配置文件输出-

g.v().has("name","driver1").repeat(where(without ("a")).store("a").both().simplePath().dedup()).emit().hasLabel("driver").count().fold()

解决方法

图查询的性能取决于需要触及的数据量以及索引可以提供的帮助量。配置文件结果中的遍历器计数显示接触了多少数据(本质上是查询的扇出)。如果您使用 JanusGraph,查询的 .profile() 将显示索引提供了多少帮助(或不提供)。如果您使用 Amazon Neptune,为 bothin 等步骤提供标签有助于查询引擎利用可用索引。在某些情况下,多线程查询并在应用程序中加入结果会有所帮助。就您而言,如果不知道数据的确切构成,就很难提供其他建议。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。