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