我有一个包含不同表格的mnesia数据库。
我希望能够从不同的Linux终端访问表。
我有一个名为add_record
的函数,它有一些参数,比如name
和id
。我希望能够add_record
上的node1
和add record
上的node2
,但我希望从不同的位置更新相同的表格。
我读了几个来源,我发现的唯一一件事就是我应该使用net_adm:ping
(node2)。但不知怎的,我无法从表中访问数据。
答案 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表。浏览该域的整个教程。