有没有办法使用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)
配置是错误的还是可以通过其他方式完成?
我认为你不能按照你提到的方式做到这一点。另一种方法可能是对节点 A 进行 rpc 调用并以这种方式获取数据。使用 mnesia 从节点 B 进行读取是没有意义的,因为无论如何它本质上只是执行 RPC。
所以节点B应该是:
rpc:call(nodeA@ip1, mnesia, read, ....).
Run Code Online (Sandbox Code Playgroud)
希望这是您[某种程度上]所需要的。
编辑:哦,我忘了提及,您不需要两个节点上的架构才能正常工作。这是假设节点 B 并不真正关心与节点 A 共享任何其他数据,它只是读取这些数据;换句话说,只需将所有 mnesia 内容保留在节点 A 上,并从节点 B 进行 RPC 调用即可。