集群中的默认数据库

简介

默认数据库,由 initial.dbms.default_database 定义,在 DBMS 首次启动时自动创建。这提供了一个用户数据库供立即试用。但是,由于以下原因,此创建是“尽力而为”的,建议用户为生产用途创建自己的默认数据库。如果您创建自己的默认数据库,即使您只是执行 DROP DATABASE neo4jCREATE DATABASE neo4j,您也无需了解以下复杂性。

默认数据库自动创建

初始默认数据库在 DBMS 首次启动时创建。它使用以下设置:

然而,它将默认的主节点和从节点数量(拓扑)用作最大值,而不是硬性要求。这与普通数据库创建不同,在普通数据库创建中,如果无法满足请求的拓扑,创建就会失败。对于仅自动创建默认数据库而言,如果无法满足请求的拓扑,您将获得当前集群能够满足的每种托管类型数量。这意味着您最终可能会得到一个默认数据库,其主节点数量最少为 1 个,没有从节点,尽管默认值更高。也可能配置一个集群,使得在 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 启动后,您可以创建具有指定拓扑的自己的数据库,并将其设为默认数据库。请参见 更改默认数据库。这可以替换现有的默认数据库,也可以使用不同的名称。

© . All rights reserved.