gpt4 book ai didi

mysql - 如何衡量 Neo4j 遍历框架性能?

转载 作者:行者123 更新时间:2023-11-30 01:16:22 25 4
gpt4 key购买 nike

最近我在学校有一个作业,比较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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com