版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
數(shù)字文明與數(shù)字治理大數(shù)據(jù)通識(shí)教程第9章楊武劍周蘇主編大數(shù)據(jù)處理與存儲(chǔ)01開(kāi)源技術(shù)商業(yè)支援02Hadoop基礎(chǔ)03分布式處理04NoSQL數(shù)據(jù)庫(kù)目錄/CONTENTS05NewSQL數(shù)據(jù)庫(kù)PART01開(kāi)源技術(shù)商業(yè)支援在大數(shù)據(jù)生態(tài)系統(tǒng)中,基礎(chǔ)設(shè)施主要負(fù)責(zé)數(shù)據(jù)存儲(chǔ)以及處理公司掌握的海量數(shù)據(jù)。應(yīng)用程序則是指人類和計(jì)算機(jī)系統(tǒng)通過(guò)使用這些程序,從數(shù)據(jù)中獲知關(guān)鍵信息。人們使用應(yīng)用程序使數(shù)據(jù)可視化,并由此做出更好的決策;而計(jì)算機(jī)則使用應(yīng)用系統(tǒng)將廣告投放到合適的人群,或者監(jiān)測(cè)信用卡欺詐行為。9.1開(kāi)源技術(shù)商業(yè)支援最初,IBM、甲骨文以及其他公司都將他們擁有的大型關(guān)系型數(shù)據(jù)庫(kù)商業(yè)化。關(guān)系型數(shù)據(jù)庫(kù)使數(shù)據(jù)存儲(chǔ)在自定義表中,再通過(guò)一個(gè)密碼進(jìn)行訪問(wèn)。例如,一個(gè)雇員可以通過(guò)一個(gè)雇員編號(hào)認(rèn)定,然后該編號(hào)就會(huì)與包含該雇員信息的其他字段相聯(lián)系——她的名字、地址、雇用日期及職位等。這樣的結(jié)構(gòu)化數(shù)據(jù)庫(kù)還是適用的,直到公司不得不解決大量的非結(jié)構(gòu)化數(shù)據(jù)。比如企業(yè)網(wǎng)絡(luò)必須處理海量網(wǎng)頁(yè)以及這些網(wǎng)頁(yè)鏈接之間的關(guān)系,而社交網(wǎng)絡(luò)必須應(yīng)付社交圖譜數(shù)據(jù)。9.1開(kāi)源技術(shù)商業(yè)支援社交圖譜是社交網(wǎng)站上人與人之間關(guān)系的數(shù)字表示,其上的每個(gè)點(diǎn)末端連接著非結(jié)構(gòu)化數(shù)據(jù),例如照片、信息、個(gè)人檔案等。于是,像騰訊、阿里巴巴、谷歌、臉書以及其他這樣的公司開(kāi)發(fā)出各自的解決方案,以存儲(chǔ)和處理大量的數(shù)據(jù)。9.1開(kāi)源技術(shù)商業(yè)支援在大數(shù)據(jù)的演變中,開(kāi)源軟件起到了很大的作用。如今,越來(lái)越多的企業(yè)將UNIX操作系統(tǒng)的開(kāi)源版本Linux大規(guī)模地應(yīng)用于商業(yè)用途,并與低成本的服務(wù)器硬件系統(tǒng)相結(jié)合,他們期望獲得企業(yè)級(jí)的商業(yè)支持和保障,以低成本獲得所需要的功能。Oracle(甲骨文)公司的MySQL開(kāi)源關(guān)系數(shù)據(jù)庫(kù)、Apache開(kāi)源網(wǎng)絡(luò)服務(wù)器以及PHP開(kāi)源腳本語(yǔ)言(最初為創(chuàng)建網(wǎng)站開(kāi)發(fā))搭配起來(lái)的實(shí)用性也推動(dòng)了Linux的普及。大數(shù)據(jù)世界里有許多類似的事物在不斷涌現(xiàn)。9.1開(kāi)源技術(shù)商業(yè)支援源自谷歌的原始創(chuàng)建技術(shù)的ApacheHadoop是一個(gè)開(kāi)源分布式計(jì)算平臺(tái),通過(guò)Hadoop分布式文件系統(tǒng)HDFS(HadoopDistributedFileSystem)存儲(chǔ)大量數(shù)據(jù),再通過(guò)名為MapReduce的編程模型將這些數(shù)據(jù)的操作分成小片段。隨后,開(kāi)發(fā)了一系列圍繞Hadoop的開(kāi)源技術(shù)。ApacheHive提供數(shù)據(jù)倉(cāng)庫(kù)功能,包括數(shù)據(jù)抽取、轉(zhuǎn)換、裝載(ETL),即將數(shù)據(jù)從各種來(lái)源中抽取出來(lái),再實(shí)行轉(zhuǎn)換以滿足操作需要(包括確保數(shù)據(jù)質(zhì)量),然后裝載到目標(biāo)數(shù)據(jù)庫(kù)。ApacheHBase則提供處于Hadoop頂部的海量結(jié)構(gòu)化表的實(shí)時(shí)讀寫訪問(wèn)功能。同時(shí),ApacheCassandra通過(guò)復(fù)制數(shù)據(jù)來(lái)提供容錯(cuò)數(shù)據(jù)存儲(chǔ)功能。9.1開(kāi)源技術(shù)商業(yè)支援過(guò)去,開(kāi)源軟件所擁有的這些功能通常只能從商業(yè)軟件供應(yīng)商處依靠專門的硬件獲取。開(kāi)源大數(shù)據(jù)技術(shù)正在使數(shù)據(jù)存儲(chǔ)和處理能力——這些本來(lái)只有像谷歌或其他商用運(yùn)營(yíng)商之類的公司才具備的能力,在商用硬件上也得到了應(yīng)用,降低了使用大數(shù)據(jù)的先期投入,并且具備了使大數(shù)據(jù)接觸到更多潛在用戶的潛力。9.1開(kāi)源技術(shù)商業(yè)支援開(kāi)源軟件在開(kāi)始使用時(shí),在個(gè)人使用或有限數(shù)據(jù)的前提下是免費(fèi)的,這使其對(duì)大多數(shù)人頗具吸引力,從而使一些商用運(yùn)營(yíng)商采用免費(fèi)增值的商業(yè)模式參與到競(jìng)爭(zhēng)當(dāng)中。用戶需要在之后為部分或大量數(shù)據(jù)的使用付費(fèi)。久而久之,采用開(kāi)源技術(shù)的這些企業(yè)也往往需要得到商業(yè)支援,一如當(dāng)初使用Linux碰到的情形。9.1開(kāi)源技術(shù)商業(yè)支援PART02Hadoop基礎(chǔ)Hadoop是以開(kāi)源形式發(fā)布的一種對(duì)大規(guī)模數(shù)據(jù)進(jìn)行分布式處理的技術(shù)。特別是處理大數(shù)據(jù)時(shí)代的非結(jié)構(gòu)化數(shù)據(jù)時(shí),Hadoop在性能和成本方面都具有優(yōu)勢(shì),而且通過(guò)橫向擴(kuò)展進(jìn)行擴(kuò)容也相對(duì)容易。Hadoop是最受歡迎的在因特網(wǎng)上對(duì)搜索關(guān)鍵字進(jìn)行內(nèi)容分類的工具,但它也可以解決許多要求極大伸縮性的問(wèn)題。9.2Hadoop基礎(chǔ)Hadoop的基礎(chǔ)是谷歌公司于2004年發(fā)表的一篇關(guān)于大規(guī)模數(shù)據(jù)分布式處理的題為“MapReduce:大集群上的簡(jiǎn)單數(shù)據(jù)處理”的論文。MapReduce指的是一種分布式處理的方法,而Hadoop則是將MapReduce通過(guò)開(kāi)源方式進(jìn)行實(shí)現(xiàn)的框架的名稱。這是因?yàn)楣雀柙谄湔撐闹泄_(kāi)的僅限于處理方法,而并沒(méi)有公開(kāi)程序本身。也就是說(shuō),提到MapReduce,指的只是一種處理方法,而對(duì)其實(shí)現(xiàn)的形式并非只有Hadoop一種。Hadoop則指的是一種基于Apache授權(quán)協(xié)議,以開(kāi)源形式發(fā)布的軟件程序。9.2.1Hadoop的由來(lái)Hadoop原本是由三大部分組成的,即用于分布式存儲(chǔ)大容量文件的HDFS(HadoopDistributedFileSystem)分布式文件系統(tǒng),用于對(duì)大量數(shù)據(jù)進(jìn)行高效分布式處理的HadoopMapReduce框架,以及超大型數(shù)據(jù)表HBase。這些部分與谷歌的基礎(chǔ)技術(shù)相對(duì)應(yīng)。圖9-2谷歌與開(kāi)源基礎(chǔ)技術(shù)的對(duì)應(yīng)關(guān)系9.2.1Hadoop的由來(lái)從數(shù)據(jù)處理的角度來(lái)看,HadoopMapReduce是其中最重要的部分。HadoopMapReduce并非用于配備高性能CPU和磁盤的計(jì)算機(jī),而是一種工作在由多臺(tái)通用型計(jì)算機(jī)組成的集群上的,對(duì)大規(guī)模數(shù)據(jù)進(jìn)行分布式處理的框架。9.2.1Hadoop的由來(lái)Hadoop將應(yīng)用程序細(xì)分為在集群中任意節(jié)點(diǎn)上都可執(zhí)行的成百上千個(gè)工作負(fù)載,并分配給多個(gè)節(jié)點(diǎn)來(lái)執(zhí)行。然后,通過(guò)對(duì)各節(jié)點(diǎn)瞬間返回的信息進(jìn)行重組,得出最終的回答。雖然存在其他功能類似的程序,但Hadoop依靠其處理的高速性脫穎而出。最早由HDFS、HadoopMapReduce、HBase這三個(gè)組件所組成的軟件架構(gòu),現(xiàn)在也衍生出了多個(gè)子項(xiàng)目,其范圍也隨之逐步擴(kuò)大。9.2.1Hadoop的由來(lái)企業(yè)里的數(shù)據(jù)分析師和市場(chǎng)營(yíng)銷人員過(guò)去由于成本、處理時(shí)間的限制,而不得不放棄的對(duì)大量非結(jié)構(gòu)化數(shù)據(jù)的處理,只能依賴抽樣數(shù)據(jù)來(lái)進(jìn)行分析?,F(xiàn)在,由于Hadoop集群的規(guī)??梢院苋菀椎?cái)U(kuò)展到PB甚至是EB級(jí)別,因此可以將分析對(duì)象擴(kuò)展到全部數(shù)據(jù)的范圍。而且,由于處理速度比過(guò)去有了飛躍性的提升,現(xiàn)在可以進(jìn)行若干次重復(fù)的分析,也可以用不同的查詢來(lái)進(jìn)行測(cè)試,從而有可能獲得過(guò)去無(wú)法獲得的更有價(jià)值的信息。9.2.2Hadoop的優(yōu)勢(shì)Hadoop是一個(gè)能夠?qū)Υ罅繑?shù)據(jù)進(jìn)行分布式處理的軟件框架。Hadoop假設(shè)計(jì)算元素和存儲(chǔ)會(huì)失敗,因此它維護(hù)多個(gè)工作數(shù)據(jù)副本,確保能夠針對(duì)失敗的節(jié)點(diǎn)重新分布處理。Hadoop是高效的,因?yàn)樗圆⑿械姆绞焦ぷ?,通過(guò)并行處理加快處理速度。Hadoop還是可伸縮的,能夠處理PB級(jí)數(shù)據(jù)。此外,使用Hadoop的成本比較低,適用面廣。9.2.2Hadoop的優(yōu)勢(shì)Hadoop是一個(gè)能夠讓用戶輕松架構(gòu)和使用的分布式計(jì)算平臺(tái)。用戶可以輕松地在Hadoop上開(kāi)發(fā)和運(yùn)行處理海量數(shù)據(jù)的應(yīng)用程序。它有以下幾個(gè)優(yōu)點(diǎn):(1)高可靠性。Hadoop按位存儲(chǔ)和處理數(shù)據(jù)。(2)高擴(kuò)展性。Hadoop是在可用的計(jì)算機(jī)集簇間分配數(shù)據(jù)并完成計(jì)算任務(wù)的,這些集簇可以方便地?cái)U(kuò)展到數(shù)以千計(jì)的節(jié)點(diǎn)中。(3)高效性。Hadoop能夠在節(jié)點(diǎn)之間動(dòng)態(tài)地移動(dòng)數(shù)據(jù),并保證各個(gè)節(jié)點(diǎn)的動(dòng)態(tài)平衡,因此處理速度非??臁?.2.2Hadoop的優(yōu)勢(shì)(4)高容錯(cuò)性。Hadoop能夠自動(dòng)保存數(shù)據(jù)的多個(gè)副本,并且能夠自動(dòng)將失敗的任務(wù)重新分配。Hadoop帶有用Java語(yǔ)言編寫的框架,其上的應(yīng)用程序也可以使用其他語(yǔ)言編寫,比如C++。9.2.2Hadoop的優(yōu)勢(shì)PART03分布式處理文件系統(tǒng)是在一個(gè)存儲(chǔ)設(shè)備上存儲(chǔ)和組織數(shù)據(jù)的方法,這個(gè)存儲(chǔ)設(shè)備可以是閃存、DVD和硬盤。文件是存儲(chǔ)的原子單位,被文件系統(tǒng)用來(lái)存儲(chǔ)數(shù)據(jù)。一個(gè)文件系統(tǒng)提供了一個(gè)存儲(chǔ)在存儲(chǔ)設(shè)備上的數(shù)據(jù)邏輯視圖,并以樹(shù)結(jié)構(gòu)的形式展示了目錄和文件。操作系統(tǒng)采用文件系統(tǒng)為應(yīng)用程序來(lái)存儲(chǔ)和檢索數(shù)據(jù)。每個(gè)操作系統(tǒng)支持一個(gè)或多個(gè)文件系統(tǒng),例如MicrosoftWindows上的NTFS和Linux上的ext。9.3分布式處理分布式系統(tǒng)是建立在網(wǎng)絡(luò)之上的軟件系統(tǒng),它具有高度的內(nèi)聚性和透明性,因此網(wǎng)絡(luò)和分布式系統(tǒng)之間的區(qū)別更多的在于高層軟件(特別是操作系統(tǒng)),而不是硬件。內(nèi)聚性是指每一個(gè)數(shù)據(jù)庫(kù)分布節(jié)點(diǎn)高度自治,有本地的數(shù)據(jù)庫(kù)管理系統(tǒng)。透明性是指每一個(gè)數(shù)據(jù)庫(kù)分布節(jié)點(diǎn)對(duì)用戶的應(yīng)用來(lái)說(shuō)都是透明的,看不出是本地還是遠(yuǎn)程。在分布式數(shù)據(jù)庫(kù)系統(tǒng)中,用戶感覺(jué)不到數(shù)據(jù)是分布的,無(wú)須知道關(guān)系是否分割、有無(wú)副本、數(shù)據(jù)存于哪個(gè)站點(diǎn)以及事務(wù)在哪個(gè)站點(diǎn)上執(zhí)行等。9.3.1分布式系統(tǒng)在一個(gè)分布式系統(tǒng)中,一組獨(dú)立的計(jì)算機(jī)展現(xiàn)給用戶的是一個(gè)統(tǒng)一的整體。系統(tǒng)擁有多種通用的物理和邏輯資源,可以動(dòng)態(tài)分配任務(wù),分散的物理和邏輯資源通過(guò)計(jì)算機(jī)網(wǎng)絡(luò)實(shí)現(xiàn)信息交換。系統(tǒng)中存在一個(gè)以全局方式管理計(jì)算機(jī)資源的分布式操作系統(tǒng),通常對(duì)用戶來(lái)說(shuō),分布式系統(tǒng)只有一個(gè)模型,在操作系統(tǒng)之上有一層軟件中間件負(fù)責(zé)實(shí)現(xiàn)這個(gè)模型。例如互聯(lián)網(wǎng)就是一個(gè)典型的分布式系統(tǒng),在互聯(lián)網(wǎng)中,所有的一切看起來(lái)就好像是一個(gè)文檔(Web頁(yè)面)一樣。9.3.1分布式系統(tǒng)在計(jì)算機(jī)網(wǎng)絡(luò)中,這種統(tǒng)一性、模型以及其中的軟件都不存在。用戶看到的是實(shí)際的機(jī)器,計(jì)算機(jī)網(wǎng)絡(luò)并沒(méi)有使這些機(jī)器看起來(lái)是統(tǒng)一的。如果這些機(jī)器有不同的硬件或者不同的操作系統(tǒng),那么,這些差異對(duì)于用戶來(lái)說(shuō)都是完全可見(jiàn)的。如果一個(gè)用戶希望在一臺(tái)遠(yuǎn)程機(jī)器上運(yùn)行一個(gè)程序,那么,他必須登陸到遠(yuǎn)程機(jī)器上,然后在那臺(tái)機(jī)器上運(yùn)行該程序。9.3.1分布式系統(tǒng)分布式系統(tǒng)和計(jì)算機(jī)網(wǎng)絡(luò)系統(tǒng)的共同點(diǎn)是:多數(shù)分布式系統(tǒng)是建立在計(jì)算機(jī)網(wǎng)絡(luò)之上的,所以分布式系統(tǒng)與計(jì)算機(jī)網(wǎng)絡(luò)在物理結(jié)構(gòu)上是基本相同的。分布式操作系統(tǒng)的設(shè)計(jì)思想和網(wǎng)絡(luò)操作系統(tǒng)是不同的,這決定了它們?cè)诮Y(jié)構(gòu)、工作方式和功能上也不同。網(wǎng)絡(luò)操作系統(tǒng)要求網(wǎng)絡(luò)用戶在使用網(wǎng)絡(luò)資源時(shí)首先必須了解網(wǎng)絡(luò)資源,網(wǎng)絡(luò)用戶必須知道網(wǎng)絡(luò)中各個(gè)計(jì)算機(jī)的功能與配置、軟件資源、網(wǎng)絡(luò)文件結(jié)構(gòu)等情況,在網(wǎng)絡(luò)中如果用戶要讀一個(gè)共享文件時(shí),用戶必須知道這個(gè)文件放在哪一臺(tái)計(jì)算機(jī)的哪一個(gè)目錄下。9.3.1分布式系統(tǒng)分布式操作系統(tǒng)是以全局方式管理系統(tǒng)資源的,它可以為用戶任意調(diào)度網(wǎng)絡(luò)資源,并且調(diào)度過(guò)程是“透明”的。當(dāng)用戶提交一個(gè)作業(yè)時(shí),分布式操作系統(tǒng)能夠根據(jù)需要在系統(tǒng)中選擇最合適的處理器,將用戶的作業(yè)提交到該處理程序,在處理器完成作業(yè)后,將結(jié)果傳給用戶。在這個(gè)過(guò)程中,用戶并不會(huì)意識(shí)到有多個(gè)處理器的存在,這個(gè)系統(tǒng)就像是一個(gè)處理器一樣。9.3.1分布式系統(tǒng)一個(gè)分布式文件系統(tǒng)作為一個(gè)文件系統(tǒng)可以存儲(chǔ)分布在集群的節(jié)點(diǎn)上的大文件。對(duì)于客戶端來(lái)說(shuō),文件似乎在本地上;然而,這只是一個(gè)邏輯視圖,在物理形式上文件分布于整個(gè)集群。這個(gè)本地視圖展示了通過(guò)分布式文件系統(tǒng)存儲(chǔ)并且使文件可以從多個(gè)位置獲得訪問(wèn)。例如Google文件系統(tǒng)(GFS)和Hadoop分布式文件系統(tǒng)(HDFS)。9.3.2分布式文件系統(tǒng)像其他文件系統(tǒng)一樣,分布式文件系統(tǒng)對(duì)所存儲(chǔ)的數(shù)據(jù)是不可知的,因此能夠支持無(wú)模式的數(shù)據(jù)存儲(chǔ)。通常來(lái)講,分布式文件系統(tǒng)存儲(chǔ)設(shè)備通過(guò)復(fù)制數(shù)據(jù)到多個(gè)位置而提供開(kāi)箱即用的數(shù)據(jù)冗余和高可用性,但并不提供開(kāi)箱即用的搜索文件內(nèi)容的功能。一個(gè)實(shí)現(xiàn)了分布式文件系統(tǒng)的存儲(chǔ)設(shè)備可以提供簡(jiǎn)單快速的數(shù)據(jù)存儲(chǔ)功能,并能夠存儲(chǔ)大型非關(guān)系型數(shù)據(jù)集,如半結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)。盡管對(duì)于并發(fā)控制采用了簡(jiǎn)單的文件鎖機(jī)制,它依然擁有快速的讀/寫能力,從而能夠應(yīng)對(duì)大數(shù)據(jù)的快速特性。9.3.2分布式文件系統(tǒng)對(duì)于包含大量小文件的數(shù)據(jù)集來(lái)說(shuō),分布式文件系統(tǒng)不是一個(gè)很好的選擇,因?yàn)樗斐蛇^(guò)多的磁盤尋址行為,降低了總體數(shù)據(jù)獲取速度。此外,在處理大量較小文件時(shí)也會(huì)產(chǎn)生更多開(kāi)銷,因?yàn)樵谔幚砻總€(gè)文件時(shí),且在結(jié)果被整個(gè)集群同步之前,處理引擎會(huì)產(chǎn)生一些專用的進(jìn)程。由于這些限制,分布式文件系統(tǒng)更適用于數(shù)量少、空間大、并以連續(xù)方式訪問(wèn)的文件。多個(gè)較小的文件通常被合并成一個(gè)文件以獲得最佳的存儲(chǔ)和處理性能。當(dāng)數(shù)據(jù)必須以流模式獲取而且沒(méi)有隨機(jī)讀寫需求時(shí),會(huì)使分布式文件系統(tǒng)獲得更好的性能。9.3.2分布式文件系統(tǒng)分布式文件系統(tǒng)存儲(chǔ)設(shè)備適用于存儲(chǔ)原始數(shù)據(jù)的大型數(shù)據(jù)集,或者需要?dú)w檔數(shù)據(jù)集時(shí)。另外,分布式文件系統(tǒng)對(duì)需要在相當(dāng)長(zhǎng)的一段時(shí)期內(nèi)在線存儲(chǔ)大量數(shù)據(jù)提供了一個(gè)廉價(jià)的選擇。因?yàn)榧嚎梢苑浅:?jiǎn)單地增加磁盤而不需要將數(shù)據(jù)卸載到像磁帶等離線數(shù)據(jù)存儲(chǔ)空間中。9.3.2分布式文件系統(tǒng)并行數(shù)據(jù)處理就是把一個(gè)規(guī)模較大的任務(wù)分成多個(gè)子任務(wù)同時(shí)進(jìn)行,目的是減少處理的時(shí)間。雖然并行數(shù)據(jù)處理能夠在多個(gè)網(wǎng)絡(luò)機(jī)器上進(jìn)行,但目前來(lái)說(shuō)更為典型的方式是在一臺(tái)機(jī)器上使用多個(gè)處理器或內(nèi)核來(lái)完成。圖9-3任務(wù)被分成子任務(wù),在一臺(tái)機(jī)器的不同處理器上并行執(zhí)行9.3.3并行與分布式數(shù)據(jù)處理分布式數(shù)據(jù)處理與并行數(shù)據(jù)處理非常相似,二者都利用了“分治”的原理。與并行數(shù)據(jù)處理不同的是,分布式數(shù)據(jù)處理通常在幾個(gè)物理上分離的機(jī)器上進(jìn)行,這些機(jī)器通過(guò)網(wǎng)絡(luò)連接構(gòu)成一個(gè)集群。如下圖所示,一個(gè)任務(wù)同樣被分為三個(gè)子任務(wù),但是這些子任務(wù)在三個(gè)不同的機(jī)器上進(jìn)行,這三個(gè)機(jī)器連接到一個(gè)交換機(jī)。
圖9-4分布式數(shù)據(jù)處理舉例9.3.3并行與分布式數(shù)據(jù)處理大數(shù)據(jù)導(dǎo)致了數(shù)據(jù)量的爆發(fā)式增長(zhǎng),傳統(tǒng)的集中式存儲(chǔ)(如NAS或SAN)在容量和性能上都無(wú)法較好地滿足大數(shù)據(jù)的需求。因此,具有優(yōu)秀的可擴(kuò)展能力的分布式存儲(chǔ)成為大數(shù)據(jù)存儲(chǔ)的主流架構(gòu)方式。分布式存儲(chǔ)多采用普通的硬件設(shè)備作為基礎(chǔ)設(shè)施,因此,單位容量的存儲(chǔ)成本也得到大大降低。另外,分布式存儲(chǔ)在性能、維護(hù)性和容災(zāi)性等方面也具有不同程度的優(yōu)勢(shì)。9.3.4分布式存儲(chǔ)分布式存儲(chǔ)系統(tǒng)需要解決的關(guān)鍵技術(shù)問(wèn)題包括諸如可擴(kuò)展性、數(shù)據(jù)冗余、數(shù)據(jù)一致性、全局命名空間、緩存等,從架構(gòu)上來(lái)講,大體上可以將分布式存儲(chǔ)分為C/S(客戶機(jī)/服務(wù)器)架構(gòu)和P2P(點(diǎn)對(duì)點(diǎn))架構(gòu)兩種。當(dāng)然,也有一些分布式存儲(chǔ)中會(huì)同時(shí)存在這兩種架構(gòu)方式。分布式存儲(chǔ)面臨的另一個(gè)問(wèn)題,就是如何組織和管理成員節(jié)點(diǎn),以及如何建立數(shù)據(jù)與節(jié)點(diǎn)之間的映射關(guān)系。成員節(jié)點(diǎn)的動(dòng)態(tài)增加或者離開(kāi),在分布式系統(tǒng)中基本上可以算是一種常態(tài)。9.3.4分布式存儲(chǔ)PART04NoSQL數(shù)據(jù)庫(kù)存儲(chǔ)技術(shù)隨著時(shí)間的推移持續(xù)發(fā)展,把存儲(chǔ)從服務(wù)器內(nèi)部逐漸移動(dòng)到網(wǎng)絡(luò)上。當(dāng)今對(duì)融合式架構(gòu)的推動(dòng)把計(jì)算、存儲(chǔ)、內(nèi)存和網(wǎng)絡(luò)放入一個(gè)可以統(tǒng)一管理的架構(gòu)中。在這些變化中,大數(shù)據(jù)的存儲(chǔ)需求徹底地改變了自20世紀(jì)80年代末期以來(lái)企業(yè)信息通信技術(shù)所支持的以關(guān)系型數(shù)據(jù)庫(kù)為中心的觀念。其根本原因在于,關(guān)系型技術(shù)不是一個(gè)可以支持大數(shù)據(jù)的容量的可擴(kuò)展的方式。更何況,企業(yè)通常通過(guò)處理半結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)獲取有用的價(jià)值,而這些數(shù)據(jù)通常與關(guān)系型方法不兼容。9.4NoSQL數(shù)據(jù)庫(kù)大數(shù)據(jù)促進(jìn)形成了統(tǒng)一的觀念,即存儲(chǔ)的邊界是集群可用的內(nèi)存和磁盤存儲(chǔ)。如果需要更多的存儲(chǔ)空間,橫向可擴(kuò)展性允許集群通過(guò)添加更多節(jié)點(diǎn)來(lái)擴(kuò)展。這個(gè)事實(shí)對(duì)于內(nèi)存與磁盤設(shè)備都成立,尤其重要的是創(chuàng)新的方法能夠通過(guò)內(nèi)存存儲(chǔ)來(lái)提供實(shí)時(shí)分析。甚至批量為主的處理速度都由于越來(lái)越便宜的固態(tài)硬盤而變快了。9.4NoSQL數(shù)據(jù)庫(kù)磁盤存儲(chǔ)通常利用廉價(jià)的硬盤設(shè)備作為長(zhǎng)期存儲(chǔ)的介質(zhì),并可由分布式文件系統(tǒng)或數(shù)據(jù)庫(kù)實(shí)現(xiàn)。圖9-5磁盤存儲(chǔ)可通過(guò)分布式文件系統(tǒng)或數(shù)據(jù)庫(kù)實(shí)現(xiàn)9.4NoSQL數(shù)據(jù)庫(kù)NoSQL數(shù)據(jù)庫(kù)是一個(gè)非關(guān)系型數(shù)據(jù)庫(kù),具有高度的可擴(kuò)展性、容錯(cuò)性,并且專門設(shè)計(jì)用來(lái)存儲(chǔ)半結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)。NoSQL數(shù)據(jù)庫(kù)通常會(huì)提供一個(gè)能被應(yīng)用程序調(diào)用的基于API的查詢接口。NoSQL數(shù)據(jù)庫(kù)也支持結(jié)構(gòu)化查詢語(yǔ)言(SQL)以外的查詢語(yǔ)言,因?yàn)镾QL是為了查詢存儲(chǔ)在關(guān)系型數(shù)據(jù)庫(kù)中的結(jié)構(gòu)化數(shù)據(jù)而設(shè)計(jì)的。例如,優(yōu)化一個(gè)NoSQL數(shù)據(jù)庫(kù)用來(lái)存儲(chǔ)XML文件通常會(huì)使用XQuery作為查詢語(yǔ)言。9.4NoSQL數(shù)據(jù)庫(kù)同樣,設(shè)計(jì)一個(gè)NoSQL數(shù)據(jù)庫(kù)用來(lái)存儲(chǔ)RDF數(shù)據(jù)將使用SPARQL來(lái)查詢它包含的關(guān)系。不過(guò),還是有一些NoSQL數(shù)據(jù)庫(kù)提供類似于SQL的查詢界面。圖9-6NoSQL數(shù)據(jù)庫(kù)可以提供一個(gè)類似于API或SQL-like的查詢接口9.4NoSQL數(shù)據(jù)庫(kù)下面列舉一些NoSQL存儲(chǔ)設(shè)備與傳統(tǒng)RDBMS不一致的主要特性,但并不是所有的NoSQL存儲(chǔ)設(shè)備都具有這些特性。(1)無(wú)模式的數(shù)據(jù)模型——數(shù)據(jù)可以以它的原始形式存在。(2)橫向擴(kuò)展而不是縱向擴(kuò)展——為了獲得額外的存儲(chǔ)空間,NoSQL可以增加更多的節(jié)點(diǎn),而不是用更好的性能/容量更高的節(jié)點(diǎn)替換現(xiàn)有的節(jié)點(diǎn)。(3)高可用性——NoSQL建立在提供開(kāi)箱即用的容錯(cuò)性的基于集群的技術(shù)之上。9.4.1主要特征(4)較低的運(yùn)營(yíng)成本——許多NoSQL數(shù)據(jù)庫(kù)建立在開(kāi)源的平臺(tái)上,不需要支付軟件許可費(fèi)。它們通??梢圆渴鹪谏虡I(yè)硬件上。(5)最終一致性——跨節(jié)點(diǎn)的數(shù)據(jù)讀取可能在寫入后短時(shí)間內(nèi)不一致。但是,最終所有的節(jié)點(diǎn)會(huì)處于一致的狀態(tài)。(6)BASE兼容而不是ACID兼容——BASE兼容性需要數(shù)據(jù)庫(kù)在網(wǎng)絡(luò)或者節(jié)點(diǎn)故障時(shí)保持高可用性,而不要求數(shù)據(jù)庫(kù)在數(shù)據(jù)更新發(fā)生時(shí)保持一致的狀態(tài)。數(shù)據(jù)庫(kù)可以處于不一致?tīng)顟B(tài)直到最后獲得一致性。9.4.1主要特征(7)API驅(qū)動(dòng)的數(shù)據(jù)訪問(wèn)——數(shù)據(jù)的訪問(wèn)通常支持基于API的查詢,但一些實(shí)現(xiàn)可能也提供類SQL查詢的支持。(8)自動(dòng)分片和復(fù)制——為了支持水平擴(kuò)展提供高可用性,NoSQL存儲(chǔ)設(shè)備自動(dòng)地運(yùn)用分片和復(fù)制技術(shù),數(shù)據(jù)集可以被水平分割然后被復(fù)制到多個(gè)節(jié)點(diǎn)。(9)集成緩存——沒(méi)有必要加入第三方分布式緩存層。9.4.1主要特征(10)分布式查詢支持——NoSQL存儲(chǔ)設(shè)備通過(guò)多重分片來(lái)維持一致性查詢。(11)不同類型設(shè)備同時(shí)使用——NoSQL存儲(chǔ)的使用并沒(méi)有淘汰傳統(tǒng)的RDBMS,支持不同類型的存儲(chǔ)設(shè)備可以同時(shí)使用。即在相同的結(jié)構(gòu)里,可以使用不同類型的存儲(chǔ)技術(shù)以持久化數(shù)據(jù)。這對(duì)于需要結(jié)構(gòu)化也需要半結(jié)構(gòu)化或非結(jié)構(gòu)化數(shù)據(jù)的系統(tǒng)開(kāi)發(fā)有好處。9.4.1主要特征(12)注重聚集數(shù)據(jù)——不像關(guān)系型數(shù)據(jù)庫(kù)那樣對(duì)處理規(guī)范化數(shù)據(jù)最為高效,NoSQL存儲(chǔ)設(shè)備存儲(chǔ)非規(guī)范化的聚集數(shù)據(jù)(一個(gè)實(shí)體為一個(gè)對(duì)象),所以減少了在不同應(yīng)用對(duì)象和存儲(chǔ)在數(shù)據(jù)庫(kù)中的數(shù)據(jù)之間進(jìn)行連接和映射操作的需要。但是有一個(gè)例外,圖數(shù)據(jù)存儲(chǔ)設(shè)備不注重聚集數(shù)據(jù)。9.4.1主要特征NoSQL存儲(chǔ)設(shè)備的出現(xiàn)主要?dú)w因于大數(shù)據(jù)數(shù)據(jù)集的容量、速度和多樣性等3V特征。由于NoSQL數(shù)據(jù)庫(kù)能夠像隨著數(shù)據(jù)集的進(jìn)化改變數(shù)據(jù)模型一樣改變模式,基于這個(gè)能力,NoSQL存儲(chǔ)設(shè)備能夠存儲(chǔ)無(wú)模式數(shù)據(jù)和不完整數(shù)據(jù)。換句話說(shuō),NoSQL數(shù)據(jù)庫(kù)支持模式進(jìn)化。9.4.1主要特征如右圖所示,根據(jù)不同存儲(chǔ)數(shù)據(jù)的方式,NoSQL存儲(chǔ)設(shè)備可以被分為四種類型。9.4.1主要特征鍵-值存儲(chǔ)設(shè)備以鍵-值對(duì)的形式存儲(chǔ)數(shù)據(jù),并且運(yùn)行機(jī)制和散列表類似。該表是一個(gè)值列表,其中每個(gè)值由一個(gè)鍵來(lái)標(biāo)識(shí)。值對(duì)數(shù)據(jù)庫(kù)不透明并且通常以BLOB形式存儲(chǔ)。存儲(chǔ)的值可以是任何從傳感器數(shù)據(jù)到視頻數(shù)據(jù)的集合。只能通過(guò)鍵查找值,因?yàn)閿?shù)據(jù)庫(kù)對(duì)所存儲(chǔ)的數(shù)據(jù)集合的細(xì)節(jié)是未知的。不能部分更新,更新操作只能是刪除或者插入。鍵-值存儲(chǔ)設(shè)備通常不含有任何索引,所以寫入非????;诤?jiǎn)單的存儲(chǔ)模型,鍵-值存儲(chǔ)設(shè)備高度可擴(kuò)展。由于鍵是檢索數(shù)據(jù)的唯一方式,為了便于檢索,所保存值的類型經(jīng)常被附在鍵之后。123_sensor1就是一個(gè)這樣的例子。9.4.2鍵-值存儲(chǔ)為了使存儲(chǔ)的數(shù)據(jù)具有一些結(jié)構(gòu),大多數(shù)的鍵-值存儲(chǔ)設(shè)備會(huì)提供集合或桶(像表一樣)來(lái)放置鍵-值對(duì)。如下圖所示,一個(gè)集合就可以容納多種數(shù)據(jù)格式。一些實(shí)現(xiàn)方法為了降低存儲(chǔ)空間從而支持壓縮值。但是這樣在讀出期間會(huì)造成延遲,因?yàn)閿?shù)據(jù)在返回之前需要先被解壓。圖9-11數(shù)據(jù)被組織在鍵-值對(duì)中的一個(gè)例子9.4.2鍵-值存儲(chǔ)鍵-值存儲(chǔ)設(shè)備適用于:·需要存儲(chǔ)非結(jié)構(gòu)化數(shù)據(jù)?!ば枰哂懈咝У淖x寫性能。·值可以完全由鍵確定?!ぶ凳遣灰蕾嚻渌档莫?dú)立實(shí)體?!ぶ涤兄喈?dāng)簡(jiǎn)單的結(jié)果或是二進(jìn)制的。·查詢模式簡(jiǎn)單,只包括插入、查找和刪除操作。·存儲(chǔ)的值在應(yīng)用層被操作。鍵-值存儲(chǔ)設(shè)備的實(shí)例包括Riak、Redis和AmazonDynamoDB。9.4.2鍵-值存儲(chǔ)文檔存儲(chǔ)設(shè)備也存儲(chǔ)鍵-值對(duì)。但是,與鍵-值存儲(chǔ)設(shè)備不同,存儲(chǔ)的值是可以數(shù)據(jù)庫(kù)查詢的文檔。這些文檔可以具有復(fù)雜的嵌套結(jié)構(gòu),例如發(fā)票。這些文檔可以使用基于文本的編碼方案,如XML或JSON,或者使用二進(jìn)制編碼方案,如BSON(BinaryJSON)進(jìn)行編碼。9.4.3文檔存儲(chǔ)像鍵-值存儲(chǔ)設(shè)備一樣,大多數(shù)文檔存儲(chǔ)設(shè)備也會(huì)提供集合或桶來(lái)放置鍵-值對(duì)。文檔存儲(chǔ)設(shè)備和鍵-值存儲(chǔ)設(shè)備之間的區(qū)別如下:·文檔存儲(chǔ)設(shè)備是值可感知的?!ご鎯?chǔ)的值是自描述的,模式可以從值的結(jié)構(gòu)或從模式的引用推斷出,因?yàn)槲臋n已經(jīng)被包括在值中?!みx擇操作可以引用集合值內(nèi)的一個(gè)字段?!みx擇操作可以檢索集合的部分值?!ぶС植糠指?,所以集合的子集可以被更新?!ねǔVС钟糜诩铀俨檎业乃饕?.4.3文檔存儲(chǔ)每個(gè)文檔都可以有不同的模式,所以,在相同的集合或者桶中可能存儲(chǔ)不同種類的文檔。在最初的插入操作之后,可以加入新的屬性,所以提供了靈活的模式支持。應(yīng)當(dāng)指出,文檔存儲(chǔ)設(shè)備并不局限于存儲(chǔ)像XML文件等以真實(shí)格式存在的文檔,它們也可以用于存儲(chǔ)包含一系列具有平面或嵌套模式的屬性的集合。右圖展示了JSON文件如何以文檔的形式存儲(chǔ)在NoSQL數(shù)據(jù)庫(kù)中。圖9-12JSON文件存儲(chǔ)在文檔存儲(chǔ)設(shè)備中的一個(gè)例子9.4.3文檔存儲(chǔ)文檔存儲(chǔ)設(shè)備適用于:·存儲(chǔ)包含平面或嵌套模式的面向文檔的半結(jié)構(gòu)化數(shù)據(jù)?!つJ降倪M(jìn)化由于文檔結(jié)構(gòu)的未知性或者易變性而成為必然。·應(yīng)用需要對(duì)存儲(chǔ)的文檔進(jìn)行部分更新?!ば枰谖臋n的不同屬性上進(jìn)行查找。·以序列化對(duì)象的形式存儲(chǔ)應(yīng)用領(lǐng)域中的對(duì)象,例如顧客?!げ樵兡J桨迦?、選擇、更新和刪除操作。文檔存儲(chǔ)設(shè)備的例子包括MongoDB、CouchDB和Terrastore。9.4.3文檔存儲(chǔ)列簇存儲(chǔ)設(shè)備像傳統(tǒng)RDBMS一樣存儲(chǔ)數(shù)據(jù),但是會(huì)將相關(guān)聯(lián)的列聚集在一行中,從而形成列簇。如下圖所示,每一列都可以是一系列相關(guān)聯(lián)的集合,被稱為超列。圖9-13圖中加下劃線的列表示列簇?cái)?shù)據(jù)庫(kù)提供的靈活模式特征,此處每一行可以有不同的列9.4.4列簇存儲(chǔ)每個(gè)超列可包含任意數(shù)量的相關(guān)列,這些列通常作為一個(gè)單元被檢索或更新。每行都包括多個(gè)列簇,并且含有不同的列的集合,所以有靈活的模式支持。每行被行鍵標(biāo)識(shí)。列簇存儲(chǔ)設(shè)備提供快速數(shù)據(jù)訪問(wèn),并帶有隨機(jī)讀寫能力。它們把列簇存儲(chǔ)在不同的物理文件中,這會(huì)提高查詢響應(yīng)速度,因?yàn)橹挥斜徊樵兊牧写夭艜?huì)被搜索到。9.4.4列簇存儲(chǔ)一些列簇存儲(chǔ)設(shè)備支持選擇性地壓縮列簇。不對(duì)一些能夠被搜索到的列簇進(jìn)行壓縮,會(huì)讓查詢速度更快,因?yàn)樵诓檎抑?,那些目?biāo)列不需要被解壓縮。大多數(shù)的實(shí)現(xiàn)支持?jǐn)?shù)據(jù)版本管理,然而有一些支持對(duì)列數(shù)據(jù)指定到期時(shí)間。當(dāng)?shù)狡跁r(shí)間過(guò)了,數(shù)據(jù)會(huì)被自動(dòng)移除。9.4.4列簇存儲(chǔ)列簇存儲(chǔ)設(shè)備適用于:·需要實(shí)時(shí)的隨機(jī)讀寫能力,并且數(shù)據(jù)以已定義的結(jié)構(gòu)存儲(chǔ)?!?shù)據(jù)表示的是表的結(jié)構(gòu),每行包含著大量列,并且存在著相互關(guān)聯(lián)的數(shù)據(jù)形成的嵌套組?!ば枰獙?duì)模式的進(jìn)化提供支持,因?yàn)榱写氐脑黾踊蛘邉h除不需要在系統(tǒng)停機(jī)時(shí)間進(jìn)行?!つ承┳侄未蠖鄶?shù)情況下可以一起訪問(wèn),并且搜索需要利用字段的值。9.4.4列簇存儲(chǔ)·當(dāng)數(shù)據(jù)包含稀疏的行而需要有效地使用存儲(chǔ)空間時(shí),因?yàn)榱写財(cái)?shù)據(jù)庫(kù)只為存在列的行分配存儲(chǔ)空間。如果沒(méi)有列,將不會(huì)分配任何空間。·查詢模式包含插入、選擇、更新和刪除操作。列簇存儲(chǔ)設(shè)備包括Cassandra、HBase和AmazonSimpleDB。9.4.4列簇存儲(chǔ)圖存儲(chǔ)設(shè)備被用于持久化互聯(lián)的實(shí)體。不像其他的NoSQL存儲(chǔ)設(shè)備那樣注重實(shí)體的結(jié)構(gòu),圖存儲(chǔ)設(shè)備更強(qiáng)調(diào)存儲(chǔ)實(shí)體之間的聯(lián)系。
圖9-14圖存儲(chǔ)設(shè)備存儲(chǔ)實(shí)體和它們之間的關(guān)系9.4.5圖存儲(chǔ)存儲(chǔ)的實(shí)體被稱作節(jié)點(diǎn)(注意不要與集群節(jié)點(diǎn)相混淆)也被稱為頂點(diǎn),實(shí)體間的聯(lián)系被稱為邊。按照RDBMS的說(shuō)法,每個(gè)節(jié)點(diǎn)可被認(rèn)為是一行,而邊可表示連接。節(jié)點(diǎn)之間通過(guò)多條邊形成多種類型的鏈路,每個(gè)節(jié)點(diǎn)有如鍵-值對(duì)的屬性數(shù)據(jù),例如顧客可以有ID、姓名和年齡屬性。一個(gè)節(jié)點(diǎn)有多條邊,和在RDBMS中含有多個(gè)外鍵是相類似的,但是,并不是所有的節(jié)點(diǎn)都需要有相同的邊。查詢一般包括根據(jù)節(jié)點(diǎn)屬性或者邊屬性查找互聯(lián)節(jié)點(diǎn),通常被稱為節(jié)點(diǎn)的遍歷。邊可以是單向的或雙向的,指明了節(jié)點(diǎn)遍歷的方向。一般來(lái)講,圖存儲(chǔ)設(shè)備通過(guò)ACID兼容性而支持一致性。9.4.5圖存儲(chǔ)圖存儲(chǔ)設(shè)備的有用程度取決于節(jié)點(diǎn)之間的邊的數(shù)量和類型。邊的數(shù)量越多,類型越復(fù)雜,可以執(zhí)行的查詢的種類就越多。因此,如何全面地捕捉節(jié)點(diǎn)之間存在的不同類型的關(guān)系很重要。這不僅可用于現(xiàn)有的使用場(chǎng)景,也可以用來(lái)對(duì)數(shù)據(jù)進(jìn)行探索性的分析。圖存儲(chǔ)設(shè)備通常允許在不改變數(shù)據(jù)庫(kù)的情況下加入新的節(jié)點(diǎn)類型,這也使得可以在節(jié)點(diǎn)之間定義額外的連接,以新的關(guān)系或者節(jié)點(diǎn)體現(xiàn)在數(shù)據(jù)庫(kù)中。9.4.5圖存儲(chǔ)圖存儲(chǔ)設(shè)備適用于:·需要存儲(chǔ)互聯(lián)的實(shí)體。·需要根據(jù)關(guān)系的類型查詢實(shí)體,而不是實(shí)體的屬性?!げ檎一ヂ?lián)的實(shí)體組?!ぞ凸?jié)點(diǎn)遍歷距離來(lái)查找實(shí)體之間的距離?!榱藢ふ夷J蕉M(jìn)行的數(shù)據(jù)挖掘。圖存儲(chǔ)設(shè)備的主要例子有Neo4J、InfiniteGraph和OrientDB。9.4.5圖存儲(chǔ)傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS)是通過(guò)SQL這種標(biāo)準(zhǔn)語(yǔ)言來(lái)對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作的,而相對(duì)地,NoSQL數(shù)據(jù)庫(kù)并不使用SQL語(yǔ)言。因此,有時(shí)候人們會(huì)將其誤認(rèn)為是對(duì)使用SQL的現(xiàn)有RDBMS的否定,并將要取代RDBMS,而實(shí)際上卻并非如此。NoSQL數(shù)據(jù)庫(kù)是對(duì)RDBMS所不擅長(zhǎng)的部分進(jìn)行的補(bǔ)充,因此應(yīng)該理解為“NotonlySQL”的意思。NoSQL數(shù)據(jù)庫(kù)和傳統(tǒng)上使用的RDBMS之間的主要區(qū)別見(jiàn)表9-1。9.4.6與RDBMS的主要區(qū)別表9-1RDBMS與NoSQL數(shù)據(jù)庫(kù)的區(qū)別9.4.6與RDBMS的主要區(qū)別(1)數(shù)據(jù)模型與數(shù)據(jù)庫(kù)結(jié)構(gòu)。在RDBMS中,數(shù)據(jù)被歸納為表(Table)的形式,并通過(guò)定義數(shù)據(jù)之間的關(guān)系,來(lái)描述嚴(yán)格的數(shù)據(jù)模型。這種方式需要在理解要輸入數(shù)據(jù)的含義的基礎(chǔ)上,事先對(duì)字段結(jié)構(gòu)做出定義。一旦定義好的數(shù)據(jù)庫(kù)結(jié)構(gòu)就相對(duì)固定了,很難進(jìn)行修改。在NoSQL數(shù)據(jù)庫(kù)中,數(shù)據(jù)是通過(guò)鍵及其對(duì)應(yīng)的值的組合,或者是鍵值對(duì)和追加鍵來(lái)描述的,因此結(jié)構(gòu)非常簡(jiǎn)單,也無(wú)法定義數(shù)據(jù)之間的關(guān)系。其數(shù)據(jù)庫(kù)結(jié)構(gòu)無(wú)需在一開(kāi)始就固定下來(lái),且隨時(shí)都可以進(jìn)行靈活的修改。9.4.6與RDBMS的主要區(qū)別(2)數(shù)據(jù)一致性。在RDBMS中,由于存在ACID(Atomicity=原子性,Consistency=一致性、Isolation=隔離性、Durability=持久性)原則,因此可以保持嚴(yán)密的數(shù)據(jù)一致性。而NoSQL數(shù)據(jù)庫(kù)并不是遵循ACID這種嚴(yán)格的原則,而是采用結(jié)果上的一致性(Eventualconsistency),即可能存在臨時(shí)的、無(wú)法保持嚴(yán)密一致性的狀態(tài)。到底是用RDBMS還是NoSQL數(shù)據(jù)庫(kù),需要根據(jù)用途來(lái)進(jìn)行選擇,而數(shù)據(jù)一致性這一點(diǎn)尤為重要。9.4.6與RDBMS的主要區(qū)別例如,像銀行賬戶的轉(zhuǎn)入/轉(zhuǎn)出處理,如果不能保證交易處理立即在數(shù)據(jù)庫(kù)中得到體現(xiàn),并嚴(yán)密保持?jǐn)?shù)據(jù)一致性的話,就會(huì)引發(fā)很大的問(wèn)題。相對(duì)地,我們想一想Twitter上增加一個(gè)粉絲的情況。粉絲數(shù)量從1050人變成1051人,但這個(gè)變化即便沒(méi)有即時(shí)反映出來(lái),基本上也不會(huì)引發(fā)什么大問(wèn)題。前者這樣的情況,適合用RDBMS;而后者這樣的情況,則適合用NoSQL數(shù)據(jù)庫(kù)。9.4.6與RDBMS的主要區(qū)別(3)擴(kuò)展性。RDBMS由于重視ACID原則和數(shù)據(jù)的結(jié)構(gòu),因此在數(shù)據(jù)量增加的時(shí)候,基本上是采取購(gòu)買更大的服務(wù)器這樣向上擴(kuò)展的方法來(lái)進(jìn)行擴(kuò)容,而從架構(gòu)方面來(lái)看,是很難進(jìn)行橫向擴(kuò)展的。9.4.6與RDBMS的主要區(qū)別此外,由于數(shù)據(jù)的一致性需要嚴(yán)密的保證,對(duì)性能的影響也十分顯著,如果為了提升性能而進(jìn)行非正則化處理,則又會(huì)降低數(shù)據(jù)庫(kù)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年專屬采石場(chǎng)股權(quán)交易協(xié)議范本
- 2023-2024學(xué)年重慶市云陽(yáng)高級(jí)中學(xué)高三下學(xué)期摸底統(tǒng)一考試數(shù)學(xué)試題
- 2023-2024學(xué)年浙江省寧波重點(diǎn)中學(xué)高三第二學(xué)期綜合模擬數(shù)學(xué)試題
- 2024年工廠商業(yè)秘密保密協(xié)議
- 2024年銷售專員協(xié)議條款范本
- 2024年衛(wèi)生間隔板安裝服務(wù)協(xié)議范例
- 2024年期固定期限勞動(dòng)協(xié)議范例
- 2024年度搬運(yùn)作業(yè)承攬協(xié)議條款
- 2024年適用公司買賣協(xié)議詳盡模板
- 2024年度大理石供應(yīng)協(xié)議模板
- 江蘇省南京市建鄴區(qū)2024-2025學(xué)年九年級(jí)上學(xué)期期中考試物理試題(無(wú)答案)
- 中小學(xué)師德師風(fēng)建設(shè)各項(xiàng)制度匯編
- 廣東省珠海市子期中學(xué)、梅華中學(xué) 2024-2025 學(xué)年上學(xué)期期中考試七年級(jí)數(shù)學(xué)試題(無(wú)答案)
- 2024秋期河南開(kāi)放大學(xué)本科《消費(fèi)者權(quán)益保護(hù)法》一平臺(tái)無(wú)紙化考試(形考任務(wù)1至3+我要考試)試題及答案
- 公務(wù)員2024年國(guó)考申論真題(地市級(jí))及參考答案
- 2024年河南省信陽(yáng)市招才引智綠色通道招聘市直事業(yè)單位人員183人高頻難、易錯(cuò)點(diǎn)500題模擬試題附帶答案詳解
- 民用無(wú)人機(jī)操控員執(zhí)照(CAAC)考試復(fù)習(xí)重點(diǎn)題及答案
- 廣西南寧市第十四中學(xué)2023-2024學(xué)年七年級(jí)上學(xué)期期中地理試題
- 2024-2030年中國(guó)應(yīng)急產(chǎn)業(yè)市場(chǎng)發(fā)展分析及競(jìng)爭(zhēng)形勢(shì)與投資機(jī)會(huì)研究報(bào)告
- 2024年中國(guó)電動(dòng)鼻毛器市場(chǎng)調(diào)查研究報(bào)告
- 2025年高考語(yǔ)文復(fù)習(xí)備考復(fù)習(xí)策略講座
評(píng)論
0/150
提交評(píng)論