たとえば、ノードAとノードBにレプリケートされたmnesiaテーブルがあるとします。テーブルのコピーを含んでいないノードCでは、mnesia:change_config(extra_db_nodes, [NodeA, NodeB])
を実行し、次にノードCIではmnesia:dirty_read(user, bob)
を実行します。どのノードのコピーのクエリを実行するテーブルの?mnesiaクラスタでは、どのノードが照会されますか?
答えて
私自身の研究の答えによれば、質問は - 最後に接続されたノードを選択します。私は見つかった場合には誤りを指摘することに感謝します - 記憶は本当に複雑なシステムです!
Dan Gudmundsson pointed outは、照会するリモートノードの選択のメーリングリストアルゴリズムでmnesia_lib:set_remote_where_to_read/2
に定義されています。そう、それは(つまり、候補者のリスト)active_replicasのリストを取得し、次の
set_remote_where_to_read(Tab, Ignore) ->
Active = val({Tab, active_replicas}),
Valid =
case mnesia_recover:get_master_nodes(Tab) of
[] -> Active;
Masters -> mnesia_lib:intersect(Masters, Active)
end,
Available = mnesia_lib:intersect(val({current, db_nodes}), Valid -- Ignore),
DiscOnlyC = val({Tab, disc_only_copies}),
Prefered = Available -- DiscOnlyC,
if
Prefered /= [] ->
set({Tab, where_to_read}, hd(Prefered));
Available /= [] ->
set({Tab, where_to_read}, hd(Available));
true ->
set({Tab, where_to_read}, nowhere)
end.
で、必要に応じて、テーブルのノードをマスター(何らかの理由で)無視されたテーブルを削除するには、リストを縮小し、リストを縮小現在のノードを接続した後、次の順序で選択する:任意の利用可能なノードを
- まず非
disc_only_copies
最も重要な部分は実際にはactive_replicas
のリストです。候補リスト内のノードの順序を決定するためです。 active_replicas
の
リストは、リストの先頭として、アイテムを追加機能add/1
に帰着古いノードに新たに接続されたノードからmnesia_controller:add_active_replica/*
のリモート呼び出し(前クラスタにあった、すなわち1)によって形成されています。
したがって答えはです - 最後に接続されたノードを選択します。
注:私はこれがに適用されるかどうかはわかりません、
[ {T,X} || {{T,active_replicas}, X} <- ets:tab2list(mnesia_gvar) ].
まあ、ノードCは、クエリを実行するためにノードAまたはノードBのいずれかに連絡する必要があります。したがって、ノードCは、どのテーブルコピーがクエリを実行するかを決定しなければならない。
これ以上のものが必要な場合は、どのノードを照会するかを決めるアルゴリズムを必要とするか、ノードCの表を複製する必要があります(これは通常、どのような種類の特性)。
ノードAとノードBがデータベースクラスタの一部を形成している場合や、データベースクラスタの一部である場合は、おそらくラウンドロビンアルゴリズム(またはランダムに指定してください)が適しています。
- 1. mnesiaクラスタにノードを追加するにはどうすればよいですか?
- 2. クラッシュしたerlang mnesiaノードを再びクラスタに再接続するにはどうすればいいですか?
- 3. postgresノードjsを照会するのに最適なオプションはどれですか?
- 4. ノードjsでmongodbを照会
- 5. mnesiaを照会するたびに、私のメモリ消費量が上がるのはなぜですか?
- 6. 照会された別のオブジェクトを別の照会オブジェクトで照会
- 7. クラスタ化されたejabberd環境でのMnesia - inconsistent_databaseエラーの解決方法
- 8. さまざまなノードのトップ投稿をどのように照会できますか?
- 9. データベースはSQLAlchemyでいつ実際に照会されますか?
- 10. JSONノードの値を別のノードの値で照会してください
- 11. SolrJ 5.5.0 qf値(クエリフィールド)が正しく照会されない、または全く照会されない
- 12. "範囲照会"はどのように実行されますか?
- 13. Powershell v2.0 - XMLノードを照会する
- 14. 照会照会の応答がどのように空であるかSeverを解析しますか?
- 15. flask_sqlalchemy:サブクラスが照会されるまで、AbstractConcreteBaseはマップされません。
- 16. Firebaseデータベース:照会されたdatasnapshotのキー/参照がその親を参照するのはなぜですか?
- 17. SQL照会でORA-00907が表示されるのはなぜですか?
- 18. ノードの子を照会する簡単な方法はありますか?
- 19. Cassandraクラスタの1ノードあたりのデータ量はどれくらいですか?
- 20. ノードjs express - 価格フィールドを照会
- 21. ノードを使用してfirebaseの別のノードに照会します
- 22. スケジュールされたタスクの状態(アクティブまたは非アクティブ)はどのように照会できますか?
- 23. Railsアプリケーションでクラスタ化されたRedis Elasticacheノードをリフレッシュするにはどうすればよいですか?
- 24. XElementを使用してネームスペース内のノードを照会します
- 25. Zookeeperのノード数は、クラスタのノード数とは関係なく監視されますか?
- 26. numpy:マスクされたレコードからデータを照会しますか?
- 27. データが照会されてもDefaultTableModelが空です
- 28. elasticserchのさまざまなフィールドを照会するにはどうすればよいですか?
- 29. servicestackプロパティの照会名で照会
- 30. useMasterKeyパラメーターでそれぞれサーバー照会を照会
は私の編集した記事をチェックしてください: は、あなたがこの(汚いハック)コードを使用することができ、特定のノード上でアクティブなレプリカのリストをチェックアウトするには私が尋ねたもの私は場所の指定なしでノードCでクエリを実行できます。したがって、使用するテーブルコピーをどのように選択するのですか? – ryeguy
ノードが実際にそのスキーマにテーブルを持っていないことを知りませんでした。申し訳ありません、私の悪い! –