わからないことがあります。記憶喪失ノードが 2 つあります。1 つには RAM があり、もう 1 つにはディスク コピーがあります。
私の質問は:
スキーマを一度作成しますか? ただし、スキーマはノードを入力する場所です。
私は混乱し、これに関する適切なドキュメントが見つかりませんでした
概念を明確にすることから始めましょう。mnesia クラスターは、ノードとテーブルで構成されます。ノードにはテーブルのコピーがある場合があります。コピーのタイプ ( ram_copies
、disc_copies
、およびdisc_only_copies
) は、特定のノードの特定のテーブルに適用されます。ノードは異なるテーブルの異なるタイプのコピーを持つことができ、テーブルは異なるノード上に異なるタイプのコピーを持つことができます。特殊なケースとして、ディスク ベースのコピーがまったくないノードがあります。これは、RAM のみのノードと呼ばれます。
スキーマは、ノードとテーブルに関する情報を格納する特別なテーブルです。各ノードには、クラスタ内にこのテーブルのコピーが必要です。RAMのみのノードには明らかにRAMコピーがあり、他のノードにはディスクコピーがあります。正確には、他のテーブルのディスク ベースのコピーを保持するには、ノードにスキーマのディスク コピーが必要です。
を呼び出すとmnesia:create_schema
、テーブルのないスキーマのディスク コピーが作成され、mnesia の開始時にロードされます (mnesia が既に開始されている場合、この関数は機能しません)。クラスターに複数のディスクベースのノードが含まれている場合、スキーマはこれらすべてのノードで同時に作成され、これらのノードで mnesia が開始されると、自動的に相互に接続されます (ノードはスキーマから相互を認識します)。
mnesia が起動時にディスクからスキーマを読み込めない場合、mnesia は RAM に空のスキーマを作成します (または、設定によっては起動を拒否します)。その後mnesia:change_config
、クラスターのディスクベースのノードを呼び出して RAM 専用ノードにすることができます。この場合、空のスキーマが置き換えられ、ノードがクラスターの残りの部分と同期されます。テーブルの作成を開始し、他の RAM のみのノード (スキーマはまだ空の状態) を追加して、RAM のみのクラスターを構築できます。
mnesia:chang_table_copy_type
RAM のみのノードは、 tableを呼び出すことによってディスク ノードに変換できますschema
。このようにして、ディスクベースのスキーマを事前に作成しなくても、完全なディスクベースのクラスターを最初から動的に構築できます。ただし、ディスク ノードのセットが固定されている場合は、最初にクラスターを開始する前にそれらのスキーマを静的に初期化する方がはるかに簡単です。