2013年6月5日 星期三

一致性選擇

基本的一致性分類好像是「強一致性」和「弱一致性」,其中在 NoSQL 蠻常看到的「最終一致性」是弱一致性的其中一種
強一致性就是一般的關聯式資料庫保障的特性,即資料修改後,所有人馬上都會看到最新的資料;
弱一致性大致上就是資料更新後,有些人仍然會看到舊的資料。必須經過某段時間之後,慢慢才會讓所有人都獲得最新的資料。

實務上,雖然可以做強一致性時,基本上都會想要做強一致性
但在分散式系統的環境下,多數狀況是無法在確保強一致性的前提之下,保障系統的 throughput
因此才會在妥協效率的狀況下使用弱一致性。

依據 [2] 引述「NoSQL数据库笔谈」的內容,有關目前弱一致性的實作有以下幾種方法:
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中的所有写操作。

參考資料:
1、淘宝海量数据库之二:一致性选择
2、什么是数据库的一致性?一致性弱意味着什么?NoSQL 的弱一致性又为什么是可以被接受的?

沒有留言: