NoSQL在企業(yè)中的發(fā)展歷程
本文的作者Sourav Mazumder目前是InfoSys Technologies的***技術(shù)架構(gòu)師。他在信息技術(shù)領(lǐng)域有14年以上的經(jīng)驗(yàn)。作為Infosys技術(shù)顧問團(tuán)的主要成員,Sourav為 Infosys在美國、歐洲、澳洲和日本的主要客戶,提供保險(xiǎn)、電信、銀行、零售、安全、交通以及建筑、工程、施工等多個(gè)行業(yè)的服務(wù)。 他曾參與Web項(xiàng)目的技術(shù)架構(gòu)和路線圖定義,SOA戰(zhàn)略實(shí)施,國際戰(zhàn)略定義,UI組件化,性能建模,伸縮性分析,非結(jié)構(gòu)化數(shù)據(jù)管理等等。Sourav參考的Infosys自身的核心銀行產(chǎn)品Finacle,也為他提供了豐富的產(chǎn)品開發(fā)經(jīng)驗(yàn)。Sourav還曾參與開發(fā)Infosys的J2EE可重用框架,和定義Infosys在架構(gòu)方面和開發(fā)定制應(yīng)用方面的軟件工程方法。Sourav的經(jīng)歷還包括在保證架構(gòu)合規(guī)和開發(fā)項(xiàng)目的治理方面的工作。Sourav是 iCMG認(rèn)證的軟件架構(gòu)師,同時(shí)也是TOGAF 8認(rèn)證的執(zhí)行者。Sourav最近在LISA伯克利全球化會(huì)議上發(fā)表了演講。Sourav關(guān)于SOA的***白皮書在社區(qū)里十分流行。Sourav目前關(guān)注 NoSQL,Web 2.0,治理,性能建構(gòu)和全球化。
以下是文章全文:
作為企業(yè)架構(gòu)師,我的職業(yè)習(xí)慣之一,就是不斷的探求各種新的有前景的概念和思想,看其是否有潛力為我所服務(wù)的來自各行各業(yè)的企業(yè)客戶帶來價(jià)值。同樣出于對(duì)這種理念的追求,我對(duì)NoSQL領(lǐng)域的關(guān)注了也有一段時(shí)間了,甚至從這個(gè)術(shù)語產(chǎn)生(或者錯(cuò)誤的產(chǎn)生?)之前就開始了。Google首先在這方面點(diǎn)了一把火,發(fā)布了論文Big Table架構(gòu),對(duì)關(guān)系數(shù)據(jù)庫是銀彈這種普遍的信念提出了質(zhì)疑,而Amazon關(guān)于Dynamo的論文則緊隨其后。 過去的一年中我們見證了NoSQL強(qiáng)勁的勢(shì)頭,在這一領(lǐng)域有多達(dá)25種產(chǎn)品/解決方案發(fā)布,并且NoSQL的觸角已經(jīng)伸向了業(yè)界的各個(gè)角落。在此前提下,我最近考慮深入這一領(lǐng)域,評(píng)估一下我的客戶究竟如何才能從這種NoSQL運(yùn)動(dòng)中獲益。不僅如此,我還想探究對(duì)于企業(yè)來說,是否是到了該認(rèn)真考慮采納 NoSQL的合適時(shí)機(jī)了。
什么是NoSQL——快速回顧
像許多關(guān)注這一領(lǐng)域的人一樣,我不喜歡從本質(zhì)上將SQL與NoSQL這一術(shù)語對(duì)立起來。同時(shí)我對(duì)該術(shù)語現(xiàn)有的解釋"Not Only SQL"也不甚滿意。對(duì)我來說,我們這里所討論的并非是是否使用SQL。(相反的是,我們?nèi)匀豢梢赃x擇類似SQL這樣的查詢接口(缺少對(duì)join等的支持)來與這些數(shù)據(jù)庫交互,使用現(xiàn)有的資源和技術(shù)來管理開發(fā)伸縮性和可維護(hù)性。) 這一運(yùn)動(dòng)是要找到存儲(chǔ)和檢索數(shù)據(jù)的其他高效的途徑,而不是盲目地在任何情況下都把關(guān)系數(shù)據(jù)庫當(dāng)作萬金油。因此,我認(rèn)為' Non Relational Database '(非關(guān)系型數(shù)據(jù)庫)能夠更好的表達(dá)這一思想。
無論采用哪個(gè)名字,“非關(guān)系型數(shù)據(jù)庫”這一范圍所傳達(dá)出來的“囊括所有”類型的意味,使得這一概念比較模糊(并且它還是否定型的)。這又使得人們(特別是企業(yè)中的決策者)對(duì)于哪些是屬于這個(gè)范圍,哪些不是,更重要的是,對(duì)他們來說這到底意味著什么,感到非常迷惑。
為了解答這些疑問,我嘗試通過以下幾點(diǎn)特征的描述,來刻畫“非關(guān)系型數(shù)據(jù)庫”的內(nèi)在本質(zhì)。
所謂“非關(guān)系型數(shù)據(jù)庫”指的是:
- 使用松耦合類型、可擴(kuò)展的數(shù)據(jù)模式來對(duì)數(shù)據(jù)進(jìn)行邏輯建模(Map,列,文檔,圖表等),而不是使用固定的關(guān)系模式元組來構(gòu)建數(shù)據(jù)模型。
- 以遵循于CAP定理(能保證在一致性,可用性和分區(qū)容忍性三者中中達(dá)到任意兩個(gè))的跨多節(jié)點(diǎn)數(shù)據(jù)分布模型而設(shè)計(jì),支持水平伸縮。這意味著對(duì)于多數(shù)據(jù)中心和動(dòng)態(tài)供應(yīng)(在生產(chǎn)集群中透明地加入/刪除節(jié)點(diǎn))的必要支持,也即彈性(Elasticity)。
- 擁有在磁盤或內(nèi)存中,或者在這兩者中都有的,對(duì)數(shù)據(jù)持久化的能力,有時(shí)候還可以使用可熱插拔的定制存儲(chǔ)。
- 支持多種的'Non-SQL'接口(通常多于一種)來進(jìn)行數(shù)據(jù)訪問。
圍繞著圖中四個(gè)特征的(數(shù)據(jù)持久性、邏輯數(shù)據(jù)模型、數(shù)據(jù)分布模型和接口)“非關(guān)系型數(shù)據(jù)庫”的各種變形,在最近的一些文章中有詳盡的描述,并且在因特網(wǎng)上有著廣泛的傳播。所以我就不做過多繁復(fù)的描述,而是通過一些例子對(duì)關(guān)鍵的方向進(jìn)行總結(jié),供快速參考:
- 接口——REST (HBase,CouchDB,Riak等),MapReduce (HBase,CouchDB,MongoDB,Hypertable等),Get/Put (Voldemort,Scalaris等),Thrift (HBase,Hypertable,Cassandra等),語言特定的API(MongoDB)。
- 邏輯數(shù)據(jù)模型——面向鍵值對(duì)的(Voldemort,Dynomite 等),面向Column Family的(BigTable,HBase,Hypertable 等),面向文檔的(Couch DB,MongoDB等),面向圖的(Neo4j, Infogrid等)
- 數(shù)據(jù)分布模型——一致性和可用性(HBase,Hypertable, MongoDB等), 可用性和可分區(qū)性(Cassandra等)。一致性和可分區(qū)性的組合會(huì)導(dǎo)致一些非額定的節(jié)點(diǎn)產(chǎn)生可用性的損失。有趣的是目前還沒有一個(gè)“非關(guān)系型數(shù)據(jù)庫”支持這一組合。
- 數(shù)據(jù)持久性—— 基于內(nèi)存的(如Redis,Scalaris, Terrastore),基于磁盤的(如MongoDB,Riak等),或內(nèi)存及磁盤二者的結(jié)合(如 HBase,Hypertable,Cassandra)。存儲(chǔ)的類型有助于我們辨別該解決方案適用于哪種類型。然而,在大多數(shù)情況下人們發(fā)現(xiàn)基于組合方案的解決方案是***的選擇。既能通過內(nèi)存數(shù)據(jù)存儲(chǔ)支持高性能,又能在寫入足夠多的數(shù)據(jù)后存儲(chǔ)到磁盤來保證持續(xù)性。
【編輯推薦】
- MongoDB之父:MongoDB勝過BigTable
- 主流NoSQL數(shù)據(jù)庫全方位評(píng)測(cè)之MongoDB
- 教你如何利用MySQL學(xué)習(xí)MongoDB
- 在Windows環(huán)境下MongoDB搭建和簡單操作
- Mongodb源碼分析之Mongos分析