

存储和处理数据是软件工程的基本任务。在大型专业开发的早期阶段,关系型数据库如 Oracle、IBM DB2 和 SQL 曾占主导地位。数据操作系统无法轻松处理结构化或关系型数据,只能处理扁平化的数据表示。[1] 图数据库试图弥合关系型与扁平数据表示之间的差距,同时使信息访问更加便捷。[2] 最受欢迎的图数据库代表是 Neo4j。[3]
. . .
名称: Neo4j
软件类型: 图数据库(Graph Database,GDB)
首次发布: 2007年
开发商: Neo4j公司
目标平台: 跨平台,例如 Windows、Linux , ..
开发语言:用 Java 和 Scala 实现,Web 工具使用 Typescript,云功能使用 Go
官网:https://neo4j.com/. . .
当今世界的各种交易正变得越来越依赖数字化。这是因为在多数国家(例如德国),银行卡和电子支付方式的使用显著增长。[4] 随着交易愈发数字化,诸如 IC3 投诉统计等指标也暗示着数字犯罪活动在上升。[10] 举例来说,支付处理软件供应商 TransUnion 报告称,全球数字欺诈尝试增加了 149%。[5]
在不使用图数据库的情况下,涉及此类活动的交易与人员关系需要以关系型方式建模。但如果使用更适合的数据库类型——图数据库,则建模和访问关系数据会容易得多。

巴拿马文件的 Neo4j 数据模型 [13]
2016年,德国《南德意志报》(Süddeutsche Zeitung)的记者 Bastian Obermayer 收到了大量泄露的文件。[6]
这些泄露的文件揭示了前所未有规模的逃税和洗钱线索。此次泄露总计达 2.6 TB 数据,包含 1150 万份独立文件。[7]
由于这些数据主要体现了商业参与者之间的关系型结构,因此基于图的处理方式是显而易见的选择。被提及的个人和公司可以作为 1)节点,而它们之间关系的类型和属性则作为 2)边。在本节的配图中,可以看到巴拿马文件在 Neo4j 中的建模方式。

示例:如何在 Neo4j 中建模一个房产管理用例
任何一个在机场逗留太久的人都可以证明,机场中存在无数彼此有关联的对象。
从飞机到航站楼,再到登机口和餐厅,机场中的每一个元素都相互关联,并依赖多种关系才能顺利运作。
这正是图数据库能够提供支持的地方。通过将机场、航站楼、飞机、餐厅等建模为图中的节点,并将它们之间的关系建模为边,物业管理者可以更深入地理解机场的运行机制。

Cypher 查询在东京公共交通示例中的结果 [14]
公共交通涉及许多不同的对象,例如车站和站台,它们之间彼此连接。这些连接还可以包含额外的信息,比如在公共交通网络中从一个点到另一个点所需的时间。
这种网络的一个典型例子就是东京的铁路线路和车站。当我们将这些数据加载进 Neo4j 中后,就可以使用其查询语言——Cypher 来查询这些对象及其连接关系。[14]
MATCH (source:Station {name: '高田馬場'}), (destination:Station {name: '池袋'})
MATCH path = shortestPath((source)-[r*]-(destination))
RETURN path,
reduce(cost = 0, rel in relationships(path) |
cost + coalesce(rel.cost, 0)) AS total_cost LIMIT 1本节配图展示了我们查询的结果。为了验证结果是否准确,我使用 Google 地图计算了相应的路线,结果让我惊讶——它与 Cypher 返回的结果完全一致。这表明在 Neo4j 中实现路径优化算法一定非常方便。

