圖解MongoDB
MongoDB是一個基於分散式文件存儲的資料庫。由C++語言編寫。旨在為WEB應用提供可擴展的高性能數據存儲解決方案。
1
沒有理解?繼續看...
MongoDB是一個介於關係資料庫和非關係資料庫之間的產品,是非關係資料庫當中功能最豐富,最像關係資料庫的。他支持的數據結構非常鬆散,是類似json的bson格式,因此可以存儲比較複雜的數據類型。Mongo最大的特點是他支持的查詢語言非常強大,其語法有點類似於面向對象的查詢語言,幾乎可以實現類似關係資料庫單表查詢的絕大部分功能,而且還支持對數據建立索引。
2
還不理解吧,來點簡單的 !
通過10張圖來理解什麼是mongoDB
我們可以在網頁中抓取一些基本信息,這些信息就是一個「Document」(區別去file,我將Document定義為「塊」)。這是第一塊內容:
我們還可以抓取其他的網頁信息:
把3個「塊」記錄下來,文件的記錄是按照順序寫入,中間是不會留空的:
如果我們要在「微博」增加版本信息「ver=8.3.1」。由於每個「塊」是按順序寫入的,因為沒有了增加內容的空間。只能將這「塊」複製到最後,增加新的信息後再將原來的「塊」刪除:
如果刪除多了,留的「天窗」也多了,就會影響檢索的速度。我們在上一塊內容里建立指向下一個塊內容的指針,來提高正向檢索的速度。同時下一塊內容也建立指向上一個塊內容的指針,來提高反向檢索的速度:
如果每次要增加內容就需要複製「塊」數據到尾部,再修改,效率是很低下的。可以採用預留區域(Padding)的做法,儘可能少的做數據複製的工作:
數據是這樣寫入硬碟的:寫入硬碟時,往往已經存在了其他文件,寫入的時候並不可能總是按照順序寫的,有的時候需要擠在原來文件之間。這樣會影響寫入和讀取的速度。因為,連續讀寫的效率是最高的:
可以通過預先申請磁碟的空間的做法來解決這個問題。但是,如果申請大了,會造成磁碟的浪費,如果申請小了,就達不到效果。所以採用第一次申請16M,第二次32M,第三次64M...最大申請空間2G。即申請到2G以後,每個文件空間都是2G了:
那文件的內容是怎麼檢索呢?可以通過「二叉樹」來解決這個問題。通過B樹,將每個塊的索引映射到樹的節點上,就可以迅速的檢索到每塊內容:
上面就是mongdb的基本原理和實現方式,您理解了嗎?
TAG:顧炯的雲世界 |