隨著云計算的高速發展,越來越多的應用需要存儲海量數據,并且對高并發和處理海量數據提出了更高的要求,傳統的關系型數據庫對于這些應用場景難以滿足應用需求。
作為NoSQL數據庫之一的MongoDB數據庫能夠完全滿足和解決在海量數據存儲方面的應用,越來越多的大網站和企業選擇MongoDB代替Mysql進行存儲。
什么是MongoDB?MongoDB[1] 是一個基于分布式文件存儲的數據庫。由C 語言編寫。旨在為WEB應用提供可擴展的高性能數據存儲解決方案。
MongoDB[2] 是一個介于關系數據庫和非關系數據庫之間的產品,是非關系數據庫當中功能最豐富,最像關系數據庫的。Mongo最大的特點是他支持的查詢語言非常強大,其語法有點類似于面向對象的查詢語言,幾乎可以實現類似關系數據庫單表查詢的絕大部分功能,而且還支持對數據建立索引。
MongoDB的主要特點(1)文件存儲格式為Bson,使用易于掌握和理解的Json風格語法。相對Json來說,Bson擁有更好的性能,主要表現為更快的遍歷速度、操作更簡易、增加了額外的數據類型。(2)模式自由,支持嵌入子文檔和數組,無需事先創建數據結構,屬于逆規范化的數據模型,有利于提高查詢速度。(3)動態查詢,支持豐富的查詢表達式,使用Json形式的標記,可輕易查詢文檔中內嵌的對象和數組及子文檔。(4)完整的索引支持,包括文檔內嵌對象和數據,同時還提供了全文索引方式,MongoDB的查詢優化器會分析查詢表達式,并生成一個高效的查詢計劃。(5)使用高效的二進制數據存儲,適合存儲大型對象(如高清圖片、視頻等)。(6)支持多種復制模式,提供冗余及自動故障轉移。支持Master-Slave、Replica Pairs/Replica Sets、有限Master-Master模式。(7)支持服務端腳本和Map/Reduce,可以實現海量數據計算,即實現云計算功能。(8)性能高、速度快。在多數場合,其查詢速度對于MySQL要快的多,對于CPU占用非常小。部署很簡單,幾乎是零配置。(9)自動處理碎片,支持自動分片功能實現水平擴展的數據庫集群,可以動態添加或移除節點。(10)內置GridFS,支持海量存儲。(11)可通過網絡訪問,采用高效的MongoDB網絡協議,在性能方面要優于http或Rest協議。(12)第三方支持豐富,MongoDB社區活躍,越來越多的公司和網站在生產環境中使用MongoDB進行技術架構優化,同時由10gen公司官方提供強大技術支持。
MongoDB的適用場景MongoDB的主要目標是在鍵/值存儲方式(提供了高性能和高度伸縮性)以及傳統的RDBMS系統(豐富的功能)架起一座橋梁,集兩者的優勢于一身。(1)網站數據:MongoDB非常適合實時的插入,更新與查詢,并具備網站實時數據存儲所需的復制及高度伸縮性。(2)緩存:由于性能很高,MongoDB也適合作為信息基礎設施的緩存層。在系統重啟之后,由MongoDB搭建的持久化緩存層可以避免下層的數據源過載。(3)大尺寸,低價值的數據:使用傳統的關系型數據庫存儲一些數據時可能會比較昂貴,在此之前,很多時候程序員往往會選擇傳統的文件進行存儲。(4)高伸縮性的場景:MongoDB非常適合由數十或數百臺服務器組成的數據庫。MongoDB的路線圖中已經包含對MapReduce引擎的內置支持。(5)用于對象及JSON數據的存儲:MongoDB的Bson數據格式非常適合文檔化格式的存儲及查詢。
如有不同觀點,歡迎發表評論。如果喜歡我的回答,歡迎“點贊、分享”。