在 Google 地图中查看 Cypher 查询结果:我们的输出合理,Neo4j 帮助计算出了最短路径
如果你也想亲自尝试,我已经 fork 了原始仓库,并在其中包含了 Cypher 文件。为了更好地体验这个示例,建议你具备一些基础的日语知识。玩得开心!🤗
GitHub - martinjurran/neo4j-train-route-sample:用于最短路径查询或行程规划查询的示例数据库(日语) A Sample database for shortest path queries or trip planning queries using Neo4j (in Japanese). 👉 github.com[1]
很多场景都可以通过图来表示。这些数据同样也可以存储在关系型数据库中——为每种对象类型设置一个表,并通过外键来建模它们与其他对象的关系。数据处理则可以通过 SQL 查询中的 Join 来实现。随着 NoSQL 解决方案的兴起 [8],根据具体应用场景使用非 SQL 的数据库变得越来越普遍并被广泛接受。
如果你在考虑图数据库是否适合你,不妨看看下面的概览:

各类重要数据库的典型用途与代表产品
图数据库中最早、也可能是最知名的代表就是 Neo4j。原本它的名字打算叫做 NeoDB,但因为 NeoDB.com 在发布时已经被注册,所以团队最终决定将其命名为 Neo4j。
•“Neo” 是拉丁语中的“新”,灵感来自电影《黑客帝国》中的角色 Neo。[19]•“4j” 则代表 “for Java”。[8, 9]
如今,Neo4j 已不再是一个嵌入式的 Java 应用程序,但其名称中仍保留着这段历史的痕迹。

自制的 Neo4j 重要发展事件时间轴
随着时间的推移,Neo4j 从最初在飞机上构思的原型[21],演变成了一个独立的数据库应用程序,能够满足客户的多样化需求。这些需求也反映在 Neo4j 的系统架构之中,接下来我们将深入探讨其架构设计。
为了更好地理解 Neo4j 的架构,有必要了解它目前所依赖的组件,以及这些依赖如何影响 Neo4j 成为今天的解决方案。

Neo4j 的依赖上下文(Dependency context)
下表展示了 Neo4j 的主要架构目标,排序代表了优先级。现在,我们来探讨该软件为实现这些目标所采用的多种技术手段。

全面命中架构目标 🎯
1.🟢 易用性(Ease of use) Neo4j 是一个独立平台,具备原生图数据建模能力,拥有用户友好的查询语言 Cypher,以及通俗易懂的开发者文档。这些特性使得 Neo4j 使用起来非常便捷,也提升了所有相关利益方的使用体验。(开发者视角)

公共交通的概念模型与实现模型
帮助开发者适应图数据库的一个优势是,它们通常与概念数据模型一致。图数据库是无模式(schema-free)的,这一点与大多数 NoSQL 解决方案相似。数据以节点(nodes)和边(edges)的形式进行表示。
非开发人员也可以通过 Neo4j 交互式浏览器探索数据。这从白板上的初步想法开始,到用类 SQL 的 Cypher 语言构建查询,整个过程都可以在浏览器中完成。

