3

在参加了一个非常有趣的以 Cypher 为重点的教程之后,我对 Cypher 查询语言的声明性感到惊喜。在我看来,这是从 Neo4J 中检索数据的一种非常自然的方式。

在此之前,我只使用过原生 API。虽然这不是声明性的,但你会在一段时间后习惯它。复杂的结构都非常相似,仅在我的特定项目的细节上有所不同。

尽管如此,Cypher 对我来说看起来更自然,所以我正在考虑构建我的应用程序的第二个版本,主要使用 Cypher 查询来与我的数据库进行交互。但是我遇到了一个问题。

有很多方法可以将我的应用程序转换为 Cypher,在尝试了几个可能的查询后,所有查询都得到了预期的结果,看起来即使是最快的查询仍然比原生 API 慢大约 20 倍。

现在,我不介意为了声明性而放弃一些性能,但是在一个已经在性能上苦苦挣扎的应用程序中,20 倍对我来说有点过分了。是否有解决此问题的方法,还是我只需要坚持使用本机 API?

4

1 回答 1

2

你的结论对我来说听起来很熟悉。当我同时使用 Neo4j 和 Spring Data Neo4j 时,我也遇到了性能问题。在性能真正重要的部分,我切换到核心 Traversal API,它现在比普通的 Cypher 查询快得多。这与没有处理查询的事实以及您控制遍历的各个方面的事实有很大关系。Cypher 只能猜测最优策略是什么。我相信它会在(不久的)将来加快速度,但如果性能真的很重要,我会说坚持使用核心 API。

此外,如果您将使用 java 和 spring data neo4j,请考虑使用比简单映射模式快得多的高级映射模式 (AspectJ)。

于 2013-03-12T12:32:11.637 回答