- 云計算概論:基礎(chǔ)、技術(shù)、商務(wù)、應(yīng)用(第二版)
- 湯兵勇
- 6311字
- 2020-02-26 13:38:25
3.2 數(shù)據(jù)存儲技術(shù)
為保證高可用、高可靠和經(jīng)濟性,云計算采用分布式存儲的方式來存儲數(shù)據(jù),采用冗余存儲的方式來保證存儲數(shù)據(jù)的可靠性,即為同一份數(shù)據(jù)存儲多個副本。
云計算的數(shù)據(jù)存儲技術(shù)主要有谷歌的非開源的GFS(Google File System)和Hadoop開發(fā)團隊開發(fā)的GFS的開源實現(xiàn)HDFS(Hadoop Distributed File System)。大部分IT廠商,包括雅虎、英特爾的“云”計劃采用的都是HDFS的數(shù)據(jù)存儲技術(shù)。
云計算的數(shù)據(jù)存儲技術(shù)未來的發(fā)展將集中在超大規(guī)模的數(shù)據(jù)存儲、數(shù)據(jù)加密和安全性保證以及繼續(xù)提高I/O速率等方面。
下面以Google文件系統(tǒng)GFS和Hadoop分布式文件系統(tǒng)(HDFS)為例進行具體闡述。
3.2.1 Google文件系統(tǒng)
3.2.1.1 GFS的定義和內(nèi)涵
GFS是一個管理大型分布式數(shù)據(jù)密集型計算的可擴展的分布式文件系統(tǒng)。它使用廉價的商用硬件搭建系統(tǒng)并向大量用戶提供容錯的高性能的服務(wù)。云計算的數(shù)據(jù)存儲技術(shù)未來的發(fā)展將集中在超大規(guī)模的數(shù)據(jù)存儲、數(shù)據(jù)加密和安全性保,證以及繼續(xù)提高I/O速率等方面。
GFS與傳統(tǒng)分布式文件系統(tǒng)的區(qū)別如表3-1所示。
表3-1 GFS與傳統(tǒng)分布式文件系統(tǒng)的區(qū)別

3.2.1.2 GFS的構(gòu)成
GFS系統(tǒng)由一個Master和大量塊服務(wù)器構(gòu)成。Master存放文件系統(tǒng)的所有元數(shù)據(jù),包括名字空間、存取控制、文件分塊信息、文件塊的位置信息等。GFS中的文件切分為64MB的塊進行存儲。
在GFS文件系統(tǒng)中,采用冗余存儲的方式來保證數(shù)據(jù)的可靠性。每份數(shù)據(jù)在系統(tǒng)中保存3個以上的備份。為了保證數(shù)據(jù)的一致性,對于數(shù)據(jù)的所有修改需要在所有的備份上進行,并用版本號的方式來確保所有備份處于一致的狀態(tài)。
客戶端不通過Master讀取數(shù)據(jù),可避免大量讀操作使Master成為系統(tǒng)瓶頸。客戶端從Master獲取目標(biāo)數(shù)據(jù)塊的位置信息后,直接和塊服務(wù)器交互進行讀操作。
GFS將寫操作控制信號和數(shù)據(jù)流分開,如圖3-2所示