基于 Cypher 查询结果在 Neo4j 浏览器中探索数据
Neo4j 能够高效执行涉及大量节点和边的复杂查询,得益于其专用的图数据模型。在数据库中,关系本身被直接具象为一种数据结构,因此可以在不进行大量子查询和连接操作的情况下快速遍历“指针”关系。Neo4j 并不是基于已有数据库构建的,而是一个高度专业化的实现。
2.🟠 性能(Performance) Neo4j 是图原生数据库,配备了多种优化机制,以确保复杂图数据查询拥有快速响应时间。平台还具备高并发与一致性特性,且图算法执行效率非常高。
此外,Neo4j 针对图数据还实现了若干专门的性能优化:
•B+树[2]:用于图数据集中快速检索节点和边 •图定制索引机制:允许为单一属性定义多个索引,以适配复杂查询需求
3.🔵 可靠性(Reliability) 对任何数据库平台来说,可靠性都至关重要。Neo4j 通过 ACID 事务、监控、事件日志记录、TLS 数据加密传输及权限系统等机制保障可靠性。4.🟣 安全性(Security) 涉及数据时,安全性尤为重要。Neo4j 通过事件日志、TLS 加密传输、细粒度权限控制和静态数据加密等方式实现安全保障。5.🟡 互操作性(Interoperability) 能够运行于所有相关目标系统,易于集成进现有环境,支持多种客户端进行数据访问。6.🔴 可用性(Availability) 支持集群部署,提升系统可用性,以满足企业级应用需求。7.🟤 可扩展性(Scalability) 支持水平与垂直扩展,能够处理不断增长的数据量和查询负载。8.⚪ 可扩展性(Extensibility) Neo4j 的核心开发团队与外部社区开发者都能轻松扩展该解决方案,无论是修改现有组件还是添加新功能。Neo4j 对新技术与方法论趋势保持开放态度。
Neo4j 提供了官方的 Bolt 驱动,支持多种语言,包括:
•.NET•Java•JavaScript•Go•Python
此外,社区版本还提供了对 C/C++ 和 PHP 的支持。无论使用哪种编程语言,开发者都可以通过 HTTP API 访问 Neo4j 数据库。
有时开发者需要扩展 Neo4j 的功能,例如自定义数据库的过程或函数。Neo4j 提供了插件系统和用于创建 HTTP 端点的非托管服务器扩展,支持使用 JVM 语言进行实现,相关文档也已完备。
Neo4j 提供了多种扩展机制,使其功能始终跟得上技术趋势:
•可通过 Bolt 和 HTTP 协议访问,配合 Cypher 使用•开发者可创建自定义插件,增强 Neo4j 的功能
最近的更新包括:
•GraphQL 集成•针对流处理方案的连接器,如 Kafka 和 Spark•图数据科学库[3](Graph Data Science Library),该库提供多种算法与机器学习建模选项,涵盖数据分析与机器学习的应用场景
(🟢 / 🟠 / 🔵 / 🟣 / 🟡 / 🔴 / 🟤 / ⚪)
我们已经逐一了解了 Neo4j 的几个关键架构目标及其实现方式。现在,让我们退一步,从整体视角审视 Neo4j 的架构目标。
想象一个由各项架构目标组成的图,每个节点代表一个特定目标(例如数据一致性或系统可用性),而每条边则代表这些目标之间的依赖关系或关联方式:

Neo4j 的企业架构目标图
为了理解 Neo4j 是如何整体实现其架构目标的,我们需要从更技术化的角度审视这一解决方案。

