2

我想知道,我是否可以在没有复制的情况下运行 Mnesia。假设我有节点集群,其中一个节点托管带有光盘副本的 mNesia 服务器 - 让我们将此节点称为 mNode。其余节点(服务节点)应从 mNode 加载模式,并且不应维护任何本地副本。

我查看了 mNesia 文档,但找不到这样做的方法。

4

2 回答 2

2

是的!您在所有节点上创建架构,但将表定义为仅在 m_node 上具有 ram/disc 副本。通过这种方式,它们可以从所有节点访问,但只能将数据存储在一个节点上。

于 2013-10-09T21:18:35.163 回答
2

阅读文档http://www.erlang.org/doc/apps/mnesia/Mnesia_chap5.html#id76406 Disc-less Nodes 部分讨论了如何实现这个用例。下面的步骤设置这样的环境。

 1. Start mNode
 erl -sname m_node -mnesia dir "/tmp/funky/"

 2.Start Service node
 erl -sname s1

 3. Create Cluster 
 net_adm:ping('s1@_)').

 4. On m_node run 
  mnesia:change_config(extra_db_nodes, ['s1@_']).  
  mnesia:create_table(funky, []).

 5. On s1 node 
   mnesia:start().
   mneisa:info().

  remote             = [funky]     // Points to Remote table funky on node m_node
  ram_copies         = [schema]    // Ram copy of schema is kept in each service node.
于 2013-10-10T15:19:40.340 回答