创建分片属性数据库

您可以使用 Cypher 命令 CREATE DATABASE 创建分片属性数据库(需要 Cypher 25,随 Neo4j 2025.06.0 版本引入)。

从 Neo4j 2026.02 版本开始,分布式 neo4j.conf 明确设置了 db.query.default_language=CYPHER_25。因此,使用提供的配置文件进行的新部署,其新创建的数据库默认使用 Cypher 25。如果您使用的是旧版本的 Neo4j,则需要在创建数据库时明确将默认 Cypher 版本设置为 Cypher 25,或者在 Cypher 查询前加上 CYPHER_25 前缀,以便使用分片功能。有关配置 Cypher 版本的详细信息,请参阅 配置 Cypher 默认版本

语法

命令 语法

CREATE DATABASE

CREATE DATABASE name [IF NOT EXISTS]
[[SET] DEFAULT LANGUAGE CYPHER {5|25}]
[[SET] GRAPH SHARD {
  [TOPOLOGY n PRIMAR{Y|IES} [m SECONDAR{Y|IES}]]
}]
[SET] PROPERTY SHARD[S] {
  COUNT n [TOPOLOGY m REPLICA[S]]
}
[OPTIONS "{" option: value[, ...] "}"]
[WAIT [n [SEC[OND[S]]]]|NOWAIT]

创建分片属性数据库时,会生成以下内容:

  • 一个虚拟的分片属性数据库 <name>

  • 一个名称为 <name>-g000 的单一图分片(graph shard)。

  • 若干名称为 <name>-p<index> 的属性分片(property shards),其中 <index> 的范围从 000999SET PROPERTY SHARDS 中的 count 属性指定了属性分片的数量。

CREATE OR REPLACE 不会替换现有的分片属性数据库。

选项

CREATE DATABASE 命令可以包含一个选项映射,例如 OPTIONS {key: 'value'}。对于分片数据库,仅支持 seedURIseedConfigseedSourceDatabaseseedRestoreUntiltxLogEnrichment 选项。有关详细信息,请参阅 创建数据库 → 选项

seedURI 的文件夹表示法仅适用于备份,不适用于转储(dumps)。

手动指定每个构件(artifact)时,映射的键(key)为分片名称,其中图分片名称 = databaseName-g000,属性分片 = databaseName-p000,最后一个属性分片名称为 databaseName-px,其中 x = numShards -1

拓扑的默认数量

分片属性数据库使用 Neo4j 集群拓扑。因此,您需要考虑以下设置将如何影响分片属性数据库的创建。initial.dbms.default_primaries_countinitial.dbms.default_secondaries_count 仅影响图分片。

配置设置 默认值 有效值 描述

initial.dbms.default_primaries_count

1

[1-11]

标准数据库的主节点初始默认数量。在 DBMS 首次启动时初始化。如果用户未在 CREATE DATABASE 中指定主节点数量,则除非被 dbms.setDefaultAllocationNumbers 过程覆盖,否则将使用此值。

initial.dbms.default_secondaries_count

0

[0-20]

标准数据库的从节点初始默认数量。在 DBMS 首次启动时初始化。如果用户未在 CREATE DATABASE 中指定从节点数量,则除非被 dbms.setDefaultAllocationNumbers 过程覆盖,否则将使用此值。

initial.dbms.default_property_shard_replica_count

1

[1-20]

属性分片的副本初始默认数量。在 DBMS 首次启动时初始化。如果用户未在 CREATE DATABASE 中指定属性分片的副本数量,则除非被 dbms.setDefaultAllocationNumbers 过程覆盖,否则将使用此值。

创建空分片属性数据库

您可以使用 CREATE DATABASE 命令创建空分片数据库。该命令允许您指定属性分片的数量和图分片的拓扑结构。以下示例展示了如何创建具有不同配置的空分片数据库。

