陪你秋招系列: MongoDB入門

前言: MongoDB最流行的現代數據庫,內存級的讀寫.MongoDB這個來源英文單詞「humongous」,homongous這個單詞的意思是「巨大的」、「奇大無比的」,從MongoDB單詞自己能夠看出它的目標是提供海量數據的存儲以及管理能力。sql

什麼是MongoDB

MongoDB是由MongoDB,Inc。開發的非關係數據庫.MongoDB將數據做爲文檔存儲在名爲BSON(二進制JSON)的二進制表示中。相關信息存儲在一塊兒,以便經過MongoDB查詢語言進行快速查詢訪問。字段因文檔而異; 沒有必要向系統聲明文檔結構 - 文檔是自我描述的。若是須要將新字段添加到文檔中,則能夠在不影響集合中的全部其餘文檔的狀況下建立該字段,而無需更新中央系統目錄,也不會使系統脫機。(可選)模式驗證可用於對每一個集合強制執行數據治理控制。數據庫

MongoDB的文檔數據模型天然地映射到應用程序代碼中的對象,使開發人員能夠輕鬆學習和使用。文檔使您可以輕鬆地表示層次關係以存儲數組和其餘更復雜的結構。編程

咱們爲何要使用mongoDB

由於它使他們可以更快地構建應用程序,處理高度多樣化的數據類型,並大規模地管理應用程序。數組

因爲MongoDB文檔天然地映射到現代的面向對象編程語言,所以簡化了開發。使用MongoDB刪除了複雜的對象關係映射(ORM)層,該層將代碼中的對象轉換爲關係表。MongoDB靈活的數據模型還意味着數據庫模型能夠隨業務需求而發展。數據結構

MongoDB還能夠在多個分佈式數據中心內和跨多個分佈式數據中心進行擴展,從而提供之前沒法經過MySQL等關係數據庫實現的新級別的可用性和可伸縮性。隨着您的部署在數據量和吞吐量方面的增加,MongoDB能夠輕鬆擴展,無需停機,也無需更改應用程序。相比之下,使用MySQL實現擴展一般須要大量的定製工程工做。併發

1. 存儲方式

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 分配策略,更節省空間。分佈式

2. 效率

Mongo的存儲方式爲虛擬內存+持久化存儲,Mongo將數據寫入內存中,再由虛擬內存管理器將其持久化到硬盤中,所以寫操做會比關係型數據庫快不少.並且MongoDB 容許在服務端執行腳本,能夠用 Javascript 編寫某個函數,直接在服務端執行,也能夠把函數的定義存儲在服務端,下次直接調用便可。函數

3. 高擴展

mongoDB存儲的數據不須要具體的格式,它很是容易擴展,在使用Mysql開發時,最初設計table是讓人頭疼的,爲了考慮到之後的擴展,不得不在table的後面預留一些Row,讓人噁心是吧.可是mongoDB文檔數據庫的特色就是想存什麼存什麼,後期想添加數據也就是一行代碼的事,給了咱們極大的自由,固然自由確定也是有後果的,後面會說.性能

4. 內置 Sharding

分片(Sharding) 幫助擴展,加速查詢響應的時間,減小宕機的影響

缺點

1. 佔空間

MongoDB 有一個最大的缺點,就是它佔用的空間很大,由於它屬於典型空間換時間原則的類型。那麼它的磁盤空間比普通數據庫會浪費一些,並且到目前爲止它尚未實如今線壓縮功能,在 MongoDB 中頻繁的進行數據增刪改時,若是記錄變了,例如數據大小發生了變化,這時候容易產生一些數據碎片,出現碎片引起的結果,一個是索引會出現性能問題。

2. MongoDB 對數據間的事務關係支持比較弱

mongoDB在4.0版本以後也支持ACID,MongoDB將在4.2裏推出分片集羣的多文檔事務支持。隨着事務支持的增長,MongoDB功能上更接近於關係型數據庫,可是和關係型仍是有本質上的區別:關係數據庫是基於關係模型的,其固定化的數據模型嚴格死板,對新一代應用迭代式開發支持很差,對各類數據多變的場景如物聯網或社交化都沒法支持的很好。MongoDB的JSON模型則具備動態靈活,數據庫無須下線就能夠進行模式變遷升級,特別適用於敏捷式的開發環境。

MongoDB的應用場景

數據不是特別重要(例如通知,推送這些),數據表結構變化較爲頻繁,數據量特別大,數據的併發性特別高,數據結構比較特別(例如地圖的位置座標),這些狀況下用MongoDB,其餘狀況就仍是用 MySQL,這樣組合使用就能夠達到最大的效率。

從目前阿里雲 MongoDB 雲數據庫上的用戶看,MongoDB 的應用已經滲透到各個領域,好比遊戲、物流、電商、內容管理、社交、物聯網、視頻直播等,如下是幾個實際的應用案例。

  • 遊戲場景,使用MongoDB存儲遊戲用戶信息,用戶的裝備、積分等直接之內嵌文檔的形式存儲,方便查詢、更新
  • 物流場景,使用MongoDB存儲訂單信息,訂單狀態在運送過程當中會不斷更新,以 MongoDB內嵌數組的形式來存儲,一次查詢就能將訂單全部的變動讀取出來。
  • 社交場景,使用MongoDB存儲存儲用戶信息,以及用戶發表的朋友圈信息,經過地理位置索引實現附近的人、地點等功能
  • 物聯網場景,使用MongoDB存儲全部接入的智能設備信息,以及設備彙報的日誌信息,並對這些信息進行多維度的分析
  • 視頻直播,使用 MongoDB 存儲用戶信息、禮物信息等

......

相關文章
相關標籤/搜索