Mnesia - 从另一个节点复制 ram_copy table 到 disc_only_copy table
Mnesia - Replicate ram_copy table to disc_only_copy table from another node
我想做的是:
在节点 A 中创建一个 table 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 table。
在节点 "A" 创建 table 之后的某个未指定时间(可能是 1 秒或 1 小时),在具有大量硬盘但较少硬盘的计算机上创建节点 B RAM 和 CPU 电源,用于在 "a" 节点中复制(结构和数据)RAM table 但 disc_only_copies.
想法是 运行 关键进程使用节点 A 的所有电源,运行 其他节点上的琐碎进程并保持数据同步。
这可能吗?
你好。
是的,有可能。
假设我们有两个节点; node_1
有很多 Disc 和 node_2
有很多 RAM,我们有一个 foo
table 在 node_1
中必须是 disc_only_copies
并且在 node_2
中必须是 ram_copies
。步骤如下:
节点 1:
$ 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).
节点 2:
$ erl -sname node_2
(node_2@host)1> mnesia:start().
(node_2@host)2> mnesia:change_config(extra_db_nodes, [node_1@host]).
就是这样。现在我们可以在 node_1
:
中创建 foo
table
节点 1:
(node_1@host)4> mnesia:create_table(foo, [
{disc_only_copies, [node_1@host]},
{ram_copies, [node_2@host]}]).
最后我们可以检查它是否在两个节点上创建 mnesia:info/0
:
节点 1:
running db nodes = [node_2@host,node_1@host]
stopped db nodes = []
master node tables = []
remote = []
ram_copies = []
disc_copies = [schema]
disc_only_copies = [foo]
[{node_1@host,disc_copies},{node_2@host,ram_copies}] = [schema]
[{node_1@host,disc_only_copies},{node_2@host,ram_copies}] = [foo]
节点 2:
running db nodes = [node_1@host,node_2@host]
stopped db nodes = []
master node tables = []
remote = []
ram_copies = [foo,schema]
disc_copies = []
disc_only_copies = []
[{node_1@host,disc_copies},{node_2@host,ram_copies}] = [schema]
[{node_1@host,disc_only_copies},{node_2@host,ram_copies}] = [foo]
我想做的是:
在节点 A 中创建一个 table 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 table。
在节点 "A" 创建 table 之后的某个未指定时间(可能是 1 秒或 1 小时),在具有大量硬盘但较少硬盘的计算机上创建节点 B RAM 和 CPU 电源,用于在 "a" 节点中复制(结构和数据)RAM table 但 disc_only_copies.
想法是 运行 关键进程使用节点 A 的所有电源,运行 其他节点上的琐碎进程并保持数据同步。
这可能吗?
你好。
是的,有可能。
假设我们有两个节点; node_1
有很多 Disc 和 node_2
有很多 RAM,我们有一个 foo
table 在 node_1
中必须是 disc_only_copies
并且在 node_2
中必须是 ram_copies
。步骤如下:
节点 1:
$ 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).
节点 2:
$ erl -sname node_2
(node_2@host)1> mnesia:start().
(node_2@host)2> mnesia:change_config(extra_db_nodes, [node_1@host]).
就是这样。现在我们可以在 node_1
:
foo
table
节点 1:
(node_1@host)4> mnesia:create_table(foo, [
{disc_only_copies, [node_1@host]},
{ram_copies, [node_2@host]}]).
最后我们可以检查它是否在两个节点上创建 mnesia:info/0
:
节点 1:
running db nodes = [node_2@host,node_1@host]
stopped db nodes = []
master node tables = []
remote = []
ram_copies = []
disc_copies = [schema]
disc_only_copies = [foo]
[{node_1@host,disc_copies},{node_2@host,ram_copies}] = [schema]
[{node_1@host,disc_only_copies},{node_2@host,ram_copies}] = [foo]
节点 2:
running db nodes = [node_1@host,node_2@host]
stopped db nodes = []
master node tables = []
remote = []
ram_copies = [foo,schema]
disc_copies = []
disc_only_copies = []
[{node_1@host,disc_copies},{node_2@host,ram_copies}] = [schema]
[{node_1@host,disc_only_copies},{node_2@host,ram_copies}] = [foo]