erlang的mnesia总结

一、mnesia的分布式原理:

1、创建schema
在一个节点上,通过 mnesia:create_schema(NodeList), 在整个集群中,创建空的schema。NodeList指定了集群中所有的节点。
注意:
1)schema只能创建一次
2)实际上,每个节点都保存一份schema拷贝
  Mnesia封装成一个OTP的[color=red]应用程序,要创建一个空模式并存在磁盘或内存上以启动它,有了模式才会有表

2、 创建表
在一个节点上,通过 mnesia:create_table(),则创建一个分布式的表。mnesia会自动将该表同步到节点中其它节点上。每个节点,实际上还是维护的本地的一个表。
 
3、 分布式的插入、删除、修改、查询操作。
在任意一个节点上进行如上操作,都会同步反映到集群中的其它节点上。
 
二、mnesia事务和脏操作的区别:
事务是同步的操作,性能低,但能确保一致性;脏操作不能保证一致性,但是速度极快。
三、mnesia与ets,dets的区别:
        mnesia 是ets和dets上面封装一层的事务层。底层实现用的是这,重点加强了锁和分布式的适应。
四、mnesia不适合的场合:
        (1)简单的键-值查询;-------- 最好用ets或dict巨大的二进制数据:图片,音频;-------- 把每个记录和文件脱离,只记录文件名之类。(好像还有个开源数据库可用的?)
        (2) 一个持续的日志;----------disk_log库
        (3) 一个必须存储GB级别的数据库;--------这个不是首选,但是可以用来 [/color]缓存用户会话(在线)数据,定时写入到指定数据库中。
        (4)一直增长的大型数据档案。
五、mnesia数据不一致的解决方案:
        1、不是分布式环境:只在单一的进程去序列化所有的破坏性操作(写,更新)其它进程只是查询类(如果要改变,发消息到这个进程来做,给个接口给外部)
        2、分布式环境:如果还是采用上面的方法用一个节点去序列化,则会负载过大,所以要会开,如偶数键的在一个节点上,奇数键的在另一个节点上来平分压力;
        3、执行破坏操作时网络断了造成的数据不一致:用set_master_nodes(Tab, MasterNodes[/color)] -> ok | {error, Reason}来设置主节点,如果网络分区,那么mnesia会                 自动把主节点上的内容同步复制下去并复制回来,所有分节点不在主节点上更新的都会被丢弃。所以考虑主节点的重要性!!!!
六、mnesia表的遍历
        first/1 ----next/2
        select
        match
        foldl

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值