今天繼續(xù)帶大家學(xué)習(xí)大數(shù)據(jù)肉津。今天主要介紹大數(shù)據(jù)價(jià)值鏈的數(shù)據(jù)存儲(chǔ)部分,前面兩期重點(diǎn)介紹了數(shù)據(jù)生成和數(shù)據(jù)獲取舱沧,有希望學(xué)習(xí)的朋友可以翻閱我前面的文章妹沙。希望大家持續(xù)學(xué)習(xí),每天關(guān)注熟吏,我會(huì)連續(xù)更新文章距糖,讓大家系統(tǒng)學(xué)習(xí)和認(rèn)識(shí)大數(shù)據(jù)。
階段III:數(shù)據(jù)存儲(chǔ)
大數(shù)據(jù)系統(tǒng)中的數(shù)據(jù)存儲(chǔ)子系統(tǒng)將收集的信息以適當(dāng)?shù)母袷酱娣乓源治龊蛢r(jià)值提取牵寺。為了實(shí)現(xiàn)這個(gè)目標(biāo),數(shù)據(jù)存儲(chǔ)子系統(tǒng)應(yīng)該具有如下兩個(gè)特征:
?存儲(chǔ)基礎(chǔ)設(shè)施應(yīng)能持久和可靠地容納信息;
?存儲(chǔ)子系統(tǒng)應(yīng)提供可伸縮的訪問(wèn)接口供用戶查詢和分析巨量數(shù)據(jù)悍引。從功能上,數(shù)據(jù)存儲(chǔ)子系統(tǒng)可以分為硬件基礎(chǔ)設(shè)施和數(shù)據(jù)管理軟件。
一帽氓、存儲(chǔ)基礎(chǔ)設(shè)施
硬件基礎(chǔ)設(shè)施實(shí)現(xiàn)信息的物理存儲(chǔ),可以從不同的角度理解存儲(chǔ)基礎(chǔ)設(shè)施吗铐。首先,存儲(chǔ)設(shè)備可以根據(jù)存儲(chǔ)技術(shù)分類。典型的存儲(chǔ)技術(shù)有如下幾種杏节。
?隨機(jī)存取存儲(chǔ)器(RAM):是計(jì)算機(jī)數(shù)據(jù)的一種存儲(chǔ)形式,在斷電時(shí)將丟失存儲(chǔ)信息』I現(xiàn)代RAM包括靜態(tài)RAM、動(dòng)態(tài)RAM和相變RAM奋渔。
?磁盤和磁盤陣列:磁盤是現(xiàn)代存儲(chǔ)系統(tǒng)的主要部件镊逝。HDD由一個(gè)或多個(gè)快速旋轉(zhuǎn)的碟片構(gòu)成,通過(guò)移動(dòng)驅(qū)動(dòng)臂上的磁頭,從碟片表面完成數(shù)據(jù)的讀寫。與RAM不同,斷電后硬盤仍能保留數(shù)據(jù)信息,并且具有更低的單位容量成本,但是硬盤的讀寫速度比RAM讀寫要慢得多嫉鲸。由于單個(gè)高容量磁盤的成本較高,因此磁盤陣列將大量磁盤整合以獲取高容量撑蒜、高吞吐率和高可用性。
?存儲(chǔ)級(jí)存儲(chǔ)器:是指非機(jī)械式存儲(chǔ)媒體,如閃存。閃存通常用于構(gòu)建固態(tài)驅(qū)動(dòng)器SSD,SSD沒(méi)有類似HDD的機(jī)械部件,運(yùn)行安靜,并且具有更小的訪問(wèn)時(shí)間和延遲座菠。但是SSD的單位存儲(chǔ)成本要高于HDD狸眼。
這些存儲(chǔ)設(shè)備具有不同的性能指標(biāo),可以用來(lái)構(gòu)建可擴(kuò)展的、高性能的大數(shù)據(jù)存儲(chǔ)子系統(tǒng)浴滴。
其次,可以從網(wǎng)絡(luò)體系的觀點(diǎn)理解存儲(chǔ)基礎(chǔ)設(shè)施,存儲(chǔ)子系統(tǒng)可以通過(guò)不同的方式組織構(gòu)建拓萌。
?直接附加存儲(chǔ)(DAS):存儲(chǔ)設(shè)備通過(guò)主機(jī)總線直接連接到計(jì)算機(jī),設(shè)備和計(jì)算機(jī)之間沒(méi)有存儲(chǔ)網(wǎng)絡(luò)。DAS是對(duì)已有服務(wù)器存儲(chǔ)的最簡(jiǎn)單的擴(kuò)展升略。
?網(wǎng)絡(luò)附件存儲(chǔ)(NAS):NAS是文件級(jí)別的存儲(chǔ)技術(shù),包含許多硬盤驅(qū)動(dòng)器,這些硬盤驅(qū)動(dòng)器組織為邏輯的冗余的存儲(chǔ)容器微王。和SAN相比,NAS可以同時(shí)提供存儲(chǔ)和文件系統(tǒng),并能作為一個(gè)文件服務(wù)器。
?存儲(chǔ)區(qū)域網(wǎng)絡(luò)(SAN):SAN通過(guò)專用的存儲(chǔ)網(wǎng)絡(luò)在一組計(jì)算機(jī)中提供文件塊級(jí)別的數(shù)據(jù)存儲(chǔ)品嚣。SAN能夠合并多個(gè)存儲(chǔ)設(shè)備,例如磁盤和磁盤陣列,使得它們能夠通過(guò)計(jì)算機(jī)直接訪問(wèn),就好象它們直接連接在計(jì)算機(jī)上一樣炕倘。
這三種存儲(chǔ)技術(shù)的存儲(chǔ)網(wǎng)絡(luò)體系架構(gòu)如圖7所示,SAN具有最復(fù)雜的網(wǎng)絡(luò)架構(gòu),并依賴于特定的存儲(chǔ)網(wǎng)絡(luò)設(shè)備翻默。
最后,盡管已有的存儲(chǔ)系統(tǒng)架構(gòu)得到了深入的研究,但是卻無(wú)法直接應(yīng)用于大數(shù)據(jù)系統(tǒng)中肚菠。為了適應(yīng)大數(shù)據(jù)系統(tǒng)的“4Vs”特性,存儲(chǔ)基礎(chǔ)設(shè)施應(yīng)該能夠向上和向外擴(kuò)展,以動(dòng)態(tài)配置適應(yīng)不同的應(yīng)用。
一個(gè)解決這些需求的技術(shù)是云計(jì)算領(lǐng)域提出的存儲(chǔ)虛擬化拯坟。存儲(chǔ)虛擬化將多個(gè)網(wǎng)絡(luò)存儲(chǔ)設(shè)備合并為單個(gè)存儲(chǔ)設(shè)備眶诈。目前可以在SAN和NAS架構(gòu)上實(shí)現(xiàn)存儲(chǔ)虛擬化瘸恼。基于SAN的存儲(chǔ)虛擬化在可擴(kuò)展性册养、可靠性和安全方面能夠比基于NAS的存儲(chǔ)虛擬化具有更高的性能东帅。但是SAN需要專用的存儲(chǔ)基礎(chǔ)設(shè)施,從而帶來(lái)較高的成本。
二球拦、數(shù)據(jù)管理框架
數(shù)據(jù)管理框架解決的是如何以適當(dāng)?shù)姆绞浇M織信息以待有效地處理靠闭。在大數(shù)據(jù)出現(xiàn)之前,數(shù)據(jù)管理框架就得到了較為廣泛的研究坎炼。從層次的角度將數(shù)據(jù)管理框架劃分為3層: 文件系統(tǒng)愧膀、數(shù)據(jù)庫(kù)技術(shù)和編程模型, 如圖 8 所示。
(1) 文件系統(tǒng)
文件系統(tǒng)是大數(shù)據(jù)系統(tǒng)的基礎(chǔ),因此得到了產(chǎn)業(yè)界和學(xué)術(shù)界的廣泛關(guān)注谣光。Google為大型分布式數(shù)據(jù)密集型應(yīng)用設(shè)計(jì)和實(shí)現(xiàn)了一個(gè)可擴(kuò)展的分布式文件系統(tǒng)GFS檩淋。GFS運(yùn)行在廉價(jià)的商用服務(wù)器上,為大量用戶提供容錯(cuò)和高性能服務(wù)。GFS適用于大文件存儲(chǔ)和讀操作遠(yuǎn)多于寫操作的應(yīng)用萄金。但是GFS具有單點(diǎn)失效和處理小文件效率低下的缺點(diǎn),Colossus改進(jìn)了GFS并克服了這些缺點(diǎn)蟀悦。此外,其他的企業(yè)和研究者們開發(fā)了各自的文件存儲(chǔ)解決方案以適應(yīng)不同的大數(shù)據(jù)存儲(chǔ)需求。
(2)數(shù)據(jù)庫(kù)技術(shù)
數(shù)據(jù)庫(kù)技術(shù)已經(jīng)經(jīng)歷了30多年的發(fā)展,不同的數(shù)據(jù)庫(kù)系統(tǒng)被設(shè)計(jì)用于不同規(guī)模的數(shù)據(jù)集和應(yīng)用氧敢。傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)難以解決大數(shù)據(jù)帶來(lái)的多樣性和規(guī)模的需求日戈。由于具有模式自由、易于復(fù)制孙乖、提供簡(jiǎn)單API浙炼、最終一致性和支持海量數(shù)據(jù)的特性,NoSQL數(shù)據(jù)庫(kù)逐漸成為處理大數(shù)據(jù)的標(biāo)準(zhǔn)份氧。隨后將根據(jù)數(shù)據(jù)模型的不同,討論三種主流的NoSQL數(shù)據(jù)庫(kù):鍵值(key-value)存儲(chǔ)數(shù)據(jù)庫(kù)、列式存儲(chǔ)數(shù)據(jù)庫(kù)和文檔存儲(chǔ)數(shù)據(jù)庫(kù)弯屈。
(a)鍵值存儲(chǔ)數(shù)據(jù)庫(kù)
鍵值存儲(chǔ)是一種簡(jiǎn)單的數(shù)據(jù)存儲(chǔ)模型,數(shù)據(jù)以鍵值對(duì)的形式儲(chǔ)存,鍵是唯一的蜗帜。近年出現(xiàn)的鍵值存儲(chǔ)數(shù)據(jù)庫(kù)受到Amazon公司的Dynamo影響特別大。在Dynamo中,數(shù)據(jù)被分割存儲(chǔ)在不同的服務(wù)器集群中,并復(fù)制為多個(gè)副本资厉√保可擴(kuò)展性和持久性依賴于以下兩個(gè)關(guān)鍵機(jī)制。
?分割和復(fù)制:Dynamo的分割機(jī)制基于一致性哈希技術(shù),將負(fù)載分散在存儲(chǔ)主機(jī)上酌住。哈希函數(shù)的輸出范圍被看作是一個(gè)固定的循環(huán)空間或“環(huán)”店归。系統(tǒng)中的每個(gè)節(jié)點(diǎn)將隨機(jī)分配該空間中的一個(gè)值,表示它在環(huán)中的位置阎抒。通過(guò)哈希標(biāo)識(shí)數(shù)據(jù)項(xiàng)的鍵,可以獲得該數(shù)據(jù)項(xiàng)在環(huán)中對(duì)應(yīng)的節(jié)點(diǎn)酪我。Dynamo系統(tǒng)中每條數(shù)據(jù)項(xiàng)存儲(chǔ)在協(xié)調(diào)節(jié)點(diǎn)和N?1個(gè)后繼節(jié)點(diǎn)上,其中N是實(shí)例化的配置參數(shù)。如圖9所示,節(jié)點(diǎn)B是鍵k的協(xié)調(diào)節(jié)點(diǎn),數(shù)據(jù)存儲(chǔ)在節(jié)點(diǎn)B同時(shí)復(fù)制在節(jié)點(diǎn)C和D上且叁。此外,節(jié)點(diǎn)D將存儲(chǔ)在(A,B],(B,C]和(C,D]范圍內(nèi)的鍵都哭。
?對(duì)象版本管理:由于每條唯一的數(shù)據(jù)項(xiàng)存在多個(gè)副本,Dynamo允許以異步的方式更新副本并提供最終一致性。每次更新被認(rèn)為是數(shù)據(jù)的一個(gè)新的不可改變的版本逞带。一個(gè)對(duì)象的多個(gè)版本可以在系統(tǒng)中共存欺矫。
(b)列式存儲(chǔ)數(shù)據(jù)庫(kù)
列式存儲(chǔ)數(shù)據(jù)庫(kù)以列存儲(chǔ)架構(gòu)進(jìn)行存儲(chǔ)和處理數(shù)據(jù),主要適合于批量數(shù)據(jù)處理和實(shí)時(shí)查詢。下面介紹典型的列式存儲(chǔ)系統(tǒng)展氓。
?Bigtable:是Google公司設(shè)計(jì)的一種列式存儲(chǔ)系統(tǒng)穆趴。Bigtable基本的數(shù)據(jù)結(jié)構(gòu)是一個(gè)稀疏的、分布式的遇汞、持久化存儲(chǔ)的多維度排序映射,映射由行鍵未妹、列鍵和時(shí)間戳構(gòu)成。行按字典序排序并且被劃分為片,片是負(fù)載均衡單元空入。列根據(jù)鍵的前綴成組,稱為列族,是訪問(wèn)控制的基本單元络它。時(shí)間戳則是版本區(qū)分的依據(jù)。
?Cassandra:由Facebook開發(fā)并于2008年開源,結(jié)合了Dynamo的分布式系統(tǒng)技術(shù)和Bigtable的數(shù)據(jù)模型歪赢。Cassandra中的表是一個(gè)分布式多維結(jié)構(gòu),包括行化戳、列族、列和超級(jí)列埋凯。此外,Cassandra的分割和復(fù)制機(jī)制也和Dynamo的類似,用于確保最終一致性点楼。
?Bigtable改進(jìn):由于Bigtable不是開源的,因此開源項(xiàng)目HBase和Hypertable進(jìn)行合并,同時(shí)吸收了Bigtable的思想,實(shí)現(xiàn)了類似的系統(tǒng)。
列式存儲(chǔ)數(shù)據(jù)庫(kù)大部分是基于Bigtable的模式,只是在一致性機(jī)制和一些特性上有差異白对。
(c)文檔數(shù)據(jù)庫(kù)
文檔數(shù)據(jù)庫(kù)能夠支持比鍵值存儲(chǔ)復(fù)雜得多的數(shù)據(jù)結(jié)構(gòu)盟步。MongoDB,SimpleDB和CouchDB是主要的文檔數(shù)據(jù)庫(kù),它們的數(shù)據(jù)模型和JSON對(duì)象類似。不同文檔存儲(chǔ)系統(tǒng)的區(qū)別在于數(shù)據(jù)復(fù)制和一致性機(jī)制方面躏结。
(d)其他NoSQL和混合數(shù)據(jù)庫(kù)
除了前面提到的數(shù)據(jù)存儲(chǔ)系統(tǒng),還有許多其他項(xiàng)目支持不同的數(shù)據(jù)存儲(chǔ)系統(tǒng)却盘。
(3)編程模型
盡管NoSQL數(shù)據(jù)庫(kù)具有很多關(guān)系型數(shù)據(jù)庫(kù)不具備的優(yōu)點(diǎn),但是沒(méi)有插入操作的聲明性表述,對(duì)查詢和分析的支持也不夠狰域。編程模型則對(duì)實(shí)現(xiàn)應(yīng)用邏輯和輔助數(shù)據(jù)分析應(yīng)用至關(guān)重要。但是,使用傳統(tǒng)的并行模型如OpenMP和MPI在大數(shù)據(jù)環(huán)境下實(shí)現(xiàn)并行編程非常困難黄橘。
許多并行編程模型已被提出應(yīng)用于領(lǐng)域相關(guān)的應(yīng)用兆览。這些模型有效地提高了NoSQL數(shù)據(jù)庫(kù)的性能,縮小了NoSQL和關(guān)系型數(shù)據(jù)庫(kù)性能的差距,因此NoSQL數(shù)據(jù)庫(kù)逐漸成為海量數(shù)據(jù)處理的核心技術(shù)。目前主要有三種編程模型:通用處理模型塞关、圖處理模型以及流處理模型抬探。
?通用處理模型
這種類型的模型用于解決一般的應(yīng)用問(wèn)題,被用于MapReduce和Dryad中。其中,MapReduce是一個(gè)簡(jiǎn)單但功能強(qiáng)大的編程模型,能將大規(guī)模的計(jì)算任務(wù)分配到大的商用PC集群中并行運(yùn)行帆赢。
?圖處理模型
社交網(wǎng)絡(luò)分析和RDF等能夠表示為實(shí)體間的相互聯(lián)系,因此可以用圖模型來(lái)描述小压。和流類型(?ow-type)的模型相比,圖處理的迭代是固有的,相同的數(shù)據(jù)集將不斷被重訪。
?流處理模型
S4和Storm是兩個(gè)運(yùn)行在JVM上的分布式流處理平臺(tái)椰于。S4實(shí)現(xiàn)了actor編程模型,每個(gè)數(shù)據(jù)流中keyedtupple被看作是一個(gè)事件并被以某種偏好路由到處理部件怠益。PEs形成一個(gè)有向無(wú)環(huán)圖,并且處理事件和發(fā)布結(jié)果。處理節(jié)點(diǎn)是PEs的邏輯主機(jī)并能監(jiān)聽事件,將事件傳遞到處理單元容器PEN中,PEN則以適當(dāng)?shù)捻樞蛘{(diào)用處理部件瘾婿。Storm和S4有著許多相同的特點(diǎn)蜻牢。Storm作業(yè)同樣由有向無(wú)環(huán)圖表示,它和S4的主要區(qū)別在于架構(gòu):S4是分布式對(duì)稱架構(gòu),而Storm是類似于MapReduce的主從架構(gòu)。
上表比較了上述幾種編程模型的特點(diǎn)偏陪。
首先,盡管實(shí)時(shí)處理越來(lái)越重要,批處理仍然是重要的數(shù)據(jù)處理方式抢呆。
其次,大多數(shù)系統(tǒng)采取圖作為編程模型是因?yàn)閳D能夠表示更復(fù)雜的任務(wù)。
再次,所有的系統(tǒng)都支持并發(fā)執(zhí)行以加速處理速度笛谦。
第四,流處理模型使用內(nèi)存作為數(shù)據(jù)存儲(chǔ)媒體以獲得高訪問(wèn)和處理速率,而批處理模型使用文件系統(tǒng)或磁盤存儲(chǔ)海量數(shù)據(jù)以支持多次訪問(wèn)抱虐。
第五,這些系統(tǒng)的架構(gòu)通常是主–從式的,但是S4則是分布式的架構(gòu)。
最后,不同的系統(tǒng)具有不同的容錯(cuò)策略饥脑。對(duì)于Storm和S4,當(dāng)節(jié)點(diǎn)失效時(shí),失效節(jié)點(diǎn)的任務(wù)將轉(zhuǎn)移到備用節(jié)點(diǎn)運(yùn)行;Pregel和GraphLab則是用檢查點(diǎn)用于容錯(cuò);MapReduce和Dryad則僅指出節(jié)點(diǎn)級(jí)別的容錯(cuò)恳邀。
今天介紹了大數(shù)據(jù)價(jià)值鏈的數(shù)據(jù)存儲(chǔ)部分,后面會(huì)繼續(xù)帶你認(rèn)識(shí)不一樣的大數(shù)據(jù)好啰。
如果您想長(zhǎng)期獲取科技信息的解讀轩娶,記得關(guān)注我,我會(huì)每天更新框往,謝謝鳄抒。同時(shí)如果您有什么意見(jiàn)和建議,歡迎評(píng)論椰弊。