Mongodb認識

介紹

一,mongodb是什麼

MongoDB 是一個基於分佈式文件存儲的數據庫, 面向文檔的非關係數據庫主要解決的問題不是高性能的併發讀寫,而是保證海量數據存儲的同時,具備良好的查詢性能。程序員

Mongo主要解決的是海量數據的訪問效率問題,根據官方的文檔,當數據量達到50GB以上的時候,Mongo的數據庫訪問速度是MySQL的 10倍以上。Mongo的併發讀寫效率不是特別出色,根據官方提供的性能測試代表,大約每秒能夠處理0.5萬-1.5次讀寫請求。對於Mongo的併發讀 寫性能,我(robbin)也打算有空的時候好好測試一下。mongodb

由於Mongo主要是支持海量數據存儲的,因此Mongo還自帶了一個出色的分佈式文件系統GridFS,能夠支持海量的數據存儲,但我也看到有 些評論認爲GridFS性能不佳,這一點仍是有待親自作點測試來驗證了。數據庫

最後因爲Mongo能夠支持複雜的數據結構,並且帶有強大的數據查詢功能,所以很是受到歡迎,不少項目都考慮用MongoDB來替代MySQL來 實現不是特別複雜的Web應用,比方說why we migrated from MySQL to MongoDB就是一個真實的從MySQL遷 移到MongoDB的案例,因爲數據量實在太大,因此遷移到了Mongo上面,數據查詢的速度獲得了很是顯著的提高。編程

MongoDB是一個高性能,開源,無模式的文檔型數據庫,是當前NoSQL數據庫產品中最熱門的一種。它在許多場景下可用於替代傳統的關係型數據庫或鍵/值存儲方式,MongoDB使用C++開發。MongoDB的官方網站地址是:http://www.mongodb.org。數組

二,爲何mongodb

MongoDB 的設計目標是高性能、可擴展、易部署、易使用,存儲數據很是方便。其主要功能特性以下。緩存

(1)面向集合存儲,容易存儲對象類型的數據。在MongoDB 中數據被分組存儲在集合中,集合相似RDBMS 中的表,一個集合中能夠存儲無限多的文檔。服務器

(2)模式自由,採用無模式結構存儲。在MongoDB 中集合中存儲的數據是無模式的文檔,採用無模式存儲數據是集合區別於RDBMS 中的表的一個重要特徵。網絡

(3)支持徹底索引,能夠在任意屬性上創建索引,包含內部對象。MongoDB的索引和RDBMS 的索引基本同樣,能夠在指定屬性、內部對象上建立索引以提升查詢的速度。除此以外,MongoDB 還提供建立基於地理空間的索引的能力。數據結構

(4)支持查詢。MongoDB 支持豐富的查詢操做,MongoDB 幾乎支持SQL中的大部分查詢。併發

(5)強大的聚合工具。MongoDB 除了提供豐富的查詢功能外,還提供強大的聚合工具,如count、group 等,支持使用MapReduce 完成複雜的聚合任務。

(6)支持複製和數據恢復。MongoDB 支持主從複製機制,能夠實現數據備份、故障恢復、讀擴展等功能。而基於副本集的複製機制提供了自動故障恢復的功能,確保了集羣數據不會丟失。

(7)使用高效的二進制數據存儲,包括大型對象(如視頻/圖片)。使用二進制格式存儲,能夠保存任何類型的數據對象。

(8)自動處理分片,以支持雲計算層次的擴展。MongoDB 支持集羣自動切分數據,對數據進行分片可使集羣存儲更多的數據,實現更大的負載,也能保證存儲的負載均衡。

(9)支持Perl、PHP、Java、C#、JavaScript、Ruby、C 和C++語言的驅動程序,MongoDB 提供了當前全部主流開發語言的數據庫驅動包,開發人員使用任何一種主流開發語言均可以輕鬆編程,實現訪問MongoDB 數據庫。

(10)文件存儲格式爲BSON(JSON 的一種擴展)。BSON 是對二進制格式的JSON 的簡稱,BSON 支持文檔和數組的嵌套。

(11)能夠經過網絡訪問。能夠經過網絡遠程訪問MongoDB 數據庫。

3、mongodb體系結構

一、MongoDB 的邏輯結構是主要由:文檔(document)、集合(collection)和數據庫(database)這三部分組成的。

MongoDB 的文檔(document),至關於關係數據庫中的一行記錄

集合(collection),至關於關係型數據庫中的表的概念

文檔(document)、集合(collection)、數據庫(database)的層次結構以下圖:

輸入圖片說明

文檔(document) 行(row)

集合(collection) 表(table)

數據庫(database) 數據庫(database)

二、MongoDB 中多個文檔組成集合,多個集合組成數據庫。一個MongoDB 實例能夠承載多個數據庫。它們之間能夠看做相互獨立,每一個數據庫都有獨立的權限控制。在磁盤上,不一樣的數據庫存放在不一樣的文件中。

三、MongoDB 中存在如下系統數據庫。

● Admin 數據庫:一個權限數據庫,若是建立用戶的時候將該用戶添加到admin 數據庫中,那麼該用戶就自動繼承了全部數據庫的權限。

● Local 數據庫:這個數據庫永遠不會被負責,能夠用來存儲本地單臺服務器的任意集合。

● Config 數據庫:當MongoDB 使用分片模式時,config 數據庫在內部使用,用於保存分片的信息。

4、使用場景

MongoDB 的主要目標是在鍵/值存儲方式(提供了高性能和高度伸縮性)和傳統的RDBMS 系統(具備豐富的功能)之間架起一座橋樑,它集二者的優點於一身。

一、根據官方網站的描述,Mongo 適用於如下場景。

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

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

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

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

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

二、不適用場景

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

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

● 須要SQL 的問題。

相關文章
相關標籤/搜索