2013-09-24 48 views
3
  1. Mnesia使用什麼策略來定義哪些節點將存儲特定表的副本?
  2. 我可以強制Mnesia爲每個表使用特定數量的副本嗎?這個數字可以動態改變嗎?
  3. 有沒有任何資源(除了源代碼)與Mnesia內部算法的詳細(而不僅僅是概述)描述?

回答

4
  1. 手冊。你有責任指定在哪裏複製。
  2. 是的,如上所述,手動。這可以動態改變。
  3. 恐怕(雖然可能是錯誤的),除了源代碼之外沒有。 從文檔的角度來看,整個Erlang分佈幾乎不是軟件領域的領導者 。

Mnesia不會自動管理給定表的副本數。 您有責任指定將存儲表副本的每個節點(因此它們的編號)。複製品然後可以:

  • 存儲在存儲器中,
  • 存儲在磁盤上,
  • 同時存儲在存儲器中並在磁盤上,
  • 未存儲在該節點上 - 在這種情況下,該表將是可訪問但數據將根據需要從其他某個節點獲取。

當系統正在運行時,可以重新配置複製策略,但要動態執行(例如,基於節點關閉事件),您必須自己提出解決方案。

Mnesia系統事件可用於發現節點停機時的情況;如果您知道該節點上存儲了哪些表,則可以根據仍處於聯機狀態的節點檢查其聯機副本的數量,然後在需要時執行復制。

我不知道任何應用程序/庫已經管理這種東西,它似乎是一個相當先進的(從我的角度來看,至少)努力做一個。

但是,Riak是一個數據庫,它可以從用戶透明地管理其節點之間的數據分佈,並且可以根據您提到的選項進行配置。這可能是你走的路。