2

我没有得到的东西,我有两个 mnesia 节点。一个有内存,另一个有光盘副本。

我的问题是:

您确实创建过一次架构吗?但是模式是您输入节点的地方。

我很困惑,发现没有很好的文档

4

1 回答 1

1

让我们从澄清概念开始。一个 mnesia 集群由节点和表组成;节点可能有表的副本。副本的类型,可以是ram_copiesdisc_copiesdisc_only_copies,适用于给定节点上的给定表。一个节点可能有不同类型的不同表的副本,一个表可能在不同的节点上有不同类型的副本。一个特殊情况是根本没有基于磁盘的副本的节点。它被称为 ram only 节点。

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

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

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

mnesia:chang_table_copy_type通过调用table可以将仅 ram 节点变成磁盘节点schema。通过这种方式,您可以从头开始动态构建完整的基于磁盘的集群,而无需事先创建基于磁盘的模式。但是,如果您有一组固定的磁盘节点,那么在第一次启动集群之前静态初始化它们上的模式要容易得多。

于 2012-12-28T14:16:24.613 回答