前言: MongoDB最流行的現代數據庫,內存級的讀寫.MongoDB這個來源英文單詞「humongous」,homongous這個單詞的意思是「巨大的」、「奇大無比的」,從MongoDB單詞自己能夠看出它的目標是提供海量數據的存儲以及管理能力。sql
MongoDB是由MongoDB,Inc。開發的非關係數據庫.MongoDB將數據做爲文檔存儲在名爲BSON(二進制JSON)的二進制表示中。相關信息存儲在一塊兒,以便經過MongoDB查詢語言進行快速查詢訪問。字段因文檔而異; 沒有必要向系統聲明文檔結構 - 文檔是自我描述的。若是須要將新字段添加到文檔中,則能夠在不影響集合中的全部其餘文檔的狀況下建立該字段,而無需更新中央系統目錄,也不會使系統脫機。(可選)模式驗證可用於對每一個集合強制執行數據治理控制。數據庫
MongoDB的文檔數據模型天然地映射到應用程序代碼中的對象,使開發人員能夠輕鬆學習和使用。文檔使您可以輕鬆地表示層次關係以存儲數組和其餘更復雜的結構。編程
由於它使他們可以更快地構建應用程序,處理高度多樣化的數據類型,並大規模地管理應用程序。數組
因爲MongoDB文檔天然地映射到現代的面向對象編程語言,所以簡化了開發。使用MongoDB刪除了複雜的對象關係映射(ORM)層,該層將代碼中的對象轉換爲關係表。MongoDB靈活的數據模型還意味着數據庫模型能夠隨業務需求而發展。數據結構
MongoDB還能夠在多個分佈式數據中心內和跨多個分佈式數據中心進行擴展,從而提供之前沒法經過MySQL等關係數據庫實現的新級別的可用性和可伸縮性。隨着您的部署在數據量和吞吐量方面的增加,MongoDB能夠輕鬆擴展,無需停機,也無需更改應用程序。相比之下,使用MySQL實現擴展一般須要大量的定製工程工做。併發
MongoDB它在數據存儲的形態上和MySQL之類關係數據庫有本質區別,MongoDB存儲的基本對象是Document,因此咱們把它稱爲一種文檔數據庫.而文檔的集合是Collection.與SQL的概念類比,Collection對應於Table而Document對應於Row.Document使用一種BSON(Binary JSON)結構來表達,相似JSON的結構.編程語言
Document 在內部是如何存儲的?每一個Document被保存在一個Record 中。 Record 至關於 MongoDB 內部分配的一塊空間,除了保存 Document 的內容可能還會預留一些填充的額外空間。對於寫入後的 Document 若是還會更新,可能致使Document長度增長,就能夠利用上額外的填充空間來。若業務對於寫入後的Document不會再更新或刪除(像監控日誌、流水記錄等),能夠指定無填充的 Record 分配策略,更節省空間。分佈式
Mongo的存儲方式爲虛擬內存+持久化存儲,Mongo將數據寫入內存中,再由虛擬內存管理器將其持久化到硬盤中,所以寫操做會比關係型數據庫快不少.並且MongoDB 容許在服務端執行腳本,能夠用 Javascript 編寫某個函數,直接在服務端執行,也能夠把函數的定義存儲在服務端,下次直接調用便可。函數
mongoDB存儲的數據不須要具體的格式,它很是容易擴展,在使用Mysql開發時,最初設計table是讓人頭疼的,爲了考慮到之後的擴展,不得不在table的後面預留一些Row,讓人噁心是吧.可是mongoDB文檔數據庫的特色就是想存什麼存什麼,後期想添加數據也就是一行代碼的事,給了咱們極大的自由,固然自由確定也是有後果的,後面會說.性能
分片(Sharding) 幫助擴展,加速查詢響應的時間,減小宕機的影響
MongoDB 有一個最大的缺點,就是它佔用的空間很大,由於它屬於典型空間換時間原則的類型。那麼它的磁盤空間比普通數據庫會浪費一些,並且到目前爲止它尚未實如今線壓縮功能,在 MongoDB 中頻繁的進行數據增刪改時,若是記錄變了,例如數據大小發生了變化,這時候容易產生一些數據碎片,出現碎片引起的結果,一個是索引會出現性能問題。
mongoDB在4.0版本以後也支持ACID,MongoDB將在4.2裏推出分片集羣的多文檔事務支持。隨着事務支持的增長,MongoDB功能上更接近於關係型數據庫,可是和關係型仍是有本質上的區別:關係數據庫是基於關係模型的,其固定化的數據模型嚴格死板,對新一代應用迭代式開發支持很差,對各類數據多變的場景如物聯網或社交化都沒法支持的很好。MongoDB的JSON模型則具備動態靈活,數據庫無須下線就能夠進行模式變遷升級,特別適用於敏捷式的開發環境。
數據不是特別重要(例如通知,推送這些),數據表結構變化較爲頻繁,數據量特別大,數據的併發性特別高,數據結構比較特別(例如地圖的位置座標),這些狀況下用MongoDB,其餘狀況就仍是用 MySQL,這樣組合使用就能夠達到最大的效率。
從目前阿里雲 MongoDB 雲數據庫上的用戶看,MongoDB 的應用已經滲透到各個領域,好比遊戲、物流、電商、內容管理、社交、物聯網、視頻直播等,如下是幾個實際的應用案例。
......