如果我想要一个分布式多主数据库,我还有哪些替代方案?

时间:2010-04-12 10:31:36

标签: database rdbms fault-tolerance key-value-store distributed-database

我将构建一个我想减少单点故障的系统,我需要一个数据库。是否有任何(免费)关系数据库系统可以很好地处理多主设置(即添加和删除节点很容易)或者使用NoSQL数据库更好?

正如我所理解的,键值存储将更好地处理这个问题。您建议为多主(集群)设置使用什么数据库系统?

3 个答案:

答案 0 :(得分:3)

Mysql的NDB Cluster将会这样做。但它的设置并不容易,并且有很多陷阱。

此外,它的表现通常相当糟糕,它将数据保存在内存中(是的,我知道它们听起来很矛盾)。

本质上,更新需要在整个集群中获取分布式锁(或者至少在存放这些表的存储节点组中)

管理起来并不容易,但您可以进行一定程度的热添加。

除非您需要非常快速的故障转移和一致性,否则我建议不要这样做。

我建议忽略多主机,并使用HA MySQL(例如InnoDB),它易于设置,并且在典型的30秒故障切换时间内运行良好。这是一个主从系统,奴隶甚至无法进行读取(但是如果您不需要它们完全更新,您可以添加具有复制功能的读取从属设备)

答案 1 :(得分:1)

键值存储不一定是容错的。它们主要是性能工具。只有当数据存储在多个服务器上时,才有任何形式的容错。如果它只是安全,减少单点故障,最简单的解决方案可能是建立一个镜像解决方案,在那里你有一个只跟踪主数据库的镜像。当主人失败时,你会快速切换(希望自动)。

由于在正常操作期间不需要一致性管理,因此其复杂性要低得多。镜像是只读的,只跟踪主数据库。当主设备发生故障时,镜像将切换到主设备并且链路断开。在主服务器恢复之后,它们之间的状态不一致,您必须确保从现在充当主服务器的镜像更新原始主服务器。大多数数据库系统都可以处理这种情况,如果您没有疯狂的正常运行时间要求或非常繁重的负载,那么它是最实用的解决方案。

答案 2 :(得分:0)

我认为Oracle已经确定了这个概念。但是,如果你是一个没有瑞士银行账户的凡人,那么也许你应该调查MySQL's NDB Cluster