2013-09-24 49 views
3
  1. Mnesia使用什么策略来定义哪些节点将存储特定表的副本?
  2. 我可以强制Mnesia为每个表使用特定数量的副本吗?这个数字可以动态改变吗?
  3. 有没有任何资源(除了源代码)与Mnesia内部算法的详细(而不仅仅是概述)描述?

回答

4
  1. 手册。你有责任指定在哪里复制。
  2. 是的,如上所述,手动。这可以动态改变。
  3. 恐怕(虽然可能是错误的),除了源代码之外没有。 从文档的角度来看,整个Erlang分布几乎不是软件领域的领导者 。

Mnesia不会自动管理给定表的副本数。 您有责任指定将存储表副本的每个节点(因此它们的编号)。复制品然后可以:

  • 存储在存储器中,
  • 存储在磁盘上,
  • 同时存储在存储器中并在磁盘上,
  • 未存储在该节点上 - 在这种情况下,该表将是可访问但数据将根据需要从其他某个节点获取。

当系统正在运行时,可以重新配置复制策略,但要动态执行(例如,基于节点关闭事件),您必须自己提出解决方案。

Mnesia系统事件可用于发现节点停机时的情况;如果您知道该节点上存储了哪些表,则可以根据仍处于联机状态的节点检查其联机副本的数量,然后在需要时执行复制。

我不知道任何应用程序/库已经管理这种东西,它似乎是一个相当先进的(从我的角度来看,至少)努力做一个。

但是,Riak是一个数据库,它可以从用户透明地管理其节点之间的数据分布,并且可以根据您提到的选项进行配置。这可能是你走的路。