最近我在学校有一个作业来比较 MySQL 和 Neo4j。
我阅读了“Graph Databases”一书和“Neo4j in Action”一书的第一章,在这两本书中,它们都展示了 MySQL 和 Neo4j 之间的不同之处在于当你想查询“朋友的朋友的朋友......一个人的朋友”时”。
我在这里关注了 Joerg Baach 先生与 mysql 相比的 neo4j 性能(如何改进?)并得到相同的结果。MySQL 添加索引后速度很快,Cypher 无法及时得到结果。
后来我决定使用 Traversal Framework。这是我的查询:
for (Path p: t.description()
.depthFirst()
.relationships(RelTypes.friend, Direction.OUTGOING)
.evaluator(Evaluators.atDepth(4))
.uniqueness(Uniqueness.NODE_LEVEL)
.traverse(graphDb.index()
.forNodes("node_auto_index")
.get("noscenda_name", "person3200")
.getSingle()))
{
//....
}
现在我必须测量返回结果需要多长时间。我阅读了Neo4j Traversal API的手册
Traverser 对象是调用 TraversalDescription 对象的 traverse() 的结果。它表示位于图中的遍历,以及结果格式的规范。每次调用 Traverser 的迭代器的 next() 方法时,都会延迟执行实际的遍历。
每次调用 next() 方法时都会执行实际的遍历。所以如果我想测量我必须等待循环结束的时间。我对吗?
如果我是对的,Traversal API 的性能非常糟糕,因为它需要大约 60 秒才能返回深度 4 的结果。有什么提高性能的建议吗?