亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        NoSQL理論體系及應(yīng)用

        2012-06-27 05:59:40李馮筱羅高松
        電信科學(xué) 2012年12期
        關(guān)鍵詞:可用性分區(qū)一致性

        李馮筱,羅高松

        (廣州優(yōu)億信息科技有限公司 廣州 510630)

        1 引言

        關(guān)系型數(shù)據(jù)管理系統(tǒng)(relationship database management system,RDBMS)在網(wǎng)絡(luò)和商務(wù)應(yīng)用中,對(duì)于存儲(chǔ)結(jié)構(gòu)化數(shù)據(jù),目前仍然占有主導(dǎo)性地位。然而最近幾年,越來(lái)越多的學(xué)者和大型網(wǎng)絡(luò)公司開(kāi)始質(zhì)疑關(guān)系型數(shù)據(jù)庫(kù)“以一適用所有”的想法。大數(shù)據(jù)時(shí)代的來(lái)臨,使得傳統(tǒng)RDBMS的瓶頸成為發(fā)展道路上的阻礙,于是新型數(shù)據(jù)庫(kù)改革運(yùn)動(dòng)掀起了一股熱浪,開(kāi)發(fā)者們引用NoSQL作為運(yùn)動(dòng)的名稱(chēng)。NoSQL是一種概念,根據(jù)應(yīng)用的不同,理解上也有所不同,有些人認(rèn)為應(yīng)該是not only SQL,也有些人認(rèn)為是non-relational database,也有說(shuō)法是non-SQL。無(wú)論說(shuō)法上有什么區(qū)別,其描述的是越來(lái)越多的網(wǎng)絡(luò)開(kāi)發(fā)商(以下簡(jiǎn)稱(chēng)“網(wǎng)商”)打破傳統(tǒng)局限,應(yīng)用非關(guān)系型數(shù)據(jù)庫(kù)方法進(jìn)行革新的趨勢(shì)。

        2 NoSQL基礎(chǔ)理論

        NoSQL作為新興數(shù)據(jù)庫(kù)系統(tǒng)概念,由于其具有處理海量數(shù)據(jù)的能力,近年來(lái)受到各大IT公司的追捧。Facebook、Google等大型網(wǎng)商紛紛斥資進(jìn)行相關(guān)研究。雖然相對(duì)成熟的RDBMS仍存在不少功能問(wèn)題,但在這個(gè)數(shù)據(jù)爆炸的時(shí)代,由于數(shù)據(jù)處理需求的不斷提升,預(yù)計(jì)這種發(fā)展熱潮仍將持續(xù)下去,并且普遍化。談及NoSQL數(shù)據(jù)庫(kù)概念,首先應(yīng)該了解支持NoSQL概念的理論三大基石:CAP理論、BASE思想和最終一致性。理解這三大理論,對(duì)于了解NoSQL的本源有著極其重要的作用。本文將對(duì)三大基石的理論基礎(chǔ)和其之間的關(guān)系進(jìn)行著重介紹。

        2.1 CAP理論

        Eric Brewer在發(fā)表于ACM的PODC中名為 “關(guān)于Robust分散式系統(tǒng)”的文章中首次提及CAP理論。此理論目前被大型公司廣泛采納,如Amazon和其他NoSQL擁護(hù)者。CAP 解釋為一致性(consistency)、性能(availability)以及分區(qū)容忍性(partition tolerance)。具體描述如下。

        一致性:一個(gè)數(shù)據(jù)系統(tǒng)如何處理讀寫(xiě)操作的一致性問(wèn)題。分布式系統(tǒng)對(duì)于一致性的要求為當(dāng)更新寫(xiě)入操作完成時(shí),其余讀取操作需要及時(shí)看到數(shù)據(jù)的更新。當(dāng)然有些系統(tǒng)對(duì)于一致性有更嚴(yán)格定義上的要求。

        可用性:一個(gè)系統(tǒng)能夠持續(xù)不間斷使用的問(wèn)題。嚴(yán)格定義上的高性能可用性意味著一個(gè)系統(tǒng)從設(shè)計(jì)到實(shí)施都應(yīng)該能夠提供可持續(xù)的操作(如讀寫(xiě)操作),無(wú)論是操作沖突,還是軟硬件部分因?yàn)樯?jí)而導(dǎo)致失效。

        分區(qū)容忍性:可以被理解為系統(tǒng)在提供持續(xù)性操作時(shí)分區(qū)處理的能力。一旦開(kāi)始將數(shù)據(jù)和邏輯分布在不同的節(jié)點(diǎn)上,就有形成分區(qū)的風(fēng)險(xiǎn)。假定網(wǎng)線被切斷,就形成分區(qū),在不同分區(qū)的節(jié)點(diǎn)A和節(jié)點(diǎn)B無(wú)法通信。由于Web提供的這種分布式能力,臨時(shí)的分區(qū)是一個(gè)常見(jiàn)的情況,處理這種情況就屬于分區(qū)容忍性。一些人認(rèn)為分區(qū)容忍性也可以理解為一個(gè)系統(tǒng)靈活處理節(jié)點(diǎn)的增加和去除的能力。例如,處于維護(hù)目的時(shí),去除然后再添加節(jié)點(diǎn)的行為可認(rèn)為是一種分區(qū)容忍性的表現(xiàn)。

        現(xiàn)在Brewer提出,在數(shù)據(jù)共享系統(tǒng)中這3種特性是無(wú)法同時(shí)實(shí)現(xiàn)的,最多只能選擇其中兩種執(zhí)行,這個(gè)理論已經(jīng)得到了大量的驗(yàn)證。很簡(jiǎn)單的例子,如復(fù)制必須能在多節(jié)點(diǎn)上進(jìn)行,從而提升可用性,那么數(shù)據(jù)副本(replica)之間就面臨調(diào)試。但為了在網(wǎng)絡(luò)分區(qū)的情況下也能夠正常工作,復(fù)制或數(shù)據(jù)間的調(diào)試就很難執(zhí)行。所以CAP僅能得以部分保證。

        Brewer指出了基于CAP理論的3種應(yīng)用,選擇其中的一些例子,見(jiàn)表1。

        對(duì)于數(shù)據(jù)庫(kù),Brewer總結(jié)道,由于一致性和可用性無(wú)法兼得,大多數(shù)NoSQL擁護(hù)者都選擇了一致性高于可用性的設(shè)計(jì)模式,除了NoSQL,這些理論也影響到了部分關(guān)系型數(shù)據(jù)庫(kù)。表2總結(jié)了一些現(xiàn)存常用產(chǎn)品的設(shè)計(jì)架構(gòu)的CAP取舍以及其對(duì)應(yīng)的功能分類(lèi)。

        2.2 BASE思想

        互聯(lián)網(wǎng)中,類(lèi)似于wikis、blogs和社交網(wǎng)站等,創(chuàng)造了大量的數(shù)據(jù)等待被處理、分析和傳輸。公司、組織和個(gè)人提供大量的相關(guān)應(yīng)用和服務(wù)致力于滿(mǎn)足性能、可信度、可用性、持久性需求。正如上面所討論的那樣,CAP理論指出,對(duì)于一致性、可用性和分區(qū)容忍性,必須要做出一個(gè)選擇。越來(lái)越多的應(yīng)用和使用案例,包括網(wǎng)絡(luò)應(yīng)用,特別是對(duì)于一些大型和超大型的案例,甚至于一些電子商務(wù)的范疇中,可用性和分區(qū)容忍性被認(rèn)為比一致性更需要嚴(yán)格設(shè)計(jì)。這些應(yīng)用設(shè)計(jì)更多傾向于降低一致性,而強(qiáng)調(diào)可用性和數(shù)據(jù)冗余機(jī)制(即有序地將數(shù)據(jù)分散于不同節(jié)點(diǎn)中)。這是因?yàn)榇蠖鄶?shù)系統(tǒng)都在普通的機(jī)器上,而非高級(jí)的專(zhuān)用機(jī)器,此類(lèi)模式能夠幫助應(yīng)對(duì)相關(guān)問(wèn)題,并且更具有擴(kuò)展性。傳統(tǒng)ACID模式對(duì)于數(shù)據(jù)的屬性要求非常高,在分布式系統(tǒng)中比較難以達(dá)到。所以在CAP理論的基礎(chǔ)上,提出了BASE思想,對(duì)一致性進(jìn)行概化處理。

        表1 CAP理論應(yīng)用特點(diǎn)及例子

        表2 CAP理論數(shù)據(jù)庫(kù)應(yīng)用實(shí)例及功能分類(lèi)

        要解釋BASE思想,首先要對(duì)ACID有一個(gè)了解,因?yàn)锽ASE是相對(duì)于DBMS中的ACID所提出來(lái)的新思想。ACID指的是傳統(tǒng)數(shù)據(jù)庫(kù)對(duì)于數(shù)據(jù)特性的要求,詳細(xì)介紹如下。

        ·原子性(A):即事務(wù)執(zhí)行作為原子,不可再分離,整個(gè)語(yǔ)句要么執(zhí)行,要么不執(zhí)行,不可能停在中間某個(gè)環(huán)節(jié)。

        ·一致性(C):在事務(wù)開(kāi)始之前和事務(wù)結(jié)束之后,數(shù)據(jù)庫(kù)的完整性約束沒(méi)有被破壞。

        ·隔離性(I):兩個(gè)事務(wù)的執(zhí)行互不干擾,一個(gè)事務(wù)不可能看到其他事務(wù)運(yùn)行時(shí)中間某一時(shí)刻的數(shù)據(jù)。兩個(gè)事務(wù)不會(huì)發(fā)生交互。

        ·持久性(D):在事務(wù)完成以后,該事務(wù)對(duì)數(shù)據(jù)庫(kù)所做的更改便持久地保存在數(shù)據(jù)庫(kù)之中,并不會(huì)被回滾。

        在數(shù)據(jù)庫(kù)系統(tǒng)中,事務(wù)的ACID屬性保證了數(shù)據(jù)庫(kù)的一致性,如銀行系統(tǒng)中,付款就是一個(gè)事務(wù),從原賬戶(hù)扣除金額以及向目標(biāo)賬戶(hù)添加金額,這兩個(gè)數(shù)據(jù)庫(kù)操作的總和構(gòu)成一個(gè)完整的邏輯過(guò)程,不可拆分,為原子,從而保證了整個(gè)系統(tǒng)中的總金額沒(méi)有變化。

        然而,這些ACID特性對(duì)于大型的分布式系統(tǒng)來(lái)說(shuō),與高性能是不兼容的。比如,在網(wǎng)店買(mǎi)東西,任何一個(gè)人買(mǎi)東西的過(guò)程都會(huì)鎖住數(shù)據(jù)庫(kù)直到買(mǎi)東西徹底完成,買(mǎi)完時(shí),每一個(gè)人都可以看到庫(kù)存減少了。也就是說(shuō),不允許存在兩個(gè)人同時(shí)買(mǎi)的情況。很明顯對(duì)于大多數(shù)網(wǎng)上商城,尤其是大型網(wǎng)商來(lái)說(shuō),這個(gè)方法并不適用。

        BASE思想實(shí)際上是CAP理論中AP的衍伸。它通過(guò)犧牲高一致性,保證高可用性和分區(qū)容忍性。它同時(shí)也是ACID的一個(gè)變種。BASE在英文中有基本的意思,也可以說(shuō)實(shí)際上強(qiáng)調(diào)的就是能保證連續(xù) “基本”可用的一種模型。BASE思想的組成有以下3個(gè)部分:基本可用、軟狀態(tài)、最終一致性。

        BASE模式指的是一個(gè)應(yīng)用在任意時(shí)間首先應(yīng)該能完成最基本化的工作(即基本可用),并不需要總是一致(即軟狀態(tài)),但最終應(yīng)該是一致(即最終一致性)的。ACID和BASE應(yīng)該被看作同一范疇內(nèi)的互相補(bǔ)充品,而不是替代品。其優(yōu)缺點(diǎn)對(duì)比見(jiàn)表3。

        表3 BASE與ACID的優(yōu)缺點(diǎn)對(duì)比

        2.3 最終一致性

        有兩種方式看待一致性。一種是從開(kāi)發(fā)者/客戶(hù)端的角度,如何觀察數(shù)據(jù)更新;另一種是從服務(wù)器端,更新如何在系統(tǒng)中流動(dòng)以及對(duì)于更新系統(tǒng)能提供什么樣的保證。客戶(hù)端觀察到的一致性指的是,何時(shí)以及如何能觀察到對(duì)存儲(chǔ)系統(tǒng)中的數(shù)據(jù)對(duì)象所做的更新。

        對(duì)于一致性的解釋?zhuān)鶕?jù)強(qiáng)度的不同,分為強(qiáng)一致性和弱一致性?xún)煞N。

        強(qiáng)一致性,即所有的讀取操作都必須返回最新的寫(xiě)入操作的數(shù)據(jù),而忽略復(fù)寫(xiě)操作的路徑。這樣的需求要求對(duì)于數(shù)據(jù)的操作(寫(xiě)入和讀?。┒急仨氃谕还?jié)點(diǎn)上,否則強(qiáng)一致性將受到分布式事務(wù)傳輸協(xié)議的影響 (如2PC和Paxos)。因此,根據(jù)CAP理論,強(qiáng)一致性無(wú)法和可用性、分區(qū)容忍性同時(shí)實(shí)現(xiàn)。

        弱一致性,即讀取操作時(shí)能夠見(jiàn)到寫(xiě)入操作,但僅限一定程度上的最新寫(xiě)入操作后的數(shù)據(jù)。那么,客戶(hù)端在流程中會(huì)出現(xiàn)非一致性的數(shù)據(jù)。解決方法有很多,例如,在一個(gè)多數(shù)據(jù)副本的數(shù)據(jù)庫(kù)中,更新操作會(huì)集中于一個(gè)節(jié)點(diǎn),那么這個(gè)節(jié)點(diǎn)上的數(shù)據(jù)就能保持一定是最新的版本。

        最終一致性屬于弱一致性的一種,即存儲(chǔ)系統(tǒng)保證如果沒(méi)有新的更新提交,最終所有的訪問(wèn)都將獲得最后的更新。如果沒(méi)有故障發(fā)生,不一致性取決于通信時(shí)延、系統(tǒng)負(fù)載以及復(fù)制策略中涉及的副本數(shù)。實(shí)現(xiàn)最終一致性最常見(jiàn)的系統(tǒng)是DNS。根據(jù)name更新的傳播、配置模式以及時(shí)間控制的緩存,最終所有節(jié)點(diǎn)都會(huì)看到更新。

        弱一致性的系統(tǒng)能夠同時(shí)提供更多元化和針對(duì)性的操作方案。

        ·Read Your Own Writes (RYOW)Consistency方案指的是一個(gè)客戶(hù)端能夠及時(shí)看到本方的實(shí)時(shí)數(shù)據(jù)更新,但其他方則不需要立即看到這類(lèi)更新。

        ·Session Consistency指的是在一定范圍內(nèi)(通常為同一服務(wù)器內(nèi)),客戶(hù)端能看到同范圍內(nèi)的實(shí)時(shí)更新。

        ·Casual Consistency指的是一個(gè)客戶(hù)端讀取了X版本的數(shù)據(jù),然后寫(xiě)入了版本Y,那么每個(gè)讀取Y版本的客戶(hù)端也能看到X版本。

        ·Monotonic Read Consistency提供時(shí)間單一性,保證每個(gè)客戶(hù)端在之后的請(qǐng)求中獲取到的是最新版本。

        當(dāng)同一片區(qū)的數(shù)據(jù)的不同更新同時(shí)發(fā)生,客戶(hù)端并不需要依靠于讀取數(shù)據(jù)的即時(shí)更新時(shí),弱一致性是一個(gè)很好的選擇。有關(guān)一致性模型的選擇,需要考慮客戶(hù)端如何請(qǐng)求數(shù)據(jù)和處理副本更新的方式。以下舉例進(jìn)行說(shuō)明。

        在GFS中,多客戶(hù)端可以持續(xù)地修改或執(zhí)行追加記錄的操作。盡管不同時(shí)的寫(xiě)入操作有可能在多副本中顯示同樣的值,但實(shí)際上每一個(gè)客戶(hù)端的寫(xiě)入操作是不明確的。追加記錄操作在每一個(gè)副本中的文檔區(qū)域內(nèi)都能出現(xiàn)至少一次來(lái)保證原子性,以此來(lái)體現(xiàn)一致性。

        Dynamo則用一種叫sloppy quorum的方法,通過(guò)請(qǐng)求一個(gè)總能寫(xiě)入的服務(wù)來(lái)保證顯示和讀取的一致性。Quorum協(xié)議判斷的是系統(tǒng)用于讀取、寫(xiě)入和每個(gè)操作在復(fù)制進(jìn)程中所囊括的系統(tǒng)數(shù)量N,以此來(lái)防止由于網(wǎng)絡(luò)分區(qū)造成的信息不一致。處理系統(tǒng)臨時(shí)崩潰時(shí),Dynamo允許其他并沒(méi)有包含進(jìn)程的系統(tǒng)用Hinted-handoff方法 (也就是sloppy quorum)執(zhí)行一個(gè)主要query。它允許每一個(gè)系統(tǒng)都能處理可能在復(fù)制過(guò)程中發(fā)生數(shù)據(jù)不一致的數(shù)據(jù)版本,并且使用向量時(shí)間技術(shù)來(lái)判斷參與進(jìn)程的系統(tǒng)中數(shù)據(jù)修改的因果關(guān)系,一次保證每一個(gè)系統(tǒng)都能自動(dòng)識(shí)別新的數(shù)據(jù),并且當(dāng)客戶(hù)端能夠決定時(shí),通過(guò)傳達(dá)版本號(hào)來(lái)決定數(shù)據(jù)的顯示。

        在Cassandra中,一致性的程度是可以調(diào)控的。用戶(hù)可以決定在N個(gè)復(fù)制關(guān)系中有多少讀寫(xiě)操作必須成功。在讀?。?、任意、1仲裁和全部)時(shí)和在寫(xiě)入(1仲裁和全部)時(shí),它都提供明確的方法。它與Dynamo相似,也通過(guò)時(shí)間戳順序進(jìn)行讀取修復(fù),從而提供讀取的一致性。

        2.4 三大基石的意義

        三大基石是墊定NoSQL理論的基礎(chǔ)。它在傳統(tǒng)RDBMS的理論架構(gòu)上,針對(duì)分布式數(shù)據(jù)存儲(chǔ)理論進(jìn)行了理論上的革新。CAP理論指出了傳統(tǒng)數(shù)據(jù)庫(kù)要求在分布式系統(tǒng)中是很難實(shí)現(xiàn)的,在基礎(chǔ)架構(gòu)中,必須要考慮到產(chǎn)品方向?qū)σ恢滦?、可用性、分區(qū)容忍性的要求,從而進(jìn)行合理的取舍。根據(jù)CAP理論,提出了傳統(tǒng)ACID屬性的變形體BASE思想。BASE思想弱化了傳統(tǒng)ACID思想對(duì)事務(wù)屬性的嚴(yán)格要求,提出了保證高可用性的基本工作、軟狀態(tài)和最終一致性想法。實(shí)際上就是根據(jù)CAP理論,在一定程度上放寬對(duì)一致性的要求,從而保證可用性和分區(qū)容忍性。最終一致性對(duì)傳統(tǒng)一致性進(jìn)行了再定義,并衍生出了很多新的處理方法。首先數(shù)據(jù)的一致性是必須要考慮的,放松不等于放任不管。最終一致性是一種考慮用戶(hù)體驗(yàn)的折中辦法,也是與傳統(tǒng)RDBMS最大的不同之一。

        三大基石互相補(bǔ)充,互相以各自為基礎(chǔ)進(jìn)行衍伸,形成了一個(gè)標(biāo)準(zhǔn)的理論體系。然而,由于開(kāi)發(fā)應(yīng)用尚未進(jìn)入完全成熟的階段,因此這個(gè)理論細(xì)節(jié)也在不斷的變革中。與傳統(tǒng)RDBMS“以一適用全部”的思想相比,NoSQL的理論體系發(fā)展更強(qiáng)調(diào)個(gè)體適應(yīng)性。針對(duì)具體產(chǎn)品,需要有嚴(yán)格的考核思量過(guò)程,明確需要什么、可以放寬什么,進(jìn)而進(jìn)行合理設(shè)計(jì)。

        3 NoSQL產(chǎn)品分類(lèi)

        目前NoSQL概念下的數(shù)據(jù)庫(kù)應(yīng)用非常多,根據(jù)數(shù)據(jù)模型、功能應(yīng)用、分布方式、復(fù)制方式等分類(lèi)各有不同。從另一方面來(lái)說(shuō),也反映了NoSQL理論體系的高擴(kuò)展性和可能性。對(duì)現(xiàn)在NoSQL理論下的數(shù)據(jù)庫(kù)進(jìn)行分類(lèi),見(jiàn)表4。

        4 NoSQL與RDBMS對(duì)比

        眾所周知,NoSQL的應(yīng)用研究熱潮是緊隨著大數(shù)據(jù)時(shí)代來(lái)臨掀起的。相對(duì)于傳統(tǒng)RDBMS,NoSQL的發(fā)展并未成熟。那么為什么要選擇NoSQL呢?是什么讓各大公司紛紛從RDBMS轉(zhuǎn)型做NoSQL呢?NoSQL和RDBMS之間究竟是什么關(guān)系呢?本節(jié)將從這些方面對(duì)NoSQL和RDBMS進(jìn)行比較詳盡的對(duì)比分析。

        表4 NoSQL產(chǎn)品分類(lèi)

        4.1 傳統(tǒng)RDBMS瓶頸

        從時(shí)代背景來(lái)看,將來(lái)一定是大數(shù)據(jù)時(shí)代。所謂大數(shù)據(jù),“大”在3個(gè)方面:數(shù)據(jù)量、分析量和數(shù)據(jù)種類(lèi)(非結(jié)構(gòu)化數(shù)據(jù))。T級(jí)數(shù)據(jù)量向P級(jí)數(shù)據(jù)量轉(zhuǎn)變時(shí),傳統(tǒng)RDBMS性能瓶頸頻繁出現(xiàn)。單機(jī)處理已經(jīng)很難勝任數(shù)據(jù)處理工作。之前人們致力于縱向擴(kuò)展(scale-up)來(lái)解決數(shù)據(jù)量持續(xù)擴(kuò)大的問(wèn)題。但是事實(shí)證明無(wú)法有效解決問(wèn)題,于是出現(xiàn)了通過(guò)向外擴(kuò)展(scale-out)的方式進(jìn)行針對(duì)性解決。

        向外擴(kuò)展對(duì)于RDBMS來(lái)說(shuō)一直是一個(gè)難題,原因主要有以下幾個(gè)方面。

        (1)數(shù)據(jù)與事務(wù)要求過(guò)高,很難達(dá)成

        假設(shè)RDBMS的表格被分散到幾臺(tái)電腦上,每一部分的數(shù)據(jù)在存儲(chǔ)之前都進(jìn)行了復(fù)制備份來(lái)保證高可用性。首先,執(zhí)行分散性事務(wù)的同時(shí)還保證ACID特征,對(duì)于向外擴(kuò)展來(lái)說(shuō)是非常困難的。

        ·要保證原子性,那么2PC這樣的協(xié)議就必須在與特定事務(wù)相關(guān)的全部系統(tǒng)中都用。

        ·要保證獨(dú)立性,那么數(shù)據(jù)就必須基本上鎖住。鎖的單位可以是一個(gè)記錄、一個(gè)表格或者一個(gè)字符。

        所以要在分散式環(huán)境中保證原子性的獨(dú)立性,當(dāng)分布式事務(wù)協(xié)議被處理時(shí),所有的相關(guān)系統(tǒng)都要被鎖住;系統(tǒng)的服務(wù)越多,鎖的任務(wù)越繁重。這就是向外擴(kuò)展結(jié)構(gòu)很難的原因。

        (2)復(fù)制和分散數(shù)據(jù)是RDBMS向外擴(kuò)展結(jié)構(gòu)的另一個(gè)限制

        ·用2PC方法進(jìn)行事務(wù)性的復(fù)制存在一個(gè)問(wèn)題,就是當(dāng)一個(gè)相關(guān)系統(tǒng)的復(fù)制操作失敗時(shí),事務(wù)本身也會(huì)失效并且變得不可用。

        ·WAL日志方法能夠優(yōu)化事務(wù)DBMS的事務(wù)提交過(guò)程。如果將系統(tǒng)中的復(fù)制進(jìn)程看作主,變化應(yīng)用進(jìn)程是從,那么系統(tǒng)就是主從式或者多主式的。當(dāng)用多主式時(shí),就很難解決多個(gè)主進(jìn)程同時(shí)寫(xiě)進(jìn)程或阻止進(jìn)程的沖突問(wèn)題。

        ·數(shù)據(jù)本身存儲(chǔ)結(jié)構(gòu)為關(guān)系型,數(shù)據(jù)庫(kù)本身的擴(kuò)展限制很多,技術(shù)很麻煩。

        (3)并行數(shù)據(jù)庫(kù)

        對(duì)于這些問(wèn)題,RDBMS擁護(hù)者也做了很多研究,其中并行數(shù)據(jù)庫(kù)處理就是一個(gè)很典型的例子,也取得了不少成功。

        并行數(shù)據(jù)庫(kù)起源于20世紀(jì)80年代,現(xiàn)在有很多比較成熟的版本,如Vertica、Greenplum等。這些數(shù)據(jù)庫(kù)都支持標(biāo)準(zhǔn)SQL,在過(guò)去30年間實(shí)現(xiàn)了很多重要突破。其主要采用shared-nothing結(jié)構(gòu),將關(guān)系表在節(jié)點(diǎn)間橫向劃分,并且利用優(yōu)化器對(duì)執(zhí)行過(guò)程進(jìn)行調(diào)度和管理。與NoSQL理論相似,其目標(biāo)是高性能和高可用性。并行數(shù)據(jù)庫(kù)的最大優(yōu)勢(shì)在于性能和其他功能支持,這主要得益于數(shù)據(jù)庫(kù)近幾十年的研究成果、許多先進(jìn)的技術(shù)手段及算法,如索引、數(shù)據(jù)壓縮、物化視圖、結(jié)果緩沖、I/O共享、優(yōu)化的數(shù)據(jù)連接等。但在大數(shù)據(jù)時(shí)代,數(shù)據(jù)移動(dòng)的實(shí)現(xiàn)方式將影響其性能。

        并行數(shù)據(jù)庫(kù)通過(guò)SQL向外提供數(shù)據(jù)訪問(wèn)服務(wù),SQL因其語(yǔ)言特性而被廣泛使用。經(jīng)過(guò)長(zhǎng)時(shí)間的積累,市面上的大多數(shù)BI工具都支持SQL語(yǔ)言,數(shù)據(jù)庫(kù)本身能兼容很多BI工具。不僅如此,某些數(shù)據(jù)庫(kù),如IBM DB2,還針對(duì)一些BI工具進(jìn)行了優(yōu)化。然而大數(shù)據(jù)卻給SQL接口帶來(lái)了巨大挑戰(zhàn)。SQL的優(yōu)勢(shì)源于其對(duì)底層數(shù)據(jù)訪問(wèn)的封裝,但封裝卻在一定程度上影響了其開(kāi)放性。而且并行數(shù)據(jù)庫(kù)提供的用戶(hù)自定義函數(shù)大都基于單數(shù)據(jù)庫(kù)實(shí)例設(shè)計(jì),不能在機(jī)群上并行執(zhí)行,也即意味著傳統(tǒng)的實(shí)現(xiàn)方式不適合大數(shù)據(jù)的處理及分析。而且在并行數(shù)據(jù)庫(kù)中實(shí)現(xiàn)用戶(hù)自定義函數(shù)往往需要經(jīng)過(guò)復(fù)雜的系統(tǒng)交互,甚至要熟悉數(shù)據(jù)庫(kù)的內(nèi)部結(jié)構(gòu)及系統(tǒng)調(diào)用等,從而難以使用。并行數(shù)據(jù)庫(kù)在擴(kuò)展性、容錯(cuò)性、成本、對(duì)異構(gòu)環(huán)境的支持等幾項(xiàng)上有所欠缺,這幾項(xiàng)實(shí)際上是相互影響的,如并行數(shù)據(jù)庫(kù)大多支持有限擴(kuò)展,一般可擴(kuò)至數(shù)百節(jié)點(diǎn)的規(guī)模,尚沒(méi)有數(shù)千節(jié)點(diǎn)規(guī)模的應(yīng)用案例。

        并行數(shù)據(jù)庫(kù)擴(kuò)展性的有限主要因?yàn)槿缦聝牲c(diǎn)。

        ·并行數(shù)據(jù)庫(kù)軟件級(jí)容錯(cuò)能力較差,并行數(shù)據(jù)庫(kù)基于高端硬件設(shè)計(jì),并且假設(shè)查詢(xún)失敗屬于稀有事件,因此當(dāng)查詢(xún)失敗時(shí),一般采取重做查詢(xún)的方式;而在大規(guī)模機(jī)群環(huán)境下,查詢(xún)失敗將會(huì)變?yōu)橐粋€(gè)普通事件,極端情況下,并行數(shù)據(jù)有可能出現(xiàn)不停重做查詢(xún)的局面。

        ·并行數(shù)據(jù)庫(kù)對(duì)異構(gòu)硬件的支持非常有限,且對(duì)于處理較慢的節(jié)點(diǎn)反應(yīng)敏感,容易出現(xiàn)“木桶效應(yīng)”。所以RDBMS的功能雖然非常強(qiáng)大,但針對(duì)個(gè)別化問(wèn)題的解決方案卻很難進(jìn)行擴(kuò)展,于是出現(xiàn)了NoSQL來(lái)解決問(wèn)題。

        4.2 NoSQL優(yōu)勢(shì)

        NoSQL的優(yōu)勢(shì)是基于其理論體系的革新理念,首先從思想上解放對(duì)數(shù)據(jù)的定義問(wèn)題。得益于此,NoSQL提供一個(gè)非關(guān)系型的數(shù)據(jù)庫(kù)系統(tǒng),就長(zhǎng)遠(yuǎn)發(fā)展來(lái)說(shuō),非表格化的模型允許系統(tǒng)的平行擴(kuò)展。比起RDBMS,它沒(méi)有那么結(jié)構(gòu)化并且不保證ACID性,由于ACID被放棄,靈活性、擴(kuò)展性和數(shù)據(jù)存儲(chǔ)應(yīng)用性都得到提升。所以它對(duì)于爆炸性數(shù)量的數(shù)據(jù)來(lái)說(shuō)是很適合的。

        將NoSQL的應(yīng)用優(yōu)勢(shì)總結(jié)為以下3個(gè)方面。

        (1)建立在低成本上的高性能

        正如前面所說(shuō),NoSQL的簡(jiǎn)單數(shù)據(jù)模型令其本身的擴(kuò)展性極強(qiáng),節(jié)點(diǎn)的擴(kuò)展也較為容易,并且由于分布式的結(jié)構(gòu),其設(shè)計(jì)理念就是建立在低成本的不穩(wěn)定的機(jī)器上的,因此其可以比較低廉的成本獲取高性能。另一方面的低廉指的是開(kāi)發(fā)成本。目前大部分的NoSQL都是OSS(open source software),相對(duì)于要購(gòu)買(mǎi)高額License的RDBMS來(lái)說(shuō),它是比較節(jié)省成本的。對(duì)于性能方面,NoSQL的寫(xiě)入性能非常優(yōu)秀,在NHN的一個(gè)調(diào)查中,使用Cassandra對(duì)空的數(shù)據(jù)庫(kù)插入5×107個(gè)1 KB大小的記錄僅用了20 000 ps。

        (2)維護(hù)簡(jiǎn)單

        相對(duì)于復(fù)雜的并行RDBMS,NoSQL的設(shè)計(jì)一般都建立在低管理需求上,如自動(dòng)修復(fù)、數(shù)據(jù)分布和簡(jiǎn)單數(shù)據(jù)模型都降低了管理成本。至少,這是開(kāi)發(fā)目標(biāo)。實(shí)際情況中,也許需要比較有經(jīng)驗(yàn)和高素質(zhì)的開(kāi)發(fā)者來(lái)執(zhí)行開(kāi)發(fā)核心,但至少就總體來(lái)說(shuō),NoSQL對(duì)人力資源的消耗還是比較少的。

        (3)易擴(kuò)展

        眾所周知,傳統(tǒng)RDBMS中對(duì)于添加字段等改動(dòng)操作比較難以進(jìn)行,必須要充分權(quán)衡,甚至要考慮崩潰問(wèn)題。而NoSQL由于解放了數(shù)據(jù)限制,對(duì)于數(shù)據(jù)庫(kù)的改動(dòng)并不需要大成本的計(jì)算,對(duì)于列式數(shù)據(jù)庫(kù),增加一個(gè)列很簡(jiǎn)單。

        4.3 NoSQL劣勢(shì)

        NoSQL也有很多不成熟的地方,開(kāi)發(fā)上也有不少劣勢(shì)。這里提到3個(gè)方面的劣勢(shì)。

        (1)開(kāi)發(fā)消耗高

        之前提到NoSQL的優(yōu)勢(shì)是開(kāi)發(fā)成本低,這里為什么又說(shuō)成本高呢?這是從學(xué)習(xí)轉(zhuǎn)型的角度出發(fā)的?,F(xiàn)在大部分公司都是RDBMS系統(tǒng)框架,平穩(wěn)遷移的方式目前還不成熟。同時(shí),目前NoSQL的專(zhuān)家級(jí)應(yīng)用者還很少,公司很難尋找到合適的人員。就目前來(lái)說(shuō),人力資源的缺口還很大,人力成本并不會(huì)減少。另一方面,NoSQL的設(shè)計(jì)目標(biāo)是減少人力維護(hù)資源,但現(xiàn)階段并沒(méi)有達(dá)成,因此相對(duì)RDBMS并沒(méi)有特別明顯的優(yōu)勢(shì)。對(duì)于用戶(hù)來(lái)說(shuō),大部分仍保持觀望狀態(tài),采納的心理成本也需要考慮。

        (2)商業(yè)資源模式少

        現(xiàn)階段大多數(shù)NoSQL都是OSS,商業(yè)性的資源比較少。由于OSS本身的發(fā)展模式尚未有很完整的體系,研究也不夠深入。建立于其上的NoSQL開(kāi)發(fā)也比較分散,商業(yè)資源集中度及力度都比較小。既是優(yōu)勢(shì),讓其能無(wú)束縛發(fā)展,但同時(shí)也是發(fā)展的一個(gè)限制,需要相關(guān)領(lǐng)域研究的支撐。

        (3)功能不夠齊全

        相對(duì)于RDBMS,NoSQL還是新生代,功能支持度不高。相對(duì)RDBMS強(qiáng)大的功能,NoSQL仍需要時(shí)間進(jìn)行改進(jìn)。對(duì)于需要大量功能性操作的數(shù)據(jù)庫(kù),NoSQL并不一定是個(gè)好選擇。

        5 數(shù)據(jù)庫(kù)選擇

        第4節(jié)討論了RDBMS和NoSQL的比較。兩者各自有優(yōu)劣勢(shì),那么肯定會(huì)有人問(wèn),最終的選擇應(yīng)該是什么呢?這一節(jié)將對(duì)其進(jìn)行一個(gè)指引性的討論。

        5.1 現(xiàn)階段RDBMS是主流

        RDBMS強(qiáng)大的功能確定了其主導(dǎo)性地位。其中,Oracle鶴立雞群,其功能和性能都遠(yuǎn)遠(yuǎn)超出同行。對(duì)于SQL的分析功能,操作比較便捷也被廣泛接受。

        RDBMS在讀取性能方面優(yōu)勢(shì)明顯。對(duì)于需要讀取多過(guò)寫(xiě)入的應(yīng)用,RDBMS是一個(gè)不錯(cuò)的選擇。

        再者,最終一致性不是萬(wàn)能的,對(duì)于要求一致性很高的,如銀行轉(zhuǎn)賬之類(lèi)的功能,如果沒(méi)有內(nèi)置的ACID非常容易出問(wèn)題。這時(shí)RDBMS也是一個(gè)不錯(cuò)的選擇。

        目前,RDBMS瓶頸可以通過(guò)一些向外擴(kuò)展手段進(jìn)行解決。如sharding技術(shù)可以幫助分區(qū)處理,從而提高性能。如果數(shù)據(jù)存儲(chǔ)量非常大,也可以使用OwFS之類(lèi)的產(chǎn)品。也有一些輔助的系統(tǒng)(如ARCUS緩存系統(tǒng))來(lái)幫助提升性能。對(duì)于新型的并行數(shù)據(jù)庫(kù),如Grennplum、Aster等一些基于PostSQL的并行數(shù)據(jù)庫(kù),在性能上都還不錯(cuò)。

        5.2 NoSQL是重要發(fā)展

        什么時(shí)候考慮放棄RDBMS而使用NoSQL呢?筆者總結(jié)了以下幾種情況。

        ·當(dāng)只需要將應(yīng)用實(shí)體以一個(gè)持續(xù)且一致的方式存儲(chǔ)時(shí),那么RDBMS太過(guò)龐大,key-value式的NoSQL也許是個(gè)好選擇。

        ·當(dāng)有一個(gè)繼承式的應(yīng)用對(duì)象并且需要加入一些事務(wù)處理機(jī)制時(shí),那么所有的NoSQL方式都很適合。RDBMS也能用ORM做到,但需要掩蓋復(fù)雜性本身的復(fù)雜結(jié)構(gòu)。

        ·當(dāng)需要存儲(chǔ)大型的樹(shù)狀結(jié)構(gòu)或網(wǎng)狀結(jié)構(gòu)式的數(shù)據(jù)時(shí),圖型NoSQL數(shù)據(jù)庫(kù)比較實(shí)用。

        ·當(dāng)運(yùn)行基于云系統(tǒng)并且需要數(shù)據(jù)庫(kù)的持久性和可用性時(shí),Dynamo和BigTable類(lèi)的NoSQL數(shù)據(jù)庫(kù)比RDBMS表現(xiàn)更為出色。

        ·列式數(shù)據(jù)庫(kù)對(duì)于分析有很好的作用,因?yàn)樗4媪藬?shù)據(jù)本身的自然性。如果需要在獨(dú)立的機(jī)器上進(jìn)行大型計(jì)算,Hadoop之類(lèi)的MapReduce解決方案則很適合。

        6 NoSQL Benchmarking

        本節(jié)將提供一些NoSQL的標(biāo)桿測(cè)試的理論和方法,以幫助在眾多的NoSQL產(chǎn)品中選擇合適產(chǎn)品。NoSQL產(chǎn)品眾多且應(yīng)用范圍廣,并不存在一個(gè)絕對(duì)完美的選擇,但存在相對(duì)合適的產(chǎn)品。性能測(cè)試方面,目前有多種方法。作為開(kāi)發(fā)建立性能模型的第一步,首先要能夠模擬實(shí)際情況的運(yùn)用,因此需要一些標(biāo)桿測(cè)試工具來(lái)幫助模擬用戶(hù)與數(shù)據(jù)庫(kù)的實(shí)際操作情況。一個(gè)好的NoSQL標(biāo)桿測(cè)試解決方案需要能夠調(diào)整參數(shù)來(lái)模擬應(yīng)用的特性,而在市面上存在的一些開(kāi)源方法中,選擇最常見(jiàn)的YCSB作為參考。

        6.1 測(cè)試需求

        數(shù)據(jù)庫(kù)的測(cè)試最主要的是考慮讀取和寫(xiě)入能力,這是大多數(shù)性能測(cè)試的基礎(chǔ)。雖然看似簡(jiǎn)單,但對(duì)于NoSQL來(lái)說(shuō),一個(gè)好的性能測(cè)試檔案應(yīng)該充分考慮到特定應(yīng)用在不同環(huán)境中的表現(xiàn)。目前大部分NoSQL方案中,無(wú)論是讀取性能還是寫(xiě)入性能都是樂(lè)觀的。所以有必要在測(cè)試時(shí),使用不同的讀寫(xiě)比例以多種工作負(fù)荷對(duì)性能做比較全面的分析。此外要考慮到環(huán)境的復(fù)雜性,比如Web環(huán)境中的請(qǐng)求率是一直改變的,所以標(biāo)桿工具也要能對(duì)請(qǐng)求率進(jìn)行調(diào)控。進(jìn)入路徑對(duì)于不同的應(yīng)用來(lái)說(shuō),需求也是不同的。有些網(wǎng)絡(luò)應(yīng)用會(huì)含有一組經(jīng)常被請(qǐng)求的簡(jiǎn)化數(shù)據(jù)。如網(wǎng)店里的打折物品,會(huì)經(jīng)常被請(qǐng)求數(shù)據(jù)并且購(gòu)買(mǎi)寫(xiě)入數(shù)據(jù)。也有些應(yīng)用會(huì)對(duì)最新的記錄進(jìn)行大量請(qǐng)求,如新聞,最近的文章就會(huì)被更多地請(qǐng)求。因此NoSQL標(biāo)桿測(cè)試工具也要能對(duì)不同的請(qǐng)求分布進(jìn)行支持。另外一個(gè)重要的需求是提供公正的對(duì)比。應(yīng)用的范疇是不盡相同的,不同的NoSQL方案應(yīng)該在符合應(yīng)用特性的環(huán)境下測(cè)試,才能夠真正起到指導(dǎo)選擇的作用。

        6.2 YCSB

        YCSB(Yahoo!cloud server benchmark)是 NoSQL 數(shù)據(jù)庫(kù)標(biāo)桿的代表性應(yīng)用。YCSB是Yahoo!開(kāi)發(fā)的一個(gè)測(cè)試框架,可以對(duì)市面上比較流行的幾個(gè)NoSQL方案提供詳細(xì)的對(duì)比資料,包括HBase、Cassandra、MongoDB等,未包含的數(shù)據(jù)庫(kù)可以使用提供的API自行編寫(xiě)測(cè)試。

        YCSB提供的測(cè)試框架非常靈活,用戶(hù)可以對(duì)特定的參數(shù)進(jìn)行設(shè)置,以針對(duì)特別產(chǎn)品進(jìn)行分析。YCSB提供兩個(gè)標(biāo)桿層。第一個(gè)層次主要是測(cè)試存儲(chǔ)性能,而第二個(gè)層次是測(cè)試擴(kuò)展能力。測(cè)試性能的第一層主要是在相同硬件設(shè)置下,對(duì)比請(qǐng)求時(shí)延和輸出的取舍。常見(jiàn)基本測(cè)試方法為記錄工作量增加時(shí)時(shí)延的變化,直到系統(tǒng)飽和時(shí)輸出結(jié)束。第二層次主要是測(cè)試系統(tǒng)增加減少節(jié)點(diǎn)時(shí)的性能,如增加機(jī)器時(shí)如何表現(xiàn),或者在系統(tǒng)運(yùn)轉(zhuǎn)時(shí)加入機(jī)器的變化。此外YCSB提供如分布請(qǐng)求、讀寫(xiě)率等多種參數(shù),能夠盡可能地模擬實(shí)際情況,做出相對(duì)正確的結(jié)論。

        實(shí)際上除了YCSB,還有NoSQL等很多測(cè)試框架,如VoltDB等。這些測(cè)試框架各有千秋,對(duì)于實(shí)際應(yīng)用設(shè)計(jì)還需要能夠?qū)?zhuān)門(mén)的參數(shù)設(shè)置進(jìn)行全面分析。針對(duì)現(xiàn)在的一些標(biāo)桿測(cè)試,有學(xué)者提出無(wú)用居多,究其原因就是忽略了實(shí)際環(huán)境的一些問(wèn)題,而比較單純地進(jìn)行基礎(chǔ)比較。所以對(duì)于NoSQL的標(biāo)桿,也需要針對(duì)具體問(wèn)題進(jìn)行實(shí)際測(cè)試。

        7 結(jié)束語(yǔ)

        經(jīng)過(guò)上述討論,對(duì)NoSQL有一個(gè)概念上的認(rèn)識(shí),并且對(duì)NoSQL和RDBMS的對(duì)比有了一個(gè)大致的了解。實(shí)際上NoSQL和RDBMS并不是一個(gè)完全對(duì)立的概念,也有很多產(chǎn)品致力于整合雙方優(yōu)勢(shì)而取得突破。其根本性差別是數(shù)據(jù)屬性。如HadoopDB是在非關(guān)系型數(shù)據(jù)庫(kù)上層加入SQL層,而ASTER是在關(guān)系型數(shù)據(jù)query中應(yīng)用MapReduce。面對(duì)NoSQL的眾多產(chǎn)品群體,標(biāo)桿測(cè)試必須要考慮實(shí)際環(huán)境情況,對(duì)參數(shù)的設(shè)置分析有一個(gè)比較全面的了解,盡量避免架空測(cè)試。

        綜上所述,對(duì)于數(shù)據(jù)庫(kù)的選擇,在大數(shù)據(jù)時(shí)代來(lái)臨的壓力下,需要更嚴(yán)密的思考。并不存在一個(gè)絕對(duì)正確的選擇,權(quán)衡利弊,多方調(diào)查才是上策。

        1 Padhy R P,Patra M R,Satapathy S C.RDBMS to NoSQL:reviewing some next-generation non-relational database’s.InternetionalJournalofAdvanced Engineerin Sceince and Tecnologies,2011,11(1)

        2 Christof S.NoSQL Database.Hochschule Der Medien,Stuttgart,2011

        3 Lee K J.What is NoSQL for.http://www.Cubird.com,2011

        4 王珊,王會(huì)舉,覃雄派等.架構(gòu)大數(shù)據(jù):挑戰(zhàn)、現(xiàn)狀與展望.計(jì)算機(jī)學(xué)報(bào),2011(34)

        5 Tudorica B G.A comparison between several NoSQL databases with comments and notes.Roedunet International Conference(RoEduNet),Iasi,Romania,2011

        6 Cattell R.Scalable SQL and NoSQL Data Stores.ACM SIGMOD Record,2011

        7 孟小峰.云數(shù)據(jù)管理與NoSQL運(yùn)動(dòng).中國(guó)計(jì)算機(jī)學(xué)會(huì)通信,2011,4(7)

        8 Michael S.SQL databases vs NoSQL databases.Communications of the ACM,2010,53(4)

        9 Laurent A,Sala M,Laurent B,et al.Reduce,you say:what NoSQL can do for data aggregation and BI in large repositories.22nd International Workshop on Database and Expert Systems Applications(DEXA),2011

        10 Tauro C J M,Aravindh S,Shreeharsha A B.Comparative study of thenewgeneration,agile,scalable,highperformance NoSQL databases.International Journal of Computer Applications,2012,48(20)

        11 Schneider S A.Big data:big challenge,big opportunity.http://www.globant.com,2012

        猜你喜歡
        可用性分區(qū)一致性
        基于文獻(xiàn)計(jì)量學(xué)的界面設(shè)計(jì)可用性中外對(duì)比研究
        包裝工程(2023年24期)2023-12-27 09:18:26
        關(guān)注減污降碳協(xié)同的一致性和整體性
        公民與法治(2022年5期)2022-07-29 00:47:28
        上海實(shí)施“分區(qū)封控”
        注重教、學(xué)、評(píng)一致性 提高一輪復(fù)習(xí)效率
        IOl-master 700和Pentacam測(cè)量Kappa角一致性分析
        基于輻射傳輸模型的GOCI晨昏時(shí)段數(shù)據(jù)的可用性分析
        浪莎 分區(qū)而治
        基于事件觸發(fā)的多智能體輸入飽和一致性控制
        基于SAGA聚類(lèi)分析的無(wú)功電壓控制分區(qū)
        基于多種群遺傳改進(jìn)FCM的無(wú)功/電壓控制分區(qū)
        亚洲视频一区二区免费看| 99国产精品久久久蜜芽| 无码啪啪人妻| 国产三级av大全在线爽| 国内少妇毛片视频| 无码午夜人妻一区二区三区不卡视频| 国产美女高潮流白浆在线观看| 久久久精品久久久国产| 中文字幕 亚洲精品 第1页| 女人被爽到呻吟gif动态图视看 | 日日噜噜夜夜狠狠久久丁香五月| 无码中文字幕日韩专区视频| 成人午夜免费无码视频在线观看| 亚洲女同性恋在线播放专区| 免费观看91色国产熟女| 亚洲色大成网站www久久九| 国产免费播放一区二区| 久久久噜噜噜久久熟女| 欧美成人秋霞久久aa片| 成 人 网 站 免 费 av| 97人妻无码免费专区| 国产国语按摩对白av在线观看| 亚洲av日韩精品久久久久久久| 视频一区欧美| 精品av一区二区在线| 久久精品国产99久久久| 18禁高潮出水呻吟娇喘蜜芽| 久久99久久99精品免视看国产成人 | 国产精品亚洲A∨天堂不卡| 美女被搞在线观看一区二区三区| 人人妻人人澡人人爽精品日本| 亚洲成av人片在线观看无码| 国产成人久久精品激情91| 国产高清一区二区三区三州| 成年女人黄小视频| 在线亚洲综合| 午夜婷婷国产麻豆精品| 亚洲欧美日韩综合一区二区| 亚洲暴爽av天天爽日日碰| 日韩精品视频在线一二三| av在线观看免费天堂|