我经常在关于 NoSQL、数据网格等的不同演讲中听到最终一致性。
似乎最终一致性的定义在许多来源中有所不同(甚至可能取决于具体的数据存储)。

谁能简单解释一下最终一致性是什么,与任何具体的数据存储无关?

最佳答案

最终一致性:

  • 我看了天气预报,得知明天会下雨。
  • 我告诉你明天会下雨。
  • 你的邻居告诉他的妻子明天会是晴天。
  • 你告诉邻居明天要下雨了。

  • 最终,所有的服务器(你、我、你的邻居)都知道真相(明天会下雨),但与此同时,客户(他的妻子)离开时以为会是晴天,尽管她问在一台或多台服务器(你和我)拥有更新的值(value)之后。

    与严格一致性/ACID 合规性相反:
  • 您的银行余额为 50 美元。
  • 您存入 100 美元。
  • 从任何地方的任何 ATM 查询您的银行余额为 150 美元。
  • 您的女儿用您的 ATM 卡提取了 40 美元。
  • 从任何地方的任何 ATM 查询您的银行余额为 110 美元。

  • 您的余额在任何时候都不能反射(reflect)您账户上到那个确切时刻进行的所有交易的实际总和。

    原因 为什么这么多 NoSQL 系统具有最终一致性是因为几乎所有系统都被设计为分布式的,并且对于完全分布式系统,保持严格一致性有超线性开销(意味着您只能在事情开始之前扩展到此为止放慢速度,当他们这样做时,您需要在问题上投入更多的硬件以保持扩展)。

    关于nosql - 通俗易懂的最终一致性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10078540/

    10-13 05:32