有没有办法使用 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.
配置错误还是可以通过任何其他方式完成?
最佳答案
我认为你不能像你说的那样做。另一种方法可能是对节点 A 进行 rpc 调用并以这种方式获取数据。使用 mnesia 从节点 B 读取数据毫无意义,因为它本质上只会执行 RPC。
所以节点B应该是:
rpc:call(nodeA@ip1, mnesia, read, ....).
希望这是你[有点]需要的。
编辑:
哦,我忘了提到您不需要两个节点上的架构才能正常工作。这是假设节点 B 并不真正关心与节点 A 共享任何其他数据,它只是读取它;换句话说,只需将所有 mnesia 内容保留在节点 A 上,然后从节点 B 执行 RPC 调用。
关于erlang - Mnesia:以{local_content, true}模式读取远程节点数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2378281/