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

1 回答 1

5
  1. 手动的。您负责指定在哪里复制什么。
  2. 是的,如上所述,手动。这可以动态更改。
  3. 恐怕(尽管可能是错误的)除了源代码之外没有。在文档方面,整个 Erlang 发行版几乎不是软件世界的领导者。

Mnesia 不会自动管理给定表的副本数量。您负责指定将存储表副本的每个节点(因此它们的编号)。一个副本可能是:

  • 存储在内存中,
  • 存储在磁盘上,
  • 存储在内存和磁盘中,
  • 未存储在该节点上 - 在这种情况下,该表将是可访问的,但数据将从其他一些节点按需获取。

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

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

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

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

于 2013-09-25T12:41:51.930 回答