原文
Linearizability和Serializability是在數(shù)據(jù)庫和分布式系統(tǒng)中重要的兩個概念,而且比較容易混淆,這篇文章試著對兩個概念的不同進行簡單、簡短的解釋煞抬。
Linearizability: single-operation, single-object, real-time order
Linearizability:單操作,單對象真朗,實時順序此疹。
*Linearizability *是對單對象單操作的一種保證。它提供了對于同一個對象的一系列read/write操作都是按照實時時間(例如wall-clock))排序的遮婶。
Linearizability保證對于一個對象的寫操作蝗碎,一旦寫完成,需要立即馬上被后續(xù)的讀操作看到:即讀一定是讀到這個對象的最新的值旗扑。
Linearizability是“atomic consistency”的同義詞蹦骑,同時也是CAP種的C,“consistency”臀防。
并且Linearizability是可組合的眠菇,如果系統(tǒng)中每個對象的操作都是linearizable,則系統(tǒng)中所有操作是linearizable袱衷。
Serializability: multi-operation, multi-object, arbitrary total order
Serializability:多個操作捎废,多個對象,任意的順序
Serializability是對事務的一種保證致燥。Serializability保證了多個事務(每個都包含了一組對于不同對象的讀/寫操作)的執(zhí)行等同于一個順序執(zhí)行的效果登疗。
Serializability是ACID中的I。如果每個事務都保證了correctness(ACID中的C),則順序執(zhí)行的事務也保證了correctness辐益,因此serializability是保證事務正確的一個機制断傲。
Serializability和linearizability的不同是:Serializability沒有對事務的執(zhí)行順序強加任何real-time的約束,即不需要操作是按照真實時間嚴格排序的智政,只需要存在一個滿足條件的順序執(zhí)行順序即可认罩,不需要每個事務都是嚴格的先后時間順序。
Strict Serializability: Why don’t we have both?
嚴格的Serializability:我們?yōu)槭裁磧烧叨家?/p>
serializability + linearizability = strict serializability
我們假設開始并提交T1:寫item x续捂,然后稍后開始提交T2:讀x垦垂。數(shù)據(jù)庫如果按照strict serializability,則會將T1放到T2之前疾忍,T2會讀到x的最新值乔外,如果數(shù)據(jù)庫按照serializability床三,則可能會將T2放到T1之前一罩,
Coordination costs and real-world deployments
linearizability 或者 serializability在沒有協(xié)調的情況下都不可能達到,因此我們在異步網(wǎng)絡和可用性不能提供linearizability 或者 serializability的保證撇簿。
A note on terminology, and more reading
linearizability來源于分布式系統(tǒng)和并發(fā)編程聂渊,而serializability則來源于數(shù)據(jù)庫。如今這兩者都在分布式系統(tǒng)和數(shù)據(jù)庫中使用四瘫,也導致了術語上的沖突汉嗽。
一些參考
Introduction to Reliable and Secure Distributed Programming
CSC 2/458, 4-11 Feb. 2008