圖3-2 寫操作控制信號和數(shù)據(jù)流
即客戶端在獲取Master的寫授權(quán)后,將數(shù)據(jù)傳輸給所有的數(shù)據(jù)副本,在所有的數(shù)據(jù)副本都收到修改的數(shù)據(jù)后,客戶端才發(fā)出寫請求控制信號。在所有的數(shù)據(jù)副本更新完數(shù)據(jù)后,由主副本向客戶端發(fā)出寫操作完成控制信號。當(dāng)然,云計算的數(shù)據(jù)存儲技術(shù)并不僅僅只是GFS,其他IT廠商,包括微軟、Hadoop開發(fā)團隊也在開發(fā)相應(yīng)的數(shù)據(jù)管理工具。本質(zhì)上是一種分布式的數(shù)據(jù)存儲技術(shù),以及與之相關(guān)的虛擬化技術(shù),對上層屏蔽具體的物理存儲器的位置、信息等。快速的數(shù)據(jù)定位、數(shù)據(jù)安全性、數(shù)據(jù)可靠性以及底層設(shè)備內(nèi)存儲數(shù)據(jù)量的均衡等方面都需要繼續(xù)研究完善。
由于搜索引擎需要處理海量的數(shù)據(jù),所以Google的兩位創(chuàng)始人Larry Page和Sergey Brin在創(chuàng)業(yè)初期設(shè)計一套名為“BigFiles”的文件系統(tǒng),而GFS(全稱為“Google File System”)這套分布式文件系統(tǒng)則是“BigFiles”的延續(xù)。
GFS主要分為兩類節(jié)點。
(1)Master節(jié)點 主要存儲與數(shù)據(jù)文件相關(guān)的元數(shù)據(jù),而不是Chunk(數(shù)據(jù)塊)。元數(shù)據(jù)包括一個能將64位標(biāo)簽映射到數(shù)據(jù)塊的位置及其組成文件的表格,數(shù)據(jù)塊副本位置和哪個進程正在讀寫特定的數(shù)據(jù)塊等。還有Master節(jié)點會周期性地接收從每個Chunk節(jié)點來的更新(“Heart-beat”)以讓元數(shù)據(jù)保持最新狀態(tài)。
(2)Chunk節(jié)點 顧名思義,肯定用來存儲Chunk,數(shù)據(jù)文件通過被分割為每個默認(rèn)大小為64MB的Chunk的方式存儲,而且每個Chunk有唯一一個64位標(biāo)簽,并且每個Chunk都會在整個分布式系統(tǒng)被復(fù)制多次,默認(rèn)為3次。
圖3-3就是GFS的架構(gòu)圖。

