mnesia问题集锦

1.集群中如何使用Mnesia

    网上的示例,大多以单节点为例,集群中的使用方法参考。注意scheme的设置,节点之间没有主从之分。

2. 如何扩容(缩容)

         分布式环境中很多时候需要我们动态的增加或减少节点。

i 扩容

       mnesia:change_config(extra_db_nodes, NodeList)

   (参数是新的node的节点, 如果成功,返回{ok, ResNodeList}, 其中ResNodeList是已经加到mnesia cluster中的节点), 扩容之后需要拷贝表数据到新节点:
    mnesia:change_table_copy_type(Table, Node, Type)
 

ii 缩容

    mnesia:del_table_copy(Tab, Node)
    (这个函数在Node上删除Tab表格的备份,如果这个表格的最后一个备份被删除,这个表也就被删除了, 这个函数还可以用来删除schema, 如果删除schema, 这个node将在mnesia cluster中被移除,调用之前 需要在这个node上停掉mnesia)
    mnesia:stop()
    mnesia:delete_schema(DiscNodes)

3.创建索引

         索引的好处无需多言,mnesia创建的index的方法如下:

         mnesia:add_table_index(Tab,AttributeName)

 

    索引带来方便的同时,也带来负面影响

 

4.如何备份还原

         尽管mnesia有自动备份机制,也难100%保证数据不会出问题。当数据库发生严重错误无法启动,或者数据丢失时可以及时有效地恢复数据。

 

    在Mnesia启动后,可以使用mnesia:backup()备份,函数原型:

mnesia:backup(Opaque [,BackupMod]) -> ok | {error,Reason}

 

    在mnesia启动后,可以使用mnesia:restore()恢复,函数原型:

mnesia:restore(Opaque, Args) ->{atomic, RestoredTabs} |{aborted, Reason}

恢复过程相关的所有表将写锁,可在mnesia不用重启的情况下恢复数据

 

    更多关于备份回滚参考

5. 如何修改表结构

         在我们的项目中,由于初始设计的不足导致,常常需要在后续开发过程中修改表(record)的结构,参考

6.dump数据

         这里的dump和自研数据不是一个概念,自研数据库的dump用于备份数据,这里的dump是数据落地的意思。通过erlang的启动参数配置dump参数

7.表分片

         由于dets表2G的限制,对于数据量过大的表,需要使用分片功能把表分成较小的文件存在磁盘上。可以指定分片数量,分片表数据和正常的表数据在集群中分布一致。参考

8. 如何突破2G的限制

         dets的2G限制让人诟病,32位的遗留问题。 有下面几种方法突破2G限制:

i.手动修改dets代码移除限制

         修改dets源码,移除相关限制,参考

ii.使用表分片的方式避开2G限制

         参考问题7.

iii.替换dets引擎(保持mnesia 接口不变)

         mnesia可以指定引擎,以leveldb为例,参考如下链接:

http://blog.csdn.net/jimmychou/article/details/3988468

https://www.tuicool.com/articles/yyM3Uz2

http://www.erlang-factory.com/static/upload/media/143415340626199euc2015mnesialeveldb.pdf

https://github.com/mikpe/mnesia_eleveldb

9. 过载

         mnesia在频繁操作数据的过程可能会报错:** WARNING ** Mnesia is overloaded: {dump_log, write_threshold}。这个警告发生在dump操作过程中。参考处理方法

10. 脑裂处理

         只要是集群就有可能存储脑裂问题,关于脑裂引发的问题及解决方法自行百度。开源库ekka提供了解决方法,  github.

11. 主键自增的方法

         以往的关系型数据库中提供了主键的自增方法,非常好用。mnesia的实现方法

12. mnesia的监控数据

         mnesia在运行时提供了大量的统计量,对这些统计量进行监控,有助于正确使用mnesia,以及对mnesia进行调优,这些统计量包括


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值