- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
最近我在学校有一个作业,比较MySQL和Neo4j。
我读了《图数据库》一书和《Neo4j in Action》一书的第一章,这两本书都展示了MySQL和Neo4j之间的不同之处在于当你想要查询“ friend 的 friend 的 friend ......一个人的”。
我在这里关注 Joerg Baach 先生 neo4j performance compared to mysql (how can it be improved?)并得到相同的结果。 MySQL添加索引后速度相当快,而Cypher则很难及时得到结果。
后来我决定使用遍历框架。这是我的查询:
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的手册
The Traverser object is the result of invoking traverse() of a TraversalDescription object. It represents a traversal positioned in the graph, and a specification of the format of the result. The actual traversal is performed lazily each time the next()-method of the iterator of the Traverser is invoked.
每次调用next()方法时都会执行实际的遍历。因此,如果我想测量时间,我必须等待循环结束。我说得对吗?
如果我是对的,Traversal API 的性能非常糟糕,因为返回深度 4 的结果需要大约 60 秒。有什么提高性能的建议吗?
最佳答案
这可能是一个唯一性问题,其中遍历的关系超出了必要的数量。你可以这样做:
Traverser traverser = 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());for ( Path p : traverser ) { ... }traverser.metadata().getNumberOfRelationshipsTraversed() / getNumberOfPathsReturned()
查看与您执行的其他查询相比如何。也许你可以尝试Uniqueness.NODE_PATH。
另一方面:列出所有深度 4 用户的用例是什么?这总是会很多。如果您尝试一个更现实的用例并进行比较,结果会如何?
关于mysql - 如何衡量 Neo4j 遍历框架性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19018855/
我是一名优秀的程序员,十分优秀!