3

我正在对 neo4j 的蓝图和原生实现之间的遍历速度进行性能测试。我创建了一个包含 1000 个节点的图,每个级别有 1 个节点,即

O->O->O->O->。. . .->O

我使用此蓝图代码记录了 90 毫秒、93 毫秒和 79 毫秒(运行 3 次)的迭代(循环代码)时间:

Iterable<Vertex> vertices = testGraph.getVertices();

//Code block which was measured.
for(Vertex vertex : vertices){};

并使用本机代码 270ms、268ms 和 321ms:

Iterable<Node> nodes = Traversal.description().breadthFirst().relationships(CustomRelTypes.LINKED_TO, Direction.OUTGOING).evaluator(Evaluators.all()).traverse(rootNode).nodes();

//Code block which was measured.
for(Node node : nodes){}

我无法理解 neo4j 的蓝图实现如何更快。我还没有对其中任何一个进行任何特殊配置。depthFirst 的时间也几乎相同。

有谁知道我如何加快本机性能以匹配蓝图?

谢谢你。

4

1 回答 1

5

Blueprints 在底层使用 Neo4j 的原生 getAllNodes() 方法,而不是遍历 API:

https://github.com/tinkerpop/blueprints/blob/master/blueprints-neo4j-graph/src/main/java/com/tinkerpop/blueprints/impls/neo4j/Neo4jGraph.java#L339

所以等效的本机 Neo4j Java 代码将是:

g = new EmbeddedGraphDatabase('/path/to/graph-dir');
g.getAllNodes();
于 2012-07-14T02:37:50.640 回答