书籍摘录
核心API,遍历框架还是Cypher?
核心API允许开发人员微调他们的查询,以使其与底层图表现出高度相关性。一个写得好的核心API查询通常比任何其他方法都要快。缺点是这种查询可能很冗长,需要相当大的开发人员努力。此外,它们与底层图形的高亲和性使它们与其结构紧密耦合。当图形结构发生变化时,它们经常会失效。Cypher可以更容忍结构性变化——诸如变长路径之类的东西有助于减轻变化和改变。
遍历框架比核心API更松散耦合(因为它允许开发人员声明信息目标),并且不那么冗长,因此使用遍历框架编写的查询通常需要比使用核心API编写的等效查询少得多的开发人员努力。然而,由于它是一个通用框架,遍历框架往往比写得好的核心API查询执行得稍微差一些。
如果我们发现自己处于使用核心API或遍历框架(因此避免使用Cypher及其优势)的不寻常情况下,那是因为我们正在处理需要精细制作算法的边缘案例,这些算法不能有效地使用Cypher的模式匹配表达。在核心API和遍历框架之间进行选择是一个问题,即是否选择遍历框架的高抽象度/低耦合足够,还是核心API的接近金属/更高耦合实际上是必要的,以正确地实现算法并符合我们的性能要求。
参考: 图形数据库,连接数据的新机会, p161
Cypher是什么?
开发人员文档中的定义如下:Cypher是一种声明性的、受SQL启发的语言,用ASCII艺术语法可视化地描述图形中的模式。
你可以在这里找到更多信息。
核心API实际上是什么?
我发现
这个页面有以下句子:
除了面向对象的图数据库API,使用Node
、Relationship
和Path
对象,它还提供高度可定制的、高速的遍历和图算法实现。
因此,从实际角度来看,核心API处理基本对象,如属于
org.neo4j.graphdb
包的
Node
、
Relationship
等。
你可以在
开发人员指南中找到更多信息。
实际上什么是遍历API?
遍历 API 添加了更多的接口到核心 API 中,以帮助我们方便地执行遍历,而不是从头开始编写整个遍历逻辑。这些接口包含在 org.neo4j.graphdb.traversal
包中。
您可以在 其开发者指南 中找到更多信息。
所有三者之间的关系
根据 此答案 所述:
遍历 API 建立在核心 API 上,Cypher 建立在遍历 API 上。因此,您在 Cypher 中可以做任何事情,在其他两种方法中也可以完成。
使用所有三种方法完成相同示例
此教程 来自 2012 年,展示了使用所有三种方法执行相同任务,其中核心 API 是最快的。它包括 Andres Taylor 的一句话引用:
Cypher刚刚一岁。由于开发人员非常受限,我们必须非常挑剔地选择我们要处理的内容。在第一阶段,我们的重点是探索语言,了解用户如何使用查询语言,并将功能集扩展到合理水平。
我相信Cypher是我们未来的API。我知道你可以通过手写查询轻松地超越Cypher。就像创建的每种语言一样,在开始时,您总是可以通过手写来比编译器做得更好,但最终编译器会赶上来。
文章结论:
到目前为止,我只使用Java Core API与neo4j一起工作,我将继续这样做。
如果您处于高速场景中(我认为每个Web应用程序都是一个),您应该真正考虑切换到neo4j Java core API来编写查询。它可能不像Cypher或遍历器框架那样漂亮,但速度提升是值得的。
此外,我个人喜欢在自己遍历核心时拥有的控制量。