MongoDB結構划分


一、 基本結構划分

從整體上可以將MongoDB自底向上划分為四部分:

1. 基礎數據部分

2. 一般的數據庫操作

3. MongoDB提供的操作特性

4. 數據庫架構管理

clip_image002

二、 各部分簡介

1. 基礎數據部分

數據庫最終的工作就是把數據存儲,然后在用戶需要的時候以一種方式把數據提出去。因此,所有數據都需要以一種形式保存到內存或者硬盤里。

在MongoDB里面主要有兩種數據的存儲方式。

BSON:類似於一個有序的JSON。是數據存儲的基礎,在MongoDB中的大部分數據都是用這種數據結構與用戶交互。與一般數據庫不同雖然MongoDB也是KV操作讀取數據,但是用一Key對應的Value可以是不同類型。

GridFS:BSON只能存儲最大4MB的數據,當需要存儲大型數據的時候,就需要用GridFS來做存儲了。

2. 一般數據庫操作

作為數據庫應該包含基本的增、刪、改、查功能,並且提供加速基本操作的輔助工具,MongoDB同樣也提供了這些基本功能。

動態查詢:基本的增刪改查功能。同時在做這些操作的時候MongoDB為這些操作自動優化,如:考慮可以利用的索引,直接從緩存中讀取內容等等。

索引:在MongoDB中為每一條數據創建了一個_id的屬性,作為最基本的索引。用戶也可以自己創建一個索引來提高查詢效率。MongoDB也提供了合並索引的功能,可以用來合並多關鍵詞的索引。

地理位置索引:可以根據距離等位置相關屬性來做索引。

預查詢:在真正執行一條語句前,測試查詢等基本操作的耗時,作為數據庫設計或者語句效率的檢測。

3. MongoDB提供的操作特性

同一位置插入數據:與其他數據庫不同,MongoDB在真正將數據寫入本地前,做了緩存處理,在內存中讀寫數據的速度比每次都寫到本地的速度快多了。

Map and Reduce Function:MongoDB的特殊數據結構,決定了他可以有與眾不同的特殊數據處理方式。編寫這兩個函數可以完成很多數據庫本身沒有提供的自定義功能。

4. 數據庫架構管理

數據備份:由於MongoDB的實時讀取性和內存中處理數據的特性,單個MongoDB數據庫是很容易造成數據丟失的,為保證數據不丟失或少丟失(實際生產中會丟失),MongoDB提供了數據備份和選舉運行主機的機制。(在實際生產中不能需要多台MongoDB服務器共同運行)下圖簡單描述了MongoDB的主從機關系。

clip_image004

自動分片:在實際生產中,當數據量過大超過了一台MongoDB服務器所能支持的時候,需要考慮建立一個MongoDB的數據庫集群,每一個集保存整體數據的某一部分。下圖簡單描述了一個MongoDBs集群的工作情況:

clip_image006

三、 源碼閱讀順序及要點

了解了MongoDB的集群方式后,我覺得自底向上對MongoDB的源碼進行閱讀比較好。

原因:

1. 先了解基礎的數據結構,對邏輯算法中出現的數據結構有所了解。

2. 算法與運行平台無關,集群等功能與運行平台有關。為了不過早的牽絆與系統功能,理解MongoDB的設計哲學之后對深層次功能的了解更有利。

3. 在生產優化中,底部的數據結構或者算法調整可能更容易產生效果。

因此,列出如下幾點閱讀順序:

1. GridFS,BJSON

了解基本數據結構

2. 基本搜索功能

了解對數據的基本處理,輸入輸出規則

3. 索引,搜索優化

索引的創建和索引是如何提供其強大的輔助搜索功能的。

4. 數據備份

多台服務器的副本是如何保持同步的

當主服務器宕機程序是如何選擇副本服務器的

當主服務器恢復后是以什么策略再次同步數據的

5. 自動分片搜索

當創建完分片之后,MongoDB是如何處理多個服務器之間的數據跳轉搜索的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM