MongoDB CEO談NoSQL的大數(shù)據(jù)量處理能力
原創(chuàng)【51CTO獨(dú)家特稿】為MongoDB提供技術(shù)支持的10gen公司CEO凱文-賴安Dwight Merriman說:“我們公司成立于3月29日,我認(rèn)為我們選擇的不是一個縫隙市場,相反,我認(rèn)為我們會慢慢改變企業(yè)用戶市場。現(xiàn)在我們可以看到,MongoDB.org網(wǎng)站每月的下載量達(dá)到了3萬次,而幾個月前,下載量還為零”。對于NoSQL的市場前景,51CTO數(shù)據(jù)庫頻道向您推薦《NoSOL:關(guān)系型數(shù)據(jù)庫終結(jié)者?》專題。
10gen公司CEO Dwight Merriman
MongoDB的名字源自一個形容詞humongous(巨大無比的),在向上擴(kuò)展和快速處理大數(shù)據(jù)量方面,它會損失一些精度,在舊金山舉行的MondoDB大會上,Merriman說:“你不適宜用它來處理復(fù)雜的金融事務(wù),如證券交易,數(shù)據(jù)的一致性可能無法得到保證”。若想了解更多關(guān)于MongoDB的信息,請看51CTO數(shù)據(jù)庫頻道推薦《MongoDB,無模式文檔型數(shù)據(jù)庫簡介》。
NoSQL數(shù)據(jù)庫都被貼上不同用途的標(biāo)簽,如MongoDB和CouchDB都是面向文檔的數(shù)據(jù)庫,但這并不意味著它們可以象JSON(JavaScript Object Notation,JavaScript對象標(biāo)記)那樣以結(jié)構(gòu)化數(shù)據(jù)形式存儲文本文檔。
JSON被認(rèn)為是XML的代替品,它是一個輕量級的,基于文本交換數(shù)據(jù)的標(biāo)準(zhǔn),和XML一樣具有人類易讀的特性。簡單的JSON數(shù)據(jù)結(jié)構(gòu)叫做對象,可能包括多種數(shù)據(jù)類型,如整型(int),字符串(string),數(shù)組(array),日期(date),對象(object)和字節(jié)數(shù)組(bytearray)。
面向文檔的數(shù)據(jù)庫與關(guān)系數(shù)據(jù)庫有著顯著的區(qū)別,面向文檔的數(shù)據(jù)庫用一個有組織的文件來存儲數(shù)據(jù),而不是用行來存儲數(shù)據(jù),在MongoDB中,一組文檔被看作是一個集合,在關(guān)系數(shù)據(jù)庫中,許多行的集合被看作是一張表。
但同時它們的操作又是類似的,關(guān)系數(shù)據(jù)庫使用select,insert,update和delete操作表中的數(shù)據(jù),面向文檔的數(shù)據(jù)庫使用query,insert,update和remove做意義相同的操作。
MongoDB中對象的***尺寸被限制為4MB,但對象的數(shù)量不受限制,MongoDB可以通過集群加快操作的執(zhí)行速度,當(dāng)數(shù)據(jù)庫變得越來越大時,可以向集群增加服務(wù)器解決性能問題。
Wordnik工程副總裁Tony Tam說他的公司有5百萬個文檔,以前保存在MySQL數(shù)據(jù)庫中,大約有1.5TB,一個月前遷移到MongoDB上了,Wordnik專門收集所有單詞的定義和信息,因此數(shù)據(jù)量是非常大的,遷移到MongoDB后,Tony Tam說他感到更放心。
Tam說使用MySQL數(shù)據(jù)庫時,Wordnik項(xiàng)目一直都象是在顛簸的路上前行,數(shù)據(jù)表的凍結(jié)時間有時甚至超過了10秒,這是任何人都不能容忍的。每天會有大約200個新單詞出現(xiàn),我們要負(fù)責(zé)收集,并要向數(shù)據(jù)庫增加1500個例子顯示它們的用法,我們希望寫入數(shù)據(jù)庫的時間只需要1秒。Tam說:“我們不關(guān)心一致性,前后兩個用戶的查詢結(jié)果不一定非得保持一致,我們本來就是時刻在做著更新,這一點(diǎn)我們無法保證”。
Wordnik系統(tǒng)就象是一個龐大的在線詞典,有很多人同時在線查詢,但同時我們也在做更新,使用MongoDB后,我們可以保持高速添加數(shù)據(jù),不用擔(dān)心數(shù)據(jù)庫會出現(xiàn)堵塞。Tam在MondoDB大會上曾做過一個題為“Wordnik:從MySQL到MongoDB”的演講,他說他們公司只花了一天時間就從MySQL遷移到MongoDB上了。
延伸閱讀
MongoDB Logo
Mongo是一個高性能,開源,無模式的文檔型數(shù)據(jù)庫,它在許多場景下可用于替代傳統(tǒng)的關(guān)系型數(shù)據(jù)庫或鍵/值存儲方式。Mongo使用C++開發(fā),提供了以下功能:
◆面向集合的存儲:適合存儲對象及JSON形式的數(shù)據(jù)。
◆動態(tài)查詢:Mongo支持豐富的查詢表達(dá)式。查詢指令使用JSON形式的標(biāo)記,可輕易查詢文檔中內(nèi)嵌的對象及數(shù)組。
◆完整的索引支持:包括文檔內(nèi)嵌對象及數(shù)組。Mongo的查詢優(yōu)化器會分析查詢表達(dá)式,并生成一個高效的查詢計劃。
◆查詢監(jiān)視:Mongo包含一個監(jiān)視工具用于分析數(shù)據(jù)庫操作的性能。
◆復(fù)制及自動故障轉(zhuǎn)移:Mongo數(shù)據(jù)庫支持服務(wù)器之間的數(shù)據(jù)復(fù)制,支持主-從模式及服務(wù)器之間的相互復(fù)制。復(fù)制的主要目標(biāo)是提供冗余及自動故障轉(zhuǎn)移。
◆高效的傳統(tǒng)存儲方式:支持二進(jìn)制數(shù)據(jù)及大型對象(如照片或圖片)。
◆自動分片以支持云級別的伸縮性(處于早期alpha階段):自動分片功能支持水平的數(shù)據(jù)庫集群,可動態(tài)添加額外的機(jī)器。
MongoDB的主要目標(biāo)是在鍵/值存儲方式(提供了高性能和高度伸縮性)以及傳統(tǒng)的RDBMS系統(tǒng)(豐富的功能)架起一座橋梁,集兩者的優(yōu)勢于一身。根據(jù)官方網(wǎng)站的描述,Mongo適合用于以下場景:
◆網(wǎng)站數(shù)據(jù):Mongo非常適合實(shí)時的插入,更新與查詢,并具備網(wǎng)站實(shí)時數(shù)據(jù)存儲所需的復(fù)制及高度伸縮性。
◆緩存:由于性能很高,Mongo也適合作為信息基礎(chǔ)設(shè)施的緩存層。在系統(tǒng)重啟之后,由Mongo搭建的持久化緩存層可以避免下層的數(shù)據(jù)源過載。
◆大尺寸,低價值的數(shù)據(jù):使用傳統(tǒng)的關(guān)系型數(shù)據(jù)庫存儲一些數(shù)據(jù)時可能會比較昂貴,在此之前,很多時候程序員往往會選擇傳統(tǒng)的文件進(jìn)行存儲。
◆高伸縮性的場景:Mongo非常適合由數(shù)十或數(shù)百臺服務(wù)器組成的數(shù)據(jù)庫。Mongo的路線圖中已經(jīng)包含對MapReduce引擎的內(nèi)置支持。
◆用于對象及JSON數(shù)據(jù)的存儲:Mongo的BSON數(shù)據(jù)格式非常適合文檔化格式的存儲及查詢。
自然,MongoDB的使用也會有一些限制,例如它不適合:
◆高度事務(wù)性的系統(tǒng):例如銀行或會計系統(tǒng)。傳統(tǒng)的關(guān)系型數(shù)據(jù)庫目前還是更適用于需要大量原子性復(fù)雜事務(wù)的應(yīng)用程序。
◆傳統(tǒng)的商業(yè)智能應(yīng)用:針對特定問題的BI數(shù)據(jù)庫會對產(chǎn)生高度優(yōu)化的查詢方式。對于此類應(yīng)用,數(shù)據(jù)倉庫可能是更合適的選擇。
◆需要SQL的問題
MongoDB支持OS X、Linux及Windows等操作系統(tǒng),并提供了Python,PHP,Ruby,Java及C++語言的驅(qū)動程序,社區(qū)中也提供了對Erlang及.NET等平臺的驅(qū)動程序。
原文名:MongoDB Handles Masses Of Data