圖3-3 GFS的架構(gòu)圖
3.2.1.3 GFS的特點
在設(shè)計上,GFS主要有8個特點。
(1)大文件和大數(shù)據(jù)塊 數(shù)據(jù)文件的大小普遍在GB級別,而且其每個數(shù)據(jù)塊默認(rèn)大小為64MB,這樣做的好處是減少了元數(shù)據(jù)的大小,能使Master節(jié)點非常方便地將元數(shù)據(jù)放置在內(nèi)存中以提升訪問效率。
(2)操作以添加為主 因為文件很少被刪減或者覆蓋,通常只是進行添加或者讀取操作,這樣能充分考慮到硬盤現(xiàn)行吞吐量大和隨機讀寫慢的特點。
(3)支持容錯 首先,雖然當(dāng)時為了設(shè)計方便,采用了單Master的方案,但是整個系統(tǒng)會保證每個Master都有其相對應(yīng)的復(fù)制品,以便于在Master節(jié)點出現(xiàn)問題時進行切換。其次,在Chunk層,GFS已經(jīng)在設(shè)計上將節(jié)點失敗視為常態(tài),所以能非常好地處理Chunk節(jié)點失效的問題。
(4)高吞吐量 雖然其單個節(jié)點的性能無論是從吞吐量還是延遲都很普通,但因為其支持上千個節(jié)點,所以總的數(shù)據(jù)吞吐量是非常驚人的。
(5)保護數(shù)據(jù) 文件被分割成固定尺寸的數(shù)據(jù)塊以便于保存,而且每個數(shù)據(jù)塊都會被系統(tǒng)復(fù)制3份。
(6)擴展能力強 因為元數(shù)據(jù)偏小,使得一個Master節(jié)點能控制上千個存儲數(shù)據(jù)的Chunk節(jié)點。
(7)支持壓縮 對于那些稍舊的文件,可以通過對它進行壓縮,來節(jié)省硬盤空間,并且壓縮率非常驚人,有時甚至接近90%。
(8)用戶空間 雖然在用戶空間運行在運行效率方面稍差,但是更便于開發(fā)和測試,還能更好地利用Linux自帶的一些POSIC API。
3.2.2 Hadoop分布式文件系統(tǒng)(HDFS)
3.2.2.1 HDFS功能
HDFS(Hadoop Distributed File System)是一個為普通硬件設(shè)計的分布式文件系統(tǒng),是Hadoop分布式軟件架構(gòu)的基礎(chǔ)部件。
HDFS在設(shè)計之初就做了如下假設(shè)。
①硬件錯誤是常態(tài)。
②流式數(shù)據(jù)訪問為主,要求具備高吞吐量。
③存儲的文件以大數(shù)據(jù)集為主。
④文件修改以尾部追加為主,一次寫入多次讀取。
基于以上幾點,HDFS被設(shè)計為部署在大量廉價硬件上的,適用于大數(shù)據(jù)集應(yīng)用程序的分布式文件系統(tǒng),具有高容錯、高吞吐率等優(yōu)點。HDFS使用文件和目錄的形式組織用戶數(shù)據(jù),支持文件系統(tǒng)的大多數(shù)操作,包括創(chuàng)建、刪除、修改、復(fù)制目錄和文件等。HDFS提供了一組Java API供程序使用,并支持對這組API的C語言封裝。用戶可通過命令接口DFSShell與數(shù)據(jù)進行交互,以容許流式訪問文件系統(tǒng)的數(shù)據(jù)。HDFS還提供了一組管理命令,用于對HDFS集群進行管理,這些命令包括設(shè)置NameNode,添加、刪除DataNode,監(jiān)控文件系統(tǒng)使用情況等。
3.2.2.2 HDFS的基本概念
(1)數(shù)據(jù)塊(block)
①HDFS(Hadoop Distributed File System)默認(rèn)的最基本的存儲單位是64MB的數(shù)據(jù)塊。
②和普通文件系統(tǒng)相同的是,HDFS中的文件是被分成64MB一塊的數(shù)據(jù)塊存儲的。
③不同于普通文件系統(tǒng)的是,HDFS中,如果一個文件小于一個數(shù)據(jù)塊的大小,并不占用整個數(shù)據(jù)塊存儲空間。
(2)元數(shù)據(jù)節(jié)點(NameNode)和數(shù)據(jù)節(jié)點(DataNode)
①元數(shù)據(jù)節(jié)點用來管理文件系統(tǒng)的命名空間。其將所有的文件和文件夾的元數(shù)據(jù)保存在一個文件系統(tǒng)樹中。這些信息也會在硬盤上保存成以下文件:命名空間鏡像及修改日志,其還保存了一個文件包括哪些數(shù)據(jù)塊、分布在哪些數(shù)據(jù)節(jié)點上。然而這些信息并不存儲在硬盤上,而是在系統(tǒng)啟動的時候從數(shù)據(jù)節(jié)點收集而成的。
②數(shù)據(jù)節(jié)點是文件系統(tǒng)中真正存儲數(shù)據(jù)的地方。客戶端或者元數(shù)據(jù)信息可以向數(shù)據(jù)節(jié)點請求寫入或者讀出數(shù)據(jù)塊。其周期性地向元數(shù)據(jù)節(jié)點回報其存儲的數(shù)據(jù)塊信息。
③從元數(shù)據(jù)節(jié)點。從元數(shù)據(jù)節(jié)點并不是元數(shù)據(jù)節(jié)點出現(xiàn)問題時候的備用節(jié)點,它和元數(shù)據(jù)節(jié)點負(fù)責(zé)不同的事情。其主要功能就是周期性地將元數(shù)據(jù)節(jié)點的命名空間鏡像文件和修改日志合并,以防日志文件過大。這點在下面會詳細(xì)敘述。合并過后的命名空間鏡像文件也在從元數(shù)據(jù)節(jié)點保存了一份,以防元數(shù)據(jù)節(jié)點失敗的時候,可以恢復(fù)。
3.2.2.3 HDFS文件讀操作流程
客戶端(Client)用File System的open()函數(shù)打開文件Distributed FileSystem用RPC調(diào)用元數(shù)據(jù)節(jié)點,得到文件的數(shù)據(jù)塊信息。對于每一個數(shù)據(jù)塊,元數(shù)據(jù)節(jié)點返回保存數(shù)據(jù)塊的數(shù)據(jù)節(jié)點的地址。Distributed FileSystem返回FSData InputStream給客戶端,用來讀取數(shù)據(jù)。客戶端調(diào)用stream的read()函數(shù)開始讀取數(shù)據(jù)。DFS InputStream連接保存此文件第一個數(shù)據(jù)塊的最近的數(shù)據(jù)節(jié)點。Data從數(shù)據(jù)節(jié)點讀到客戶端(Client),當(dāng)此數(shù)據(jù)塊讀取完畢時,DFS InputStream關(guān)閉和此數(shù)據(jù)節(jié)點的連接,然后連接此文件下一個數(shù)據(jù)塊的最近的數(shù)據(jù)節(jié)點。當(dāng)客戶端讀取完畢數(shù)據(jù)的時候,調(diào)用FSDataInputStream的close函數(shù)。在讀取數(shù)據(jù)的過程中,如果客戶端在與數(shù)據(jù)節(jié)點通信出現(xiàn)錯誤,則嘗試連接包含此數(shù)據(jù)塊的下一個數(shù)據(jù)節(jié)點。失敗的數(shù)據(jù)節(jié)點將被記錄,以后不再連接。HDFS文件讀操作流程如圖3-4所示。

