博客首页 » Database 一致性与NoSQL
发布于 26 Nov 2015 08:36
标签 blog
在知乎上有一段对于一致性非常好的讨论,摘录如下
http://www.zhihu.com/question/20113030
一致性就是数据保持一致,在分布式系统中,可以理解为多个节点中数据的值是一致的。而一致性又可以分为强一致性与弱一致性。
- 强一致性可以理解为在任意时刻,所有节点中的数据是一样的。同一时间点,你在节点A中获取到key1的值与在节点B中获取到key1的值应该都是一样的。
- 弱一致性包含很多种不同的实现,目前分布式系统中广泛实现的是最终一致性。
所谓最终一致性,就是不保证在任意时刻任意节点上的同一份数据都是相同的,但是随着时间的迁移,不同节点上的同一份数据总是在向趋同的方向变化。也可以简单的理解为在一段时间后,节点间的数据会最终达到一致状态。
对于最终一致性最好的例子就是DNS系统,由于DNS多级缓存的实现,所以修改DNS记录后不会在全球所有DNS服务节点生效,需要等待DNS服务器缓存过期后向源服务器更新新的记录才能实现。
类似的,还有一些其它的弱一致性实现,下面摘自《NoSQL数据库笔谈》https://docs.google.com/View?id=dc23x53c_64db5px4f6
- Causal consistency(因果一致性)如果Process A通知Process B它已经更新了数据,那么Process B的后续读取操作则读取A写入的最新值,而与A没有因果关系的C则可以最终一致性。
- Read-your-writes consistency如果Process A写入了最新的值,那么Process A的后续操作都会读取到最新值。但是其它用户可能要过一会才可以看到。
- Session consistency此种一致性要求客户端和存储系统交互的整个会话阶段保证Read-your-writes consistency.Hibernate的session提供的一致性保证就属于此种一致性。
- Monotonic read consistency此种一致性要求如果Process A已经读取了对象的某个值,那么后续操作将不会读取到更早的值。
- Monotonic write consistency此种一致性保证系统会序列化执行一个Process中的所有写操作。
本页面的文字允许在知识共享 署名-相同方式共享 3.0协议和GNU自由文档许可证下修改和再使用,仅有一个特殊要求,请用链接方式注明文章引用出处及作者。请协助维护作者合法权益。
系列文章
文章列表
- Database 一致性与NoSQL
这篇文章对你有帮助吗,投个票吧?
留下你的评论