問題タブ [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.

0 投票する
3 に答える
1396 参照

mysql - Mnesiaの一意性制約

たくさんのDB書き込みを必要とするErlangアプリケーションを開発しています。私のスキーマには、主キーに加えて、一意の制約が適用された別の属性があります。

ID、unique_constraint_field、およびその他のフィールドがあるとします。更新しようとしているunique_constraint_field値の値が他の行にすでに存在していないことを前提として、一意のIDに対応するDBの行を更新する必要があります。

更新の量が多いため(各更新は1行にのみ影響します)、実行する必要があります(低レイテンシも必要です)更新ステートメントではなく、主キーとその属性の一意の制約に依存して重複をキャッチしますサブクエリを使用します。これにより、1回のクエリで更新を実行でき(95%の確率で発生)、残りの5%で例外をキャッチして、主キーまたは一意の属性違反について必要なアクションを実行できます。

現在、ODBCmysqlドライバーを使用しています。ただし、ドライバは、エラーに対して非常に一般的なエラーメッセージを返します。エラーをキー違反と見なすと、現在私のプロトタイプは正常に機能していますが、このモデルには明らかにかなりの欠陥があります。erlangからmysqlに接続するための他の適切なドライバー/方法が見つかりません。

ErlangとMnesiaが非常にシームレスに融合するため、Mnesia(速度要件のメモリのみのモード)に切り替えることを考えています。ただし、Mnesiaには、単一のクエリでDB更新を実行するために使用できる一意のキー制約がないことがわかります。

Erlang内からこの要件を実装するための最良の方法として提案が必要です。Mnesiaで条件付き更新を実行する方法はありますか?または、他に検討すべき高速DBの代替手段はありますか?どんな助け/洞察も大歓迎です。

0 投票する
2 に答える
1130 参照

erlang - erlang - タプルの中身をqlcやmnesiaと合わせるにはどうすればいいですか?

このレコードの記憶喪失表があります。

Peer_key はタプル {FileId, ClientId} です。ここで、特定の FileId を持つすべてのピアから ip_port フィールドを抽出する必要があります。

実行可能な解決策を思いつきましたが、これが良いアプローチであるかどうかはわかりません:

ありがとう。

0 投票する
2 に答える
823 参照

erlang - Erlang で、分散システムをアップグレードする最良の方法は何ですか?

Erlang で記述された複数の Web サーバーを実行 (負荷分散) しており、バックエンド データベースに Mnesia を使用している場合、システム全体を新しいバージョンにアップグレードする最良の方法は何ですか?

0 投票する
2 に答える
665 参照

erlang - Mnesia で外部キーを定義する方法

Mnesia にこの SQL ステートメントに相当するものはありますか?

0 投票する
3 に答える
1444 参照

erlang - erlang と最終的に一貫性のある mnesia データベース。ベストプラクティスはありますか?

erlang で bittorrent トラッカーを作成しています。サービスの性質上、絶対的な一貫性は必要ありません (つまり、ピアのリストや torrent のステータスが少し古くても、クライアントは完全に満足することができます)。

これまでの私の戦略は、disk_copies を有効にして RAM に mnesia テーブルを作成し、ログ サイズが特定のサイズを超えたときに mnesia が自動的にメモリをディスクにダンプするようにすることでした。

サーバーがクラッシュすると、一部の情報が失われます。大したことではありません。

別のアプローチとして、2 つのテーブル (1 つの RAM のみと 1 つのディスクのみ) をインスタンス化し、RAM からディスクへのプロセス コピーを約 1 分ごとに行うこともできます。これはより素朴ですが、メモリ内のサブセットのみをダンプできるため、ディスク全体のオーバーヘッドが削減され、ログの使用を完全に回避できる可能性があります (この最後のステートメントについては実際にはわかりません)。

これを行うには他にも多くの方法があると確信しています。君は?

-テオ

0 投票する
2 に答える
692 参照

erlang - 起動時にejabberdノードを同期する

解決できないように見える問題が発生しています。関数mnesia:change_table_copy_type(schema、node()、disc_copies)を渡す必要があります。コマンドラインで、dbがマスターノードから作成されます。erlの開始は次のとおりです。erl-nameNODE1-mnesia extra_db_nodes \ "['MASTER'] \" -s mnesiaシェルを起動してから関数呼び出しに入ると、すべてが正常に機能し、シェルを停止してejabberプロセスを正常に開始できます。 。したがって、必要なのは、DBのセットアップと同期を実行するためのスクリプト化されたメソッドです。

change_table_copy_typeを渡すためにさまざまな方法を試しましたが、成功しませんでした。最終的な目標は、mnesiaを開始するプロセスをスクリプト化し、関数を渡してから、シェルを終了できるようにすることです。誰かがこれを試したことがありますか?次のようなリダイレクトを試しました:erl -name NODE1 -mnesia extra_db_nodes \ "['MASTER'] \" -s mnesia <

関数呼び出しが渡されたときにノードが開始されないため、これは失敗します。「-run」オプションを使用しようとしましたが、関数がundefであるというエラーが発生します。たぶん私は-runセクションを正しく構築していません。

0 投票する
2 に答える
1773 参照

erlang - Erl のレコード (Erlang の質問)

Is there a way to use records directly in erl? No matter what I try, it always says it canno find the record. I am trying to do mnesia transactions and I cannot go too far without my records. Any help is greatly appreciated - thank you!

0 投票する
1 に答える
1101 参照

amazon-ec2 - RabbitMQ インスタンスが実行されている EBS ボリュームのスナップショットを適切に作成するにはどうすればよいですか?

EC2 インスタンスで RabbitMQ を使用しており、EBS ボリュームに Mnesia テーブルがあるため、スナップショットを作成して同じデータで別のインスタンスを起動しようとすると、テーブルが別の RabbitMQ インスタンスによって使用されているように見えます。

これを回避して、フラッシュ/スナップショットのためにRabbitMQをシャットダウンし、完了したら再び起動する唯一の方法はありますか?

ファイルがロックされているように見えたり、強制的にロックが解除されたりしないように、ファイルをクリーンアップする方法はありますか?

これは私が直面する一般的な問題ではなく、より良い解決策があるかどうかに興味があります.

明確にするために、表示されるエラーは次のとおりtimeout_waiting_for_tablesです。

0 投票する
3 に答える
848 参照

erlang - gen_serverを使用してmnesiaテーブルをカプセル化しますか?

私はErlangで作られたサーバーアプリケーションを持っています。その中に私は写真に関するいくつかの情報を保存するmnesiaテーブルを持っています。「すべてがプロセスである」という精神で、私はそのテーブルをgen_serverモジュールでラップすることにしました。そのため、 gen_serverモジュールはテーブルに直接アクセスする唯一のモジュールです。そのテーブルへの情報のクエリと追加は、そのプロセス(登録された名前を持つ)にメッセージを送信することによって行われます。アイデアは、そのテーブルから情報をクエリするいくつかのクライアントプロセスがあるということです。

これは問題なく機能しますが、そのgen_serverモジュールには状態がありません。必要なものはすべてmnesiaテーブルに保存されます。それで、私gen_serverはおそらくそのテーブルをカプセル化するための最良のモデルではないのだろうか?

単にプロセスにするのではなく、そのモジュールの関数を介してテーブルをカプセル化するだけでよいのでしょうか。gen_serverそのモジュールにバグがあると、呼び出しプロセスがクラッシュします。これは、プロセスがクラッシュして全員が残る現在とは対照的に、単一のクライアントにのみ影響するため、より良いと思います。 テーブルにアクセスせずに(スーパーバイザがテーブルを再起動するまで)。

どんな入力でも大歓迎です。

0 投票する
3 に答える
608 参照

erlang - Mochiweb 記憶喪失リクエスト

Mochiweb を ejabberd mnesia データベースにリンクしようとしていますが、コントローラーで mnesia トランザクションを実行できません。mnesia トランザクションを使用せずにコントローラーをテストしたところ、正常に動作しました。start 関数内で application:start(mnesia) を使用しています。

ブラウザには「Internal server error」が表示され、Mochiweb のログには「=ERROR REPORT=== function_clause」が表示されます。1.) mnesia を Mochiweb で動作させる方法、または 2.) ejabberd の Web サーバーにプラグインできる優れたフレームワークの方法を知りたいです。

ありがとう!