概念

复合数据库是 Neo4j 5 中引入的一种特殊类型的数据库。它取代了 Neo4j 4.x 中之前的 Fabric 实现。

在 Neo4j 5 中,fabric 作为概念得到了扩展,现在指的是统一系统的架构设计,该系统为本地或分布式图数据提供单个访问点。

复合数据库是使用单个 Cypher 查询访问此分区数据或图的方法。

复合数据库**不独立存储数据**。它们包含指向构成 fabric 设置的本地或远程数据库(即所谓的**组成部分**)的数据库别名。本地数据库别名指向同一 DBMS 中的数据库,而远程数据库别名指向另一个 Neo4j DBMS 中的数据库。有关更多信息,请参阅管理复合数据库中的数据库别名

复合数据库使用 Cypher 管理命令进行管理。因此,您可以像在 Neo4j 独立和集群部署中创建任何其他数据库一样创建它们,而无需部署专用代理服务器(如 Neo4j 4 中的 Fabric)。有关如何创建复合数据库并向其添加数据库别名的详细示例,请参阅设置和查询复合数据库

复合数据库无法保证来自不同主要版本的 Neo4j 的组成部分之间的兼容性。因此,所有组成部分都应属于相同的主要版本。如果引入了新功能,则其可用性将限于所有组成部分可用功能的交集。

下表总结了 Neo4j 5 中的复合数据库和 Neo4j 4 中的 Fabric 之间的异同点

表 1. Neo4j 5 中的复合数据库与 Neo4j 4 中的 Fabric
复合数据库 (Neo4j 5) Fabric (Neo4j 4)

数据访问

提供对其他数据库(本地或远程)上的图的访问。

数据存储

不独立存储数据。

部署

支持独立和集群部署。

支持独立和集群部署。但是,在集群部署中,fabric 代理必须部署在专用机器上。

配置

使用 Cypher 命令进行管理。复合数据库使用 CREATE COMPOSITE DATABASE 命令创建,数据库别名使用 CREATE ALIAS .. 命令添加。

通过配置设置进行管理。承载相同fabric数据库的 Neo4j DBMS 必须具有相同的配置设置。配置必须始终保持同步。

现有数据库的分片

借助 neo4j-admin copy 命令。

安全凭证

复合数据库使用与数据库别名相同的用户凭证。

承载相同 Fabric 虚拟数据库的 Neo4j DBMS 必须具有相同的用户凭证。对 Fabric 中机器上的密码进行的任何更改都必须保持同步并应用于所有属于 Fabric 的 Neo4j DBMS。

数据库管理

不支持数据库管理。任何数据库管理命令、索引和约束管理命令或用户和安全管理命令都必须直接发送到 DBMS 和数据库,而不是复合数据库。

事务

仅允许读取多个图或读取多个图并写入单个图的查询的事务。

Neo4j 嵌入式

当 Neo4j 用作 Java 应用程序中的嵌入式数据库时不可用。它仅可在典型的客户端/服务器模式下使用,此时用户通过 Bolt 或 HTTP 协议从其客户端应用程序或工具连接到 Neo4j DBMS。

使用复合数据库时,需要了解的主要概念是

数据联合

数据联合是指数据位于两个不相交的图中,且具有不同的标签和关系类型。例如,您拥有关于用户及其位置的数据,以及关于用户在不同论坛上发布帖子的数据,并且您希望将它们一起查询。

数据分片

数据分片是指您有两个图共享相同的模型(相同的标签和关系类型),但包含不同的数据。例如,您可以在单独的服务器上部署分片,从而分散资源和存储的负载。或者,您可以在不同的位置部署分片,以便能够独立地管理它们或分散网络流量的负载。可以使用 neo4j-admin database copy 命令对现有数据库进行分片。例如,请参阅 使用 copy 命令进行数据分片

跨图连接数据

由于关系不能跨图存在,因此要查询您的数据,您必须使用代理节点建模模式联合图,其中具有特定标签的节点必须存在于两个联合域中。

在一个图中,具有该特定标签的节点包含与该标签相关的所有数据,而在另一个图中,相同的标签与仅包含 <node>ID 属性的代理节点相关联。<node>ID 属性允许您在此联合中跨图链接数据。

federation sharding
图 1. 数据联合和分片

有关设置和使用具有联合和分片数据的复合数据库的分步教程,请参阅 设置和使用复合数据库