Database 关于记忆分布的问题
我有两个节点运行mnesia。我在节点1上创建了模式和一些表,并在节点2上使用Database 关于记忆分布的问题,database,erlang,mnesia,Database,Erlang,Mnesia,我有两个节点运行mnesia。我在节点1上创建了模式和一些表,并在节点2上使用mnesia:add_table\u copy将表从节点1复制到节点2 在我在节点1上调用q(),然后在节点2上调用q()。我发现当我再次启动节点1时,mnesia:wait_for_tables([sometable],infinity)不会返回。它只会在我再次启动节点2时返回 有办法解决这个问题吗?这是一个问题,因为如果节点2关闭,我将无法再次启动节点1。出现与您面临的情况类似的情况 从该来源阅读: 启动时,Mne
mnesia:add_table\u copy
将表从节点1复制到节点2
在我在节点1上调用q()
,然后在节点2上调用q()。我发现当我再次启动节点1时,mnesia:wait_for_tables([sometable],infinity)
不会返回。它只会在我再次启动节点2时返回
有办法解决这个问题吗?这是一个问题,因为如果节点2关闭,我将无法再次启动节点1。出现与您面临的情况类似的情况
从该来源阅读:
启动时,Mnesia尝试连接
与其他节点一起,如果
成功地从中加载其表
他们。如果其他节点已关闭,则
在其
本地事务日志,以便
确定它是否具有一致的
是否复制其表的副本。节点
那是上个星期的事
mnesia_是从其他所有人那里来的
节点。这意味着它可以安全地运行
加载它的表。如果其他一些
首先开始的节点(如在
(案例)Mnesia将无限期等待
另一个节点按顺序连接
加载它的表
您首先要关闭节点1,这样它就不会从另一个节点关闭mnesia\u
。如果颠倒关闭顺序会发生什么
此外,还可以通过以下功能强制加载工作台:
force_load_table(Tab) -> yes | ErrorDescription
表加载的Mnesia算法
可能导致以下情况:
无法加载表。这种情况
在节点启动并运行时发生
Mnesia得出结论或怀疑
该表的另一个副本处于活动状态
此本地副本处于非活动状态后
由于系统崩溃
如果这种情况不能接受,
此功能可用于覆盖
Mnesia表加载策略
算法。这可能导致一场灾难
某些交易发生的情况
效果会随着不一致的
数据库作为结果,但对于某些
应用程序的高可用性更重要
比一致的数据更重要
谢谢,这部分解决了我的问题。但是假设我使用mnesia:force_load_table/1启动了节点1,然后我发现节点2又启动了,有没有办法合并这些更改?mnesia:set_master_节点似乎在启动期间工作,但不能用于强制从master节点“获取”。