【问题标题】:Accessing Edges without iterating Vertices在不迭代顶点的情况下访问边
【发布时间】:2017-06-12 14:18:05
【问题描述】:

我目前在 hadoop 环境中使用 janusGraph。 我已经在图中加载了更多的顶点(大约一百万)并获得了主键运行的索引。 迭代每个顶点大约需要 3 分钟。 我的图表中目前有 0 条边。

为了加载我的图形边缘,我正在读出一个包含数据的 csv 文件。 由于我有时会面临超时(由于环境的原因),所以我首先要查找顶点数,然后跳到 csv 中的正确行,以重新开始加载。

但是,要求对我的 edge-csv 文件执行相同操作的边数大约需要 4 分钟,并且会导致我的 tinkerpopserver 超时。

有没有一种方法可以在不迭代每个顶点的情况下获得图中边的总数?

添加边本身可以正常工作,因为顶点的复合索引非常快。

【问题讨论】:

    标签: performance gremlin janusgraph


    【解决方案1】:

    鉴于 JanusGraph g.E() 的边存储方式基本上会迭代所有顶点以获取边,因此您无能为力来获得计数。值得注意的是,迭代边是一个特定于图的问题,因此其他图的行为可能会有所不同。例如,TinkerGraph 使用完全绕过迭代的策略来处理计数。

    【讨论】:

      【解决方案2】:

      graph.traversal().E().count() 应该可以工作。

      【讨论】:

      • 其实没有。花费的时间和我在 Hbase 中的读取计数都表示这首先迭代所有顶点。此外 g.E().has('myIndexedProperty').count() 无论如何都不会更快。看来,通过遍历的边缘转换首先需要迭代所有顶点。
      • github.com/JanusGraph/janusgraph/issues/284 has(key) 不使用索引。您需要添加具有共同值的共同属性才能利用索引。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-29
      • 2019-01-19
      • 2020-03-27
      • 1970-01-01
      • 2018-04-17
      • 2018-12-31
      相关资源
      最近更新 更多