mnesia分布式探寻—无盘节点上运行mnesia深入分析

本文介绍Mnesia数据库如何通过Schema初始化,并解释了如何在无盘节点上配置额外节点来获取Schema定义。同时,文章详细说明了如何通过不同方式复制表到无盘节点,并讨论了Schema与表之间的关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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内,此时在无盘节点上的操作均是操作本地表。

附:

a、 schema在内存中,则只能将表拷贝到内存,当schema在disc时,既能将表拷到内存,又能将表拷到磁盘;

b、 不同的schema间,表不能拷贝,schema与表具有一定的对应关系,即a@zcc建了一个schema,b@zcc建了一个schema,则b@zcc上的表不能拷贝 到a节点上,会报{aborted,{not_active,schema,a@zcc}};
c、schema默认都是创建在磁盘上的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值