我想做的是:
在节点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的所有功能运行关键进程,并在另一个节点上运行简单的进程并保持数据同步。
这可能吗?
问候。
答案 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