我想要一个Erlang节点的主从设置,其中读写操作仅在主节点上进行。从站节点仅保持为热备用。

据我了解,Mnesia的默认行为是在执行写入操作之前在所有节点上同步获取锁。这将导致高延迟,尤其是对于地理上分散的节点。

我的问题是:Mnesia是否支持异步事务,即仅在主节点上获取锁,然后向从属节点传播写操作?

最佳答案

我认为,如果您使用消息队列系统(也许是rabbitmq)来构建此异地复制,则自己会更高兴,该系统会自己从消息队列feed中更新复制的db。 WAN链接更可能变得拥塞或断开,消息队列协议可以解决该问题。 Erlang发行版只是放弃,您必须将更新分散到文件中,直到副本出现并可以使用它为止。

为了获得最佳对称性,将消息发布队列作为更新数据库的主要方法。因此,即使主服务器也可以通过使用消息队列进行更新。如果需要响应,当前的主服务器可以将消息发送回消息的发出者。

Mnesia确实有几种不同的mnesia transaction contexts,但没有一种完全符合您的需求。

关于erlang - Mnesia异步事务,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1896801/

10-13 02:02