2012-02-24 38 views
4

我有一个包含不同表的mnesia数据库。从不同节点访问分布式mnesia数据库

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

我有一个叫做add_record的函数,它需要几个参数,比如nameid。我希望能够在上的node1add record上拨打add_record,但我想更新来自不同位置的同一张表。

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

回答

4

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

比方说你想使用方法add_record在模块mydatabase.erl节点,其具有的Mnesia表[email protected]上,第i打开Linux终端,我输入以下内容:

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

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

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

+2

惊人的,正是我所需要的,谢谢你。 5 * – Onty 2012-02-25 01:29:51