圖3-4 HDFS文件讀操作流程
3.2.2.4 HDFS文件寫操作流程
客戶端調(diào)用create()來創(chuàng)建文件,Distributed FileSystem用RPC調(diào)用元數(shù)據(jù)節(jié)點,在文件系統(tǒng)的命名空間中創(chuàng)建一個新的文件。元數(shù)據(jù)節(jié)點首先確定文件原來不存在,并且客戶端有創(chuàng)建文件的權(quán)限,然后創(chuàng)建新文件。Distributed FileSystem返回DFS OutputStream,客戶端用于寫數(shù)據(jù)。客戶端開始寫入數(shù)據(jù),DFS OutputStream將數(shù)據(jù)分成塊,寫入Data queue。Data queue由Data Streamer讀取,并通知元數(shù)據(jù)節(jié)點分配數(shù)據(jù)節(jié)點,用來存儲數(shù)據(jù)塊(每塊默認(rèn)復(fù)制3塊)。分配的數(shù)據(jù)節(jié)點放在一個pipeline里。Data Streamer將數(shù)據(jù)塊寫入pipeline中的第一個數(shù)據(jù)節(jié)點。第一個數(shù)據(jù)節(jié)點將數(shù)據(jù)塊發(fā)送給第二個數(shù)據(jù)節(jié)點,第二個數(shù)據(jù)節(jié)點將數(shù)據(jù)發(fā)送給第三個數(shù)據(jù)節(jié)點。DFS OutputStream為發(fā)出去的數(shù)據(jù)塊保存了ack queue,等待pipeline中的數(shù)據(jù)節(jié)點告知數(shù)據(jù)已經(jīng)寫入成功。如果數(shù)據(jù)節(jié)點在寫入的過程中失敗,關(guān)閉pipeline,將ack queue中的數(shù)據(jù)塊放入data queue的開始。當(dāng)前的數(shù)據(jù)塊在已經(jīng)寫入的數(shù)據(jù)節(jié)點中被元數(shù)據(jù)節(jié)點賦予新的標(biāo)示,則錯誤節(jié)點重啟后能夠察覺其數(shù)據(jù)塊是過時的,會被刪除。失敗的數(shù)據(jù)節(jié)點從pipeline中移除,另外的數(shù)據(jù)塊則寫入pipeline中的另外兩個數(shù)據(jù)節(jié)點。元數(shù)據(jù)節(jié)點則被通知此數(shù)據(jù)塊是復(fù)制塊數(shù)不足,將來會再創(chuàng)建第三份備份。當(dāng)客戶端結(jié)束寫入數(shù)據(jù),則調(diào)用stream的close函數(shù)。此操作將所有的數(shù)據(jù)塊寫入pipeline中的數(shù)據(jù)節(jié)點,并等待ack queue返回成功。最后通知元數(shù)據(jù)節(jié)點寫入完畢。HDFS文件寫操作流程如圖3-5所示。

