本文要介紹的MongoDB關鍵特性主要包含如下內容sql
官方概述:數據庫
數據庫很大程度上是由其數據模型定義的,MongoDB的數據模型是面向文檔的。編程
MongoDB中的記錄是一個文檔,它是由字段和值對組成的數據結構。MongoDB文檔相似於JSON對象。字段的值能夠包括其餘文檔,數組和文檔數組。json
文檔的優勢:數組
注意事項:服務器
MongoDB以二進制JSON格式存儲文檔數據,或者叫作BSON。BSON有類似的數據結構,是專門爲文檔存儲設計。當咱們查詢Mongo並返回結果的時候,這些數據會轉化爲易於閱讀的數據格式。網絡
關係數據庫中包含表,MongoDB擁有集合。換句話說,Mysql、Oracle等關係型數據庫在表的行裏保存數據,而MongoDB在集合的文檔裏保存數據(集合相似於表)。數據結構
MongoDB的集合中的數據存儲在硬盤上,並且大部分查詢須要指定查詢的目標集合。架構
概述:編程語言
ad hoc queries(主動查詢模式,也有翻譯爲「即席查詢」的)是指不須要事先定義系統接收何種查詢。
舉例說明:
以關係型數據庫來講,假設A表存儲了整個醫院門診患者的基本信息,B表存儲了患者的掛號信息,若是想查詢張三醫生接診的年齡大約50的患者信息。
SELECT * FROM A LEFT JOIN B ON A.pat_no = B.pat_no WHERE A.age > 50 AND B.doctor = '張三';
等價的MongoDB查詢,使用document文檔做爲匹配器。($gt:大於)
db.A.find({'doctor': '張三', 'age': {'$gt', 50}});
注意:
關係型數據庫查詢依賴於嚴格的範式模型,數據分別存放在A、B兩張表中,MongoDB假設數據都存在每一個A集合中。
以上兩種方式都演示了任意組合屬性的功能,這也是ad hoc查詢的功能。
建立索引緣由:
隨着數據庫中添加的文檔數量約來越多,查詢的成本會變得約來越高,有時無異於大海撈針。
使用索引的好處:
索引相似於圖書的目錄,咱們能夠經過目錄,快速查找想要知道的內容。
MongoDB的索引:
MongoDB中的索引使用了B-樹(平衡樹)數據結構,B-樹索引也大量使用於許多關係型數據庫中。
使用MongoDB,每一個集合咱們能夠建立64個索引,例如升序、降序、複合鍵、哈希、文本以及地理空間索引等
概述:
Mongo提供了數據庫的複製特性,叫作可複製結合(replica set)。
MongoDB如何保證複製:
在多個機器上分佈式存儲數據,當服務器或網絡出錯時,實現數據冗餘存取和自動災備。
與其餘數據庫主從複製相似,可複製集合的主節點能夠同時接受讀/寫操做,可是從節點只能進行讀取操做。若是服務主節點失敗,集羣會選擇一個從節點,並自動提高爲主節點。當以前的主節點主節點恢復後,自動做爲從節點進行工做。
寫入速度(write speed):
數據庫給定的時間內插入、更新、刪除的容量。
持久化(durability):
數據庫寫操做被永久保存的保證級別。
伸縮數據庫的最簡單的方式就是升級服務器硬件(添加更快的磁盤、更多的內存、更強的CPU來接觸數據庫性能瓶頸)。
垂直擴展(vertical scaling 或 scaling up)
提高單節點參數的作法一般稱爲垂直擴展,垂直擴展很是簡單、可靠,可是達到某個點後成本很高,最終達到一個沒法低成本垂直擴展的臨界點。
水平擴展(horizontally 或 scaling out)
水平擴展指的是在多臺機器上分佈式存儲數據庫,而不是提高單個節點的配置。水平擴展架構能夠運行在許多臺很小的、很廉價的機器上,一般能夠減小硬件的成本。而且分佈式存儲數據能夠下降宕機帶來的丟失數據的後果。
MongoDB的伸縮性
MongoDB採用基於範圍的分區機智來實現水平擴展,稱爲分片機智,它能夠自動化管理每一個分佈式節點存儲的數據。(另外,還有基於哈希和基於tag的分片機制)
分片系統處理額外的分片節點,並且它還會自動化災備,每一個獨立的節點是一個可複製集合,至少由2臺機器組成,確保節點失敗的時候能夠自動回覆。
總的來講,Mongo的概念理解起來不算太難,有關係型數據庫相關經驗的能夠對比着進行學習。