爲何MongoDB適合大數據的存儲?

NoSQL數據庫都被貼上不一樣用途的標籤,如MongoDB和CouchDB都是面向文檔的數據庫,但這並不意味着它們能夠象JSON(JavaScript Object Notation,JavaScript對象標記)那樣以結構化數據形式存儲文本文檔。程序員

JSON被認爲是XML的代替品,它是一個輕量級的,基於文本交換數據的標準,和XML同樣具備人類易讀的特性。簡單的JSON數據結構叫作對象,可能包括多種數據類型,如整型(int),字符串(string),數組(array),日期(date),對象(object)和字節數組(bytearray)。數據庫

面向文檔的數據庫與關係數據庫有着顯著的區別,面向文檔的數據庫用一個有組織的文件來存儲數據,而不是用行來存儲數據,在MongoDB中,一組文檔被看做是一個集合,在關係數據庫中,許多行的集合被看做是一張表。數組

但同時它們的操做又是相似的,關係數據庫使用select,insert,update和delete操做表中的數據,面向文檔的數據庫使用query,insert,update和remove作意義相同的操做。緩存

MongoDB中對象的最大尺寸被限制爲4MB,但對象的數量不受限制,MongoDB能夠經過集羣加快操做的執行速度,當數據庫變得愈來愈大時,能夠向集羣增長服務器解決性能問題。服務器

 

 

Mongo是一個高性能,開源,無模式的文檔型數據庫,它在許多場景下可用於替代傳統的關係型數據庫或鍵/值存儲方式。Mongo使用C++開發,提供瞭如下功能:數據結構

◆面向集合的存儲:適合存儲對象及JSON形式的數據。工具

◆動態查詢:Mongo支持豐富的查詢表達式。查詢指令使用JSON形式的標記,可輕易查詢文檔中內嵌的對象及數組。性能

◆完整的索引支持:包括文檔內嵌對象及數組。Mongo的查詢優化器會分析查詢表達式,並生成一個高效的查詢計劃。優化

◆查詢監視:Mongo包含一個監視工具用於分析數據庫操做的性能。網站

◆複製及自動故障轉移:Mongo數據庫支持服務器之間的數據複製,支持主-從模式及服務器之間的相互複製。複製的主要目標是提供冗餘及自動故障轉移。

◆高效的傳統存儲方式:支持二進制數據及大型對象(如照片或圖片)。

◆自動分片以支持雲級別的伸縮性(處於早期alpha階段):自動分片功能支持水平的數據庫集羣,可動態添加額外的機器。

MongoDB的主要目標是在鍵/值存儲方式(提供了高性能和高度伸縮性)以及傳統的RDBMS系統(豐富的功能)架起一座橋樑,集二者的優點於一身。根據官方網站的描述,Mongo適合用於如下場景:

◆網站數據:Mongo很是適合實時的插入,更新與查詢,並具有網站實時數據存儲所需的複製及高度伸縮性。

◆緩存:因爲性能很高,Mongo也適合做爲信息基礎設施的緩存層。在系統重啓以後,由Mongo搭建的持久化緩存層能夠避免下層的數據源過載。

◆大尺寸,低價值的數據:使用傳統的關係型數據庫存儲一些數據時可能會比較昂貴,在此以前,不少時候程序員每每會選擇傳統的文件進行存儲。

◆高伸縮性的場景:Mongo很是適合由數十或數百臺服務器組成的數據庫。Mongo的路線圖中已經包含對MapReduce引擎的內置支持。

◆用於對象及JSON數據的存儲:Mongo的BSON數據格式很是適合文檔化格式的存儲及查詢。

天然,MongoDB的使用也會有一些限制,例如它不適合:

◆高度事務性的系統:例如銀行或會計系統。傳統的關係型數據庫目前仍是更適用於須要大量原子性復瑣事務的應用程序。

◆傳統的商業智能應用:針對特定問題的BI數據庫會對產生高度優化的查詢方式。對於此類應用,數據倉庫多是更合適的選擇。

◆須要SQL的問題

MongoDB支持OS X、Linux及Windows等操做系統,並提供了Python,PHP,Ruby,Java及C++語言的驅動程序,社區中也提供了對Erlang及.NET等平臺的驅動程序。

相關文章
相關標籤/搜索