圖3-5 HDFS文件寫操作流程
3.2.2.5 HDFS存儲分析
為了實現(xiàn)文件的可靠存儲,HDFS做出了如下設(shè)計。
(1)冗余存儲 在HDFS中大文件被存儲為一系列的數(shù)據(jù)塊,每個數(shù)據(jù)塊被復(fù)制成若干個副本,存儲在不同的數(shù)據(jù)節(jié)點上以保證系統(tǒng)的容錯性。
(2)錯誤恢復(fù) 每個數(shù)據(jù)節(jié)點都周期性地向名字節(jié)點發(fā)送心跳數(shù)據(jù)包,當(dāng)網(wǎng)絡(luò)出現(xiàn)故障或者數(shù)據(jù)節(jié)點出現(xiàn)故障時,心跳信息無法發(fā)出,名字節(jié)點由此判斷故障出現(xiàn),此時名字節(jié)點會標(biāo)記最近沒有心跳的數(shù)據(jù)節(jié)點宕機,并不再向它們轉(zhuǎn)發(fā)任何新的I/O請求,當(dāng)數(shù)據(jù)節(jié)點宕機導(dǎo)致數(shù)據(jù)塊復(fù)制因子低于指定位時,名字節(jié)點會復(fù)制這些數(shù)據(jù)塊。
(3)集群重配平 當(dāng)某個數(shù)據(jù)節(jié)點的剩余磁盤空間小于極限值時,HDFS自動將一部分?jǐn)?shù)據(jù)從此數(shù)據(jù)節(jié)點移動到另一個節(jié)點,同樣,當(dāng)系統(tǒng)對某個文件的訪問很大時,HDFS會動態(tài)增加該文件的復(fù)制數(shù),以平衡集群的訪問。
(4)數(shù)據(jù)完整性檢查 HDFS客戶端從數(shù)據(jù)節(jié)點讀取數(shù)據(jù)后,將對數(shù)據(jù)進行校驗和檢查。
(5)元數(shù)據(jù)磁盤失效 為應(yīng)對名字節(jié)點失效導(dǎo)致的系統(tǒng)故障,HDFS對名字節(jié)點的關(guān)鍵數(shù)據(jù),如文件系統(tǒng)鏡像和編輯日志進行了多份備份,以便在名字節(jié)點宕機時快速恢復(fù)到其他機器。
可見,HDFS采用了多項技術(shù)支持文件的可靠存儲,這些技術(shù)在一定程度上犧牲了磁盤空間和訪問效率,但對于保證系統(tǒng)的可靠性而言,這種犧牲是值得的。
3.2.3 鍵值存儲系統(tǒng)技術(shù)
鍵值存儲系統(tǒng)的目的就是存儲海量半結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù),應(yīng)對數(shù)據(jù)量和用戶規(guī)模的不斷擴展。對于傳統(tǒng)的關(guān)系數(shù)據(jù)庫存儲系統(tǒng)來說,這種目標(biāo)是可望而不可即的。鍵值存儲系統(tǒng)的目標(biāo)并不是最終取代關(guān)系數(shù)據(jù)庫系統(tǒng),而是彌補關(guān)系數(shù)據(jù)庫系統(tǒng)的不足。
3.2.3.1 鍵值存儲系統(tǒng)的特點
在互聯(lián)網(wǎng)飛速發(fā)展的今天,鍵值存儲系統(tǒng)和關(guān)系數(shù)據(jù)庫系統(tǒng)將共存。雖然都是管理數(shù)據(jù),但鍵值存儲系統(tǒng)和關(guān)系數(shù)據(jù)庫系統(tǒng)是完全不同的。
①關(guān)系數(shù)據(jù)庫系統(tǒng)中,數(shù)據(jù)庫包含表,表包含行和列,行由各個列的數(shù)據(jù)值組成,在一個表中的行都擁有相同的策略。而在鍵值存儲系統(tǒng)中,并不包含策略和關(guān)系數(shù)據(jù)庫那樣的表。鍵值存儲系統(tǒng)一般包含域或桶,各個域或桶中包含若干條數(shù)據(jù)記錄。
②關(guān)系數(shù)據(jù)庫擁有良好的數(shù)據(jù)模型定義,包含策略、表的關(guān)系、事物等機制。數(shù)據(jù)之間的關(guān)系式建立在數(shù)據(jù)本身基礎(chǔ)上的,而不是上層應(yīng)用的功能和需要。鍵值存儲系統(tǒng)中,數(shù)據(jù)記錄只是簡單地通過一個標(biāo)識來識別和獲取,數(shù)據(jù)之間沒有關(guān)系的概念。
③關(guān)系數(shù)據(jù)庫的目的是提高數(shù)據(jù)共享能力和減少數(shù)據(jù)冗余,鍵值存儲系統(tǒng)一般需要進行數(shù)據(jù)冗余保證可靠性。
④關(guān)系數(shù)據(jù)庫適合于存儲傳統(tǒng)數(shù)據(jù),如字符、數(shù)字的存儲和查詢。鍵值存儲系統(tǒng)適合于海量的非關(guān)系型數(shù)據(jù)的存儲和查詢。
總而言之,鍵值存儲系統(tǒng)和關(guān)系數(shù)據(jù)庫系統(tǒng)從根本上是不同的,鍵值存儲系統(tǒng)在需要可擴展性的系統(tǒng)中和需要進行海量非關(guān)系數(shù)據(jù)查詢和處理的環(huán)境中擁有明顯優(yōu)勢。當(dāng)前,鍵值存儲系統(tǒng)在以下幾方面的效果優(yōu)于關(guān)系數(shù)據(jù)庫系統(tǒng)。
(1)鍵值存儲系統(tǒng)是云計算模式的最佳搭檔 云計算模式就是需要靈活地應(yīng)對用戶對可伸縮性的需求。鍵值存儲系統(tǒng)的可伸縮性的特點正好滿足了用戶的需求。如果試圖把規(guī)模龐大的系統(tǒng)伸縮需求交給數(shù)十個甚至上百臺服務(wù)器去處理,那么鍵值存儲系統(tǒng)應(yīng)該是一個比較好的解決方案。
(2)鍵值存儲系統(tǒng)提供了相對廉價的存儲平臺,并擁有巨大的擴充潛力 用戶通常只需根據(jù)自己的規(guī)模進行相應(yīng)的配置即可,當(dāng)需求增長時配額也能隨之增加。同時,鍵值存儲系統(tǒng)一般運行在便宜的PC服務(wù)器集群上,避免了購買高性能服務(wù)器的昂貴開銷。
與關(guān)系數(shù)據(jù)庫相比,鍵值存儲系統(tǒng)也在一些傳統(tǒng)的數(shù)據(jù)處理上存在明顯的不足。例如,關(guān)系數(shù)據(jù)庫的約束性保證數(shù)據(jù)在最低層次擁有完整性,違反完整性約束的數(shù)據(jù)是不可能存在于關(guān)系數(shù)據(jù)庫系統(tǒng)中的,而鍵值存儲系統(tǒng)一般都不同程度地放寬了對一致性和完整性約束的要求。鍵值存儲系統(tǒng)不存在這些約束,使得程序員不得不承擔(dān)起確保數(shù)據(jù)完整性的重要責(zé)任。然而在實際過程中,程序員經(jīng)常會犯錯誤,使得系統(tǒng)出現(xiàn)一些Bug,這很可能引起數(shù)據(jù)完整性問題。其次,各種鍵值存儲系統(tǒng)之間并沒有像關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)查詢語言一樣的標(biāo)準(zhǔn)接口,所以兼容性問題也是鍵值存儲系統(tǒng)需要面臨的一個重要挑戰(zhàn)。
3.2.3.2 鍵值存儲系統(tǒng)的分類
由于互聯(lián)網(wǎng)快速發(fā)展對非關(guān)系型數(shù)據(jù)處理的需要越來越強烈,業(yè)界和學(xué)術(shù)界對鍵值存儲系統(tǒng)的研究投入很大,現(xiàn)在已經(jīng)出現(xiàn)了多種開源系統(tǒng)和商業(yè)產(chǎn)品,表3-2列出了這些典型系統(tǒng)。這些系統(tǒng)的設(shè)計思路主要是滿足自身應(yīng)用所需要的功能和要求或者是模仿現(xiàn)有的一些系統(tǒng)進行開源實現(xiàn)。
表3-2 當(dāng)前主要鍵值存儲系統(tǒng)及其特點

