是否有办法使用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.
配置是否错误或是否可以通过其他方式完成?
答案 0 :(得分:1)
我认为你不能像你提到的那样去做。另一种方法可能是对节点A进行rpc调用并以这种方式获取数据。使用mnesia从节点B读取是没有意义的,因为它基本上只会执行RPC。
所以节点B应该是:
rpc:call(nodeA@ip1, mnesia, read, ....).
希望这是你[有点]需要的。
编辑: 哦,我忘了提到你不需要两个节点上的架构来实现这一点。这假设节点B并不真正关心与节点A共享任何其他数据它只是读取它;换句话说,只需在节点A上保留所有mnesia内容,然后从Node B进行RPC调用。
答案 1 :(得分:0)
您可能需要将节点B添加到架构的extra_db_nodes config thingy中。如果它是基于光盘的数据库,你不应该这样做,但是在RAM中必须使它做你想做的事。
不确定具体细节,我可能会混淆在哪里放东西。我对mnesia不太熟悉,但文档表明你应该这样做。