問題タブ [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.
mnesia - QLC を使用して mnesia Fragmentated Tables をクエリすると、間違った結果が返される
ウガンダのジョシュです。私は mnesia 断片化されたテーブル (64 個の断片) を作成し、それを 9948723 レコードまで入力することができました。各フラグメントは、2 つのレプリカを持つ disk_copies タイプでした。現在、qlc (クエリ リスト内包表記) を使用すると、レコードの検索が遅すぎて、不正確な結果が返されていました。
このオーバーヘッドは、レコードを照合するためにテーブル全体をトラバースする mnesia の select 関数を qlc が使用することであることがわかりました。私は以下の何かを試しました。
この機能を試してみると、良い結果が得られました。しかし、ストアド プロシージャで実行される可能性のあるすべての検索のパターンを動的に構築する必要があることがわかりました。
私はこれを行うという大混乱を経験することに決めたので、検索するパラメーターに応じてレコードのワイルドパターンを動的に構築する関数を作成しました。
これは非常にうまく機能していましたが、計算集約的でした。コンパイル時に新しいレコード情報を取得するため、レコード定義を変更した後でも機能する可能性があります
問題は、WinXP を実行している 3.0 GHz pentium 4 プロセッサで 25 のプロセスを開始すると、ハングして結果を返すのに時間がかかることです。
これらのフラグメントで qlc を使用する場合、正確な結果を得るには、このように検索するフラグメントを指定する必要があります。
Qlc は [] を返していましたが、何かを検索すると、match_object/1 を使用すると正確な結果が得られます。match_expressions を使用すると役立つことがわかりました。
mnesia:table(Tab,Props). Props は、一致式、戻り値のチャンク サイズなどを定義するデータ構造です。
マッチ式を動的に構築しようとしたときに問題が発生しました。
関数 mnesia:read/1 または mnesia:read/2 では、主キーが必要です
QLC を効率的に使用して、断片化された大きなテーブル内のレコードを検索するにはどうすればよいでしょうか? 助けてください。
レコードのタプル表現を使用すると、コードのアップグレードが難しくなることはわかっています。これが、mnesia:select/1、mnesia:match_object/1 の使用を嫌い、QLC に固執したい理由です。QLC は、同じノード上であっても、64 個のフラグメントの mnesia テーブルからのクエリで間違った結果を返します。
断片化されたテーブルをクエリするために QLC を使用したことがある人はいますか? 助けてください
erlang - 記憶喪失主キー
1 つのメモと 1 つのタグの 2 つのテーブルがあり、メモの主キーから ID を作成してタグ テーブルで使用したいのですが、どこが間違っているのかわかりません。私のメモIDは、関数を使用して別のテーブルカウンターから生成されますdirty_update_counter
。
from タグの関数はid_notes
次のようになります。
id_note
しかし、この関数は、メモ テーブルで id フィールドがカウンター テーブルからインクリメントされているにもかかわらず、テーブル タグからフィールドをインクリメントしません。
助けてくれてありがとう。
erlang - 実行中に別の Erlang シェルから Mnesia ノードにアクセスする
テーブル内のデータのみを表示するために、別の Erlang シェルから単一の実行中の mnesia ノードにアクセスするためのベスト プラクティスは何ですか?
2 つのシェルを開いて、同じ mnesia ディレクトリの場所を指定しようとしましたが、ドキュメントでこれを見つけた後、非常に悪い考えであることに気付きました。
-mnesia dir ディレクトリ。すべての Mnesia データが保存されるディレクトリの名前。ディレクトリの名前は、現在のノードに対して一意である必要があります。2 つのノードが同じ Mnesia ディレクトリを共有することはありません。結果はまったく予測できません。
deployment - Mnesiaスキーマを標準的な方法で処理する方法は?
ディスク対応スキーマが存在するMnesiaに依存するアプリケーションAがあるとします。私がやりたいのは、mnesiaが実行されていることを確認し、 Adisc_copies
内からテーブルを許可することです。また、複数のアプリケーションが記憶喪失にアクセスする必要がある場合も検討しています。
Mnesiaの起動とスキーマの作成をAのアプリケーションコールバックモジュールにハードコーディングせずに、この種のことを実現するための最も移植性の高い(そして標準的な)方法は何でしょうか?
インタラクティブに開発するとき、私は単に
Erlangシェル内でディスク上のスキーマを初期化してから、mnesiaアプリケーションを
最後に、存在するデータベースに依存する他のものを開始します。
erlang - Erlang - mnesia データベースの標準的な場所
mnesia データベースを erlang 内に配置する標準的な場所はありますか? 現時点では、priv ディレクトリに配置しています。
erlang - ejabberd:Mnesiaテーブルを検査しますか?
ejabberdを調べていますが、Mnesiaテーブルを検査する方法が見つかりません。
テーブルを検査するためのMySQLシェルのようなものはありますか?
erlang - mnesia がプログラム内から停止すると、Erlang アプリの停止がハングする
アプリをハングさせずにプログラム内で mnesia を停止できないという問題に遭遇しました。
私は現在、アーラン アプリ内で mnesia のプロトタイピングを行っています。
私の jaus_app.erl ファイルでは、 start() 呼び出し:
私の stop() 関数呼び出し:
これらの行をコメントアウトして、erlang プロンプトから mnesia を開始および停止すると、アプリケーションをきれいに停止できます。
本格的な erlang アプリ内でこれらのプロトタイプ関数を使用すべきではありませんか?
ケン。
erlang - クラスター内のMnesiaマスターノードの重要性は何ですか
複製されたmnesiaデータベースで2つのerlangノードを実行しています。mnesiaがもう一方で実行されていないときに一方を起動しようとすると、mnesia:wait_for_tables(?TABS、?TIMEOUT)は、呼び出し元のノードでハングします。(両方のノードが実行されていない場合)もう一方がダウンしているときに一方を操作し始め、後でもう一方を起動しても正常に動作し続けることができる構造が必要です。実行していた最初のノードが、後で起動したときに更新されていることを確認する必要があります。これは必然的に私がマスターとして1つ持っている必要がありますか?
%%%編集.............................................。 ............................。
ああ、私はそれを持っています。私が使用していたデータベースには、断片化されたテーブルがいくつかありました。一部のフラグメントは、負荷分散のためにネットワーク全体に分散されていました。したがって、一方のホストのMnesiaはネットワークを介してそれらをロードしようとし、もう一方のホストのMnesiaがダウンしているため、失敗します。
これは、mnesiaマスターノードとは何の関係もないと思います。しかし、これまで使用したことがないので、同じことの重要性を理解したいと思います。それでも、私は常に分散スキーマで遊んでいます。
再度、感謝します...
erlang - erlang mnesia - 不正なレコード情報
必要なテーブルが既に作成されていることを確認する関数を作成しようとしています。サンプルは次のとおりです。
問題は、コンパイル時にエラーが発生することです: illegal record info
. コンパイル時に record_info が解決されるか、record info の 2 番目の引数が実際にはソース コードから取得できるレコードでなければならないのでしょうか?
erlang - mnesia クラスターから not_exist_already ノードを削除する (スキーム)
次のメッセージが表示されると、mnesia クラスター データに不良ノードがあります (存在しません)。
クラスターから削除するにはどうすればよいですか?
私は試した:
これは何を意味するのでしょうか?どうすれば修正できますか?
アップデート。スキーマからノードを削除する前に、mnesia を停止する必要があります