2013-03-12 42 views
3

重点是暗号参加一个很有趣的教程后,我愉快地Cypher支架查询语言的declarativeness感到惊讶。在我看来,这是从Neo4J中检索数据的一种非常自然的方式。一般暗号性能

在此之前,我只使用了原生API。虽然这不太明确,但你稍后会习惯它。复杂的结构都非常相似,只是在具体项目的细节上有所不同。

尽管如此,Cypher支架看上去更自然的我,所以我考虑构建我的应用程序的第二个版本,主要的Cypher查询到我的数据库进行交互。但是我遇到了一个问题。

有许多方法,以我的应用程序转换成Cypher和尝试过几种可能的查询后,所有期望的结果,似乎即使是最快的查询仍比原生API慢20倍。

现在,我不介意放弃对declarativeness一些性能,但时间是20一点点多,我在这已经有表现挣扎的应用程序。有没有解决这个问题的方法,还是我只需要坚持原生API?

+0

你能分享一些你的疑问吗?也许你的数据集?很想看看它,它不应该那么慢。您使用的是哪个Neo4j版本? – 2013-03-14 12:21:36

+0

由于数据集取决于用户上传的文件,因此数据集不尽相同。我使用1.9.M05 atm,但我也尝试过最新的稳定版本。我今晚会发布我的一些疑问,但问题是Cypher中我无法具体说明问题。通过使用Core API,我可以精心控制每一步,并且了解我的数据库结构,这意味着我不必走过大量无用的关系,这在Cypher中是必须的。 – 2013-03-18 13:00:20

回答

2

你的结论听起来很熟悉。当我一起使用Neo4j和Spring Data Neo4j时,我也遇到了性能问题。在性能真正重要的部分,我切换到核心Traversal API,它现在比一般的Cypher查询快得多。这与处理查询和控制遍历的每个方面都有很大关系。 Cypher只能猜测最优策略是什么。我确信它会在未来的(未来)获得加速,但如果性能真的很重要,我会坚持使用核心API。

此外,如果您是使用Java和春天数据Neo4j的,可以考虑使用先进的映射模式(AspectJ的),这是很多比简单的映射模式快。

+0

实际上,基于我做的一些测试,Spring Data的附加层也减慢了我的应用程序的速度。所以我创建了我自己的界面,以针对特定应用程序以最有效的方式直接与数据库交谈。我想将该接口的实现转换为Cypher,但我不知道这会破坏我的性能。 – 2013-03-13 09:50:17

+0

虽然Cypher可能总是比使用核心API慢,但您可以尝试调整您的Cypher语句。这是一个很好的资源,帮助我很多:http://thought-bytes.blogspot.in/2013/01/optimizing-neo4j-cypher-queries.html – tstorms 2013-03-13 10:32:20

+1

这是另一个伟大的阅读:http://www.rene -pickhardt.de/get-the-full-neo4j-power-by-using-the-core-java-api-for-traversing-your-graph-data-base-instead-of-cypher-query-language/。它比较了核心API,遍历API和多个Cypher版本的速度。 – tstorms 2013-03-13 10:33:35