代码之家  ›  专栏  ›  技术社区  ›  Jonas

如果我想要一个分布式多主数据库,我还有什么选择呢?

  •  1
  • Jonas  · 技术社区  · 15 年前

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

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

    3 回复  |  直到 15 年前
        1
  •  3
  •   MarkR    15 年前

    MySQL的NDB集群将做到这一点。但这远不容易建立和有很多gotchas。

    而且,它的性能通常相当糟糕,它将数据保存在内存中(是的,我知道它们听起来很矛盾)。

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

    这不容易管理,但您可以做一些级别的热添加。

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

    我建议忽略multi-master,改用ha-mysql(例如innodb),这很容易设置,并且在典型的30秒以下的故障转移时间下工作得很好。这是一个主从系统,从系统甚至不能进行读取(但如果不需要它们完全更新,您可以通过复制添加读取从系统)

        2
  •  1
  •   Paul de Vrieze    15 年前

    关键值存储不一定是容错的。它们主要是性能工具。只有当数据存储在多个服务器上时,才存在任何形式的容错。如果只是为了安全,减少单点故障,最简单的解决方案可能是设置镜像解决方案,在该解决方案中,您有一个只跟踪主数据库的镜像。当主控系统以某种方式出现故障时,您可以快速切换(希望是自动切换)。

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

        3
  •  0
  •   Tor Valamo    15 年前

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