2011-05-15 79 views
2

由於Hypertable的和HBase的似乎是兩個主要的開源BigTable的實現,什麼是這兩個數據庫之間的主要利弊?Hypertable的訴的HBase和BigTable的訴SQL

此外,BigTable和SQL RDBMS之間的主要優點和缺點是什麼?在編寫一個項目與Postgres和Hypertable等傳統RDBMS之間可以期待什麼樣的顯着差異?

回答

5

在擴大您的第二個問題比我更應該(我從來沒有玩過的BigTable,但我已經對MongoDB的和CouchDB的玩弄)的風險...

最重要的區別,在目前爲止正如我已經理解的那樣,RDBMS都使用基於行的存儲,而NoSQL引擎使用基於列的存儲。優點和缺點主要來源於這一點。

http://en.wikipedia.org/wiki/Column-oriented_DBMS

,我傾向於記住的主要考慮是符合ACID:一個NoSQL的引擎是最終一致,而不是總是一致。把它想象成一個存儲,就像一個網站的緩存:後者通常是有效和一致的,但偶爾也會有點過時/不一致。

這裏沒有對錯:對於一些使用情況(例如搜索引擎,博客),稍微不一致是一個非常可以接受的選項;對於其他人(例如銀行,計費系統)則不是。 (我傾向於在需要原子性的東西上工作。)

然後,有很多性能考慮因素可以分解爲實現細節。

爭取最終一致性的直接後果是完整性檢查等等通常在應用程序中完成,而不是在數據存儲中完成(即沒有觸發器或存儲過程可言)。您的數據存儲最終會減少工作量,從而帶來顯而易見的性能優勢。

基於列的存儲意味着,如果您從您的文檔更新一列,你只能作廢該列。相反,基於行的存儲會使整行無效。根據您通常更新數據的方式(即僅包含幾列),任何一種方法都可以加起來。

基於列的存儲的另一面是它使得連接更加複雜(從實現的角度來看)。用過於簡單的術語來說,將其視爲每列具有EAV表;這對幾個表格工作正常。如果您需要一份需要十幾個銷售或股票加入的大報告(這是一個好的RDBMS可以很好地處理),這是一個不同的故事。

有經驗的用戶將有望附和對NoSQL的分片和複製。在這一點上,我只覺得Postgres自9.0版以來內置了複製功能,並且非常擅長處理跨越多個分區的查詢。如果你已經知道在下一個項目中你需要立即在多個數據中心中擴展到PB級和超過請求數,那麼我認爲唯一的考慮因素是:在選擇SQL或NoSQL實現時,您應該記住是否絕對需要ACID合規性。

最後,如果你的主要興趣在於嘗試一種新玩具,考慮嘗試面向圖形的數據庫,而不是。這些可能結合了行-列式存儲的優點。

+0

有趣,謝謝!圖形數據庫聽起來像是一件很酷的事情,可以保留在我的腦海中。儘管如此,根據我的理解,我認爲雖然Dynamo/Cassandra最終是一致的,但BigTable完全一致(如果我錯了,請糾正我)。另外,我剛剛發現了一些有趣的內容(可能適用於BigTable):http://hbase.apache.org/docs/r0.89.20100726/acid-semantics.html – 2011-05-15 06:08:33

+0

Re BigTable我真的不知道這件事。但我很高興你發現答案很有趣。 :-) – 2011-05-15 06:32:19

+4

並非所有的NoSQL數據庫都是面向列的,並不是所有的RDBMS都是面向行的。 – 2011-05-15 16:44:58