1. 程式人生 > >大資料學習——NoSQL分散式資料庫綜述

大資料學習——NoSQL分散式資料庫綜述

本文學習內容來自《大資料革命——理論、模式與技術創新》 電子工業出版社

傳統的關係型資料庫資料倉庫在面對大資料的處理地顯得越來越力不從心。在這樣的背景下,NoSQL資料庫應運而生。

CAP理論

2000年美國加州大學伯克利分析的Eric Brewer教授提出了CAP理論,即一個分散式系統不可能同時滿足一致性(Consistency)、可用性(Availability)和分割槽容錯性(Partition Tolerance),最多隻能同時滿足2個。

傳統的關係型資料庫屬於CA模式,對分割槽容忍性的支援比較差。
對分散式資料庫系統而言,分割槽容錯性是基本需求,因此只有CP和AP兩種選擇。

CP模式

保證分佈在網路上不同節點資料的一致性,但對可用性支援不足
- BigTable
- HBase
- MongoDB
- Redis
- MemcacheDB
- Berkeley DB

AP模式

主要以實現最終一致性來確保可用性和分割槽容忍性,但弱化了對資料的一致要求
- Dynamo
- Cassandra
- Tokyo Cabinet
- CouchDB
- SimpleDB

ACID和BASE方法論

ACID指的是關係型資料庫為了支援事務(Transcation)的正確性和可靠性,必須滿足4項特性:
- 原子性(Atomicity):一個事務中所有操作,要麼全完成,要麼全不完成
- 一致性(Consistency):事務開始前和結束,資料庫的完整性沒有被破壞
- 隔離性(Isolation):兩個或多個事務併發訪問
- 永續性(Durability)
傳統的SQL資料庫支援的是強一致性,也就是在更新完成後,任何後續訪問都將返回更新過的值,為了實現ACID,往往需要頻繁對庫或表加鎖。

對於很多Web應用,尤其是SNS應用來說,一致性可以降低,而對可用性的要求高。為了支援高併發讀寫,有些NoSQL產品採用了Eventually Consistency(最終一致性)的原則,從而產生了基於弱一致性的BASE方法論。
BASE:Basically Availabe(基本可用)、Soft-state(軟狀態)、Eventual Consistency(最終一致性),構成了大多數NoSQL資料庫的方法論基礎。

商業資料庫的變革

很多商業資料庫更多地是結合傳統RDBMS技術和分散式及平行計算技術來處理大資料的需求。很多系統兩袖清風從硬體層面來對資料處理進行加速。

  • Greenplum
    基於開源資料庫PostgreSQL的分散式資料庫,整個叢集由很多個數據節點加上控制節點組成,其中每個資料節點上運行了很多個PostgreSQL資料庫。資料在進入資料庫時,首先要對資料分佈的工作,即把一個表的資料儘可能均勻地分佈到每個節點的庫中。這樣做的目的是充分利用每個節點的I/O能力 。 Greenplum真正發揮了並行無處不在的優勢 ,在一個主機上同時啟動多個PostgreSQl資料庫。控制節點只承擔少量的控制功能,以及和客戶端的互動,完全不承擔任何計算任務。
  • HP的Vertica
    在很多方面 Greenplum接近,都是基於MPP架構。Vertical是採用列儲存的資料庫,尤其適合基於列的查詢,如聚合操作。Vertical在查詢和插入效能上較好,但在進行update和delete以及相關的事務處理時相對開銷較大。

  • Netezza和Exadata都是採用資料倉庫一體機的方案。

NoSQL資料庫分類

這裡寫圖片描述

列式儲存

BigTable

谷歌設計的一個儲存和處理海量資料的非關係型資料庫。包括3個主要的元件:客戶端程式庫、一個Master 主伺服器和多個Table子表伺服器。
BigTable是一個稀疏的、分散式的、多維的、排序的持久化對映。

Hbase

BigTable的開源實現,建立在HDFS之上。
Hbase使用和BigTable相同的資料模型,使用者將資料按照行儲存在一個數據表中,每一個數據行都有一個任意字串的鍵值(Row key)及任意資料的列。型別相同或邏輯上關聯的列進一步組成了列族(Column Family)。
列族是許可權控制及列屬性設定的基本單位,它必須在資料儲存之前進行建立,如果要對列族進行修改,則需要在管理員許可權下先停止表才可以進行。一般情況下,一個表的列族是相對固定的並且數量較少的。與此相反,HBase可以擁有任意多個列,並且可以在執行時動態建立。由於每一列都屬於某個列族,因此列名通常可以寫作family:qualifer的形式。此外,在HBase的每一個單元格中都可以儲存多個版本的值,按時間戳遞減排列,位於最上面的是時間最晚的版本,即最新值。HBase會定期刪除過舊的版本,只保留較新的幾個版本。鍵值、列名、時間戳共同確定了HBase中的一個值 。
HBase中的每一行資料,都嚴格按鍵鍵值的字母序排列。

HBase訪問介面

  1. Native Java API,最常規和高效的訪問方式,適合Hadoop MapReduce Job並行批處理HBase表資料
  2. HBase Shell,HBase的命令列工具,最簡單的介面,適合HBase管理使用
  3. Thrift Gateway,利用Thrift序列化技術,支援C++,PHP,Python等多種語言,適合其他異構系統線上訪問HBase表資料
  4. REST Gateway,支援REST 風格的Http API訪問HBase, 解除了語言限制
  5. Pig,可以使用Pig Latin流式程式語言來操作HBase中的資料,和Hive類似,本質最終也是編譯成MapReduce Job來處理HBase表資料,適合做資料統計
  6. Hive,當前Hive的Release版本尚沒有加入對HBase的支援,但在下一個版本Hive 0.7.0中將會支援HBase,可以使用類似SQL語言來訪問HBase

Cassandra

Facebook最初開發,用於儲存收件箱等簡單格式資料。2008年開源,一種流行的分散式結構化資料儲存方案。
Cassandra是社交網路方面理想的資料庫,以亞馬遜專有的完全分散式的Dynamo為基礎,而Cassandra的系統架構與Dynamo一脈相承,是基於DHT(分散式雜湊表)的完全P2P架構,與傳統的基於資料分片的資料庫叢集相經,可以幾乎無縫地加入或刪除節點。

文件儲存

主要解決的問題不是高效能的併發讀/寫,而是保證海量資料儲存的同時,具有良好的查詢效能。目前主流的有:CouchDB和MongoDB。

key-value儲存

主流的有Redis、Memcached、Voldemort、Tokyo Cabinet和Tokyo Tyrant(主要用於日本最大的SNS網站mixi.jp上)、Megastore等。

圖資料庫

以應用圖形理論儲存實體之間的關係資訊,最常見的例子就是社會網路中人與人之間的關係。常見的有:
Neo4j、Tweitter的FlockDB和谷歌的Pregel等。