从不同节点访问分布式mnesia数据库

时间:2012-02-24 00:53:05

标签: database erlang distributed mnesia

我有一个包含不同表格的mnesia数据库。

我希望能够从不同的Linux终端访问表。

我有一个名为add_record的函数,它有一些参数,比如nameid。我希望能够add_record上的node1add record上的node2,但我希望从不同的位置更新相同的表格。

我读了几个来源,我发现的唯一一件事就是我应该使用net_adm:ping(node2)。但不知怎的,我无法从表中访问数据。

1 个答案:

答案 0 :(得分:5)

我假设您可能意味着replicated表。假设你在节点上有你的mnesia表:nodea@127.0.0.1-setcookie mycookie,无论它是否在另一个节点上复制,如果我想从另一个终端访问记录,那么我必须在另一个终端使用erlang终端以及通过创建节点,将该节点与表连接到我们的节点(确保它们都具有相同的cookie),然后在远程节点上调用方法。

假设您想在节点add_record上的模块mydatabase.erl中使用方法nodea@127.0.0.1,该节点具有mnesia表,我打开一个linux终端并且我输入以下内容:

$ erl -name remote@127.0.0.1 -setcookie mycookie
Eshell V5.8.4  (abort with ^G)
1> N = 'nodea@127.0.0.1'.
'nodea@127.0.0.1'
2> net_adm:ping(N).
pong
3> rpc:call(N,mydatabase,add_record,[RECORD]).
{atomic,ok}
4> 

使用此模块(rpc),如果使用相同的cookie连接两个节点,则可以调用远程节点上的任何方法。首先在远程节点上调用此方法:

rpc:call('nodea@127.0.0.1',mnesia,info,[]).
它应该显示远程终端中的所有内容。我建议您可能首先阅读本讲座:Distributed Erlang Programming然后您将能够看到如何管理复制的mnesia表。浏览该域的整个教程。