概念

组合数据库(Composite database)是一种特殊类型的数据库。组合数据库可以通过单个 Cypher 查询来访问分区数据或图。

组合数据库不独立存储数据。它们包含指向本地或远程数据库(即所谓的组成部分,constituents)的数据库别名。本地数据库别名指向同一 DBMS 内的数据库,而远程数据库别名则指向来自其他 Neo4j DBMS 的数据库。有关更多信息,请参阅 在组合数据库中管理数据库别名

组合数据库使用 Cypher 管理命令进行管理。有关如何创建组合数据库并向其添加数据库别名的详细示例,请参阅 设置并查询组合数据库

组合数据库无法保证不同 Neo4j 版本组成部分之间的兼容性。除了新添加的功能外,来自没有破坏性变更版本的组成部分通常可以正常工作。如果引入了新功能,其可用性将仅限于定义组合数据库的 DBMS 以及其所有组成部分所支持功能的交集。

组合数据库具有以下特征:

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

  • 不独立存储数据。

  • 可以在单机和集群部署中使用。

  • 使用 Cypher 命令进行管理,例如 CREATE COMPOSITE DATABASECREATE ALIAS

  • 您可以借助 neo4j-admin copy 命令对现有数据库进行分片。详情请参阅 使用 copy 命令进行数据分片

  • 本地组成部分使用现有用户,远程组成部分使用远程别名定义的凭据。

  • 不支持权限、索引和约束管理命令。这些必须在相应 DBMS 中的组成目标数据库上进行定义。

  • 仅允许执行从多个图读取数据,或从多个图读取数据并写入单个图的事务。

  • 不支持嵌入在 Java 应用程序中的 Neo4j。组合数据库只能在典型的客户端/服务器模式下使用,即用户通过 Bolt 或 HTTP 协议从客户端应用程序或工具连接到 Neo4j DBMS。

在处理组合数据库时,需要了解的主要概念包括:

数据联邦(Data Federation)

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

数据分片(Data Sharding)

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

跨图连接数据

由于关系不能跨图存在,为了查询您的数据,您必须使用代理节点建模模式对图进行联邦,即具有特定标签的节点必须存在于所有联邦域中。

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

有关设置和使用包含联邦及分片数据的组合数据库的分步教程,请参阅 教程 → 设置并使用组合数据库