集群中的默认数据库
介绍
默认数据库由 initial.dbms.default_database
定义,在 DBMS 首次启动时自动创建。这提供了一个用户数据库,可以立即进行实验。但是,由于以下原因,此创建是“尽力而为”,建议用户为生产使用创建自己的默认数据库。如果您创建了自己的默认数据库,即使您只是 DROP DATABASE neo4j
和 CREATE DATABASE neo4j
,您也不必了解以下复杂性。
自动创建默认数据库
DBMS 首次启动时将创建初始默认数据库。它使用以下设置
-
initial.dbms.default_database
— 数据库名称。 -
initial.dbms.default_primaries_count
— 默认数据库请求的主副本数量。 -
initial.dbms.default_secondaries_count
— 默认数据库请求的从副本数量。
但是,它使用默认的主副本和从副本数量(拓扑结构)作为最大值,而不是硬性要求。这与正常数据库创建不同,在正常数据库创建中,如果无法满足请求的拓扑结构,则创建失败。对于默认数据库的自动创建,如果无法满足请求的拓扑结构,您将获得当前集群可以满足的尽可能多的每个主机类型。这意味着您最终可能会得到一个只有单个主副本且没有从副本的默认数据库,即使默认值为更高。还可以配置一个集群,使其在 DBMS 启动时无法自动创建默认数据库。在这种情况下,创建失败,会记录警告,并且不会**再次尝试创建**。
初始默认数据库的自动创建工作方式如下
-
当集群首次启动时,存在一个配置的阈值,用于确定创建 DBMS 所需的服务器数量 -
dbms.cluster.minimum_initial_system_primaries_count
。 -
一旦**至少**有这么多服务器相互发现,
system
数据库就会引导,从而允许创建 DBMS。 -
初始默认数据库使用这些服务器作为可能的宿主进行创建。
-
如果任何服务器阻止托管默认数据库(请参阅
initial.server.denied_databases
),则不会使用它们。 -
如果任何服务器限制了它们可以托管数据库的模式,则会遵守该限制(请参阅
initial.server.mode_constraint
)。 -
如果服务器数量不足以分配请求的主副本数量,则使用所有可用的服务器。如果没有任何可用的主副本,则自动创建失败。
-
如果在分配主副本后剩余的服务器数量不足以满足请求的从副本数量,则使用所有可用的服务器。
一些可能由于上述方法而观察到的可能行为
-
如果
initial.dbms.default_primaries_count
大于dbms.cluster.minimum_initial_system_primaries_count
,您可能会得到一个初始默认数据库,其主副本数量少于默认值。这是因为 DBMS 初始化仅等待最少的系统主副本。 -
如果
initial.dbms.default_secondaries_count
加上initial.dbms.default_primaries_count
大于dbms.cluster.minimum_initial_system_primaries_count
,您可能会得到一个初始默认数据库,其从副本数量少于默认值。这是因为 DBMS 初始化仅等待最少的系统主副本。 -
如果您使用
initial.server.denied_databases
来阻止将您的默认数据库分配给任何初始服务器,您最终可能会得到比默认请求更少的数据库副本,甚至可能根本没有默认数据库。 -
如果您对任何初始服务器使用
initial.server.mode_constraint=SECONDARY
,您最终可能会得到比默认请求更少的主副本数据库,甚至可能根本没有默认数据库。
更改默认数据库拓扑结构
如果默认数据库最初以与您想要的不同的拓扑结构为您创建,您可以像任何数据库一样更新它,请参阅 更改拓扑结构。
创建您自己的默认数据库
DBMS 启动后,您可以使用指定的拓扑结构创建自己的数据库,并将其设为默认数据库。请参阅 更改默认数据库。这可以替换现有的默认数据库,或者具有不同的名称。