文章目錄
一、 基本結構劃分
從整體上可以將MongoDB自底向上劃分為四部分:
1. 基礎資料部分
2. 一般的資料庫操作
3. MongoDB提供的操作特性
4. 資料庫結構描述管理
二、 各部分簡介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的主從機關係。
自動分區:在實際生產中,當資料量過大超過了一台MongoDB伺服器所能支援的時候,需要考慮建立一個MongoDB的資料庫叢集,每一個集儲存整體資料的某一部分。簡單描述了一個MongoDBs叢集的工作情況:
三、 源碼讀取順序及要點
瞭解了MongoDB的叢集方式後,我覺得自底向上對MongoDB的源碼進行閱讀比較好。
原因:
1. 先瞭解基礎的資料結構,對邏輯演算法中出現的資料結構有所瞭解。
2. 演算法與運行平台無關,叢集等功能與運行平台有關。為了不過早的牽絆與系統功能,理解MongoDB的設計哲學之後對深層次功能的瞭解更有利。
3. 在生產最佳化中,底部的資料結構或者演算法調整可能更容易產生效果。
因此,列出如下幾點讀取順序:
1. GridFS,BJSON
瞭解基本資料結構
2. 基本搜尋功能
瞭解對資料的基本處理,輸入輸出規則
3. 索引,搜尋最佳化
索引的建立和索引是如何提供其強大的輔助搜尋功能的。
4. 資料備份
多台伺服器的副本是如何保持同步的
當主伺服器宕機程式是如何選擇複本伺服器的
當主伺服器恢複後是以什麼策略再次同步資料的
5. 自動分區搜尋
當建立完分區之後,MongoDB是如何處理多個伺服器之間的資料跳轉搜尋的。