将光盘节点加载到ram节点?

时间:2012-11-17 16:14:20

标签: erlang mnesia

我得不到的东西,我有两个mnesia节点。一个有公羊,另一个有光盘。

我的问题是:

你一次创建架构吗?但架构是您输入节点的地方。

我很困惑,发现没有关于此

的好文档

1 个答案:

答案 0 :(得分:1)

让我们从阐明概念开始。 mnesia集群由节点和表组成;节点可以具有表的副本。副本的类型(可以是ram_copiesdisc_copiesdisc_only_copies适用于给定节点上的给定表。节点可以具有不同表的不同类型的副本,并且表可以在不同节点上具有不同类型的副本。特殊情况是根本没有基于光盘的副本的节点;它被称为仅ram节点。

架构是一个特殊的表,用于存储有关节点和表的信息。每个节点必须在群集中具有此表的副本; ram只有节点显然有一个ram副本,其他节点有一个光盘副本。确切地说,节点必须具有模式的光盘副本才能拥有任何其他表的基于光盘的副本。

当你调用mnesia:create_schema时,你正在创建一个没有表的模式的光盘副本,当它被启动时由mnesia加载(如果mnesia已经启动,这个函数拒绝工作)。如果您的群集包含多个基于磁盘的节点,则会同时在所有这些节点上创建架构,并且当在这些节点上启动mnesia时,它们会自动相互连接(节点从架构中相互了解)。

当mnesia无法在启动时从磁盘加载架构时,它会在ram中为自己创建一个空架构(或拒绝启动,具体取决于设置)。之后,您可以通过在群集的基于磁盘的节点上调用mnesia:change_config将其转换为仅ram节点,在这种情况下,将替换空架构,并且节点将与其余节点同步集群,或者您可以开始创建表并添加其他仅ram节点(仍然具有空架构),构建仅限ram的集群。

通过调用表mnesia:chang_table_copy_type上的schema,可以将仅ram节点转换为磁盘节点。这样,您可以从头开始动态构建完整的基于磁盘的集群,而无需事先创建基于磁盘的架构。但是,如果您有一组固定的磁盘节点,则在第一次启动集群之前,更容易静态初始化它们上的模式。