2011-11-05 3 views
5

私はしばらくの間、記憶を使用しました。私はmnesia:wait_for_tables/2という概念を正確に理解していないように感じることを告白する必要があります。 mnesia:wait_for_tables/2、本当に分かりますか?

 
Some applications need to wait for certain tables to be accessible in order to do
useful work. mnesia:wait_for_tables/2 hangs until all tables in the Tab List are
accessible, or until timeout is reached.
私が開発したすべてのアプリケーションで、バックエンドを起動するときにこれを呼び出す必要がありました。上記の文書では、 "Some applications"のコンテキストはうまく展開されておらず、私の質問があるところです。

これらは私の考えです:
1.この方法で待っているが、私は個人的に考える
2.(Disc_copiesの場合)ディスクをRAMに言うから、我々はmnesiaテーブルをロードしていることを意味している私のアプリケーションであれば RAM (ram_copies)テーブルのみで構成されている場合、私のコードではこのメソッドは必要ありません。今、私は disc_only_copiesしかなければ、この機能は必要ないと思うのは正しいです。
3.また、ネットワークからmnesiaテーブルを読み込んでいるとき、特に私のテーブルが複製されているときにこの機能が必要なので、私のアプリはこれらのテーブルを準備するために起動時にmnesiaを待つ必要があります。しかし、これはまだタイプが disc_copiesのテーブルにしか当てはまりません。なぜなら、ディスク上に完全に実行されているアプリケーションや、完全にRAM上にあるアプリケーションは、テーブルを待って読み込む必要があるからです。 disc_copiesをこのタイプは、データがディスクやRAMにコピーとは何かを持っているので:

質問:mnesiaテーブルタイプを扱うとき
ヘルプと調べて自分の考え一般的には1、2と3は、この機能にのみ必要ですか?

私のテーブルがすべてフラグメント化されている場合(私はいつもmnesiaが自分のアプリケーションの準備を整えるように各フラグメントに対してこのメ​​ソッドを呼び出しています)、フラグメントごとにメソッドを呼び出す必要がありますか?私はmnesiaトランザクション内でそれを呼び出す場合、メソッドATOMICまたはTransactionalです(つまり、基底テーブルだけを指定すると、mnesiaは自動的にすべてのテーブルフラグメントをロードします)。私の断片のテーブルタイプもこの機能に関して重要ですか?

答えて

3

mnesiaを起動すると、mnesiaはディスクまたはネットワークからロードする必要があるすべてのテーブルをキューに入れます。

mnesia:wait_for_tables/2は同期ポイントを与えますので、テーブルを使用する準備ができている場合は ポーリングする必要はありません。

ディスクを使用せずに複製しない場合(つまり、開始時にスキーマが常に空の場合) wait_for_tablesを使用する必要はありません。

関連する問題