【问题标题】:Access distributed mnesia database from different nodes从不同节点访问分布式 mnesia 数据库
【发布时间】:2012-03-14 11:52:31
【问题描述】:
我有一个包含不同表的 mnesia 数据库。
我希望能够从不同的 Linux 终端访问这些表。
我有一个名为add_record 的函数,它接受一些参数,例如name 和id。我希望能够在node1 上调用add_record 和在node2 上调用add record,但我想从不同位置更新同一张表。
我阅读了一些资料,唯一发现我应该使用net_adm:ping (node2)。但不知何故我无法访问表中的数据。
【问题讨论】:
标签:
database
erlang
distributed
mnesia
【解决方案1】:
我假设您可能是指replicated 表。假设您在节点上有您的 mnesia 表:nodea@127.0.0.1 和 -setcookie <b>mycookie</b>,无论它是否复制到另一个节点上,如果我想从另一个终端访问记录,那么我也必须在另一个终端中使用 erlang创建一个节点,将该节点连接到我们的节点与表(您确保它们都具有相同的cookie),然后您调用远程节点上的方法。
假设您想在具有 mnesia 表的节点 nodea@127.0.0.1 上的模块 mydatabase.erl 中使用方法 add_record,我打开一个 linux 终端并输入以下内容:
$ erl -name remote@127.0.0.1 -setcookie mycookie
Eshell V5.8.4(使用 ^G 中止)
1> N = 'nodea@127.0.0.1'。
'nodea@127.0.0.1'
2> net_adm:ping(N)。
乒乓
3> rpc:call(N,mydatabase,add_record,[RECORD])。
{原子,好的}
4>
使用此模块 (rpc),如果两个节点使用相同的 cookie 连接,您可以调用远程节点上的任何方法。首先在远程节点上调用此方法:
rpc:call('nodea@127.0.0.1',mnesia,info,[]).
它应该显示远程终端中的所有内容。我建议您可能首先阅读这个讲座:
Distributed Erlang Programming,然后您将能够看到复制的 mnesia 表是如何管理的。浏览该域的整个教程。