2017-06-12 68 views
0

我目前在hadoop环境中使用janusGraph。 我已经将大量的顶点加载到图中(大约五十万),并获得了主键运行的索引。 迭代每个顶点大约需要3分钟。 我目前在我的图中有0条边。访问边而不迭代顶点

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

然而,要求边缘的计数与我的edge-csv-file一样需要大约4分钟,并为我的tinkerpopserver产生一个超时。

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

添加边缘本身工作正常,因为顶点的组合索引相当快。

回答

1

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

+0

其实它没有。 Hbase所花费的时间和我的读数都表示,它首先迭代所有顶点。还有g.E()。has('myIndexedProperty')。count()在任何方面都不会更快。似乎通过遍历首先需要遍历所有顶点。 – TApplis

+0

https://github.com/JanusGraph/janusgraph/issues/284'has(key)'不使用索引。您需要添加具有共同价值的公共属性以利用索引。 – pantalohnes

2

鉴于JanusGraph g.E()存储边缘的方式将基本上迭代所有顶点以获取边缘,因此获取计数的操作并不多。值得注意的是,迭代边是一个特定于图的问题,所以其他图可能会有不同的表现。例如,TinkerGraph用一种完全绕过迭代的策略处理计数。