2016-07-20 2 views
0

4つのノードで動作するmnesiaクラスタを持っています。テーブル名学生は7個のフラグメントで存在します。 mnesiaの文書によれば、読み込み時に、mnesiaは、キーのハッシュ値から、レコードが属する断片からどれかを判断します。読み込みは、mnesia:activity/4関数を介して行われます。パーティショニングをテストするために、1-512のキーを持つ512レコードを挿入しました。私はサイズのmnesiaの断片化されたテーブルの属性を見ます:table_info/2 in mnesia:activity/4 context;これはフラグメントに512レコードがあることを確認します。 問題は、テーブルに存在する(1-512)の範囲のキーでレコードを読み取ると、そのキーが最初のフラグメントに存在するキーの範囲内にある場合にのみレコードを取得したことです。言い換えれば、記憶喪失は最初の断片からのみ読んでいる。私が間違って何をしたのか分からない。私はあなたの助けが必要です。ありがとうMesia activity/4は最初のフラグメントからのみ読み取ります

答えて

0

私は問題を発見しました。私はmnesia ダーティーの読み取り操作をmnesia:activity/4関数の機能オブジェクトパラメーターとして使用していました。 AccessContextパラメータでコンテキストを判断できるので、この関数はダーティーなオペレーションではないはずです。例えば。

これは最初のフラグメントから読み取ります

KeysFun = fun() -> mnesia:dirty_all_keys(Tab) end, 
mnesia:activity(sync_dirty, KeysFun,[],mod_frag). 

これは、すべてのフラグメントから読み取ります

KeysFun = fun() -> mnesia:all_keys(Tab) end, 
mnesia:activity(sync_dirty, KeysFun,[],mod_frag). 
関連する問題