主-主与主-从数据库体系结构?


117

我听说过两种数据库架构。

  • 大师大师

  • 主从

master-master是否更适合当今的Web,因为它就像Git,每个单元都具有全部数据集,如果一个数据集出现故障,那就没关系了。

主从使我想起了SVN(我不喜欢它),那里有一个可以处理事情的中央单元。

问题:

  1. 各自的优缺点是什么?

  2. 如果您想在iPhone之类的手机中拥有本地数据库,哪个更合适?

  3. 选择这些因素之一是否是要彻底考虑的关键因素?


1
CAP定理->一致性可用性分区容差指出您不能将所有这三个部分放在一起。根据应用程序,您可以选择其中一个。
Pritam Banerjee

Answers:


87

我们要权衡可用性,一致性和复杂性。首先要解决最后一个问题:这有关系吗?是的,非常!关于如何管理数据的选择绝对是根本,并且没有“最佳实践”规避决策。您需要了解您的特定要求。

有一个基本的紧张关系:

一个副本:一致性很容易,但是如果一致性下降,每个人都会陷入困境,而如果人们偏远,则可能要付出可怕的通信费用。将可能需要断开连接操作的便携式设备带入图片中,一本不会删减。

主从设备:一致性不是太困难,因为每个数据块都具有一个自己的主设备。但是,如果您看不到那个主人,该怎么办,需要某种推迟的工作。

Master-Master:好吧,如果您可以使它工作,那么它似乎可以提供所有功能,没有单点故障,每个人都可以一直工作。这个麻烦的是,这是非常难以保持绝对一致。有关更多信息,请参见维基百科文章

维基百科似乎对优点和缺点都有很好的总结

优点

  • 如果一个主机发生故障,其他主机将继续更新数据库。

  • 主机可以位于多个物理站点中,即分布在整个网络中。

缺点

  • 大多数多主复制系统只是松散一致的,即惰性和异步,违反了ACID属性。

  • 急切的复制系统很复杂,并且会带来一些通信延迟。

  • 随着所涉及节点数量的增加和所需等待时间的减少,诸如解决冲突之类的问题可能变得棘手。


CouchDB使用MVCC。当我再次联机时,这种处理多个母版所面临的一致性问题是否引起,版本控制系统处理一致性,并且该母版将获取正确的更新数据。
never_had_a_name 2010年

8
但是,当两个用户做矛盾的事情时,例如两个用户试图购买库存的最后一件商品,会发生什么?假设有一个场景,我们有两个主服务器,每个用户都碰到一个不同的主服务器,然后我们会遇到某种通信故障-最终会损害完整性或降低可用性-一个用户被告知“抱歉,队友,我真的不知道发生了什么,直到我和另一个主人交谈。”或者在恢复通讯时我们会遇到一个令人讨厌的冲突-这些会变得非常复杂。
djna

2
金融交易或股票市场使用什么?他们会一直遇到这个问题吗?
CMCDragonkai 2014年

3
在您需要一个单一的,更新的“真相”的地方(例如在金融系统中),您需要Master / Slave或实际上只是Master。在以后可以修补真相的地方(想想像Git这样的版本控制系统中的合并冲突),然后可以使用Master / Master。
djna 2014年

djna的观察非常明显。现在,数据库必须具有某种“平局”逻辑。最重要的是什么?最新的数据?如果您要重新写入字段,这是有道理的,但是如果您正在执行“计数器”,并且在返回结果之前需要所有进程进行递增(或递减)操作,则没有任何意义。特别是这样,您就不会出售缺货的商品。如果您有网络分区,当它重新组合在一起时会发生什么?所有这些都是CAP定理。您也可以在这里使用Paxos之类的算法来在不同机器之间达成共识。
Peter Corless,2015年

95

同时研究各种数据库体系结构。我收集了很多可能与将来其他人研究相关的信息。我碰到

  1. 主从复制
  2. 主-主复制
  3. MySQL集群

我已经决定为自己的用例使用MySQL Cluster。但是,请参阅以下有关我编写的各种利弊的信息

1.主从复制

优点

  • 分析应用程序可以从从站读取,而不会影响主站
  • 整个数据库的备份对主数据库的影响相对较小
  • 从站可以脱机并同步回主站,而无需停机

缺点

  • 在发生故障的情况下,必须提升从属以取代其从属。没有自动故障转移
  • 当主服务器发生故障时,停机并可能丢失数据
  • 所有写入也必须以主从设计进行。
  • 每个额外的从站都会给主站增加一些负担,因为必须读取二进制日志并将数据复制到每个从站
  • 应用程序可能必须重新启动

2.主-主复制

优点

  • 应用程序可以从两个主站读取
  • 在两个主节点上分配写负载
  • 简单,自动和快速的故障转移

缺点

  • 松散一致
  • 不像主从配置和配置那样简单

3. MySQL集群

基于MySQL集群设计的小镇新手。MySQL群集在开发时就考虑到了高可用性和可伸缩性,并且是适用于不需要停机,高可用性和水平可伸缩性的环境的理想解决方案。

有关更多信息,请参见MySQL Cluster 101

优点

  • (高可用性)没有单点故障
  • 吞吐量极高
  • 正常运行时间99.99%
  • 自动分享
  • 实时响应
  • 在线操作(架构更改等)
  • 分布式写入

缺点

您可以访问我的Blog的完整详细信息,包括体系结构图,其中包含有关上述3种体系结构的更多详细信息。


2
您还能写一些关于Galera的东西吗?Percona XtraDB群集?
伊万诺夫

作为缺点的一部分,“可能必须重新启动应用程序”。这是什么意思?
莉莉

1
如果必须更改数据库服务器的IP,则还需要在应用程序中对其进行配置,以从新的当选主服务器读取数据。因此,您可能需要重新启动应用程序以获取新的配置设置。这完全取决于您当前的设置。您也可以使用浮动IP来绕过此操作。只是为了给您一个一般的想法
Skillachie
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.