個人不認(rèn)為nosql在少量數(shù)據(jù)存儲上有啥優(yōu)勢。nosql主要解決的是auto sharding的問題,你不需要sharding,搞啥nosql. 作者:方圓 鏈接:
創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括聶拉木網(wǎng)站建設(shè)、聶拉木網(wǎng)站制作、聶拉木網(wǎng)頁制作以及聶拉木網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,聶拉木網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到聶拉木省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
傳統(tǒng)觀念中 NoSQL數(shù)據(jù)庫非常適合某些數(shù)據(jù)類型,如:非關(guān)系數(shù)據(jù)源。同時,NoSQL被吹捧為最適合Web應(yīng)用程序的優(yōu)秀平臺。然而他適合大多數(shù)數(shù)據(jù),特別是web應(yīng)用程序的數(shù)據(jù)是相關(guān)型。那么,這是否可以給你一個堅持使用RDMS的理由呢?也不一定,即使很困難,我們還是要做出選擇。
評估NoSQL是一個很茅盾的理論,一些人認(rèn)為,應(yīng)該將所有文檔數(shù)據(jù)存儲在一個文檔中,做鏈接代碼就是褻瀆神明。另外一部分人認(rèn)為,存儲應(yīng)用文檔,加入代碼,才是合理選擇。與此同時,不同的數(shù)據(jù)庫,需要在文檔中限制嵌套數(shù)據(jù)數(shù)量。有的人會鼓勵文檔引用。這是NoSQL數(shù)據(jù)模型的基本部分,也沒有一個明確的共識。
曾經(jīng)有一篇很熱的帖子"Why you should never use XYZ",我想,讀到這里,一定會有人搜索這篇文章。當(dāng)然,這種文章各式各樣,太過于籠統(tǒng)的標(biāo)題也沒什么幫助。毫無疑問,會有人會搜索這個文章,然后再找
到這個文章,進(jìn)一步深入,找到該文章的方法遠(yuǎn)比成功(理解問題)的故事多。很難知道誰提供了一個有效的技術(shù)問題,誰又誤讀了這個問題(或者缺少證據(jù)證明其觀點(diǎn))。
有大量選擇,RDBMS的世界,選擇就很容易。你有4或5個目標(biāo),大家工作方式差不多,來選擇環(huán)境、預(yù)算支持的平臺。對于成熟的產(chǎn)品,風(fēng)險比較小。 NoSQL的世界,有很多數(shù)據(jù)庫引擎功能選擇。每一個有自己的獨(dú)特優(yōu)勢,也有致命弱點(diǎn)。所以選擇很難, NoSQL項(xiàng)目生命周期短,嘗試新項(xiàng)目或者流行項(xiàng)目也會有風(fēng)險。上次,我的的項(xiàng)目是在 CouchDB上,而現(xiàn)在似乎停擺了。
做出這個痛苦決定的原因是,這可能是一個案例:你需要做一大堆工作,才能知道,你做出的選擇對與錯。你可以實(shí)體化你的數(shù)據(jù)模型,了解他與系統(tǒng)的工作情況,但是,這只有你正真撞到南墻,才可以找到裂縫(答案)。以我為例,我建的應(yīng)用程序是關(guān)系數(shù)據(jù)庫,移動文件存儲的主要因素是,需要一個無模式設(shè)計來達(dá)到我的目標(biāo)。使用NoSQL 數(shù)據(jù)庫存儲關(guān)系型數(shù)據(jù)庫并不是我們所常說的,雖然,這種事常常發(fā)生。
現(xiàn)在我在用 Couchbase 和 MongoDB,Mongo對我沒多大吸引力,不過鑒于他非常流行,對于引起來說,很有好處。當(dāng)然,很多都可以以同樣的方式流行。PHP很流行,因?yàn)樗囊子眯?,而不是因?yàn)樗芎谩?/p>
大數(shù)據(jù)時代數(shù)據(jù)管理方式研究
1數(shù)據(jù)管理技術(shù)的回顧
數(shù)據(jù)管理技術(shù)主要經(jīng)歷了人工管理階段、文件系統(tǒng)階段和數(shù)據(jù)庫系統(tǒng)階段。隨著數(shù)據(jù)應(yīng)用領(lǐng)域的不斷擴(kuò)展,數(shù)據(jù)管理所處的環(huán)境也越來越復(fù)雜,目前廣泛流行的數(shù)據(jù)庫技術(shù)開始暴露出許多弱點(diǎn),面臨著許多新的挑戰(zhàn)。
1.1 人工管理階段
20 世紀(jì) 50 年代中期,計算機(jī)主要用于科學(xué)計算。當(dāng)時沒有磁盤等直接存取設(shè)備,只有紙帶、卡片、磁帶等外存,也沒有操作系統(tǒng)和管理數(shù)據(jù)的專門軟件。該階段管理的數(shù)據(jù)不保存、由應(yīng)用程序管理數(shù)據(jù)、數(shù)據(jù)不共享和數(shù)據(jù)不具有獨(dú)立性等特點(diǎn)。
1.2 文件系統(tǒng)階段
20 世紀(jì) 50 年代后期到 60 年代中期,隨著計算機(jī)硬件和軟件的發(fā)展,磁盤、磁鼓等直接存取設(shè)備開始普及,這一時期的數(shù)據(jù)處理系統(tǒng)是把計算機(jī)中的數(shù)據(jù)組織成相互獨(dú)立的被命名的數(shù)據(jù)文件,并可按文件的名字來進(jìn)行訪問,對文件中的記錄進(jìn)行存取的數(shù)據(jù)管理技術(shù)。數(shù)據(jù)可以長期保存在計算機(jī)外存上,可以對數(shù)據(jù)進(jìn)行反復(fù)處理,并支持文件的查詢、修改、插入和刪除等操作。其數(shù)據(jù)面向特定的應(yīng)用程序,因此,數(shù)據(jù)共享性、獨(dú)立性差,且冗余度大,管理和維護(hù)的代價也很大。
1.3數(shù)據(jù)庫階段
20 世紀(jì) 60 年代后期以來,計算機(jī)性能得到進(jìn)一步提高,更重要的是出現(xiàn)了大容量磁盤,存儲容量大大增加且價格下降。在此基礎(chǔ)上,才有可能克服文件系統(tǒng)管理數(shù)據(jù)時的不足,而滿足和解決實(shí)際應(yīng)用中多個用戶、多個應(yīng)用程序共享數(shù)據(jù)的要求,從而使數(shù)據(jù)能為盡可能多的應(yīng)用程序服務(wù),這就出現(xiàn)了數(shù)據(jù)庫這樣的數(shù)據(jù)管理技術(shù)。數(shù)據(jù)庫的特點(diǎn)是數(shù)據(jù)不再只針對某一個特定的應(yīng)用,而是面向全組織,具有整體的結(jié)構(gòu)性,共享性高,冗余度減小,具有一定的程序與數(shù)據(jù)之間的獨(dú)立性,并且對數(shù)據(jù)進(jìn)行統(tǒng)一的控制。
2大數(shù)據(jù)時代的數(shù)據(jù)管理技術(shù)
大數(shù)據(jù)(big data),或稱巨量資料,指的是所涉及的資料量規(guī)模巨大到無法透過目前主流軟件工具,在合理時間內(nèi)達(dá)到擷取、管理、處理、并整理成為幫助企業(yè)經(jīng)營決策更積極目的的資訊。大數(shù)據(jù)有 3 個 V,一是大量化(Volume),數(shù)據(jù)量是持續(xù)快速增加的,從 TB級別,躍升到 PB 級別;二是多樣化(Variety),數(shù)據(jù)類型多樣化,結(jié)構(gòu)化數(shù)據(jù)已被視為小菜一碟,圖片、音頻、視頻等非結(jié)構(gòu)化數(shù)據(jù)正以傳統(tǒng)結(jié)構(gòu)化數(shù)據(jù)增長的兩倍速快速創(chuàng)建;三是快速化 (Velocity),數(shù)據(jù)生成速度快,也就需要快速的處理能力,因此,產(chǎn)生了“1 秒定律”,就是說一般要在秒級時間范圍內(nèi)給出分析結(jié)果,時間太長就失去價值了,這個速度要求是大數(shù)據(jù)處理技術(shù)和傳統(tǒng)的數(shù)據(jù)挖掘技術(shù)最大的區(qū)別。
2.1 關(guān)系型數(shù)據(jù)庫(RDBMS)
20 世紀(jì) 70 年代初,IBM 工程師 Codd 發(fā)表了著名的論文“A Relational Model of Data for Large Shared DataBanks”,標(biāo)志著關(guān)系數(shù)據(jù)庫時代來臨。關(guān)系數(shù)據(jù)庫的理論基礎(chǔ)是關(guān)系模型,是借助于集合代數(shù)等數(shù)學(xué)概念和方法來處理數(shù)據(jù)庫中的數(shù)據(jù),現(xiàn)實(shí)世界中的實(shí)體以及實(shí)體之間的聯(lián)系非常容易用關(guān)系模型來表示。容易理解的模型、容易掌握的查詢語言、高效的優(yōu)化器、成熟的技術(shù)和產(chǎn)品,使得關(guān)系數(shù)據(jù)庫占據(jù)了數(shù)據(jù)庫市場的絕對的統(tǒng)治地位。隨著互聯(lián)網(wǎng) web2.0 網(wǎng)站的興起,半結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)的大量涌現(xiàn),傳統(tǒng)的關(guān)系數(shù)據(jù)庫在應(yīng)付 web2.0 網(wǎng)站特別是超大規(guī)模和高并發(fā)的 SNS(全稱 Social Networking Services,即社會性網(wǎng)絡(luò)服務(wù)) 類型的 web2.0 純動態(tài)網(wǎng)站已經(jīng)顯得力不從心,暴露了很多難以克服的問題。
2.2 noSQL數(shù)據(jù)庫
順應(yīng)時代發(fā)展的需要產(chǎn)生了 noSQL數(shù)據(jù)庫技術(shù),其主要特點(diǎn)是采用與關(guān)系模型不同的數(shù)據(jù)模型,當(dāng)前熱門的 noSQL數(shù)據(jù)庫系統(tǒng)可以說是蓬勃發(fā)展、異軍突起,很多公司都熱情追捧之,如:由 Google 公司提出的 Big Table 和 MapReduce 以及 IBM 公司提出的 Lotus Notes 等。不管是那個公司的 noSQL數(shù)據(jù)庫都圍繞著大數(shù)據(jù)的 3 個 V,目的就是解決大數(shù)據(jù)的 3個 V 問題。因此,在設(shè)計 noSQL 時往往考慮以下幾個原則,首先,采用橫向擴(kuò)展的方式,通過并行處理技術(shù)對數(shù)據(jù)進(jìn)行劃分并進(jìn)行并行處理,以獲得高速的讀寫速度;其次,解決數(shù)據(jù)類型從以結(jié)構(gòu)化數(shù)據(jù)為主轉(zhuǎn)向結(jié)構(gòu)化、半結(jié)構(gòu)化、非結(jié)構(gòu)化三者的融合的問題;再次,放松對數(shù)據(jù)的 ACID 一致性約束,允許數(shù)據(jù)暫時出現(xiàn)不一致的情況,接受最終一致性;最后,對各個分區(qū)數(shù)據(jù)進(jìn)行備份(一般是 3 份),應(yīng)對節(jié)點(diǎn)失敗的狀況等。
對數(shù)據(jù)的應(yīng)用可以分為分析型應(yīng)用和操作型應(yīng)用,分析型應(yīng)用主要是指對大量數(shù)據(jù)進(jìn)行分類、聚集、匯總,最后獲得數(shù)據(jù)量相對小的分析結(jié)果;操作型應(yīng)用主要是指對數(shù)據(jù)進(jìn)行增加、刪除、修改和查詢以及簡單的匯總操作,涉及的數(shù)據(jù)量一般比較少,事務(wù)執(zhí)行時間一般比較短。目前數(shù)據(jù)庫可分為關(guān)系數(shù)據(jù)庫和 noSQL數(shù)據(jù)庫,根據(jù)數(shù)據(jù)應(yīng)用的要求,再結(jié)合目前數(shù)據(jù)庫的種類,所以目前數(shù)據(jù)庫管理方式主要有以下 4 類。
(1)面向操作型的關(guān)系數(shù)據(jù)庫技術(shù)。
首先,傳統(tǒng)數(shù)據(jù)庫廠商提供的基于行存儲的關(guān)系數(shù)據(jù)庫系統(tǒng),如 DB2、Oracle、SQL Server 等,以其高度的一致性、精確性、系統(tǒng)可恢復(fù)性,在事務(wù)處理方面仍然是核心引擎。其次,面向?qū)崟r計算的內(nèi)存數(shù)據(jù)庫系統(tǒng),如 Hana、Timesten、Altibase 等通過把對數(shù)據(jù)并發(fā)控制、查詢和恢復(fù)等操作控制在內(nèi)存內(nèi)部進(jìn)行,所以獲得了非常高的性能,在很多特定領(lǐng)域如電信、證券、網(wǎng)管等得到普遍應(yīng)用。另外,以 VoltDB、Clustrix 和NuoDB 為代表的 new SQL 宣稱能夠在保持 ACDI 特性的同時提高了事務(wù)處理性能 50 倍 ~60 倍。
(2)面向分析型的關(guān)系數(shù)據(jù)庫技術(shù)。
首先,TeraData 是數(shù)據(jù)倉庫領(lǐng)域的領(lǐng)頭羊,Teradata 在整體上是按 Shared Nothing 架構(gòu)體系進(jìn)行組織的,定位就是大型數(shù)據(jù)倉庫系統(tǒng),支持較高的擴(kuò)展性。其次,面向分析型應(yīng)用,列存儲數(shù)據(jù)庫的研究形成了另一個重要的潮流。列存儲數(shù)據(jù)庫以其高效的壓縮、更高的 I/O 效率等特點(diǎn),在分析型應(yīng)用領(lǐng)域獲得了比行存儲數(shù)據(jù)庫高得多的性能。如:MonetDB 和 Vertica是一個典型的基于列存儲技術(shù)的數(shù)據(jù)庫系統(tǒng)。
(3)面向操作型的 noSQL 技術(shù)。
有些操作型應(yīng)用不受 ACID 高度一致性約束,但對大數(shù)據(jù)處理需要處理的數(shù)據(jù)量非常大,對速度性能要求也非常高,這樣就必須依靠大規(guī)模集群的并行處理能力來實(shí)現(xiàn)數(shù)據(jù)處理,弱一致性或最終一致性就可以了。這時,操作型 noSQL數(shù)據(jù)庫的優(yōu)點(diǎn)就可以發(fā)揮的淋漓盡致了。如,Hbase 一天就可以有超過 200 億個到達(dá)硬盤的讀寫操作,實(shí)現(xiàn)對大數(shù)據(jù)的處理。另外,noSQL數(shù)據(jù)庫是一個數(shù)據(jù)模型靈活、支持多樣數(shù)據(jù)類型,如對圖數(shù)據(jù)建模、存儲和分析,其性能、擴(kuò)展性是關(guān)系數(shù)據(jù)庫無法比擬的。
(4)面向分析型的 noSQL 技術(shù)。
面向分析型應(yīng)用的 noSQL 技術(shù)主要依賴于Hadoop 分布式計算平臺,Hadoop 是一個分布式計算平臺,以 HDFS 和 Map Reduce 為用戶提供系統(tǒng)底層細(xì)節(jié)透明的分布式基礎(chǔ)架構(gòu)?!禜adoop 經(jīng)典實(shí)踐染技巧》傳統(tǒng)的數(shù)據(jù)庫廠商 Microsoft,Oracle,SAS,IBM 等紛紛轉(zhuǎn)向 Hadoop 的研究,如微軟公司關(guān)閉 Dryad 系統(tǒng),全力投入 Map Reduce 的研發(fā),Oracle 在 2011 年下半年發(fā)布 Big Plan 戰(zhàn)略計劃,全面進(jìn)軍大數(shù)據(jù)處理領(lǐng)域,IBM 則早已捷足先登“,沃森(Watson)”計算機(jī)就是基于 Hadoop 技術(shù)開發(fā)的產(chǎn)物,同時 IBM 發(fā)布了 BigInsights 計劃,基于 Hadoop,Netezza 和 SPSS(統(tǒng)計分析、數(shù)據(jù)挖掘軟件)等技術(shù)和產(chǎn)品構(gòu)建大數(shù)據(jù)分析處理的技術(shù)框架。同時也涌現(xiàn)出一批新公司來研究Hadoop 技術(shù),如 Cloudera、MapRKarmashpere 等。
3數(shù)據(jù)管理方式的展望
通過以上分析,可以看出關(guān)系數(shù)據(jù)庫的 ACID 強(qiáng)調(diào)數(shù)據(jù)一致性通常指關(guān)聯(lián)數(shù)據(jù)之間的邏輯關(guān)系是否正確和完整,而對于很多互聯(lián)網(wǎng)應(yīng)用來說,對這一致性和隔離性的要求可以降低,而可用性的要求則更為明顯,此時就可以采用 noSQL 的兩種弱一致性的理論 BASE 和 CAP.關(guān)系數(shù)據(jù)庫和 noSQL數(shù)據(jù)庫并不是想到對立的矛盾體,而是可以相互補(bǔ)充的,根據(jù)不同需求使用不同的技術(shù),甚至二者可以共同存在,互不影響。最近幾年,以 Spanner 為代表新型數(shù)據(jù)庫的出現(xiàn),給數(shù)據(jù)庫領(lǐng)域注入新鮮血液,這就是融合了一致性和可用性的 newSQL,這種新型思維方式或許會是未來大數(shù)據(jù)處理方式的發(fā)展方向。
4 結(jié)束語
隨著云計算、物聯(lián)網(wǎng)等的發(fā)展,數(shù)據(jù)呈現(xiàn)爆炸式的增長,人們正被數(shù)據(jù)洪流所包圍,大數(shù)據(jù)的時代已經(jīng)到來。正確利用大數(shù)據(jù)給人們的生活帶來了極大的便利,但與此同時也給傳統(tǒng)的數(shù)據(jù)管理方式帶來了極大的挑戰(zhàn)。
2. 什么是NoSQL?
2.1 NoSQL 概述
NoSQL(NoSQL = Not Only SQL ),意即“不僅僅是SQL”,
泛指非關(guān)系型的數(shù)據(jù)庫。隨著互聯(lián)網(wǎng)web2.0網(wǎng)站的興起,傳統(tǒng)的關(guān)系數(shù)據(jù)庫在應(yīng)付web2.0網(wǎng)站,特別是超大規(guī)模和高并發(fā)的SNS類型的web2.0純動態(tài)網(wǎng)站已經(jīng)顯得力不從心,暴露了很多難以克服的問題,而非關(guān)系型的數(shù)據(jù)庫則由于其本身的特點(diǎn)得到了非常迅速的發(fā)展。NoSQL數(shù)據(jù)庫的產(chǎn)生就是為了解決大規(guī)模數(shù)據(jù)集合多重數(shù)據(jù)種類帶來的挑戰(zhàn),尤其是大數(shù)據(jù)應(yīng)用難題,包括超大規(guī)模數(shù)據(jù)的存儲。
(例如谷歌或Facebook每天為他們的用戶收集萬億比特的數(shù)據(jù))。這些類型的數(shù)據(jù)存儲不需要固定的模式,無需多余操作就可以橫向擴(kuò)展。
2.2 NoSQL代表
MongDB、 Redis、Memcache
3. 關(guān)系型數(shù)據(jù)庫與NoSQL的區(qū)別?
3.1 RDBMS
高度組織化結(jié)構(gòu)化數(shù)據(jù)
結(jié)構(gòu)化查詢語言(SQL)
數(shù)據(jù)和關(guān)系都存儲在單獨(dú)的表中。
數(shù)據(jù)操縱語言,數(shù)據(jù)定義語言
嚴(yán)格的一致性
基礎(chǔ)事務(wù)
ACID
關(guān)系型數(shù)據(jù)庫遵循ACID規(guī)則
事務(wù)在英文中是transaction,和現(xiàn)實(shí)世界中的交易很類似,它有如下四個特性:
A (Atomicity) 原子性
原子性很容易理解,也就是說事務(wù)里的所有操作要么全部做完,要么都不做,事務(wù)成功的條件是事務(wù)里的所有操作都成功,只要有一個操作失敗,整個事務(wù)就失敗,需要回滾。比如銀行轉(zhuǎn)賬,從A賬戶轉(zhuǎn)100元至B賬戶,分為兩個步驟:1)從A賬戶取100元;2)存入100元至B賬戶。這兩步要么一起完成,要么一起不完成,如果只完成第一步,第二步失敗,錢會莫名其妙少了100元。
C (Consistency) 一致性
一致性也比較容易理解,也就是說數(shù)據(jù)庫要一直處于一致的狀態(tài),事務(wù)的運(yùn)行不會改變數(shù)據(jù)庫原本的一致性約束。
I (Isolation) 獨(dú)立性
所謂的獨(dú)立性是指并發(fā)的事務(wù)之間不會互相影響,如果一個事務(wù)要訪問的數(shù)據(jù)正在被另外一個事務(wù)修改,只要另外一個事務(wù)未提交,它所訪問的數(shù)據(jù)就不受未提交事務(wù)的影響。比如現(xiàn)有有個交易是從A賬戶轉(zhuǎn)100元至B賬戶,在這個交易還未完成的情況下,如果此時B查詢自己的賬戶,是看不到新增加的100元的
D (Durability) 持久性
持久性是指一旦事務(wù)提交后,它所做的修改將會永久的保存在數(shù)據(jù)庫上,即使出現(xiàn)宕機(jī)也不會丟失。
3.2 NoSQL
代表著不僅僅是SQL
沒有聲明性查詢語言
沒有預(yù)定義的模式
鍵 - 值對存儲,列存儲,文檔存儲,圖形數(shù)據(jù)庫
最終一致性,而非ACID屬性
非結(jié)構(gòu)化和不可預(yù)知的數(shù)據(jù)
CAP定理
高性能,高可用性和可伸縮性
分布式數(shù)據(jù)庫中的CAP原理(了解)
CAP定理:
Consistency(一致性), 數(shù)據(jù)一致更新,所有數(shù)據(jù)變動都是同步的
Availability(可用性), 好的響應(yīng)性能
Partition tolerance(分區(qū)容錯性) 可靠性
P: 系統(tǒng)中任意信息的丟失或失敗不會影響系統(tǒng)的繼續(xù)運(yùn)作。
定理:任何分布式系統(tǒng)只可同時滿足二點(diǎn),沒法三者兼顧。
CAP理論的核心是:一個分布式系統(tǒng)不可能同時很好的滿足一致性,可用性和分區(qū)容錯性這三個需求,
因此,根據(jù) CAP 原理將 NoSQL 數(shù)據(jù)庫分成了滿足 CA 原則、滿足 CP 原則和滿足 AP 原則三 大類:
CA - 單點(diǎn)集群,滿足一致性,可用性的系統(tǒng),通常在可擴(kuò)展性上不太強(qiáng)大。
CP - 滿足一致性,分區(qū)容忍性的系統(tǒng),通常性能不是特別高。
AP - 滿足可用性,分區(qū)容忍性的系統(tǒng),通??赡軐σ恢滦砸蟮鸵恍?/p>
CAP理論就是說在分布式存儲系統(tǒng)中,最多只能實(shí)現(xiàn)上面的兩點(diǎn)。
而由于當(dāng)前的網(wǎng)絡(luò)硬件肯定會出現(xiàn)延遲丟包等問題,所以分區(qū)容忍性是我們必須需要實(shí)現(xiàn)的。
所以我們只能在一致性和可用性之間進(jìn)行權(quán)衡,沒有NoSQL系統(tǒng)能同時保證這三點(diǎn)。
說明:C:強(qiáng)一致性 A:高可用性 P:分布式容忍性
舉例:
CA:傳統(tǒng)Oracle數(shù)據(jù)庫
AP:大多數(shù)網(wǎng)站架構(gòu)的選擇
CP:Redis、Mongodb
注意:分布式架構(gòu)的時候必須做出取舍。
一致性和可用性之間取一個平衡。多余大多數(shù)web應(yīng)用,其實(shí)并不需要強(qiáng)一致性。
因此犧牲C換取P,這是目前分布式數(shù)據(jù)庫產(chǎn)品的方向。
4. 當(dāng)下NoSQL的經(jīng)典應(yīng)用
當(dāng)下的應(yīng)用是 SQL 與 NoSQL 一起使用的。
代表項(xiàng)目:阿里巴巴商品信息的存放。
去 IOE 化。
ps:I 是指 IBM 的小型機(jī),很貴的,好像好幾萬一臺;O 是指 Oracle 數(shù)據(jù)庫,也很貴的,好幾萬呢;M 是指 EMC 的存儲設(shè)備,也很貴的。
難點(diǎn):
數(shù)據(jù)類型多樣性。
數(shù)據(jù)源多樣性和變化重構(gòu)。
數(shù)據(jù)源改造而服務(wù)平臺不需要大面積重構(gòu)。
而傳統(tǒng)的關(guān)系數(shù)據(jù)庫在應(yīng)付web2.0網(wǎng)站,特別是超大規(guī)模和高并發(fā)的SNS類型的web2.0純動態(tài)網(wǎng)站已經(jīng)顯得力不從心,暴露了很多難以克服的問題,例如:
1、High performance - 對數(shù)據(jù)庫高并發(fā)讀寫的需求
web2.0網(wǎng)站要根據(jù)用戶個性化信息來實(shí)時生成動態(tài)頁面和提供動態(tài)信息,所以基本上無法使用動態(tài)頁面靜態(tài)化技術(shù),因此數(shù)據(jù)庫并發(fā)負(fù)載非常高,往往要達(dá)到每秒上萬次讀寫請求。關(guān)系數(shù)據(jù)庫應(yīng)付上萬次SQL查詢還勉強(qiáng)頂?shù)米?,但是?yīng)付上萬次SQL寫數(shù)據(jù)請求,硬盤IO就已經(jīng)無法承受了。其實(shí)對于普通的BBS網(wǎng)站,往往也存在對高并發(fā)寫請求的需求。
2、Huge Storage - 對海量數(shù)據(jù)的高效率存儲和訪問的需求
對于大型的SNS網(wǎng)站,每天用戶產(chǎn)生海量的用戶動態(tài),以國外的Friendfeed為例,一個月就達(dá)到了2.5億條用戶動態(tài),對于關(guān)系數(shù)據(jù)庫來說,在一張2.5億條記錄的表里面進(jìn)行SQL查詢,效率是極其低下乃至不可忍受的。再例如大型web網(wǎng)站的用戶登錄系統(tǒng),例如騰訊,盛大,動輒數(shù)以億計的帳號,關(guān)系數(shù)據(jù)庫也很難應(yīng)付。
3、High Scalability High Availability- 對數(shù)據(jù)庫的高可擴(kuò)展性和高可用性的需求
在基于web的架構(gòu)當(dāng)中,數(shù)據(jù)庫是最難進(jìn)行橫向擴(kuò)展的,當(dāng)一個應(yīng)用系統(tǒng)的用戶量和訪問量與日俱增的時候,你的數(shù)據(jù)庫卻沒有辦法像web server和app server那樣簡單的通過添加更多的硬件和服務(wù)節(jié)點(diǎn)來擴(kuò)展性能和負(fù)載能力。對于很多需要提供24小時不間斷服務(wù)的網(wǎng)站來說,對數(shù)據(jù)庫系統(tǒng)進(jìn)行升級和擴(kuò)展是非常痛苦的事情,往往需要停機(jī)維護(hù)和數(shù)據(jù)遷移,為什么數(shù)據(jù)庫不能通過不斷的添加服務(wù)器節(jié)點(diǎn)來實(shí)現(xiàn)擴(kuò)展呢?
在上面提到的“三高”需求面前,關(guān)系數(shù)據(jù)庫遇到了難以克服的障礙,而對于web2.0網(wǎng)站來說,關(guān)系數(shù)據(jù)庫的很多主要特性卻往往無用武之地,例如:
1、數(shù)據(jù)庫事務(wù)一致性需求
很多web實(shí)時系統(tǒng)并不要求嚴(yán)格的數(shù)據(jù)庫事務(wù),對讀一致性的要求很低,有些場合對寫一致性要求也不高。因此數(shù)據(jù)庫事務(wù)管理成了數(shù)據(jù)庫高負(fù)載下一個沉重的負(fù)擔(dān)。
2、數(shù)據(jù)庫的寫實(shí)時性和讀實(shí)時性需求
對關(guān)系數(shù)據(jù)庫來說,插入一條數(shù)據(jù)之后立刻查詢,是肯定可以讀出來這條數(shù)據(jù)的,但是對于很多web應(yīng)用來說,并不要求這么高的實(shí)時性。
3、對復(fù)雜的SQL查詢,特別是多表關(guān)聯(lián)查詢的需求
任何大數(shù)據(jù)量的web系統(tǒng),都非常忌諱多個大表的關(guān)聯(lián)查詢,以及復(fù)雜的數(shù)據(jù)分析類型的復(fù)雜SQL報表查詢,特別是SNS類型的網(wǎng)站,從需求以及產(chǎn)品設(shè)計角度,就避免了這種情況的產(chǎn)生。往往更多的只是單表的主鍵查詢,以及單表的簡單條件分頁查詢,SQL的功能被極大的弱化了。
因此,關(guān)系數(shù)據(jù)庫在這些越來越多的應(yīng)用場景下顯得不那么合適了,為了解決這類問題的非關(guān)系數(shù)據(jù)庫應(yīng)運(yùn)而生。
NoSQL 是非關(guān)系型數(shù)據(jù)存儲的廣義定義。它打破了長久以來關(guān)系型數(shù)據(jù)庫與ACID理論大一統(tǒng)的局面。NoSQL 數(shù)據(jù)存儲不需要固定的表結(jié)構(gòu),通常也不存在連接操作。在大數(shù)據(jù)存取上具備關(guān)系型數(shù)據(jù)庫無法比擬的性能優(yōu)勢。該術(shù)語在 2009 年初得到了廣泛認(rèn)同。
當(dāng)今的應(yīng)用體系結(jié)構(gòu)需要數(shù)據(jù)存儲在橫向伸縮性上能夠滿足需求。而 NoSQL 存儲就是為了實(shí)現(xiàn)這個需求。Google 的BigTable與Amazon的Dynamo是非常成功的商業(yè) NoSQL 實(shí)現(xiàn)。一些開源的 NoSQL 體系,如Facebook 的Cassandra, Apache 的HBase,也得到了廣泛認(rèn)同。
分享名稱:nosql的理論基礎(chǔ),簡述nosql
轉(zhuǎn)載來于:http://www.rwnh.cn/article44/dsdjche.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、品牌網(wǎng)站設(shè)計、商城網(wǎng)站、全網(wǎng)營銷推廣、網(wǎng)站收錄、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)