典型 Neo4j 架构部署概览[22]
现在你已经了解了关于图数据库和 Neo4j 的全部信息。那么,这对你有什么帮助呢?使用图数据库可以为你的工作带来以下直接好处:
•在复杂查询中具备高性能•在数据建模方面更具灵活性•能够处理非结构化数据•具备更强的可扩展性与可用性•更容易与其他技术集成•提升业务敏捷性
Neo4j 因其处理图数据的能力,在现代软件架构中获得了广泛认可。但如今的 Neo4j,早已不仅仅是一个用于图数据处理的通用工具。
对于当代的软件架构师来说,更重要的是:根据不同的使用场景选择专业化的数据库,而不是围绕单一数据后端构建整个系统。这一原则在微服务架构持续兴起的背景下尤为重要。
如果你还未使用过图数据库,我个人强烈建议你亲自尝试一些测试用例,去探索图数据库的强大能力以及它如何为你带来价值。无论是物流、金融、医疗、社交媒体,还是电商,图数据库都能提供传统数据库无法提供的深层洞察。
山行AI希望本文对你有所帮助,由笔者翻译整理自:https://medium.com/@martin-jurran/everything-you-need-to-know-about-graph-databases-neo4j-b9154f57dad0,感谢点赞、转发!
•6个开源的最佳本地运行大语言模型(LLM)工具•使用 LangChain 与 MCP集成•AI时代,你需要知道的AI Agents都在这里了•如何构建一个简单的图谱式 RAG 应用-上篇•什么是 AI 智能体?如何一步步构建属于你自己的智能体?•如何使用 Graph Maker 简化文本到知识图谱的构建
[1] github.com: https://github.com/martinjurran/neo4j-train-route-sample
[2] B+树: https://en.wikipedia.org/wiki/B-tree
[3] 图数据科学库: https://neo4j.com/docs/graph-data-science/current/
[1, 2] Silvescu, Adrian & Caragea, Doina & Atramentov, Anna. (2002). Graph Databases.
[3] DB-Engines Ranking of Graph DBMS 2024 https://db-engines.com/en/ranking/graph+dbms)
[4] Deutsche Bundesbank (2022, Juli 7). Payment behaviour in Germany in 2021. https://www.bundesbank.de/en/press/press-releases/payment-behaviour-in-germany-in-2021-894120
[5] Leonhardt, M. (2021, June 3). Online fraud attempts are up 25% in the US — here’s why. CNBC. https://www.cnbc.com/2021/06/03/why-online-fraud-attempts-are-up-25percent-in-the-us.html
[6] Clark, Nicola (April 5, 2016). “How a Cryptic Message, ‘Interested in Data?,’ Led to the Panama Papers”. The New York Times. ISSN 0362–4331. Archived from the original on August 15, 2016.
[7] “About the Panama Papers Investigations”. International Consortium of Investigative Journalists. January 31, 2018. Archived from the original on July 24, 2020.
[8] Emil Eifrem (2017 Jul 27), Hello, World: Neo4j, Inc. https://neo4j.com/blog/hello-world-neo4j-inc/
[9] Dr. Jim Webber (2022, June 8). A Personal History of Neo4j. Neo4j Inc. https://www.youtube.com/watch?v=YB723cp9jgM
[10] Federal Bureu of Investigation (2023). Internet Crime Report. https://www.ic3.gov/Media/PDF/AnnualReport/2023_IC3Report.pdf
[11] Gopala Kr (2017). Neo4j Architecture. https://github.com/gopala-kr/10-weeks/blob/master/Projects-Blogs/07-bigdata-databases/neo4j-architecture.md
[12] Dr. Jim Webber (2017, May 2), The Engineering Evolution of Neo4j into a Native Graph Database. https://neo4j.com/blog/evolution-neo4j-native-graph-database/
[13] William Lyon (2018, December 3), Graph Visualization of Panama Papers Data in Neo4j, https://medium.com/neo4j/graph-visualization-of-panama-papers-data-in-neo4j-9c08ca17039c
[14] ggszk (2020), Neo4j sample database: Tokyo railway routes (in Japanese), https://github.com/ggszk/neo4j-train-route-sample
[15] Emil Eifrem (2016, Mar 29), DB-Engines, Informix and Neo4j: An Origins Story, https://neo4j.com/blog/db-engines-informix-neo4j/?ref=blog
[16] Emil Eifrem (Unknown), The birth of graph databases: How Neo4j built its product and category, https://neo4j.com/news/birth-graph-databases-neo4j-built-product-category/
[17] Alastair Dryburgh (2007, Mar 22), Growth Stories: The magical power of a name, https://www.forbes.com/sites/alastairdryburgh/2017/03/22/growth-stories-the-magical-power-of-a-name/#49b4ebe56db9
[18] Neo4j Inc, The History of Neo4j — Open Source, Big Community, https://neo4j.com/open-source-project/
[19] Emil Eifrem (2016, Mar 22), Twitter Post, https://twitter.com/emileifrem/status/712327903032188928
[20] Rozanski, Nick, and Eóin Woods. Software systems architecture: working with stakeholders using viewpoints and perspectives. Addison-Wesley, 2012.
[21] Emil Eifrem, (2022, August 8), The first code of this database was written in IIT Bombay, https://www.youtube.com/watch?v=Nhi4XwmCh9A
[22] Crunchbase, Neo4j Profile, https://www.crunchbase.com/organization/neo-technology
[23] Neo4j Inc, Partner Directory, https://neo4j.com/partners/directory/
[24] Latha Thamma Reddi (2023, Apr 14), Stakeholder Analysis using the Power Interest Grid, https://www.projectmanagement.com/wikis/368897/stakeholder-analysis--using-the-power-interest-grid
Pictograms by かわいいフリー素材集 いらすとや (irasutoya.com), © Takashi Mifune