【分布式数据一致性三】MongoDB读写一致性

本系列文章结合MongoDB,探讨分布式数据库的数据一致性,这个系列文章包括:数据库

  • 数据一致性概述与CAP
  • 最终一致性(Eventually Consistency)
  • 网络分裂(Network Partition)问题
  • 多数据中心(Multi Data Center)
  • 多个写者(Multi Writer)最终一致性
  • 一致性图表(Consistency Chart)

数据一致性概述与CAP

 对于分布式数据库来讲,选择合适的数据一致性模型对于分布式数据库相当重要。合适的一致性模型是指,在知足高并发读写能力的同时可以知足某种程度的数据一致性,这种一致性的达成,须要读写数据的进程(或者更细粒度,线程)和数据库自己创建读写数据的方式和协议(contract)以期在双方的共同协做下达成一致性。 在本系列文章中,咱们将就数据一致性这个话题进行深刻的探讨,讨论对于特定的需求,什么样的模型是合适的。网络

 

CAP

在分布式环境下,有三个指标是分布式系统但愿达到的,即数据一致性(Consistency)、数据可用性(Availability)以及分区忍受性(Partition)。CAP理论指出在分布式环境这三个指标是没法同时知足,最多只能知足其中的两个。在分布式环境下,网络分裂是不可避免的,所以必须忍受网络分裂。所以CAP理论的本质是说,咱们不能同时拥有完美的数据一致性和百分之百的可用性。并发

通俗的讲,CAP理论能够归纳为,若是网络出现问题,那么数据库就不能完美的工做(Won't work), Won't work意味着或者数据不可用或者数据分布式

 

 

更确切一点,一致性的真正含义是什么呢?学术领域one copy serializability或者linearability。若是执行了一系列了的操做或者事务,高并发

 

一个不太正式的思考权衡的方式是:我能读取脏数据并对脏数据进行操做吗?我能想写就写吗?线程