Mnesia:以{local_content,true}模式读取远程节点数据

Abh*_*ith 6 erlang mnesia

有没有办法使用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
Run Code Online (Sandbox Code Playgroud)

在nodeB @ ip2上:

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

配置是错误的还是可以通过其他方式完成?

Maz*_*ake 1

我认为你不能按照你提到的方式做到这一点。另一种方法可能是对节点 A 进行 rpc 调用并以这种方式获取数据。使用 mnesia 从节点 B 进行读取是没有意义的,因为无论如何它本质上只是执行 RPC。

所以节点B应该是:

rpc:call(nodeA@ip1, mnesia, read, ....).
Run Code Online (Sandbox Code Playgroud)

希望这是您[某种程度上]所需要的。

编辑:哦,我忘了提及,您不需要两个节点上的架构才能正常工作。这是假设节点 B 并不真正关心与节点 A 共享任何其他数据,它只是读取这些数据;换句话说,只需将所有 mnesia 内容保留在节点 A 上,并从节点 B 进行 RPC 调用即可。