Mnesia - 将ram_copy表从另一个节点复制到disc_only_copy表

时间:2015-06-17 18:29:29

标签: erlang mnesia distributed-system

我想做的是:

在节点A中创建一个表ram_copies,它位于具有大量Ram​​和CPU功率的计算机中

mnesia:create_table(person, [{ram_copies, [node()]},
                        {frag_properties, [{node_pool, [node()]}, {n_fragments, 10}, {n_ram_copies, 1}]},
                        {attributes, record_info(fields, person)},
                        {storage_properties, [{ets, [compressed, {write_concurrency,true}, {read_concurrency,true}]}]}])

节点A开始处理这个ram_copy表。

在节点“A”创建表之后的某个未指定的时间(可能是1秒或1小时),在具有大量硬盘驱动器但具有较少RAM和CPU功率的计算机上创建节点B进行复制(结构和数据)“a”节点中的RAM表,但是disc_only_copies。

我们的想法是使用节点A的所有功能运行关键进程,并在另一个节点上运行简单的进程并保持数据同步。

这可能吗?

问候。

1 个答案:

答案 0 :(得分:2)

是的,这是可能的。

假设我们有两个节点; node_1有很多 Disc node_2,其中有很多 RAM ,我们有一个foo表,必须是{ {1}}中的{1}}和disc_only_copies中的node_1 {1}}。步骤如下:

节点1:

ram_copies

节点2:

node_2

就是这样。现在我们可以在$ erl -sname node_1 (node_1@host)1> mnesia:create_schema([node()]). (node_1@host)2> mnesia:start(). (node_1@host)3> mnesia:add_table_copy(schema, node_2@host, ram_copies). 中创建$ erl -sname node_2 (node_2@host)1> mnesia:start(). (node_2@host)2> mnesia:change_config(extra_db_nodes, [node_1@host]). 表:

节点1:

foo

最后,我们可以检查它是否在node_1的两个节点上创建:

节点1:

(node_1@host)4> mnesia:create_table(foo, [
                    {disc_only_copies, [node_1@host]}, 
                    {ram_copies, [node_2@host]}]).

节点2:

mnesia:info/0