示例 1:创建一个具有默认拓扑(1 个主节点、无从节点,每个属性分片 1 个副本)的空分片数据库

CYPHER 25 CREATE DATABASE `foo-sharded`
PROPERTY SHARDS { COUNT 3 };

示例 2:创建一个具有自定义拓扑的空分片数据库

CYPHER 25 CREATE DATABASE `foo-sharded`
 SET GRAPH SHARD { TOPOLOGY 1 PRIMARY 0 SECONDARIES }
 SET PROPERTY SHARDS { COUNT 3 TOPOLOGY 1 REPLICAS };

示例 3:创建一个具有自定义高可用性拓扑的空分片数据库

CYPHER 25 CREATE DATABASE `foo-sharded`
 SET GRAPH SHARD { TOPOLOGY 3 PRIMARY 0 SECONDARIES }
 SET PROPERTY SHARDS { COUNT 3 TOPOLOGY 2 REPLICAS };

从 URI 创建分片数据库(在线)

您可以通过使用来自一个或多个 URI 的数据进行种子填充(seeding),从现有的分片属性数据库创建新的分片属性数据库。当您想要将现有数据库复制为新数据库、数据来自其他来源、种子数据分布在多个位置,或者种子数据为转储格式而非备份格式时,这非常有用。有关从 URI 进行种子填充工作原理的更多信息,请参阅 从 URI 创建数据库

以下示例展示了如何通过从一个或多个 URI 填充数据来创建分片属性数据库。

示例 1:通过从一个 URI 填充数据来创建分片数据库

从单个 URI(文件夹路径)进行填充时,DBMS 会使用元数据将数据分配到正确的数据库。这要求种子数据必须为备份格式,并且 DBMS 会在指定位置查找 foo-sharded-g000.backupfoo-sharded-p001.backupfoo-sharded-p002.backup 等文件。

CYPHER 25 CREATE DATABASE `foo-sharded`
PROPERTY SHARDS { COUNT 3 }
OPTIONS { seedURI: “s3://bucket/folder/” };

示例 2:通过从不同名称的备份填充数据来创建分片数据库

此示例类似于示例 1,但 DBMS 会查找 other-database-g000 等。

CYPHER 25 CREATE DATABASE `foo-sharded`
PROPERTY SHARDS { COUNT 3 }
OPTIONS { seedURI: “s3://bucket/folder/”, seedSourceDatabase: “other-database” };

示例 3:通过从转储(dumps)填充数据来创建分片数据库

从转储进行填充时,URI 需要以其用于填充的分片名称作为键,因为没有元数据来指示哪些数据属于哪个分片。在此示例中,分片名称将为 foo-sharded-g000 以及 foo-sharded-p000foo-sharded-px,其中 x 为属性分片数量 -1

CYPHER 25 CREATE DATABASE `foo-sharded`
PROPERTY SHARDS { COUNT 3 }
OPTIONS { seedUri: {
  `foo-sharded-g000`: "s3://bucket/folder/foo-g000.dump",
  `foo-sharded-p000`: "s3://bucket/folder/foo-p001.dump",
  `foo-sharded-p001`: "s3://bucket/folder/foo-p002.dump",
  `foo-sharded-p002`: "s3://bucket/folder/foo-p003.dump"
 } };

示例 4:通过从分布在多个位置的数据填充来创建分片数据库

从存储在多个位置的备份进行填充时,需要为每个分片指定不同的 URI。

CYPHER 25 CREATE DATABASE `foo-sharded`
PROPERTY SHARDS { COUNT 3 }
OPTIONS {
  seedUri: {
    `foo-sharded-g000`: "s3://bucket/folder1/foo-g000.backup",
    `foo-sharded-p000`: "s3://bucket/folder2/foo-p001.backup",
    `foo-sharded-p001`: "s3://bucket/folder3/foo-p002.backup",
    `foo-sharded-p002`: "s3://bucket/folder4/foo-p003.backup"
  }
 };