Mnesia需要schema来初始化自己, schema表可以位于一个或多个节点上,schema表的存储类型可以是disc_ copies或ram_copies(不能是disconly_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默认都是创建在磁盘上的。