【问题标题】:Access distributed mnesia database from different nodes从不同节点访问分布式 mnesia 数据库
【发布时间】:2012-03-14 11:52:31
【问题描述】:

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

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

我有一个名为add_record 的函数,它接受一些参数,例如nameid。我希望能够在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 表是如何管理的。浏览该域的整个教程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-10
      • 1970-01-01
      • 2011-01-28
      • 1970-01-01
      • 2023-03-20
      • 2010-10-02
      • 2011-09-04
      • 1970-01-01
      相关资源
      最近更新 更多