看到一篇好文章,部分翻譯在此供大家參考。(PS:翻譯部分全部是意譯,挑了一些重點(diǎn)進(jìn)行解釋,詳盡介紹和未翻譯部分請參照原文。具體的一些實(shí)現(xiàn)原因,也可以參考我的上一篇文章《NoSQL理論之-內(nèi)存是新的硬盤,硬盤是新的磁帶》)

眾所周知,BigTable是NoSQL數(shù)據(jù)庫的王者,其論文更是NoSQL理論的基石,但遺憾的是BigTable不開源,于是有了開源的BigTable版本這一說法,其中的佼佼者包括今天提到的兩位:Cassandra和HBase。

本文主要對Cassandra和HBase特性和實(shí)現(xiàn)中對BigTable理論的應(yīng)用。

1.Fundamentally Distributed(分布式存儲)

項目從最初規(guī)劃上,就是為海量數(shù)據(jù)服務(wù)的,當(dāng)然分布式存儲的思想也是扎根于其血脈中。分布式系統(tǒng)主要需要考慮兩個方面:partitioning(分區(qū)存儲,也可以理解為通常說的Sharding)、replication(數(shù)據(jù)復(fù)制,主要是將數(shù)據(jù)復(fù)制成多份以提高可用性)。

2.Column Oriented(列式存儲)

和普通的RDBMS不一樣,普通的RDBMS通常是行式存儲的,一行數(shù)據(jù)是連續(xù)存在一段磁盤空間上的。而列式存儲是將各個列分別進(jìn)行連續(xù)的存儲。也正是因此,它對于處理字段中的NULL字段,能夠不占用過多的空間。同時能夠支持靈活松散的列定義。也就是我們通常所說的schema-less。

3.Sequential write(順序?qū)懘疟P)

BigTable型系統(tǒng)的一個特點(diǎn)是其對寫性能進(jìn)行的優(yōu)化。它的寫都是通過先記一條操作日志,然后直接寫在內(nèi)存中的數(shù)據(jù)集合,然后其集合按條件或定時將數(shù)據(jù)flush到磁盤。這里涉及到的記操作日志或者數(shù)據(jù)flush到磁盤都會順序的磁盤操作。故而避免了磁盤隨機(jī)操作造成的無謂的磁盤尋道時間。

4.Merged read(讀操作數(shù)據(jù)合并)

上面說到寫操作是通過定時將數(shù)據(jù)直接flush到磁盤進(jìn)行的,每次flush都會生成一個數(shù)據(jù)塊,那可能造成一個數(shù)據(jù)在多個數(shù)據(jù)塊中的情況,而在讀的時候就需要將這多個版本中的值進(jìn)行合并。其中在判斷一個數(shù)據(jù)塊是否包含指定值時使用了bloom-filter算法。

5.Periodic Data Compaction(定期數(shù)據(jù)合并)

同樣是上面說到的,一個數(shù)據(jù)可能存在于多個數(shù)據(jù)塊,如果我們不做處理,隨著時間的推移,數(shù)據(jù)塊會越來越多。所以BigTable型系統(tǒng)會進(jìn)行定時的數(shù)據(jù)合并。在上面講到的將內(nèi)存中的數(shù)據(jù)直接flush到磁盤的過程中,flush之前進(jìn)行了一次數(shù)據(jù)的排序操作,既是說存在磁盤中的塊中的數(shù)據(jù),都是順序的,那么對一堆順序的數(shù)據(jù)進(jìn)行排重合并,其實(shí)和我們熟知的多路歸并排序很相似。故而其定時數(shù)據(jù)合并的效率也是非常高的。

接下來的部分是關(guān)于標(biāo)題中的兩個產(chǎn)品Cassandra和HBase在這些理論上的具體實(shí)踐和修改。暫時就不翻譯了。有興趣的同學(xué)可以查看英文原文。

標(biāo)簽:, , , ,