Mnesia: чтение удаленных данных узла в {local_content, верный} режим

Есть ли способ сделать локальные записи и и глобальные чтения (без репликации) использующий mnesia. Например: узел записи к его локальному 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.

Конфигурация неправильно, или это может быть сделано каким-либо другим способом?

6
задан Abhijith 4 March 2010 в 10:04
поделиться

2 ответа

Не думаю, что у вас получится так, как вы упомянули. Другой способ сделать это, вероятно, будет заключаться в вызове rpc к узлу A и получению данных таким образом. Нет смысла использовать mnesia для чтения с узла B, потому что он в любом случае будет просто выполнять RPC.

Итак, узел B должен быть:

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

Надеюсь, это то, что вам [отчасти] нужно.

РЕДАКТИРОВАТЬ: О, и я забыл упомянуть, что вам не нужна схема на обоих узлах, чтобы это работало. Предполагается, что узел B на самом деле не заботится об обмене какими-либо другими данными с узлом A, он просто их читает; Другими словами, просто сохраните всю память на узле A и просто выполняйте вызовы RPC с узла B.

1
ответ дан 17 December 2019 в 22:12
поделиться

Вам может потребоваться добавить узел B в конфигурационную штуку extra_db_nodes схемы. Вы не должны делать этого, если это дисковая база данных, но в RAM это обязательно, чтобы заставить ее делать то, что вы хотите.

Не уверен в специфике, возможно, я путаю, куда что ставить. Я не слишком опытен с mnesia, но документация указывает, что вы должны сделать это.

0
ответ дан 17 December 2019 в 22:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: