版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
項(xiàng)目5大數(shù)據(jù)存儲(chǔ)技術(shù)目錄1任務(wù)5.1:熟悉大數(shù)據(jù)存儲(chǔ)概念
【導(dǎo)讀案例】2018未來(lái)交通峰會(huì)召開(kāi),
高德地圖升級(jí)易行平臺(tái)
【任務(wù)描述】
【知識(shí)準(zhǔn)備】大數(shù)據(jù)存儲(chǔ)的主要概念【作業(yè)】【實(shí)訓(xùn)操作】ETI公司的背景信息2任務(wù)5.2:了解大數(shù)據(jù)存儲(chǔ)技術(shù)【導(dǎo)讀案例】2018未來(lái)交通峰會(huì)召開(kāi),高德地圖升級(jí)易行平臺(tái)討論:(1)高德是國(guó)內(nèi)領(lǐng)先的數(shù)字地圖內(nèi)容、導(dǎo)航和位置服務(wù)解決方案提供商。請(qǐng)通過(guò)網(wǎng)絡(luò)搜索,了解該企業(yè)的詳細(xì)情況,并簡(jiǎn)單敘述。(2)閱讀文章,請(qǐng)簡(jiǎn)單闡述什么是高德的“易行平臺(tái)”?(3)請(qǐng)思考,你覺(jué)得高德地圖在服務(wù)大眾容易出行的背后,蘊(yùn)藏著哪些大數(shù)據(jù)的內(nèi)涵?(4)請(qǐng)簡(jiǎn)單記述你所知道的上一周內(nèi)發(fā)生的國(guó)
際、國(guó)內(nèi)或者身邊的大事?!救蝿?wù)描述】(1)熟悉大數(shù)據(jù)存儲(chǔ)的基本概念和重要知識(shí);(2)熟悉一些關(guān)鍵底層機(jī)制背后的大數(shù)據(jù)存儲(chǔ)技術(shù)。(3)通過(guò)對(duì)案例企業(yè)ETI的分析,加深理解一般企業(yè)數(shù)據(jù)庫(kù)設(shè)計(jì)的現(xiàn)狀以及企業(yè)向大數(shù)據(jù)存儲(chǔ)轉(zhuǎn)化的方法與原則?!局R(shí)準(zhǔn)備】大數(shù)據(jù)存儲(chǔ)的主要概念從外部來(lái)源獲得的數(shù)據(jù)通常其格式或結(jié)構(gòu)不能被直接處理,為了克服這些不兼容性以及為數(shù)據(jù)存儲(chǔ)和處理進(jìn)行準(zhǔn)備,就需要進(jìn)行數(shù)據(jù)清理。從存儲(chǔ)的角度來(lái)看,一個(gè)數(shù)據(jù)的副本首先存儲(chǔ)為其獲得的格式,并且清理之后,準(zhǔn)備好的數(shù)據(jù)需要被再次存儲(chǔ)。通常,以下情況發(fā)生時(shí)需要存儲(chǔ)數(shù)據(jù):獲得外部數(shù)據(jù)集,或者內(nèi)部數(shù)據(jù)將用于大數(shù)據(jù)環(huán)境中。數(shù)據(jù)被操縱以適合用于數(shù)據(jù)分析。通過(guò)一個(gè)ETL活動(dòng)處理數(shù)據(jù),或分析操作產(chǎn)生的輸出結(jié)果。由于需要存儲(chǔ)大數(shù)據(jù)的數(shù)據(jù)集通常有多個(gè)副本,因此,使用創(chuàng)新的存儲(chǔ)策略和技術(shù),以實(shí)現(xiàn)具有成本效益和高度可擴(kuò)展的存儲(chǔ)解決方案。數(shù)據(jù)清理5.1.15.1.1數(shù)據(jù)清理所謂數(shù)據(jù)清理,是指用來(lái)自多個(gè)聯(lián)機(jī)事務(wù)處理(OLTP)系統(tǒng)的數(shù)據(jù)生成數(shù)據(jù)倉(cāng)庫(kù)的進(jìn)程的一部分。該進(jìn)程必須解決不正確的拼寫、兩個(gè)系統(tǒng)之間沖突的拼寫規(guī)則和沖突的數(shù)據(jù)(如對(duì)于相同的部分具有兩個(gè)編號(hào))之類的錯(cuò)誤。編碼或把資料錄入時(shí)的錯(cuò)誤,會(huì)威脅到測(cè)量的效度。數(shù)據(jù)清理主要解決數(shù)據(jù)文件建立中的人為誤差,以及數(shù)據(jù)文件中一些對(duì)統(tǒng)計(jì)分析結(jié)果影響較大的特殊數(shù)值。常用的數(shù)據(jù)清理方法包括過(guò)濾、凈化和為下游分析準(zhǔn)備數(shù)據(jù)等步驟,其具體過(guò)程第一步是偏差檢驗(yàn),第二步是數(shù)據(jù)變換,這兩步可迭代進(jìn)行。集群5.1.25.1.2集群在計(jì)算中,一個(gè)集群是緊密耦合的一些服務(wù)器或節(jié)點(diǎn)。這些服務(wù)器通常有相同的硬件規(guī)格并且通過(guò)網(wǎng)絡(luò)連接在一起作為一個(gè)工作單元(見(jiàn)圖)。集群中的每個(gè)節(jié)點(diǎn)都有自己的專用資源,如內(nèi)存、處理器和硬盤。通過(guò)把任務(wù)分割成小塊并且將它們分發(fā)到屬于統(tǒng)一集群的不
同計(jì)算機(jī)上執(zhí)行的方法,集群可以去執(zhí)行同
一個(gè)任務(wù)。
圖5-2集群示意圖5.1.2集群集群能為水平可擴(kuò)展的存儲(chǔ)解決方案提供必要的支持,也能為分布式數(shù)據(jù)處理提供一種線性擴(kuò)展的機(jī)制。集群有極高的可擴(kuò)展性,因而它可以把大的數(shù)據(jù)集分成多個(gè)更小的數(shù)據(jù)集以分布式的方式并行處理,這種特性為大數(shù)據(jù)處理提供了理想的環(huán)境,例如流式數(shù)據(jù)與成批的數(shù)據(jù)一起,經(jīng)過(guò)集群系統(tǒng)的處理,最終呈現(xiàn)在儀表板上。大數(shù)據(jù)數(shù)據(jù)集在使用集群時(shí),可以以批處理模式處理數(shù)據(jù),也可以采用實(shí)時(shí)模式。理想情況下,集群由許多低成本的商業(yè)節(jié)點(diǎn)構(gòu)成,這些節(jié)點(diǎn)合力提供強(qiáng)大的處理能力。由于集群由物理連接上相互獨(dú)立的設(shè)備組成,它具有固定的冗余與一定的容錯(cuò)性,因而當(dāng)網(wǎng)絡(luò)中某個(gè)節(jié)點(diǎn)發(fā)生錯(cuò)誤時(shí),它之前處理與分析的結(jié)果都是可恢復(fù)的??紤]到大數(shù)據(jù)處理過(guò)程偶爾有些不穩(wěn)定,我們通常采用云主機(jī)基礎(chǔ)設(shè)施服務(wù)或現(xiàn)成的分析環(huán)境作為集群的主干。文件系統(tǒng)和分布式文件系統(tǒng)5.1.35.1.3文件系統(tǒng)和分布式文件系統(tǒng)一個(gè)文件系統(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。5.1.3文件系統(tǒng)和分布式文件系統(tǒng)1.什么是分布式系統(tǒng)分布式系統(tǒng)(distributedsystem,見(jiàn)圖)是建立在網(wǎng)絡(luò)之上的軟件系統(tǒng)。作為軟件系統(tǒng),分布式系統(tǒng)具有高度的內(nèi)聚性和透明性,因此網(wǎng)絡(luò)和分布式系統(tǒng)之間的區(qū)別更多的在于高層軟件(特別是操
作系統(tǒng)),而不是硬件。
圖5-3分布式系統(tǒng)5.1.3文件系統(tǒng)和分布式文件系統(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ù)是分布的,即用戶不須知道關(guān)系是否分割、有無(wú)副本、數(shù)據(jù)存于哪個(gè)站點(diǎn)以及事務(wù)在哪個(gè)站點(diǎn)上執(zhí)行等。5.1.3文件系統(tǒng)和分布式文件系統(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)之上有一層軟件中間件(middleware)負(fù)責(zé)實(shí)現(xiàn)這個(gè)模型。例如互聯(lián)網(wǎng)(WorldWideWeb)就是一個(gè)典型的分布式系統(tǒng),在互聯(lián)網(wǎng)中,所有的一切看起來(lái)就好像是一個(gè)文檔(Web頁(yè)面)一樣。5.1.3文件系統(tǒng)和分布式文件系統(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)行該程序。分布式系統(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)、工作方式和功能上也不同。5.1.3文件系統(tǒng)和分布式文件系統(tǒng)網(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è)目錄下。分布式操作系統(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è)處理器一樣。5.1.3文件系統(tǒng)和分布式文件系統(tǒng)2.分布式文件系統(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)。像其他文件系統(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)容的功能。5.1.3文件系統(tǒng)和分布式文件系統(tǒng)一個(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ù)的快速特性。對(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)程。5.1.3文件系統(tǒng)和分布式文件系統(tǒng)由于這些限制,分布式文件系統(tǒng)更適用于數(shù)量少、空間大、并以連續(xù)方式訪問(wèn)的文件。多個(gè)較小的文件通常被合并成一個(gè)文件以獲得最佳的存儲(chǔ)和處理性能。當(dāng)數(shù)據(jù)必須以流模式獲取而且沒(méi)有隨機(jī)讀寫需求時(shí),會(huì)使分布式文件系統(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ǔ)空間中。5.1.3文件系統(tǒng)和分布式文件系統(tǒng)3.并行與分布式數(shù)據(jù)處理并行數(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)完成(見(jiàn)圖)。圖5-4一個(gè)任務(wù)被分成三個(gè)子任務(wù),在同一臺(tái)機(jī)器的不同處理器上并行進(jìn)行5.1.3文件系統(tǒng)和分布式文件系統(tǒng)分布式數(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ī)。
圖5-5分布式數(shù)據(jù)處理舉例5.1.3文件系統(tǒng)和分布式文件系統(tǒng)4.分布式存儲(chǔ)大數(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ì)。分布式存儲(chǔ)系統(tǒng)需要解決的關(guān)鍵技術(shù)問(wèn)題包括諸如可擴(kuò)展性、數(shù)據(jù)冗余、數(shù)據(jù)一致性、全局命名空間、緩存等,從架構(gòu)上來(lái)講,大體上可以將分布式存儲(chǔ)分為C/S(ClientServer)架構(gòu)和P2P(Peer-to-Peer)架構(gòu)兩種。當(dāng)然,也有一些分布式存儲(chǔ)中會(huì)同時(shí)存在這兩種架構(gòu)方式。5.1.3文件系統(tǒng)和分布式文件系統(tǒng)分布式存儲(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)。分片和復(fù)制5.1.45.1.4分片與復(fù)制1.分片分片是水平地將一個(gè)大的數(shù)據(jù)集劃分成較小的、更易于管理的數(shù)據(jù)集的過(guò)程,這些數(shù)據(jù)集叫做碎片。碎片分布在多個(gè)節(jié)點(diǎn)上,而節(jié)點(diǎn)是一個(gè)服務(wù)器或是一臺(tái)機(jī)器(見(jiàn)圖)。每個(gè)碎片存儲(chǔ)在一個(gè)單獨(dú)的節(jié)點(diǎn)上,每個(gè)節(jié)點(diǎn)只負(fù)責(zé)存儲(chǔ)在該節(jié)點(diǎn)上的數(shù)據(jù)。所有碎片都是同樣的模式,所有碎片集合起來(lái)代表完整的數(shù)據(jù)集。圖5-6一個(gè)分片的例子,一個(gè)分布在
節(jié)點(diǎn)A和節(jié)點(diǎn)B上的數(shù)據(jù)集,分別導(dǎo)
致分片A和分片B5.1.4分片與復(fù)制分片對(duì)客戶端來(lái)說(shuō)通常是透明的。分片允許處理負(fù)荷分布在多個(gè)節(jié)點(diǎn)上以實(shí)現(xiàn)水平可伸縮性。水平擴(kuò)展是一個(gè)通過(guò)在現(xiàn)有資源旁邊添加類似或更高容量資源來(lái)提高系統(tǒng)容量的方法。由于每個(gè)節(jié)點(diǎn)只負(fù)責(zé)整個(gè)數(shù)據(jù)集的一部分,讀/寫消耗的時(shí)間大大提高了。圖5-7演示了一個(gè)在實(shí)際工作中如何分片的
例子:圖5-7一個(gè)分片的例子,數(shù)據(jù)是從節(jié)點(diǎn)A和節(jié)
點(diǎn)B共同獲取的5.1.4分片與復(fù)制(1)每個(gè)碎片都可以獨(dú)立地為它負(fù)責(zé)的特定的數(shù)據(jù)子集提供讀取和寫入服務(wù);(2)根據(jù)查詢,數(shù)據(jù)可能需要從兩個(gè)碎片中獲取。分片的一個(gè)好處是它提供了部分容忍失敗的能力。在節(jié)點(diǎn)故障的情況下,只有存儲(chǔ)在該節(jié)點(diǎn)上的數(shù)據(jù)會(huì)受到影響。對(duì)于數(shù)據(jù)分片,需要考慮查詢模式以便碎片本身不會(huì)成為性能瓶頸。例如,需要查詢來(lái)自多個(gè)碎片的數(shù)據(jù),這將導(dǎo)致性能損失。數(shù)據(jù)本地化將經(jīng)常被訪問(wèn)的數(shù)據(jù)共存于一個(gè)單一碎片上,這有助于解決這樣的性能問(wèn)題。5.1.4分片與復(fù)制2.復(fù)制復(fù)制在多個(gè)節(jié)點(diǎn)上存儲(chǔ)數(shù)據(jù)集的多個(gè)拷貝,叫做副本(見(jiàn)圖)。復(fù)制因?yàn)橄嗤臄?shù)據(jù)在不同的節(jié)點(diǎn)上復(fù)制的原因提供了可伸縮性和可用性。數(shù)據(jù)容錯(cuò)也可以通過(guò)數(shù)據(jù)冗余來(lái)實(shí)現(xiàn),數(shù)據(jù)冗余確保單個(gè)節(jié)點(diǎn)失敗時(shí)數(shù)據(jù)不會(huì)丟失。有兩種不同的方法用于實(shí)現(xiàn)復(fù)制。圖5-8復(fù)制的一個(gè)例子,一個(gè)數(shù)據(jù)集被復(fù)制
到節(jié)點(diǎn)A和節(jié)點(diǎn)B,導(dǎo)致副本A和副本B5.1.4分片與復(fù)制(1)主從式復(fù)制。在主從式復(fù)制中,節(jié)點(diǎn)被安排在一個(gè)主從配置中,所有數(shù)據(jù)都被寫入主節(jié)點(diǎn)中。一旦保存,數(shù)據(jù)就被復(fù)制到多個(gè)從節(jié)點(diǎn)。包括插入、更新和刪除在內(nèi)的所有外部寫請(qǐng)求都發(fā)生在主節(jié)點(diǎn)上,而讀請(qǐng)求可以由任何從節(jié)點(diǎn)完成。在圖5-9中,寫操作是由主節(jié)點(diǎn)完成的,數(shù)據(jù)可以從從節(jié)點(diǎn)A或者從節(jié)點(diǎn)B中的任意一個(gè)節(jié)點(diǎn)讀取。圖5-9主從式復(fù)制的例子,單一的主節(jié)點(diǎn)A為
所有寫請(qǐng)求提供服務(wù),數(shù)據(jù)可以從從節(jié)點(diǎn)A或
從節(jié)點(diǎn)B中讀取5.1.4分片與復(fù)制主從式復(fù)制適合于讀請(qǐng)求密集的負(fù)載而不是寫請(qǐng)求密集的負(fù)載,因?yàn)椴粩嘣鲩L(zhǎng)的讀需求可以通過(guò)水平縮放管理,以增加更多的從節(jié)點(diǎn)。寫請(qǐng)求是一致的,這是因?yàn)樗袑懖僮鞫加芍鞴?jié)點(diǎn)協(xié)調(diào)。言下之意是,寫操作性能會(huì)隨著寫請(qǐng)求數(shù)量的增加而降低。如果主節(jié)點(diǎn)失敗,讀請(qǐng)求仍然可能通過(guò)任何從節(jié)點(diǎn)來(lái)完成。一個(gè)從節(jié)點(diǎn)可以作為各份節(jié)點(diǎn)配置主節(jié)點(diǎn)。如果主節(jié)點(diǎn)失敗,直到主節(jié)點(diǎn)恢復(fù)為止將不能進(jìn)行寫操作。主節(jié)點(diǎn)要么是從主節(jié)點(diǎn)的一個(gè)備份恢復(fù),要么是在從節(jié)點(diǎn)中選擇一個(gè)新的主節(jié)點(diǎn)。5.1.4分片與復(fù)制關(guān)于主從式復(fù)制的一個(gè)令人擔(dān)憂的問(wèn)題是讀不一致問(wèn)題,如果一個(gè)從節(jié)點(diǎn)在被更新到主節(jié)點(diǎn)之前被讀取,便產(chǎn)生這樣的問(wèn)題。為了確保讀一致性,實(shí)現(xiàn)了一個(gè)投票系統(tǒng),若是大多數(shù)從節(jié)點(diǎn)都包含相同版本的記錄則可以聲明一個(gè)讀操作是一致性的。實(shí)現(xiàn)這樣一個(gè)投票系統(tǒng)需要從節(jié)點(diǎn)之間的一個(gè)可靠且快速的溝通機(jī)制。圖5-10展示了一個(gè)讀不一致場(chǎng)景。圖5-10主從式復(fù)制中一個(gè)讀不一致例子5.1.4分片與復(fù)制①用戶A更新數(shù)據(jù);②數(shù)據(jù)從主節(jié)點(diǎn)復(fù)制到從節(jié)點(diǎn)A;③在數(shù)據(jù)復(fù)制到從節(jié)點(diǎn)B之前,用戶B試圖在從節(jié)點(diǎn)B讀取數(shù)據(jù),從而導(dǎo)致不一致的讀操作;④當(dāng)數(shù)據(jù)從主節(jié)點(diǎn)復(fù)制到從節(jié)點(diǎn)B之后,數(shù)據(jù)最終成為一致的。5.1.4分片與復(fù)制(2)對(duì)等式復(fù)制。指所有節(jié)點(diǎn)在同一水平上運(yùn)作,換句話說(shuō),各個(gè)節(jié)點(diǎn)之間沒(méi)有主從節(jié)點(diǎn)的關(guān)系。每個(gè)對(duì)等的節(jié)點(diǎn)同樣能夠處理讀請(qǐng)求和寫請(qǐng)求。每個(gè)寫操作復(fù)制到所有的對(duì)等節(jié)點(diǎn)中去(見(jiàn)圖)。圖5-11寫操作同時(shí)復(fù)制到
對(duì)等節(jié)點(diǎn)A、B和C可以從對(duì)等節(jié)點(diǎn)A讀取數(shù)據(jù),
但也可以從對(duì)等節(jié)點(diǎn)B或C讀取5.1.4分片與復(fù)制對(duì)等式復(fù)制容易造成寫不一致,寫不一致發(fā)生在同時(shí)更新同一數(shù)據(jù)的多個(gè)對(duì)等節(jié)點(diǎn)的時(shí)候。這可以通過(guò)實(shí)現(xiàn)一個(gè)悲觀或樂(lè)觀并發(fā)策略來(lái)解決這個(gè)問(wèn)題。悲觀并發(fā)是一種防止不一致的有前瞻性的策略。它使用鎖來(lái)確保在一個(gè)記錄上同一個(gè)時(shí)間只有一個(gè)更新操作可能發(fā)生。然而,這種方法的可用性較差,因?yàn)檎诒桓碌臄?shù)據(jù)庫(kù)記錄一直是不可用的,直到所有鎖被釋放。樂(lè)觀并發(fā)是一個(gè)被動(dòng)的策略,它不使用鎖。相反,它允許不一致性在所有更新都被實(shí)現(xiàn)后最終可以獲得一致性這樣的前提下發(fā)生。5.1.4分片與復(fù)制對(duì)于樂(lè)觀并發(fā),對(duì)等節(jié)點(diǎn)在達(dá)到一致性之前可能會(huì)保持一段時(shí)間的不一致性。然而,因?yàn)闆](méi)有涉及任何鎖定,數(shù)據(jù)庫(kù)仍然是可以訪問(wèn)的。像主從式復(fù)制一樣,當(dāng)一些對(duì)等節(jié)點(diǎn)已經(jīng)完成了它們的更新而其他節(jié)點(diǎn)正在執(zhí)行更新期間,讀操作可以是不一致的。然而,當(dāng)所有的對(duì)等節(jié)點(diǎn)的更新操作已經(jīng)被執(zhí)行后,讀操作最終成為一致的??梢詫?shí)現(xiàn)一個(gè)投票系統(tǒng)來(lái)確保讀操作一致性,在投票系統(tǒng)中,如果絕大多數(shù)的對(duì)等節(jié)點(diǎn)都包含相同版本的記錄,則聲明一個(gè)讀操作是一致的。實(shí)現(xiàn)這樣一個(gè)投票系統(tǒng)需要一個(gè)可靠且快速的對(duì)等節(jié)點(diǎn)之間的通信機(jī)制。圖5-12演示了讀操作不一致情況出現(xiàn)的場(chǎng)景。5.1.4分片與復(fù)制圖5-12一個(gè)對(duì)等式復(fù)制的示例,其中發(fā)生了不一致的讀操作5.1.4分片與復(fù)制①用戶A更新數(shù)據(jù);②a.數(shù)據(jù)被復(fù)制到對(duì)等節(jié)點(diǎn)A;b.數(shù)據(jù)被復(fù)制到對(duì)等節(jié)點(diǎn)B;③在數(shù)據(jù)被復(fù)制到對(duì)等節(jié)點(diǎn)C之前,用戶B試圖從對(duì)等節(jié)點(diǎn)C讀取數(shù)據(jù),這導(dǎo)致不一致的讀操作;④最終數(shù)據(jù)將被更新到對(duì)等節(jié)點(diǎn)C中,并且數(shù)據(jù)庫(kù)將再次獲得一致性。5.1.4分片與復(fù)制3.分片與復(fù)制為了改善分片機(jī)制所提供的有限的容錯(cuò)能力,且受益于增加復(fù)制的可用性和可伸縮性,分片和復(fù)制可以組合使用(見(jiàn)圖)。圖5-13分片和復(fù)制的比較,顯示了分布在兩個(gè)
節(jié)點(diǎn)上的數(shù)據(jù)集分布的不同的方法5.1.4分片與復(fù)制(1)結(jié)合分片和主從式復(fù)制。當(dāng)分片機(jī)制結(jié)合主從式復(fù)制時(shí),多個(gè)碎片成為一個(gè)主節(jié)點(diǎn)的從節(jié)點(diǎn),并且主節(jié)點(diǎn)本身是一個(gè)碎片。盡管這將導(dǎo)致有多個(gè)主節(jié)點(diǎn),但一個(gè)從節(jié)點(diǎn)碎片只能由一個(gè)主節(jié)點(diǎn)碎片管理。由主節(jié)點(diǎn)碎片來(lái)維護(hù)寫操作的一致性。但如果主節(jié)點(diǎn)碎片變?yōu)椴豢刹僮鞯幕蚴浅霈F(xiàn)了網(wǎng)絡(luò)故障,與寫操作相關(guān)的容錯(cuò)能力將會(huì)受到影響。碎片的副本保存在多個(gè)從節(jié)點(diǎn)中,為讀操作提供可擴(kuò)展性和容錯(cuò)性。5.1.4分片與復(fù)制在圖5-14中:每個(gè)節(jié)點(diǎn)都同時(shí)作為主節(jié)點(diǎn)和不同碎片的從節(jié)點(diǎn)。碎片A上的寫操作(id=2)是由節(jié)點(diǎn)A管理的,因?yàn)樗撬槠珹的主節(jié)點(diǎn)。節(jié)點(diǎn)A將數(shù)據(jù)(id=2)復(fù)制到節(jié)點(diǎn)B中,這是碎片A的一個(gè)從節(jié)點(diǎn)。讀操作(id=4)可以直接由節(jié)點(diǎn)B或節(jié)點(diǎn)C提供服務(wù),因?yàn)槊總€(gè)節(jié)點(diǎn)都包含了碎片B。圖5-14分片和主從式
復(fù)制結(jié)合的例子5.1.4分片與復(fù)制(2)結(jié)合分片和對(duì)等式復(fù)制。當(dāng)分片結(jié)合對(duì)等式復(fù)制時(shí),每個(gè)碎片被復(fù)制到多個(gè)對(duì)等節(jié)點(diǎn),每個(gè)對(duì)等節(jié)點(diǎn)僅僅只負(fù)責(zé)整個(gè)數(shù)據(jù)集的子集。總的來(lái)說(shuō),這有助于實(shí)現(xiàn)更高的可擴(kuò)展性和容錯(cuò)性。由于這里沒(méi)有涉及主節(jié)點(diǎn),所以不存在單點(diǎn)故障,并且支持讀操作和寫操作的容錯(cuò)性。在圖5-15中:圖5-15分片和對(duì)等式復(fù)制結(jié)合的例子5.1.4分片與復(fù)制每個(gè)節(jié)點(diǎn)包含兩個(gè)不同碎片的副本。寫操作(id=3)同時(shí)復(fù)制到節(jié)點(diǎn)A和節(jié)點(diǎn)C(對(duì)等節(jié)點(diǎn))中,它們負(fù)責(zé)碎片C。讀操作(id=6)可以由節(jié)點(diǎn)B或節(jié)點(diǎn)C中任何一個(gè)提供服務(wù),因?yàn)樗鼈兠總€(gè)都包含碎片B。CAP定理5.1.55.1.5CAP定理EricBrewer于2000年提出的分布式系統(tǒng)設(shè)計(jì)的CAP理論(布魯爾定理)指出,一個(gè)分布式系統(tǒng)不可能同時(shí)保證一致性(Consistency)、可用性(Availability)和分區(qū)容忍性(Partitiontolerance)這三個(gè)要素,這也被稱為表達(dá)與分布式數(shù)據(jù)庫(kù)系統(tǒng)相關(guān)的三重約束。當(dāng)然,除了這三個(gè)維度,一個(gè)分布式存儲(chǔ)系統(tǒng)往往會(huì)根據(jù)具體業(yè)務(wù)的不同,在特性設(shè)計(jì)上有不同的取舍,比如,是否需要緩存模塊、是否支持通用的文件系統(tǒng)接口等。5.1.5CAP定理任何一個(gè)在集群上運(yùn)行的分布式存儲(chǔ)(數(shù)據(jù)庫(kù))系統(tǒng)只能根據(jù)其具體的業(yè)務(wù)特征和具體需求,最大地優(yōu)化其中的兩個(gè)要素。一致性——從任何節(jié)點(diǎn)的讀操作會(huì)導(dǎo)致相同的數(shù)據(jù)跨越多個(gè)節(jié)點(diǎn)(見(jiàn)圖)。圖5-16一致性:雖然有三個(gè)不同的節(jié)
點(diǎn)來(lái)存儲(chǔ)記錄,所有三個(gè)用戶得到相同
的amount列的值5.1.5CAP定理可用性——任何一個(gè)讀/寫請(qǐng)求總是會(huì)以成功或是失敗的形式得到響應(yīng)(見(jiàn)圖)。圖5-17可用性和分區(qū)容忍5.1.5CAP定理·分區(qū)容忍――數(shù)據(jù)庫(kù)系統(tǒng)可以容忍通信中斷,通過(guò)將集群分成多個(gè)豎井,仍然可以對(duì)讀/寫請(qǐng)求提供服務(wù)。圖5-17中,在發(fā)生通信故障時(shí),來(lái)自兩個(gè)用戶的請(qǐng)求仍然會(huì)被提供服務(wù)(1,2)。然而,對(duì)于用戶B來(lái)說(shuō),因?yàn)閕d=3的記錄沒(méi)有被復(fù)制到對(duì)等節(jié)點(diǎn)C中而造成更新失敗。用戶被正式通知(3)更新失敗了5.1.5CAP定理下面場(chǎng)景展示了為什么CAP定理的三個(gè)屬性只有兩個(gè)可以同時(shí)支持。為了幫助這個(gè)討論,圖5-18提供了一個(gè)維恩圖解顯示了一致性、可用性和分區(qū)容忍所重疊的區(qū)域。圖5-18總結(jié)CAP定理的維恩圖5.1.5CAP定理如果一致性(C)和可用性(A)是必需的,可用節(jié)點(diǎn)之間需要進(jìn)行溝通以確保一致性(C)。因此,分區(qū)容忍(P)是不可能達(dá)到的。如果一致性(C)和分區(qū)容忍(P)是需要的,節(jié)點(diǎn)不能保持可用性(A),因?yàn)闉榱藢?shí)現(xiàn)一致性(C)節(jié)點(diǎn)將變得不可用。如果可用性(A)和分區(qū)容忍(P)是必需的,因?yàn)榭紤]到節(jié)點(diǎn)之間的數(shù)據(jù)通信需要,那么一致性(C)是不可能達(dá)到的。因此,數(shù)據(jù)庫(kù)仍然是可用的(A),但是結(jié)果數(shù)據(jù)庫(kù)是不一致的。在分布式數(shù)據(jù)庫(kù)系統(tǒng)中,可伸縮性和容錯(cuò)能力可以通過(guò)額外的節(jié)點(diǎn)來(lái)提高,雖然這對(duì)一致性(C)造成了挑戰(zhàn)。添加的節(jié)點(diǎn)也會(huì)導(dǎo)致可用性(A)降低,因?yàn)楣?jié)點(diǎn)之間增加的通信將造成延遲。5.1.5CAP定理分布式數(shù)據(jù)庫(kù)系統(tǒng)不能保證100%分區(qū)容忍(P)。雖然溝通中斷是非常罕見(jiàn)的和暫時(shí)的,分區(qū)容忍(P)必須始終被分布式數(shù)據(jù)庫(kù)支持;因此,CAP通常是C+P或者A+P之間的一個(gè)選擇。系統(tǒng)的需求將決定怎樣選擇。ACID設(shè)計(jì)原則5.1.65.1.6ACID設(shè)計(jì)原則ACID是一個(gè)數(shù)據(jù)庫(kù)設(shè)計(jì)原則與事務(wù)管理的形式,這個(gè)縮寫詞代表了:原子性(Atomicity)一致性(Consistency)隔離(Iso1ation)持久性(Durabi1ity)ACID是數(shù)據(jù)庫(kù)事務(wù)管理的傳統(tǒng)方法,是基于關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)的。ACID利用悲觀并發(fā)控制來(lái)確保通過(guò)記錄鎖的方式維護(hù)應(yīng)用程序的一致性。原子性確保所有操作總是完全成功或徹底失敗。換句話說(shuō),這里沒(méi)有部分事務(wù)。5.1.6ACID設(shè)計(jì)原則以下步驟如圖5-19所示:圖5-19ACID的原子性屬性的一個(gè)顯而易見(jiàn)的示例5.1.6ACID設(shè)計(jì)原則(1)用戶試圖更新三條記錄作為一個(gè)事務(wù)的一部分;(2)在兩個(gè)記錄成功更新之前發(fā)生了一個(gè)錯(cuò)誤;(3)因此,數(shù)據(jù)庫(kù)可以回滾任何部分事務(wù)的操作,并且能使系統(tǒng)回到之前的狀態(tài)。一致性保證數(shù)據(jù)庫(kù)總是保持在一致的狀態(tài),這是通過(guò)確保數(shù)據(jù)只有符合數(shù)據(jù)庫(kù)的約束模式才可以被寫入數(shù)據(jù)庫(kù)。因此,處于一致?tīng)顟B(tài)的數(shù)據(jù)庫(kù)進(jìn)行一個(gè)成功的交易后仍將處于一致?tīng)顟B(tài)。5.1.6ACID設(shè)計(jì)原則在圖5-20中:圖5-20ACID的一致性的一個(gè)例子5.1.6ACID設(shè)計(jì)原則(1)一個(gè)用戶試圖用varchar類型的值去更新表的amount列,這一列應(yīng)該是浮點(diǎn)類型的值;(2)數(shù)據(jù)庫(kù)應(yīng)用本身的驗(yàn)證檢查并拒絕此更新,因?yàn)椴迦氲闹颠`反了amount列的約束檢查。隔離機(jī)制確保事務(wù)的結(jié)果對(duì)其他操
作而言是不可見(jiàn)的,直到本事務(wù)完
成為止。在圖5-21中:圖5-21ACID的隔離特性的一個(gè)例子5.1.6ACID設(shè)計(jì)原則(1)用戶嘗試更新兩個(gè)記錄作為事務(wù)的一部分;(2)數(shù)據(jù)庫(kù)成功更新第一個(gè)記錄;(3)然而,在能更新第二記錄之前,用戶B嘗試去更新同一個(gè)記錄。數(shù)據(jù)庫(kù)不會(huì)允許用戶B進(jìn)行更新,直到用戶A更新完全成功或完全失敗。這是因?yàn)閾碛衖d3的記錄是由數(shù)據(jù)庫(kù)鎖定的,直到事務(wù)完成為止。持久性確保一個(gè)操作的結(jié)果是永久性的。換句話說(shuō),一旦事務(wù)已經(jīng)被提交,則不能進(jìn)行回滾。這是跟任何系統(tǒng)故障都無(wú)關(guān)的。5.1.6ACID設(shè)計(jì)原則在圖5-22中:圖5-22ACID的持久性特點(diǎn)5.1.6ACID設(shè)計(jì)原則(1)一個(gè)用戶更新一條記錄,作為事務(wù)的一部分;(2)數(shù)據(jù)庫(kù)成功更新這條記錄;(3)就在這次更新之后出現(xiàn)一個(gè)電源故障。雖然沒(méi)有電源,然而數(shù)據(jù)庫(kù)維護(hù)其狀態(tài);(4)電力已恢復(fù)了;(5)當(dāng)用戶請(qǐng)求這個(gè)記錄時(shí),數(shù)據(jù)庫(kù)按這條記錄的最后一次更新去提供服務(wù)。5.1.6ACID設(shè)計(jì)原則圖5-23顯示了ACID原理的應(yīng)用結(jié)果:圖5-23ACID原則導(dǎo)致一致的數(shù)據(jù)庫(kù)行為5.1.6ACID設(shè)計(jì)原則(1)用戶嘗試更新記錄,作為事務(wù)的一部分;(2)數(shù)據(jù)庫(kù)驗(yàn)證更新的值并且成功地進(jìn)行更新;(3)當(dāng)事務(wù)成功地完全完成后,當(dāng)用戶B和C請(qǐng)求相同的記錄時(shí),數(shù)據(jù)庫(kù)為兩個(gè)用戶提供更新后的值。BASE設(shè)計(jì)原理5.1.75.1.7BASE設(shè)計(jì)原理BASE是一個(gè)根據(jù)CAP定理的數(shù)據(jù)庫(kù)設(shè)計(jì)原理,它采用了使用分布式技術(shù)的數(shù)據(jù)庫(kù)系統(tǒng)。BASE代表:基本可用(BasicallyAvailable)軟狀態(tài)(SoftState)最終一致性(EventualConsistency)當(dāng)一個(gè)數(shù)據(jù)庫(kù)支持BASE時(shí),它支持可用性超過(guò)一致性。換句話說(shuō),從CAP原理的角度來(lái)看數(shù)據(jù)庫(kù)采用A+P模式。從本質(zhì)上說(shuō),BASE通過(guò)放寬被ACID特性規(guī)定的強(qiáng)一致性約束來(lái)使用樂(lè)觀并發(fā)。如果數(shù)據(jù)庫(kù)是“基本可用”的,該數(shù)據(jù)庫(kù)將始終響應(yīng)客戶的請(qǐng)求,無(wú)論是通過(guò)返回請(qǐng)求數(shù)據(jù)的方式,或是發(fā)送一個(gè)成功或失敗的通知。5.1.7BASE設(shè)計(jì)原理在圖5-24中,數(shù)據(jù)庫(kù)是基本可用的,盡管因?yàn)榫W(wǎng)絡(luò)故障的原因它被劃分開(kāi)。軟狀態(tài)意味著一個(gè)數(shù)據(jù)庫(kù)當(dāng)讀取數(shù)據(jù)時(shí)可能會(huì)處于不一致的狀態(tài);因此,當(dāng)相同的數(shù)據(jù)再次被請(qǐng)求時(shí)結(jié)果可能會(huì)改變。這是因?yàn)閿?shù)據(jù)可能因?yàn)橐恢滦远桓?,即使兩次讀操作之間沒(méi)有用戶寫入
數(shù)據(jù)到數(shù)據(jù)庫(kù)。這個(gè)特性與最終一致
性密切相關(guān)。圖5-24用戶A和用戶B接收到數(shù)據(jù),盡管數(shù)據(jù)
庫(kù)因?yàn)橐粋€(gè)網(wǎng)絡(luò)故障被分區(qū)5.1.7BASE設(shè)計(jì)原理在圖5-25中:(1)用戶A更新一條記錄到對(duì)等節(jié)點(diǎn)A;(2)在其他對(duì)等節(jié)點(diǎn)更新之前,用戶B從對(duì)等節(jié)點(diǎn)C請(qǐng)求相同的記錄;(3)數(shù)據(jù)庫(kù)現(xiàn)在處于一個(gè)軟狀態(tài),且返
回給用戶B的是陳舊的數(shù)據(jù)。圖5-25在此顯示BASE的軟狀態(tài)屬性的一個(gè)示例5.1.7BASE設(shè)計(jì)原理不同的客戶讀取時(shí)的狀態(tài)是最終一致性的狀態(tài),緊跟著一個(gè)寫操作寫入到數(shù)據(jù)庫(kù)之后,可能不會(huì)返回一致的結(jié)果。數(shù)據(jù)庫(kù)只有當(dāng)更新變化傳播到所有的節(jié)點(diǎn)后才能達(dá)到一致性。當(dāng)數(shù)據(jù)庫(kù)在達(dá)到最終一致的狀態(tài)的過(guò)程中,它將處于一個(gè)軟狀態(tài)。5.1.7BASE設(shè)計(jì)原理在圖5-26中:
圖5-26BASE的最終一致性屬性的一個(gè)示例5.1.7BASE設(shè)計(jì)原理(1)用戶A更新一條記錄;(2)記錄只在對(duì)等節(jié)點(diǎn)A中被更新,但在其他對(duì)等節(jié)點(diǎn)被更新之前,用戶B請(qǐng)求相同的記錄;(3)數(shù)據(jù)庫(kù)現(xiàn)在處于一個(gè)軟狀態(tài)。返回給用戶B的是從對(duì)等節(jié)點(diǎn)C處獲得的陳舊的數(shù)據(jù);(4)然而,數(shù)據(jù)庫(kù)最終達(dá)到一致性,用戶C得到的是正確的值。5.1.7BASE設(shè)計(jì)原理BASE更多地強(qiáng)調(diào)可用性而非一致性,這點(diǎn)與ACID不同。由于有記錄鎖,ACID需要犧牲可用性來(lái)確保一致性。雖然這種針對(duì)一致性的軟措施不能保證服務(wù)的一致性,但BASE的兼容數(shù)據(jù)庫(kù)可以服務(wù)多個(gè)客戶端而不會(huì)產(chǎn)生時(shí)間上的延遲?!咀鳂I(yè)】討論:【實(shí)訓(xùn)操作】熟悉大數(shù)據(jù)存儲(chǔ)的概念討論:目錄1任務(wù)1.1:進(jìn)入大數(shù)據(jù)時(shí)代2任務(wù)5.2:
【導(dǎo)讀案例】基礎(chǔ)領(lǐng)域突破非一日之功,
是數(shù)十年耕耘
【任務(wù)描述】【知識(shí)準(zhǔn)備】大數(shù)據(jù)存儲(chǔ)的核心技術(shù)【作業(yè)】
【實(shí)訓(xùn)操作】熟悉大數(shù)據(jù)存儲(chǔ)技術(shù)【導(dǎo)讀案例】基礎(chǔ)領(lǐng)域突破非一日之功,是數(shù)十年耕耘討論:(1)在5G賽道上,華為主導(dǎo)的編碼方案提升了其在通信行業(yè)的地位。請(qǐng)結(jié)合華為的5G方面的事跡,談?wù)勀銓?duì)“基礎(chǔ)領(lǐng)域突破非一日之功,是數(shù)十年耕耘”這個(gè)標(biāo)題的理解?(2)2018年7月26日,華為在總部舉辦了一場(chǎng)別開(kāi)生面的高規(guī)格頒獎(jiǎng)儀式,受表彰的除了華為一線優(yōu)秀市場(chǎng)工作者等之
外,華為還特別表彰了5G極化碼(Polar碼)發(fā)
現(xiàn)者、土耳其ErdalArikan教授,請(qǐng)簡(jiǎn)單闡述你
對(duì)此的認(rèn)識(shí)與看法。【導(dǎo)讀案例】基礎(chǔ)領(lǐng)域突破非一日之功,是數(shù)十年耕耘(3)華為在5G網(wǎng)絡(luò)時(shí)代展示了很強(qiáng)的競(jìng)爭(zhēng)力,其中一個(gè)方面是華為正在全球范圍籠絡(luò)5G行業(yè)專家。但這樣的合作并非總是受到歡迎。比如,華為就曾受到美國(guó)國(guó)會(huì)若干議員的嚴(yán)厲指責(zé),質(zhì)疑華為在這方面的合作是否會(huì)威脅到美國(guó)的國(guó)家安全。對(duì)于這個(gè)問(wèn)題,你有什么看法?請(qǐng)簡(jiǎn)單闡述之。(4)請(qǐng)簡(jiǎn)單記述你所知道的上一周內(nèi)發(fā)生的國(guó)
際、國(guó)內(nèi)或者身邊的大事。【任務(wù)描述】(1)通過(guò)學(xué)習(xí),加深理解關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS)及其應(yīng)用;(2)深入理解“大數(shù)據(jù)的存儲(chǔ)需求徹底地改變了以關(guān)系型數(shù)據(jù)庫(kù)為中心的觀念?!保?)深入探討磁盤和內(nèi)存設(shè)備對(duì)大數(shù)據(jù)的作用,熟悉不同種類的NoSQL、NewSQL數(shù)據(jù)庫(kù)技術(shù)以及它們的用途。(4)熟悉內(nèi)存數(shù)據(jù)網(wǎng)絡(luò)和內(nèi)存數(shù)據(jù)庫(kù)?!局R(shí)準(zhǔn)備】大數(shù)據(jù)存儲(chǔ)的核心技術(shù)存儲(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)EnterpriseICT所支持的以關(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)系型方法不兼容。【知識(shí)準(zhǔn)備】大數(shù)據(jù)存儲(chǔ)的核心技術(shù)大數(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)硬盤而變快了。下面我們來(lái)深入探討磁盤和內(nèi)存設(shè)備對(duì)大數(shù)據(jù)的作用,其主題涵蓋了用于存儲(chǔ)半結(jié)構(gòu)化或非結(jié)構(gòu)化數(shù)據(jù)的NoSQL設(shè)備,介紹了不同種類的NoSQL數(shù)據(jù)庫(kù)技術(shù)以及它們的用途?!局R(shí)準(zhǔn)備】大數(shù)據(jù)存儲(chǔ)的核心技術(shù)磁盤存儲(chǔ)通常利用廉價(jià)的硬盤設(shè)備作為長(zhǎng)期存儲(chǔ)的介質(zhì),并可由分布式文件系統(tǒng)或數(shù)據(jù)庫(kù)實(shí)現(xiàn)(見(jiàn)圖)。圖5-28磁盤存儲(chǔ)可通過(guò)分布式文件系統(tǒng)或數(shù)據(jù)庫(kù)實(shí)現(xiàn)RDBMS數(shù)據(jù)庫(kù)5.2.15.2.1RDBMS數(shù)據(jù)庫(kù)RDBMS即關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)(RelationalDatabaseManagementSystem),是將數(shù)據(jù)組織為相關(guān)的行和列的關(guān)系數(shù)據(jù)庫(kù),而管理關(guān)系數(shù)據(jù)庫(kù)的計(jì)算機(jī)軟件就是關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng),它通過(guò)數(shù)據(jù)、關(guān)系和對(duì)數(shù)據(jù)的約束三者組成的數(shù)據(jù)模型來(lái)存放和管理數(shù)據(jù)。常用的數(shù)據(jù)庫(kù)軟件有Oracle、SQLServer等。RDBMS適合處理涉及少量的有隨機(jī)讀/寫特性的數(shù)據(jù)的工作。RDBMS是兼容ACID的,所以為了保持這樣的性質(zhì),它們通常僅限于單個(gè)節(jié)點(diǎn)。也正因?yàn)榇耍琑DBMS不支持開(kāi)箱即用的數(shù)據(jù)冗余和容錯(cuò)性。5.2.1RDBMS數(shù)據(jù)庫(kù)為了應(yīng)對(duì)大量數(shù)據(jù)快速的到達(dá),關(guān)系型數(shù)據(jù)通常需要擴(kuò)展。RDBMS采用了垂直擴(kuò)展,而不是水平擴(kuò)展,這是一種更加昂貴的并帶有破壞性的擴(kuò)展方式。因此,對(duì)于數(shù)據(jù)隨時(shí)間而積累的長(zhǎng)期存儲(chǔ)來(lái)說(shuō),RDBMS不是一個(gè)很好的選擇。關(guān)系型數(shù)據(jù)庫(kù)需要手動(dòng)分片,大多數(shù)都采用應(yīng)用邏輯,這意味著需要知道為了得到所需的數(shù)據(jù)去查詢哪一個(gè)分片。當(dāng)需要從多個(gè)分片中獲取數(shù)據(jù)時(shí),數(shù)據(jù)處理將進(jìn)一步復(fù)雜化。5.2.1RDBMS數(shù)據(jù)庫(kù)下面的步驟如圖5-29所示:圖5-29一個(gè)關(guān)系型數(shù)據(jù)庫(kù)被應(yīng)用邏輯手動(dòng)分片5.2.1RDBMS數(shù)據(jù)庫(kù)(1)用戶寫入一條記錄(id=2)。(2)應(yīng)用邏輯決定記錄將被寫入的分片。(3)記錄被送往應(yīng)用邏輯確定的分片。(4)用戶讀取一條記錄(id=4),應(yīng)用邏輯確定包含所需數(shù)據(jù)的分片。(5)讀取數(shù)據(jù)并返回給應(yīng)用。(6)應(yīng)用返回?cái)?shù)據(jù)給用戶。5.2.1RDBMS數(shù)據(jù)庫(kù)下面的步驟如圖5-30所示:圖5-30利用應(yīng)用邏輯對(duì)從不同碎片中檢索到的數(shù)據(jù)進(jìn)行連接操作的一個(gè)例子5.2.1RDBMS數(shù)據(jù)庫(kù)(1)用戶請(qǐng)求獲取多個(gè)數(shù)據(jù)(id=1,3),應(yīng)用邏輯確定將被讀取的分片。(2)應(yīng)用邏輯確定分片A和B將被讀取。(3)數(shù)據(jù)被讀取并由應(yīng)用做連接操作。(4)最后數(shù)據(jù)被返回給用戶。5.2.1RDBMS數(shù)據(jù)庫(kù)關(guān)系型數(shù)據(jù)庫(kù)通常需要數(shù)據(jù)保持一定的模式,所以它不直接支持存儲(chǔ)非關(guān)系型模式的半結(jié)構(gòu)化和非結(jié)構(gòu)化的數(shù)據(jù)。另外,在數(shù)據(jù)被插入或被更新時(shí)會(huì)檢查數(shù)據(jù)是否滿足模式的約束以保障模式的一致性,這也會(huì)引起開(kāi)銷造成延遲。這種延遲使得關(guān)系型數(shù)據(jù)庫(kù)不適用于存儲(chǔ)需要高可用性、快速數(shù)據(jù)寫入能力的數(shù)據(jù)庫(kù)存儲(chǔ)設(shè)備的高速數(shù)據(jù)。由于它的缺點(diǎn),在大數(shù)據(jù)環(huán)境下,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)通常并不適合作為主要的存儲(chǔ)設(shè)備。NoSQL數(shù)據(jù)庫(kù)5.2.25.2.2NoSQL數(shù)據(jù)庫(kù)一個(gè)Not-onlySQL(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ǔ)言。同樣,設(shè)計(jì)一個(gè)NoSQL數(shù)據(jù)庫(kù)用來(lái)存儲(chǔ)RDF數(shù)據(jù)將使用SPARQL來(lái)查詢它包含的關(guān)系。不過(guò),還是有一些NoSQL數(shù)據(jù)庫(kù)提供類似于SQL的查詢界面(見(jiàn)圖5-31)。5.2.2NoSQL數(shù)據(jù)庫(kù)圖5-31NoSQL數(shù)據(jù)庫(kù)可以提供一個(gè)類似于API或SQL-like的查詢接口5.2.2NoSQL數(shù)據(jù)庫(kù)(1)特征。下面列舉了一些NoSQL存儲(chǔ)設(shè)備與傳統(tǒng)RDBMS不一致的主要特性,但并不是所有的NoSQL存儲(chǔ)設(shè)備都具有這些特性。無(wú)模式的數(shù)據(jù)模型——數(shù)據(jù)可以以它的原始形式存在。橫向擴(kuò)展而不是縱向擴(kuò)展——為了獲得額外的存儲(chǔ)空間,NoSQL可以增加更多的節(jié)點(diǎn),而不是用更好的性能/容量更高的節(jié)點(diǎn)替換現(xiàn)有的節(jié)點(diǎn)。高可用性——NoSQL建立在提供開(kāi)箱即用的容錯(cuò)性的基于集群的技術(shù)之上。較低的運(yùn)營(yíng)成本——許多NoSQL數(shù)據(jù)庫(kù)建立在開(kāi)源的平臺(tái)上,不需要支付軟件許可費(fèi)。它們通??梢圆渴鹪谏虡I(yè)硬件上。5.2.2NoSQL數(shù)據(jù)庫(kù)最終一致性——跨節(jié)點(diǎn)的數(shù)據(jù)讀取可能在寫入后短時(shí)間內(nèi)不一致。但是,最終所有的節(jié)點(diǎn)會(huì)處于一致的狀態(tài)。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)直到最后獲得一致性。所以在考慮到CAP定理時(shí),NoSQL存儲(chǔ)設(shè)備通常是AP或CP(參見(jiàn)圖5-18)。API驅(qū)動(dòng)的數(shù)據(jù)訪問(wèn)——數(shù)據(jù)的訪問(wèn)通常支持基于API的查詢,包括REST(RepresentationalStateTransfer,表述性狀態(tài)轉(zhuǎn)移)類型的API,但是一些實(shí)現(xiàn)可能也提供類SQL查詢的支持。5.2.2NoSQL數(shù)據(jù)庫(kù)自動(dòng)分片和復(fù)制——為了支持水平擴(kuò)展提供高可用性,NoSQL存儲(chǔ)設(shè)備自動(dòng)地運(yùn)用分片和復(fù)制技術(shù),數(shù)據(jù)集可以被水平分割然后被復(fù)制到多個(gè)節(jié)點(diǎn)。集成緩存——沒(méi)有必要加入第三方分布式緩存層。分布式查詢支持——NoSQL存儲(chǔ)設(shè)備通過(guò)多重分片來(lái)維持一致性查詢。不同類型設(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ā)有好處。5.2.2NoSQL數(shù)據(jù)庫(kù)注重聚集數(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ù)。5.2.2NoSQL數(shù)據(jù)庫(kù)(2)理論基礎(chǔ)。NoSQL存儲(chǔ)設(shè)備的出現(xiàn)主要?dú)w因于大數(shù)據(jù)的數(shù)據(jù)集的容量、速度和多樣性等3V特征。容量。不斷增加的數(shù)據(jù)量的存儲(chǔ)需求,促進(jìn)了對(duì)具有高度可擴(kuò)展性的、同時(shí)使企業(yè)能夠降低成本、保持競(jìng)爭(zhēng)力的數(shù)據(jù)庫(kù)的使用。NoSQL的存儲(chǔ)設(shè)備提供了擴(kuò)展能力,同時(shí)使用廉價(jià)商用服務(wù)器滿足這一要求。速度。數(shù)據(jù)的快速涌入需要數(shù)據(jù)庫(kù)有著快速訪問(wèn)的數(shù)據(jù)寫入能力。NoSQL存儲(chǔ)設(shè)備利用按模式讀而不是按模式寫實(shí)現(xiàn)快速寫入。由于高度可用性,NoSQL存儲(chǔ)設(shè)備能夠確保寫入延遲不會(huì)由于節(jié)點(diǎn)或者網(wǎng)絡(luò)故障而發(fā)生。5.2.2NoSQL數(shù)據(jù)庫(kù)多樣性。存儲(chǔ)設(shè)備需要處理不同的數(shù)據(jù)格式,包括文檔、郵件、圖像和視頻以及不完整數(shù)據(jù)。NoSQL存儲(chǔ)設(shè)備可以存儲(chǔ)這些不同形式的半結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)的格式。同時(shí),由于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)化。5.2.2NoSQL數(shù)據(jù)庫(kù)(3)類型。如圖5-32~圖5-35所示,根據(jù)不同存儲(chǔ)數(shù)據(jù)的方式,NoSQL存儲(chǔ)設(shè)備可以被分為四種類型。圖5-32NoSQL鍵-值存儲(chǔ)的一個(gè)例子5.2.2NoSQL數(shù)據(jù)庫(kù)圖5-33NoSQL文檔存儲(chǔ)的一個(gè)例子5.2.2NoSQL數(shù)據(jù)庫(kù)圖5-34NoSQL列簇存儲(chǔ)的一個(gè)例子5.2.2NoSQL數(shù)據(jù)庫(kù)圖5-35NoSQL圖存儲(chǔ)的一個(gè)例子5.2.2NoSQL數(shù)據(jù)庫(kù)(4)鍵-值存儲(chǔ)。鍵-值存儲(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è)這樣的例子。5.2.2NoSQL數(shù)據(jù)庫(kù)為了使存儲(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ù)在返回之前需要先被解壓。圖5-36數(shù)據(jù)被組織在鍵-值對(duì)中的一個(gè)例子5.2.2NoSQL數(shù)據(jù)庫(kù)鍵-值存儲(chǔ)設(shè)備適用于:需要存儲(chǔ)非結(jié)構(gòu)化數(shù)據(jù)。需要具有高效的讀寫性能。值可以完全由鍵確定。值是不依賴其他值的獨(dú)立實(shí)體。值有著相當(dāng)簡(jiǎn)單的結(jié)果或是二進(jìn)制的。查詢模式簡(jiǎn)單,只包括插入、查找和刪除操作。存儲(chǔ)的值在應(yīng)用層被操作。5.2.2NoSQL數(shù)據(jù)庫(kù)鍵-值存儲(chǔ)設(shè)備不適用于:應(yīng)用需要通過(guò)值的屬性來(lái)查找或者過(guò)濾數(shù)據(jù)。不同的鍵-值項(xiàng)之間存在關(guān)聯(lián)。一組鍵的值需要在單個(gè)事務(wù)中被更新。在單個(gè)操作中需要操控多個(gè)鍵。在不同值中需要有模式一致性。需要更新值的單個(gè)屬性。鍵-值存儲(chǔ)設(shè)備的實(shí)例包括Riak、Redis和AmazonDynamoDB。5.2.2NoSQL數(shù)據(jù)庫(kù)(5)文檔存儲(chǔ)。文檔存儲(chǔ)設(shè)備也存儲(chǔ)鍵-值對(duì)。但是,與鍵-值存儲(chǔ)設(shè)備不同,存儲(chǔ)的值是可以數(shù)據(jù)庫(kù)查詢的文檔。這些文檔可以具有復(fù)雜的嵌套結(jié)構(gòu),例如發(fā)票。這些文檔可以使用基于文本的編碼方案,如XML或JSON,或者使用二進(jìn)制編碼方案,如BSON(BinaryJSON)進(jìn)行編碼。5.2.2NoSQL數(shù)據(jù)庫(kù)像鍵-值存儲(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)被包括在值中。選擇操作可以引用集合值內(nèi)的一個(gè)字段。選擇操作可以檢索集合的部分值。支持部分更新,所以集合的子集可以被更新。通常支持用于加速查找的索引。5.2.2NoSQL數(shù)據(jù)庫(kù)每個(gè)文檔都可以有不同的模式,所以,在相同的集合或者桶中可能存儲(chǔ)不同種類的文檔。在最初的插入操作之后,可以加入新的屬性,所以提供了靈活的模式支持。應(yīng)當(dāng)指出,文檔存儲(chǔ)設(shè)備并不局限于存儲(chǔ)像XML文件等以真實(shí)格式存在的文檔,它們也可以用于存儲(chǔ)包含一系列具有平面或嵌套模式的屬性的集合。下圖展示了JSON文件如何以文檔的形式存儲(chǔ)在NoSQL數(shù)據(jù)庫(kù)中。圖5-37JSON文件存儲(chǔ)在文檔存儲(chǔ)設(shè)備中的一個(gè)例子5.2.2NoSQL數(shù)據(jù)庫(kù)文檔存儲(chǔ)設(shè)備適用于:存儲(chǔ)包含平面或嵌套模式的面向文檔的半結(jié)構(gòu)化數(shù)據(jù)。模式的進(jìn)化由于文檔結(jié)構(gòu)的未知性或者易變性而成為必然。應(yīng)用需要對(duì)存儲(chǔ)的文檔進(jìn)行部分更新。需要在文檔的不同屬性上進(jìn)行查找。以序列化對(duì)象的形式存儲(chǔ)應(yīng)用領(lǐng)域中的對(duì)象,例如顧客。查詢模式包含插入、選擇、更新和刪除操作。5.2.2NoSQL數(shù)據(jù)庫(kù)文檔存儲(chǔ)設(shè)備不適用于:?jiǎn)蝹€(gè)事務(wù)中需要更新多個(gè)文檔。需要對(duì)歸一化后的多個(gè)數(shù)據(jù)或文檔之間執(zhí)行連接操作。由于文檔結(jié)構(gòu)在連續(xù)的查詢操作之后會(huì)發(fā)生改變,為了實(shí)現(xiàn)一致的查詢?cè)O(shè)計(jì)需要使用強(qiáng)制模式來(lái)重構(gòu)查詢語(yǔ)句。存儲(chǔ)的值不是自描述的,并且不包含對(duì)模式的引用。需要存儲(chǔ)二進(jìn)制值。文檔存儲(chǔ)設(shè)備的例子包括MongoDB、CouchDB和Terrastore。5.2.2NoSQL數(shù)據(jù)庫(kù)(6)列簇存儲(chǔ)。列簇存儲(chǔ)設(shè)備像傳統(tǒng)RDBMS一樣存儲(chǔ)數(shù)據(jù),但是會(huì)將相關(guān)聯(lián)的列聚集在一行中,從而形成列簇。如圖所示,每一列都可以是一系列相關(guān)聯(lián)的集合,被稱為超列。圖5-38圖中加下劃線的
列表示列簇?cái)?shù)據(jù)庫(kù)提供的
靈活模式特征,此處每一行可以有不同的列5.2.2NoSQL數(shù)據(jù)庫(kù)每個(gè)超列可包含任意數(shù)量的相關(guān)列,這些列通常作為一個(gè)單元被檢索或更新。每行都包括多個(gè)列簇,并且含有不同的列的集合,所以有靈活的模式支持。每行被行鍵標(biāo)識(shí)。列簇存儲(chǔ)設(shè)備提供快速數(shù)據(jù)訪問(wèn),并帶有隨機(jī)讀寫能力。它們把列簇存儲(chǔ)在不同的物理文件中,這會(huì)提高查詢響應(yīng)速度,因?yàn)橹挥斜徊樵兊牧写夭艜?huì)被搜索到。一些列簇存儲(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)移除。5.2.2NoSQL數(shù)據(jù)庫(kù)列簇存儲(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),并且搜索需要利用字段的值。當(dāng)數(shù)據(jù)包含稀疏的行而需要有效地使用存儲(chǔ)空間時(shí),因?yàn)榱写財(cái)?shù)據(jù)庫(kù)只為存在列的行分配存儲(chǔ)空間。如果沒(méi)有列,將不會(huì)分配任何空間。查詢模式包含插入、選擇、更新和刪除操作。5.2.2NoSQL數(shù)據(jù)庫(kù)列簇不適用于:需要對(duì)數(shù)據(jù)進(jìn)行關(guān)系型操作,例如連接操作。需要支持ACID事務(wù)。需要存儲(chǔ)二進(jìn)制數(shù)據(jù)。需要執(zhí)行SQL兼容查詢。查詢模式經(jīng)常改變,因?yàn)檫@樣將會(huì)重構(gòu)列簇的組織。列簇存儲(chǔ)設(shè)備包括Cassandra、HBase和AmazonSimpleDB。5.2.2NoSQL數(shù)據(jù)庫(kù)(7)圖存儲(chǔ)。圖存儲(chǔ)設(shè)備被用于持久化互聯(lián)的實(shí)體。不像其他的NoSQL存儲(chǔ)設(shè)備那樣注重實(shí)體的結(jié)構(gòu),圖存儲(chǔ)設(shè)備更強(qiáng)
調(diào)存儲(chǔ)實(shí)體之間的聯(lián)系(見(jiàn)圖)。圖5-39圖存儲(chǔ)設(shè)備存儲(chǔ)實(shí)體和它們之間的關(guān)系5.2.2NoSQL數(shù)據(jù)庫(kù)存儲(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兼容性而支持一致性。5.2.2NoSQL數(shù)據(jù)庫(kù)圖存儲(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ù)中。5.2.2NoSQL數(shù)據(jù)庫(kù)圖存儲(chǔ)設(shè)備適用于:需要存儲(chǔ)互聯(lián)的實(shí)體。需要根據(jù)關(guān)系的類型查詢實(shí)體,而不是實(shí)體的屬性。查找互聯(lián)的實(shí)體組。就節(jié)點(diǎn)遍歷距離來(lái)查找實(shí)體之間的距離。為了尋找模式而進(jìn)行的數(shù)據(jù)挖掘。5.2.2NoSQL數(shù)據(jù)庫(kù)圖存儲(chǔ)設(shè)備不適用于:需要更新大量的節(jié)點(diǎn)屬性或邊屬性,這包括對(duì)節(jié)點(diǎn)或邊的查詢,相對(duì)于節(jié)點(diǎn)的遍歷是非常費(fèi)時(shí)的操作。實(shí)體擁有大量的屬性或嵌套數(shù)據(jù),最好在圖存儲(chǔ)設(shè)備中存儲(chǔ)輕量實(shí)體,而在另外的非圖NoSQL存儲(chǔ)設(shè)備中存儲(chǔ)額外的屬性數(shù)據(jù)。需要存儲(chǔ)二進(jìn)制數(shù)據(jù)。基于節(jié)點(diǎn)或邊的屬性的查詢操作占據(jù)大部分的節(jié)點(diǎn)遍歷查詢。圖存儲(chǔ)設(shè)備的主要例子有Neo4J、InfiniteGraph和OrientDB。5.2.2NoSQL數(shù)據(jù)庫(kù)2.NoSQL與RDBMS的主要區(qū)別傳統(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ū)別有下列幾點(diǎn)(見(jiàn)表5-1)。5.2.2NoSQL數(shù)據(jù)庫(kù)表5-1RDBMS與NoSQL數(shù)據(jù)庫(kù)的區(qū)別5.2.2NoSQL數(shù)據(jù)庫(kù)(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ì)和追加鍵(ColumnFamily)來(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)行靈活的修改。5.2.2NoSQL數(shù)據(jù)庫(kù)(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)尤為重要。5.2.2NoSQL數(shù)據(jù)庫(kù)例如,像銀行賬戶的轉(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ù)。5.2.2NoSQL數(shù)據(jù)庫(kù)(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ò)展的。此外,由于數(shù)據(jù)的一致性需要嚴(yán)密的保證,對(duì)性能的影響也十分顯著,如果為了提升性能而進(jìn)行非正則化處理,則又會(huì)降低數(shù)據(jù)庫(kù)的維護(hù)性和操作性。5.2.2NoSQL數(shù)據(jù)庫(kù)雖然通過(guò)像Oracle的RAC(RealApplicationClusters,真正應(yīng)用集群)這樣能夠從多臺(tái)服務(wù)器同時(shí)操作數(shù)據(jù)庫(kù)的架構(gòu),也可以對(duì)RDBMS實(shí)現(xiàn)橫向擴(kuò)展,但從現(xiàn)實(shí)情況來(lái)看,這樣的擴(kuò)展最多到幾倍的程度就已經(jīng)達(dá)到極限了。除此之外還有一種方法,將數(shù)據(jù)庫(kù)的內(nèi)容由多臺(tái)應(yīng)用程序服務(wù)器進(jìn)行分布式緩存,并將緩存配置在RDBMS的前面。但在大規(guī)模環(huán)境下,會(huì)發(fā)生數(shù)據(jù)同步延遲、維護(hù)復(fù)雜等問(wèn)題,并不是一個(gè)非常實(shí)用的方法。NoSQL數(shù)據(jù)庫(kù)則具備很容易進(jìn)行橫向擴(kuò)展的特性,對(duì)性能造成的影響也很小。而且,由于它在設(shè)計(jì)上就是以在一般通用型硬件構(gòu)成的集群上工作為前提的,因此在成本方面也具有優(yōu)勢(shì)。5.2.2NoSQL數(shù)據(jù)庫(kù)(4)容錯(cuò)性。RDBMS可以通過(guò)復(fù)制(replication)將數(shù)據(jù)在多臺(tái)服務(wù)器上保留副本,從而提高容錯(cuò)性。然而,在發(fā)生數(shù)據(jù)不匹配的情況時(shí),以及想要增加副本時(shí),在維護(hù)上的負(fù)荷和成本都會(huì)提高。NoSQL由于本來(lái)就支持分布式環(huán)境,大多數(shù)NoSQL數(shù)據(jù)庫(kù)都沒(méi)有單一故障點(diǎn),對(duì)故障的應(yīng)對(duì)成本比較低。可見(jiàn),NoSQL數(shù)據(jù)庫(kù)具備這些特征:數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)單、不需要數(shù)據(jù)庫(kù)結(jié)構(gòu)定義(或者可以靈活變更)、不對(duì)數(shù)據(jù)一致性進(jìn)行嚴(yán)格保證、通過(guò)橫向擴(kuò)展可實(shí)現(xiàn)很高的擴(kuò)展性等。簡(jiǎn)而言之,就是一種以犧牲一定的數(shù)據(jù)一致性為代價(jià),追求靈活性、擴(kuò)展性的數(shù)據(jù)庫(kù)。5.2.2NoSQL數(shù)據(jù)庫(kù)NoSQL數(shù)據(jù)庫(kù)的誕生,是緣于現(xiàn)有RDBMS存在一些問(wèn)題,如不能處理非結(jié)構(gòu)化數(shù)據(jù)、難以進(jìn)行橫向擴(kuò)展、擴(kuò)展性存在極限等。也就是說(shuō),即便RDBMS非常適用于企業(yè)的一般業(yè)務(wù),但要作為以非結(jié)構(gòu)化數(shù)據(jù)為中心的大數(shù)據(jù)處理的基礎(chǔ),則并不是一個(gè)合適的選擇。例如,在實(shí)際進(jìn)行分析之前,很難確定在如此多樣的非結(jié)構(gòu)化數(shù)據(jù)中,到底哪些才是有用的,因此,事先對(duì)數(shù)據(jù)庫(kù)結(jié)構(gòu)進(jìn)行定義是不現(xiàn)實(shí)的。而且,RDBMS的設(shè)計(jì)對(duì)數(shù)據(jù)的完整性非常重視,在一個(gè)事務(wù)處理過(guò)程中,如果發(fā)生任何故障,都可以很容易地進(jìn)行回滾。然而,在大規(guī)模分布式環(huán)境下,數(shù)據(jù)更新的同步處理所造成的進(jìn)程間通信延遲則成為了一個(gè)瓶頸。5.2.2NoSQL數(shù)據(jù)庫(kù)隨著主要的RDBMS系統(tǒng)Oracle推出其NoSQL數(shù)據(jù)庫(kù)產(chǎn)品作為現(xiàn)有Oracle數(shù)據(jù)庫(kù)產(chǎn)品的補(bǔ)充,“現(xiàn)有RDBMS并不是大數(shù)據(jù)基礎(chǔ)的最佳選擇”這一觀點(diǎn)也在一定程度上得到了印證(見(jiàn)圖)。圖5-40支持大數(shù)據(jù)的Oracle軟件系列NewSQL數(shù)據(jù)庫(kù)5.2.35.2.3NewSQL數(shù)據(jù)庫(kù)NoSQL存儲(chǔ)設(shè)備是高度可擴(kuò)展的、可用的、容錯(cuò)的,對(duì)于讀寫操作是快速的。但是,它們不提供ACID兼容的RDBMS所表現(xiàn)的事務(wù)和一致性支持。根據(jù)BASE模型,NoSQL存儲(chǔ)設(shè)備提供了最終一致性而不是立即一致性。所以它們?cè)谶_(dá)到最終的一致性狀態(tài)前處于軟狀態(tài),因此并不適用于實(shí)現(xiàn)大規(guī)模事務(wù)系統(tǒng)。5.2.3NewSQL數(shù)據(jù)庫(kù)NewSQL存儲(chǔ)設(shè)備結(jié)合了RDBMS的ACID特性和NoSQL存儲(chǔ)設(shè)備的可擴(kuò)展性與容錯(cuò)性。它們既保留了高層次結(jié)構(gòu)化查詢語(yǔ)言SQL查詢的方便性,又能提供高性能和高可擴(kuò)展性,而且還能保留傳統(tǒng)的事務(wù)操作的ACID特性。NewSQL數(shù)據(jù)庫(kù)通常支持符合SQL語(yǔ)法的數(shù)據(jù)定義與數(shù)據(jù)操作,對(duì)于數(shù)據(jù)存儲(chǔ)使用邏輯上的關(guān)系數(shù)據(jù)模型。由于NewSQL數(shù)據(jù)庫(kù)對(duì)SQL的支持,與NoSQL存儲(chǔ)設(shè)備相比,它更容易從傳統(tǒng)的RDBMS轉(zhuǎn)化為高度可擴(kuò)展的數(shù)據(jù)庫(kù)。5.2.3NewSQL數(shù)據(jù)庫(kù)NewSQL系統(tǒng)涉及很多新穎的架構(gòu)設(shè)計(jì),例如,可以將整個(gè)數(shù)據(jù)庫(kù)都在主內(nèi)存中運(yùn)行,從而消除掉數(shù)據(jù)庫(kù)傳統(tǒng)的緩存管理(Buffer);可以在一個(gè)服務(wù)器上面只運(yùn)行一個(gè)線程,從而去除掉輕量的加鎖阻塞(Latching)(盡管某些加鎖操作仍然需要,并且影響性能);還可以使用額外的服務(wù)器來(lái)進(jìn)行復(fù)制和失敗恢復(fù)的工作,從而取代昂貴的事務(wù)恢復(fù)操作。NewSQL可以用來(lái)開(kāi)發(fā)有大量事務(wù)的OLTP系統(tǒng),例如銀行系統(tǒng)。它們也可以用于實(shí)時(shí)分析,如運(yùn)營(yíng)分析,因?yàn)橐恍?shí)現(xiàn)采用了內(nèi)存存儲(chǔ)。NewSQL數(shù)據(jù)庫(kù)的實(shí)例包括Clustrix、NimbusDB、VoltDB、NuoDB和InnoDB。內(nèi)存存儲(chǔ)設(shè)備5.2.45.2.4內(nèi)存存儲(chǔ)設(shè)備下面,我們介紹的另一個(gè)主題是內(nèi)存存儲(chǔ)。內(nèi)存存儲(chǔ)技術(shù)促進(jìn)了對(duì)流數(shù)據(jù)的處理并且能夠容納整個(gè)數(shù)據(jù)庫(kù)。這些技術(shù)使傳統(tǒng)的磁盤存儲(chǔ)的面向批量的處理轉(zhuǎn)變到了內(nèi)存存儲(chǔ)的實(shí)時(shí)處理,提供了一種高性能、先進(jìn)的數(shù)據(jù)存儲(chǔ)方案。內(nèi)存存儲(chǔ)設(shè)備通常利用RAM作為存儲(chǔ)介質(zhì)來(lái)提供快速數(shù)據(jù)訪問(wèn)。RAM不斷增長(zhǎng)的容量以及不斷降低的價(jià)格,伴隨著固態(tài)硬盤不斷增加的讀寫速度,為開(kāi)發(fā)內(nèi)存數(shù)據(jù)存儲(chǔ)提供了可能性。5.2.4內(nèi)存存儲(chǔ)設(shè)備在內(nèi)存中存儲(chǔ)數(shù)據(jù)可以減少由磁盤I/O帶來(lái)的延遲,也可以減少數(shù)據(jù)在主存與硬盤設(shè)備間傳送的時(shí)間。數(shù)據(jù)讀寫延遲的總體降低會(huì)使得數(shù)據(jù)處理更加快速。通過(guò)水平擴(kuò)展含有內(nèi)存存儲(chǔ)設(shè)備的集群將會(huì)極大地增加內(nèi)存存儲(chǔ)設(shè)備的存儲(chǔ)能力。內(nèi)存存儲(chǔ)設(shè)備傳輸數(shù)據(jù)的速度是磁盤存儲(chǔ)設(shè)備的80倍,這表明從內(nèi)存存儲(chǔ)設(shè)備中讀數(shù)據(jù)比從磁盤中讀數(shù)據(jù)大概要快80倍。注意,此處假定在網(wǎng)絡(luò)上數(shù)據(jù)的傳送時(shí)間在兩個(gè)場(chǎng)景中是一樣的,并且這部分時(shí)間不被包含在數(shù)據(jù)讀取時(shí)間內(nèi)。基于集群的內(nèi)存能夠存儲(chǔ)大量的數(shù)據(jù),包括大數(shù)據(jù)數(shù)據(jù)集,與磁盤存儲(chǔ)設(shè)備相比較,這些數(shù)據(jù)的獲取速度將會(huì)快很多。這顯著地降低了大數(shù)據(jù)分析的總體運(yùn)行時(shí)間,也使得實(shí)時(shí)大數(shù)據(jù)分析成為可能。5.2.4內(nèi)存存儲(chǔ)設(shè)備內(nèi)存存儲(chǔ)設(shè)備使內(nèi)存數(shù)據(jù)分析成為可能,例如對(duì)存儲(chǔ)在內(nèi)存中而不是磁盤中的數(shù)據(jù)執(zhí)行某些查詢而產(chǎn)生統(tǒng)計(jì)數(shù)據(jù)。內(nèi)存分析則可以通過(guò)快速的查詢和算法使得運(yùn)行分析和運(yùn)營(yíng)商業(yè)智能成為可能。首先,內(nèi)存存儲(chǔ)通過(guò)提供存儲(chǔ)媒介加快實(shí)時(shí)分析,而能夠應(yīng)對(duì)大數(shù)據(jù)環(huán)境下數(shù)據(jù)的快速涌入(速度特性),這使得為了應(yīng)對(duì)某個(gè)威脅或利用某個(gè)商業(yè)機(jī)會(huì)而做出的快速商業(yè)決定得到支持。大數(shù)據(jù)內(nèi)存存儲(chǔ)設(shè)備在集群上得以實(shí)現(xiàn),并且提供高可用性和數(shù)據(jù)冗余。所以,水平擴(kuò)展可以通過(guò)增加更多的節(jié)點(diǎn)或者內(nèi)存得以實(shí)現(xiàn)。與磁盤存儲(chǔ)設(shè)備相比,內(nèi)存存儲(chǔ)設(shè)備更加昂貴,因?yàn)閮?nèi)存的價(jià)格比磁盤的價(jià)格更高。5.2.4內(nèi)存存儲(chǔ)設(shè)備盡管理論上說(shuō),一臺(tái)64位的計(jì)算機(jī)最多可以利用16EB的內(nèi)存,但是由于諸如機(jī)器等物理?xiàng)l件上的限制,實(shí)際能被使用的內(nèi)存是相當(dāng)少的。為了擴(kuò)展,不僅需要增加更多的內(nèi)存,一旦每個(gè)節(jié)點(diǎn)的內(nèi)存達(dá)到上限還需要增加更多的節(jié)點(diǎn)。這都增加了數(shù)據(jù)存儲(chǔ)的代價(jià)。除了昂貴以外,內(nèi)存存儲(chǔ)設(shè)備對(duì)持久數(shù)據(jù)存儲(chǔ)不提供相同級(jí)別的支持。與磁盤存儲(chǔ)設(shè)備相比,價(jià)格因素更加影響到了內(nèi)存存儲(chǔ)設(shè)備的可用性。結(jié)果,只有最新的最有價(jià)值的數(shù)據(jù)才會(huì)被保存在內(nèi)存中,而陳舊的數(shù)據(jù)將會(huì)被新的數(shù)據(jù)所代替。內(nèi)存存儲(chǔ)設(shè)備支持無(wú)模式或者模式感知的存儲(chǔ)取決于它的實(shí)現(xiàn)方式。通過(guò)基于鍵-值的數(shù)據(jù)持久化可以提供對(duì)無(wú)模式的存儲(chǔ)支持。5.2.4內(nèi)存存儲(chǔ)設(shè)備內(nèi)存存儲(chǔ)設(shè)備適用于:數(shù)據(jù)快速到達(dá),并且需要實(shí)時(shí)分析或者事件流處理。需要連續(xù)地或者持續(xù)不斷地分析,例如運(yùn)行分析和運(yùn)營(yíng)商業(yè)智能。需要執(zhí)行交互式查詢處理和實(shí)時(shí)數(shù)據(jù)可視化,包括假設(shè)分析和數(shù)據(jù)鉆取操作。不同的數(shù)據(jù)處理任務(wù)需要處理相同的數(shù)據(jù)集。進(jìn)行探索性的數(shù)據(jù)分析,因?yàn)楫?dāng)算法改變時(shí),同樣的數(shù)據(jù)集不需要從磁盤上重新讀取。數(shù)據(jù)的處理包括對(duì)相同數(shù)據(jù)集的迭代獲取,例如執(zhí)行基于圖的算法。需要開(kāi)發(fā)低延遲并有ACID事務(wù)支持的大數(shù)據(jù)解決方案。5.2.4內(nèi)存存儲(chǔ)設(shè)備內(nèi)存存儲(chǔ)設(shè)備不適用于:數(shù)據(jù)處理操作含有批處理。為了實(shí)現(xiàn)深度的數(shù)據(jù)分析,需要在內(nèi)存中長(zhǎng)時(shí)間地保存非常大量的數(shù)據(jù)。執(zhí)行BI戰(zhàn)略或戰(zhàn)略分析,涉及訪問(wèn)數(shù)據(jù)量非常大,并涉及批量數(shù)據(jù)處理。數(shù)據(jù)集非常大,不能裝進(jìn)內(nèi)存。從傳統(tǒng)數(shù)據(jù)分析到大數(shù)據(jù)分析的轉(zhuǎn)換,因?yàn)榧尤雰?nèi)存存儲(chǔ)設(shè)備可能需要額外的技術(shù)并涉及復(fù)雜的安裝。企業(yè)預(yù)算有限,因?yàn)榘惭b內(nèi)存存儲(chǔ)設(shè)備可能需要升級(jí)節(jié)點(diǎn),這需要通過(guò)節(jié)點(diǎn)替換或者增加RAM實(shí)現(xiàn)。5.2.4內(nèi)存存儲(chǔ)設(shè)備內(nèi)存存儲(chǔ)設(shè)備可以被實(shí)現(xiàn)為:內(nèi)存數(shù)據(jù)網(wǎng)格(IMDG)。內(nèi)存數(shù)據(jù)庫(kù)(IMDB)。這兩種技術(shù)都使用內(nèi)存作為數(shù)據(jù)存儲(chǔ)介質(zhì),它們的差異體現(xiàn)在數(shù)據(jù)在內(nèi)存中的存儲(chǔ)方式上。內(nèi)存數(shù)據(jù)網(wǎng)格5.2.55.2.5內(nèi)存數(shù)據(jù)網(wǎng)格內(nèi)存數(shù)據(jù)網(wǎng)格(IMDG)在內(nèi)存中以鍵-值對(duì)的形式在多個(gè)節(jié)點(diǎn)存儲(chǔ)數(shù)據(jù),在這些節(jié)點(diǎn)中鍵和值可以是任意的商業(yè)對(duì)象或序列化形式存在的應(yīng)用數(shù)據(jù)。通過(guò)存儲(chǔ)半結(jié)構(gòu)化或非結(jié)構(gòu)化數(shù)據(jù)而支持無(wú)模式數(shù)據(jù)存儲(chǔ),數(shù)據(jù)通過(guò)API被訪問(wèn)。IMDG中的節(jié)點(diǎn)保持自身的同步,并且集體提供高可用性、容錯(cuò)性和一致性。與NoSQL的最終一致性方法相比較,IMDG提供立即一致性。因?yàn)镮MDG將非關(guān)系型數(shù)據(jù)存儲(chǔ)為對(duì)象,因而能提供快速的數(shù)據(jù)獲取。所以,不像關(guān)系型IMDB,IMDG不需要對(duì)象-關(guān)系
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)療工程承攬合同
- 軌道交通建造師聘任合同
- 幼兒園幼兒臨時(shí)接送合同范本
- 知識(shí)管理信息化管理實(shí)施辦法
- 臨時(shí)非營(yíng)利組織救護(hù)
- 電商服務(wù)員工工資管理
- 養(yǎng)豬場(chǎng)建筑垃圾處理協(xié)議
- 船舶修造配電系統(tǒng)改造協(xié)議
- 美發(fā)學(xué)校食堂炊事員工作合同
- 別墅區(qū)房產(chǎn)交易合同模板
- 智能檢測(cè)與監(jiān)測(cè)技術(shù)-智能建造技術(shù)專02課件講解
- 2025蛇年一年級(jí)寒假作業(yè)創(chuàng)意與寓意齊【高清可打印】
- 遼寧省重點(diǎn)高中沈陽(yáng)市郊聯(lián)體2023-2024學(xué)年高二上學(xué)期期末考試語(yǔ)文試題(解析版)
- 多系統(tǒng)萎縮鑒別及治療
- 小學(xué)體育足球課教育課件
- HSE(健康、安全與環(huán)境)計(jì)劃書(shū)
- 質(zhì)量保證大綱(共14頁(yè))
- Starter軟件簡(jiǎn)易使用手冊(cè)
- 蘇少版音樂(lè)六年級(jí)上冊(cè)《初升的太陽(yáng)》教案
- 輕質(zhì)隔墻板安裝合同協(xié)議書(shū)范本標(biāo)準(zhǔn)版
- 車輛管理各崗位績(jī)效考核量表
評(píng)論
0/150
提交評(píng)論