最典型的系統(tǒng)是谷歌公司開發(fā)和實現(xiàn)的Bigtable系統(tǒng)和亞馬遜公司開發(fā)和實現(xiàn)的Dynamo系統(tǒng)。其他的許多系統(tǒng)都以這兩個系統(tǒng)作為藍本進行研究和設(shè)計,并設(shè)計出了適合其自身需要的系統(tǒng)。表3-2中的這些鍵值存儲系統(tǒng)從系統(tǒng)架構(gòu)和數(shù)據(jù)模型上可以分為以下三種。
(1)類Bigtable系統(tǒng) 如Hypertable、Hbase等都是Bigtable的開源實現(xiàn)。這類系統(tǒng)在架構(gòu)上都實現(xiàn)了文件存儲和數(shù)據(jù)管理的分層模型。Bigtable包含一個文件存儲系統(tǒng)GFS,并在GFS的基礎(chǔ)上構(gòu)建了Bigtable系統(tǒng),Bigtable系統(tǒng)只是管理數(shù)據(jù)邏輯并不關(guān)心數(shù)據(jù)的具體存儲。這類系統(tǒng)將數(shù)據(jù)存儲和數(shù)據(jù)的描述、處理分在了兩個邏輯層次,并且具有較為完備的數(shù)據(jù)模型,也是和傳統(tǒng)關(guān)系數(shù)據(jù)庫最接近的系統(tǒng)。同時,由于這類系統(tǒng)將文件的存儲和數(shù)據(jù)的管理分層,這使得系統(tǒng)的容量具有較好的可擴展性。上層的數(shù)據(jù)管理系統(tǒng)實現(xiàn)較簡單。
(2)類Dynamo系統(tǒng) Dynomite、Project Voldemort等都采用了和Dynamo差不多的環(huán)架構(gòu),這種環(huán)架構(gòu)與Chord等這些DHT的環(huán)有所不同,在這些系統(tǒng)中,各個節(jié)點之間基本上都是全相關(guān)的,所以不存在漫長的路由過程。此外,這類鍵值存儲系統(tǒng)的數(shù)據(jù)模型比較簡單,與類Bigtable系統(tǒng)相比,這類系統(tǒng)只是提供了最基本的數(shù)據(jù)訪問方式。
(3)內(nèi)存數(shù)據(jù)庫系統(tǒng) 嚴(yán)格上講,這類系統(tǒng)應(yīng)該看成是緩存系統(tǒng),主要提供了快速的查詢響應(yīng),如Memcache DB。這類系統(tǒng)不能提供數(shù)據(jù)的持久存儲功能。
從鍵值存儲系統(tǒng)設(shè)計目標(biāo)來看,又可以把這些系統(tǒng)分為三類。
(1)強調(diào)讀寫性能的鍵值存儲 典型代表是Redis、Tokyo Cabinet等。這類系統(tǒng)的設(shè)計是以速度或快速響應(yīng)時間為目標(biāo)的。一般來講,這類系統(tǒng)都有較高的系統(tǒng)吞吐率。但是這類系統(tǒng)的可擴展性、存儲容量等存在一些限制,比較適合做緩存系統(tǒng),其應(yīng)用范圍一般比較狹小。
(2)強調(diào)對海量非關(guān)系數(shù)據(jù)的存儲能力的鍵值存儲 Mongo DB、Couch DB是這種類型的典型代表。這類鍵值存儲系統(tǒng)解決的是非關(guān)系海量數(shù)據(jù)的存儲和比較良好的查詢性能,目的并不是強調(diào)快速的讀寫性能。這類系統(tǒng)的讀寫性能不高,但是系統(tǒng)的存儲容量的擴展性很好。
(3)強調(diào)高可擴展性和可用性并面向分布式計算領(lǐng)域的鍵值存儲 如Cassandra、Project Voldemort、Bigtable。這類鍵值存儲系統(tǒng)一般是具有很強可擴展性的分布式系統(tǒng),具有很強的可擴展能力。例如,可以動態(tài)地增加、刪除數(shù)據(jù)節(jié)點等。Cassandra常常被看成是一個開源版本的Bigtable,其具有Bigtable的數(shù)據(jù)模型和Dynamo的環(huán)架構(gòu)。
從功能上來看,鍵值存儲系統(tǒng)又可以被分為支持簡單的鍵值查詢功能的系統(tǒng)和具有復(fù)雜功能的系統(tǒng)。類Bigtable系統(tǒng)或者使用了與Bigtable類似的數(shù)據(jù)模型的系統(tǒng)一般都更接近傳統(tǒng)的數(shù)據(jù)庫系統(tǒng),他們提供了更多的操作接口。類Dynamo系統(tǒng)只是提供了鍵到值的簡單訪問,提供的功能有限,將復(fù)雜的數(shù)據(jù)處理功能交給了上層應(yīng)用程序。
- JavaScript交互式網(wǎng)頁設(shè)計(微課版)
- 大數(shù)據(jù)環(huán)境下基于知識整合的語義計算技術(shù)與應(yīng)用
- 2009年全國高等學(xué)校電子信息科學(xué)與工程類專業(yè):教學(xué)協(xié)作會議論文集
- Virtual SAN最佳實踐:部署、管理、監(jiān)控、排錯與企業(yè)應(yīng)用方案設(shè)計
- 新世紀(jì)電腦組裝與維修教程
- 網(wǎng)址收藏夾(精華版·2007)
- 區(qū)塊鏈技術(shù)指南
- 信號與系統(tǒng)分析
- 匯編語言與接口技術(shù)
- 建筑、室內(nèi)設(shè)計、景觀設(shè)計的BIM應(yīng)用
- 精通AutoCAD 2013室內(nèi)裝潢設(shè)計
- 中國大學(xué)生計算機設(shè)計大賽2018年參賽指南
- PDMA新產(chǎn)品開發(fā)工具手冊3(修訂版)
- 48小時精通CATIA V5R21中文版曲面造型設(shè)計技巧
- 量子計算機:穿越未來世界