erlang - Mnesia:以{local_content, true}模式读取远程节点数据

标签 erlang mnesia

有没有办法使用 mnesia 进行本地写入和全局读取(无复制)。例如:节点 A 写入其本地 DB,节点 B 从节点 A 的 DB 读取。
除了本地存储的模式信息之外,节点 B 没有自己的任何数据。

根据文档,{local_content, true}似乎是我需要使用的,但是我试图让节点 B 读取节点 A 的数据没有成功。

我的架构和表配置如下所示:

在 nodeA@ip1 上:

    net_adm:ping('nodeB@ip2').
    rd(user, {name, nick}).
    mnesia:create_schema([node()|nodes()]).
    mnesia:start().
    mnesia:create_table(user, [ {local_content, true}, 
                                {disc_copies, [node()]}, 
                                {attributes,record_info(fields, user) }]).

%% insert data and list rows on nodeA 
%% WORKS

在 nodeB@ip2 上:
    mnesia:start().
    %% code to list rows from user table on nodeA 
    %% throws an ERROR saying table does not exist.

配置错误还是可以通过任何其他方式完成?

最佳答案

我认为你不能像你说的那样做。另一种方法可能是对节点 A 进行 rpc 调用并以这种方式获取数据。使用 mnesia 从节点 B 读取数据毫无意义,因为它本质上只会执行 RPC。

所以节点B应该是:

rpc:call(nodeA@ip1, mnesia, read, ....).

希望这是你[有点]需要的。

编辑:
哦,我忘了提到您不需要两个节点上的架构才能正常工作。这是假设节点 B 并不真正关心与节点 A 共享任何其他数据,它只是读取它;换句话说,只需将所有 mnesia 内容保留在节点 A 上,然后从节点 B 执行 RPC 调用。

关于erlang - Mnesia:以{local_content, true}模式读取远程节点数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2378281/

相关文章:

erlang - 大多数 Erlang 应用程序,例如 MochiWeb、Riak、RabbitMQ、Zotonic、ejabberd 和 CouchDB 是 OTP 应用程序吗?

concurrency - 如果在发出进程 pid 之前向进程发送消息,是否保证首先收到该消息?

erlang - 是否有处理 IO 的组长协议(protocol)规范?

erlang - 从网络分区进行在线内存恢复

database - 如何在 Elixir 中创建 mnesia 表?

erlang - 使用ets函数读取mnesia表(erlang)

erlang - 在 Elixir 中比较 map 的方法

database - 分析 Mnesia 查询

erlang - 在 Elixir/Erlang 中的(本地)Mnesia 实例上实现最佳写入性能

erlang - Erlang 消息队列是否跨进程持久化?