【发布时间】:2012-11-06 02:33:39
【问题描述】:
我没有得到的东西,我有两个 mnesia 节点。一个有内存,另一个有光盘副本。
我的问题是:
您确实创建过一次架构吗?但是模式是您输入节点的地方。
我很困惑,发现没有很好的文档
【问题讨论】:
-
我向你推荐这一章:learnyousomeerlang.com/mnesia#of-schemas-and-mnesia。 BR。
我没有得到的东西,我有两个 mnesia 节点。一个有内存,另一个有光盘副本。
我的问题是:
您确实创建过一次架构吗?但是模式是您输入节点的地方。
我很困惑,发现没有很好的文档
【问题讨论】:
让我们从澄清概念开始。一个 mnesia 集群由节点和表组成;节点可能有表的副本。副本的类型可以是ram_copies、disc_copies 和disc_only_copies,适用于给定节点上的给定表。一个节点可能有不同类型的不同表的副本,一个表可能在不同的节点上有不同类型的副本。一个特殊情况是一个节点根本没有基于磁盘的副本。它被称为 ram only 节点。
架构是一个特殊的表,用于存储有关节点和表的信息。集群中的每个节点都必须有这张表的副本; ram 只有节点显然有一个 ram 副本,其他节点有一个磁盘副本。准确地说,节点必须拥有架构的磁盘副本才能拥有任何其他表的基于磁盘的副本。
当您调用mnesia:create_schema 时,您正在创建一个没有表的架构的磁盘副本,以便在启动时由 mnesia 加载(如果 mnesia 已经启动,此函数将拒绝工作)。如果您的集群包含多个基于磁盘的节点,则架构会同时在所有这些节点上创建,并且当在这些节点上启动 mnesia 时,它们会自动相互连接(节点从架构中相互了解)。
当 mnesia 无法在启动时从磁盘加载架构时,它会在 ram 中为自己创建一个空的架构(或拒绝启动,取决于设置)。之后,您可以通过在集群的基于磁盘的节点上调用 mnesia:change_config 将其变成仅 RAM 节点,在这种情况下,空模式将被替换,并且该节点将与集群的其余部分同步,或者您可以开始创建表并添加其他仅 ram 节点(仍然具有空架构),构建仅 ram 集群。
可以通过在表schema 上调用mnesia:chang_table_copy_type 将仅ram 节点变成磁盘节点。通过这种方式,您可以从头开始动态构建完整的基于磁盘的集群,而无需事先创建基于磁盘的模式。但是,如果您有一组固定的磁盘节点,那么在第一次启动集群之前静态初始化它们的模式会容易得多。
【讨论】: