Mnesia需要schema来初始化自己,
schema表可以位于一个或多个节点上,
schema表的存储类型可以是disc_
copies或ram_copies(不能是disc
only_copies)。
Mnesia在启动时,使用schema表来决定应该和哪些节点建立
联系,
如果其他节点已经启动,
则启动节点将其他节点的表定义和自己的表定义合并,
参数extra_db_nodes包含一个节点list,
Mnesia除了schema里的节点,
还要和该参数的节点建立联系,默认值为[] 。因此,
当无盘节点需要从网络上的一个远程节点找到schema定义,
则我们需要从-mnesia extra_db_nodes参数节点列表支持该信息如果没有这个配置参数,Mnesia会以一个单节点系统启动。
1、mnesia:change_config(extra_
db_nodes,a@zcc),告诉无盘节点到a@
zcc上去找schema的定义,
默认将远端schema拉到本地内存,然后通过mnesia:
change_table_copy_type(schema,
node(),disc_copies)
真正将schema放到磁盘上,此时执行mnesia:
info()可以看到remote字段会显示远端表,
此时对表的一切操作都反映到远端表上,当远端节点退出时,
便不能写入数据。
2、在无盘节点上,执行完1的mnesia:change_
config(..,..)后,在远端节点执行mnesia:
add_table_copy(Tab,无盘节点,ram_
copies)
会把Tab表从远端节点真正拷贝到本地无盘节点的ram内,
此时在无盘节点上的操作均是操作本地表。
schema与表具有一定的对应关系,即a@
zcc建了一个schema,b@zcc建了一个schema,
则b@zcc上的表不能拷贝 到a节点上,会报{aborted,
{not_active,schema,a@zcc}};
c、schema默认都是创建在磁盘上的。
1、mnesia:change_config(extra_
2、在无盘节点上,执行完1的mnesia:change_
附:
a、 schema在内存中,则只能将表拷贝到内存,
c、schema默认都是创建在磁盘上的。