概念

复合数据库是一种特殊类型的数据库。复合数据库是使用单个 Cypher 查询访问分区数据或图的方法。

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

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

复合数据库无法保证不同 Neo4j 版本组成的兼容性。没有重大变更的版本组成应该可以正常工作,除了新添加的功能。如果引入了新功能,其可用性将限于复合数据库所定义的 DBMS 上可用功能的交集,以及其所有组成部分的功能交集。

复合数据库具有以下特点:

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

  • 不独立存储数据。

  • 可部署在独立和集群部署中。

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

  • 你可以借助 neo4j-admin copy 命令对现有数据库进行分片。有关详细信息,请参阅使用 copy 命令分片数据

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

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

  • 仅允许包含从多个图读取查询的事务,或从多个图读取并写入单个图的事务。

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

使用复合数据库时需要理解的主要概念有:

数据联邦

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

数据分片

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

跨图连接数据

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

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

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

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