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