6

mnesia を使用してローカル書き込みとグローバル読み取り (レプリケーションなし) を行う方法はありますか? 例: ノード A はそのローカル DB に書き込み、ノード B はノード A の DB から読み取ります。ノード B には、ローカルに保存されているスキーマ情報を除いて、独自のデータはありません。

ドキュメントによると、{local_content, true}私が使用する必要があるもののようですが、ノード B にノード A のデータを読み取らせようとして失敗しました。

私のスキーマとテーブルの構成は次のようになります。

nodeA@ip1:

    net_adm:ping('nodeB@ip2').
    rd(user, {name, nick}).
    mnesia:create_schema([node()|nodes()]).
    mnesia:start().
    mnesia:create_table(user, [ {local_content, true}, 
                                {disc_copies, [node()]}, 
                                {attributes,record_info(fields, user) }]).

%% insert data and list rows on nodeA 
%% WORKS

nodeB@ip2:

    mnesia:start().
    %% code to list rows from user table on nodeA 
    %% throws an ERROR saying table does not exist.

構成が間違っていますか、それとも他の方法でこれを行うことができますか?

4

2 に答える 2

1

おっしゃる通りにはできないと思います。それを行う別の方法は、おそらくノード A に対して rpc 呼び出しを行い、その方法でデータを取得することです。ノード B からの読み取りを行うために mnesia を使用する意味はありません。

したがって、ノード B は次のようになります。

rpc:call(nodeA@ip1, mnesia, read, ....).

これがあなたが[ある程度]必要とするものであることを願っています.

編集:ああ、これが機能するために両方のノードにスキーマが必要ないことを忘れていました。これは、ノード B がノード A と他のデータを共有することをあまり気にせず、それを読み取るだけであると想定しています。つまり、すべての mnesia をノード A に保持し、ノード B から RPC 呼び出しを行うだけです。

于 2010-03-08T09:11:14.773 に答える
0

ノード B をスキーマの extra_db_nodes 構成に追加する必要がある場合があります。ディスクベースのデータベースの場合はそうする必要はありませんが、RAM では、必要なことを行うことが必須です。

詳細がわからないので、どこに物を入れるか混乱するかもしれません。私は記憶喪失症の経験があまりありませんが、ドキュメントでは、これを行う必要があることを示しています.

于 2010-03-04T17:21:56.373 に答える