返回介绍

7.2 Neo4j

发布于 2025-04-22 19:57:19 字数 2493 浏览 0 评论 0 收藏

Neo4j( http://neo4j.org )是领先的属性数据库实现。它主要基于 Java 编写,使用了自定义的存储格式以及 Java 事务 API(Java Transaction API,JTA)来提供 XA 事务。Java API 能够以面向对象的方式使用图中的节点和关系(如示例 7-1 所示),可以使用流畅的 API 来进行遍历。因为是图数据库,所以 Neo4j 内置提供了很多图算法,如最短路径、Dijkstra 以及 A*。

Neo4j 集成了一个事务性的、可插拔的索引子系统,它默认使用了 Lucene( http://lucene.apache.org )。这个索引主要用来为遍历定位起始节点。它的第二个作用就是支持唯一实体的创建。要使用 Neo4j 嵌入式的 Java 数据库,需要在构建脚本中添加 org.neo4j:neo4j:<version>依赖,这样就准备就绪了。示例 7-1 列出了在事务范围内创建带有属性的节点和关系的代码。随后展现了如何对其进行访问和读取。

示例 7-1 Neo4j 核心 API 演示

c0701-1

c0701-2

借助于声明式的 Cypher 查询语言,对那些使用过关系型数据库 SQL 的人来说使用 Neo4j 会更加容易。开发人员、运维人员以及业务用户都能根据各种使用场景在图上运行专门的查询。Cypher 的灵感来源于多个方面:SQL、SparQL、ASCIIArt 以及函数式编程。核心理念在于用户描述图中要匹配的模式并提供起始节点。然后,数据库引擎在图中高效地匹配给定的模式,这样用户就可以定义复杂的查询了,如“为我找到一些顾客,他们的朋友最近都购买了类似的产品”。像其他的查询语言一样,它也支持过滤、分组以及分页。Cypher 允许进行简单的创建、删除、更新以及图构造。

示例 7-2 所示的 Cypher 的表达式展现了一个典型的用户场景。它首先根据索引查找顾客,然后通过其订单关系找到所订购的产品。查询语句会过滤掉较老的订单,随后会根据产品计算出他最大的 20 笔购买量。

示例 7-2 Cypher 示例表达式

c0702

因为它基于 Java 编写,因此 Neo4j 可以很容易地嵌入任意的 Java 应用程序之中,此时它会引用一个单例的部署环境。但是很多的 Neo4j 部署会使用独立的 Neo4j 服务器,服务器提供了便利的 HTTP API 来进行交互以及全面的 Web 界面可用于管理、探查、可视化以及监控等目的。下载 Neo4j 服务器( http://docs.neo4j.org/chunked/milestone/ server-installation.html )很方便,然后可以解压缩并直接启动。

可以在嵌入式的数据库之上( http://docs.neo4j.org/chunked/milestone/server-embedded. html )运行 Neo4j 服务器,这样可以便利地通过 Web 界面来进行检查和监控,如图 7-2 所示。

0702

图 7-2 Neo4j 服务器的 Web 界面

在 Web 界面上,可以看到数据库的统计信息。在 Data browser 中,可以根据 ID 来查找节点、可以使用索引查找以及 Cypher 查询(单击蓝色的小问号可以得到语法帮助),并且能够使用右边按钮切换到图形可视化界面来探查图的结构,如图 7-2 所示。在 Console 中可以直接输入 Cypher 表达式甚至处理 HTTP 请求。Server Info 中列出了 JMX bean,尤其是在企业版中它会提供更多的信息。

作为开源的产品,Neo4j 拥有活跃的生态系统,包括贡献者、社区成员以及用户。Neo Technology 是 Neo4j 研发的发起者,他们对社区版本采用的是开源许可证(Open Source Licensing,GPL)并且会对企业版提供专业的支持,从而保证产品的持续研发。

要访问 Neo4j,会有多种可用的驱动,它们大多数是由社区维护的。对于嵌入式和服务器部署模式都有多种语言的类库。它们中有一些由 Neo4j 进行维护,Spring Data Neo4j 就是其中之一。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。