2010-12-29 4 views
4

Mnesiaのドキュメントと3つの人気の高いErlangの書籍を調べました。単一カラムのプライマリおよびセカンダリインデックスだけを作成して使用できるようです。それとも、例題がカバーするものなのでしょうか?それぞれの列に別々のインデックスを作成すると、複数の列のキーインデックス検索をシミュレートするために、Mnesiaをインテリジェントに一緒に使用できますか?もしそうなら、パフォーマンスは単純なテーブルスキャンよりもはるかに優れていますか?Erlang Mnesiaでマルチカラムインデックスを作成および使用(またはシミュレート)するには

Mnesiaでは複数の列の索引付けがサポートされていない場合、ネイティブのdbmsにはErlangでこの機能がシミュレートされています。

2番目のQestion:制約(参照、チェック)、トリガー、イベントベースの通知をシミュレートする方法はありますか?

答えて

5

1つの方法は、キーを持つ "列"に直接{X, Y}を保存することです。これにより構造体{_, _}のクエリを高速に検索することができますが、タプルの値のいずれかしかわからない場合は検索が遅くなります(デフォルトでは、テーブルはハッシュテーブルです)。あなたの他のDBMS用として

は望んでいる:Mnesiaは本当に限りそれは彼らのアプリケーションを作成する場合、エリクソンの開発者のニーズを満たすために建設されたとして、従来のデータベースを置き換えるために構築されていませんでした。したがって、従来のデータベースにデータを格納することで、それが目的のデータであれば、より良い結果を得ることができます。

ただし、mnesiaの周りにコードを持つ機能を追加することは可能です。

+0

多くのありがとう。給料別にソートしてタプルを使って名前を付けるには、add_table_index(staff、{sal、lname、fname})を使ってください。(テーブル、スタッフ、{名、フィールド{SAL、LNAME、FNAME}?Mnesiaこれは少し聞こえるかもしれ?私は今、キーフィールドとして使用し、単一のキーフィールドへ順番に私のキーフィールドのデータをconcatentate手動ではなく、プログラムtupledテーブルのフィールドを受け入れ、インデックスフィールドをtupled?それともん私はこれらの選択肢を試してみようと思っていますが、助けていただければ幸いです。Joe Pee – user557513

+0

私の最後の質問は親切に無視してください。答えは明らかです。ありがとう。 – user557513

1

Mnesiaにはイベントベースの通知があります。 mnesiaイベントを購読するプロセス(gen_server)を持つことが可能です。これらのイベントは、テーブルイベント、システムイベント、その他のカテゴリに分類されます。イベントに関する部分のmnesiaのドキュメントを読んでください。実際には、mnesiaイベントハンドラを使用してイベントを報告するプロセスでは、mnesia:report_event(Event)を呼び出して可能です。 mnesiaイベントに登録されているすべてのプロセスにこのメッセージが表示されます。 Mnesiaは、テーブル上のすべてのトランザクションに関するリアルタイム情報をサブスクライブされたプロセスに報告します。トランザクションの読み取り、書き込み、または削除が可能であり、ループ内のプロセスは、関心のあるイベントのタイプとパターンが一致します。詳細で単純なテーブルイベントがあります。私は個人的に非常に便利なイベントを見つけました。あなたはドキュメントから詳細を得ることができるはずです。

イベントについて現在、俗人のテーブルには同じタイプのレコードが格納されています。この情報にはmnesia:table_info(Table_name::atom(),attributes)を呼び出すことでアクセスできます。 mnesiaテーブルにインデックスを適用すると、最初のレコードフィールド(通常は「プライマリキー」と呼ばれます)でない限り、これらの属性のフィールドはすべて受け入れられます。理由の数年齢、性別、FIRST_NAME、OTHER_NAME、ジョブインデックス付けとレコード検索用のすべてのmnesiaのAPI:私は十分にあなたの質問を理解している場合

 
-record(employee,{id,first_name,other_name,sex,age,job}). 

install(Nodes)-> 
    mnesia:create_schema(Nodes), 
    mnesia:start(), 
    mnesia:create_table(employee,[{index,[age,sex,first_name,job]},
{attributes,record_info(fields,employee)}]), mnesia:stop(), ok.

以下のコードを考えてみましょう、私は今、テーブルの従業員が列を持っていると言うことができます索引付き属性に基づいて作業するmnesia:index_read/3 or mnesia:index_match_object/2 or mnesia:index_match_object/4。幸運

/[email protected]

関連する問題