問題タブ [mnesia]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
database-design - キー値データベースでネストされたアイテムを効率的にクエリするスキーマをどのように設計しますか?
私はErlangでMnesiaを使用していますが、この質問はcouchdbなどのキー値データベースに適用されます.
私は RDBMS の思考プロセスから抜け出そうとしていますが、この種のスキーマを効率的に実装する方法について頭を悩ますことはできません。
User レコードがあり、彼には多数の SubItemA レコードがあり、これには多数の SubItem B レコードがあるとします。
サブアイテム B に対してクエリを実行する必要があります。このようにネストされている場合に実行するのは効率的ですか? より速くなるように正規化する必要がありますか?
データの重複を使用して、データがネストされ、分離されていると聞いたことがありますが、これはばかげているのでしょうか、それとも場合によっては実際に役立つのでしょうか?
erlang - ネットワーク パーティションからのオンライン記憶喪失回復
関連するノードを再起動せずに、mnesia クラスター内のネットワーク パーティションから回復することは可能ですか? もしそうなら、どのようにそれについて行くのですか?
私は特に知りたいと思っています:
- 標準の OTP mnesia (v4.4.7) でこれを行う方法
- これを実現するためにカスタム コードを作成する必要がある場合 (例: mnesia running_paritioned_network イベントにサブスクライブする、新しいマスターを決定する、非マスターからマスターにレコードをマージする、新しいマスターからテーブルを強制的にロードする、実行中のパーティション化されたネットワーク イベントをクリアする -サンプルコードは大歓迎です)。
- または、その mnesia は断固としてオンライン回復をサポートしておらず、非マスター パーティションの一部であるノードを再起動する必要があります。
一般的な分散システム理論へのポインタには感謝していますが、この質問では、erlang/OTP 記憶喪失症のみに関心があります。
erlang - mnesia delete_object 例外?
ここで何が問題なのかわかりませんが、構文を誤解しているだけかもしれません。「ryan」という名前の「user」mnesia テーブルから「user」レコードを削除しようとしています (それらの倍数があります)。これが私がすることです:
これが私のレコード定義です:
そして、ここに私が得ている例外があります:
それは完璧な一致のようです。この問題の原因は何ですか?
database-design - Mnesia の安全で連続したスケーラブルなカウンター
Erlang/OTP でアプリケーションを作成しており、バージョン記録システムでシーケンシャル カウンターを使用したいと考えています。
私は最初にそれらを実装しました
かし、それを使用した経験により、次の厳しい要件が解消されました。カウンターには次のプロパティが必要です。
厳密にシーケンシャルであること - 1 の後に 2 が続き、3 が続くなど、シーケンスはシステムの分散セットで共有されます。いくつかの通信があり、再同期する必要があります
分散データベースで安全
シーケンシャル データベース カウンターを実装するにはどうすればよいですか?
erlang - 記憶喪失クラスターでは、どのノードが照会されますか?
ノード A と B でレプリケートされた mnesia テーブルがあるとします。テーブルのコピーを含まないノード C では、私は を実行しmnesia:change_config(extra_db_nodes, [NodeA, NodeB])
、次にノード CI でmnesia:dirty_read(user, bob)
ノード C はどのノードのテーブルのコピーを選択するかを実行します。でクエリを実行しますか?
database - 主キーがすでにmnesiaに存在するレコードの追加を防ぐための最良の方法は何ですか?
単純なレコード定義があるとします。
これらのレコードの1つをmnesiaデータベースに追加する単純な関数が必要です。しかし、同じ主キーを持つエントリがすでに存在する場合は、失敗させたいと思います。
(次の例では、私がすでに定義していると仮定します
)。
以下は動作しますが、一種の醜いものとして私を襲います...
これも機能しますが、醜いです:
上記とは異なり、上記はスローします
これはスローしますが
だから:この種のエラーを示すためのいくつかの規則はありますか?または、mnesiaにこのエラーをスローさせる組み込みの方法はありますか?
erlang - ノードを mnesia クラスターに追加する方法は?
私はアーランと記憶喪失の初心者です..
スキーマが既にある mnesia データベースに新しい disk_only_copies ノードを追加するにはどうすればよいですか?
ありがとう
erlang - 余分なノードを削除する方法
Mnesia の「extra_db_nodes」を介してデータをレプリケートしている erlang ノードのグループがあります...ハードウェアとソフトウェアをアップグレードする必要があるため、ノードからノードへ移動するときにいくつかのノードを切り離す必要があります。
ノードを削除し、挿入されたデータを保持するにはどうすればよいですか?
[更新] ノードの削除は、ノードの追加と同じくらい重要です。時間の経過とともにクラスターが成長するにつれて、クラスターも縮小する必要があります。そうでない場合、Mnesia は存在しないノードにデータを送信しようとしてビジー状態になり、キューをいっぱいにしてネットワークをビジー状態に保ちます。
[最終更新] erlang/mnesia のソース コードを調べた結果、ノードの関連付けを完全に解除することはできないと判断できました。del_table_copy はテーブル間のリンクを削除しますが、不完全です。私はこの質問を閉じますが、適切な説明はどれもありません。
erlang - データ/ノード パーティション エラーの検出
最後にデータ/パーティション ノード エラーを見たのは、Cookie などを介して同じ CPU 上のノードに接続された erlang シェルを起動したためでした。起動直後、シェルはパーティション エラーを画面に表示しました。これはめちゃめちゃ面倒……。
- この例外をトラップするにはどうすればよいですか?
- プログラムで例外を修復するにはどうすればよいですか? (別の質問で尋ねた)
- この例外を防ぐにはどうすればよいですか?
[更新] Yaws アプリケーションを実行している 2 つのボックスがあります。データベースは、Mnesia の extra_db_node 機能を介して複製されます。サーバーの実行後しばらくして、ボックスの 1 つにログインし、3 つのノードが通信できるように、別の sname と同じ Cookie を使用して「erl」を起動します。シェルが安定し、シェル プロンプトが表示された直後に...ネットワーク パーティション エラーがあることを示す複雑なタプルが画面に表示されます。このメッセージは、yaws アプリケーションによってトラップされる可能性のある例外ではなく、コンソール ダンプのように見えますが、yaws アプリケーションでエラーを検出して修正アクションを実行してもらいたいです。
database-design - Mnesiaのsetとordered_setの違い?
set 型のテーブルと、ordered_set 型のテーブルの違いは何ですか? 読み取り/書き込みパフォーマンスの違い、順序付けの基準、分散ノード間の影響などに興味があります。