http://en.wikipedia.org/wiki/CAP_theorem

http://www.cs.berkeley.edu/~啤酒/cs262b-2004/PODC-基调。pdf

我认为这不是很简单明了为什么 只有两个

  1. 一致性
  2. 分区容忍

可持对于任何给定的分布式数据库系统。这猜想是事实证明,但是有一个更简单的方式来看看为什么 大概 这可能吗?

我不是在寻找一个证明,只是一个很好的方式来理解为什么这一理论可能是有意义的。是什么理由?

有帮助吗?

解决方案

好吧,让我们来想象一下,你有一个分布式数据库。让我们说你有一个节点在俄勒冈州和一个在加利福尼亚州。帽的理论说,你会遇到问题时设立这种类型的数据库。

例如,如果查询数据从一个数据库,它需要同一数据的其他数据库。这确保了任何价值你必须在一个数据库保证是在其他(一致性 帽的理论)。这样做可以更新的数据在一个数据库和查询它从另一个,得到相同的结果。

A computer updating data in Oregon, transfers the data to California

当我们的更新的数据在俄勒冈州的节点的数据被发送至加利福尼亚州节点,以便该数据库是一致的。为了真正保持一致性,我们必须确保这两个数据库得到更新之前是允许真正的保存数据(两个阶段提交使用分布式交易)。换句话说,如果加利福尼亚州数据库不能储存数据对于某些原因(例如硬盘驱动器失效),则该数据库在俄勒冈州不会保存的数据,并将失败的交易。

该问题与分布式交易一样上来的时候,我们希望有很高的实用性。在这种情况下所述,该进程试图获得两个数据库的同步的是非常、非常缓慢的过程。(想象,我们必须把数据从俄勒冈州,加利福尼亚州,确保它得到在那里,确保这两个数据库都有锁上的数据,等等。) 这造成了重大问题时,我们希望有一个系统,快速反应甚至在高需求。(这是 帽定理。)

通常,我们做什么,以便确保高可用性,是我们使用复制而不是分布式交易。所以相反的保证,加利福尼亚州可以接受的数据,我们只是先走,并储存在俄勒冈州的节点,然后发送的数据加利福尼亚州,当我们得到它。这保证了我们可以随时存储的数据,无论是否加利福尼亚准备来储存的数据或没有。

The Oregon node updates the data while California reads the data.  Later, the data is moved to California

这种提高可用性,但是在成本的一致性。参见,如果有人有更新的数据在俄勒冈州然后有人(在同一时间)读取的数据在加利福尼亚州,他们没有得到的新的数据--该数据库不再保持一致。事实上,他们不会是一致的,直到俄勒冈州发送的数据加利福尼亚州!

所以,这就是性与一致性的贸易。

分区容忍 是第三个方面的帽的理论。分区,在这方面,该想法一个数据库(或其他分布式系统)可以断成单独的章节和仍能正常工作。

该问题就是,什么时候会发生两个数据库的正确运行,但该链接从俄勒冈州,加利福尼亚州是切断了?

Oregon is being updated while the California node is being read.  The network between the nodes is severed.

如果我们更新该数据库在俄勒冈州,我们需要得到的数据加利福尼亚州的一种或另一种方式(分布式交易或复制).然而,如果两者之间的联系被切断,然后该系统已成为分区和数据库不再联系在一起。

发生这种情况时,你的选择是要停止从而允许更新(保持一致性)的成本提供或允许更新(以维持的可用性)的成本的一致性。

正如你可以看到,分区容忍创造直接权衡之间的一致性和可用性。


显然更多,但这些都是一举两个例子上怎么这三个主要方面的分布式系统的工作并互相对抗。 朱利安*布朗的 解释的帽的理论是一个很好的地方,以了解更多信息。

许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top