MongoDB學習之旅三 MongoDB體系結構

2022-04-07 20:08:06 字數 1851 閱讀 1496

凡是涉及到內部結構方面的內容,都比較抽象,但是事物的結構往往決定事物的性質,要想更本質的認識mongodb,那就慢慢啃吧!

廢話少說,步入正題:

mongodb 是乙個可移植的資料庫,它在流行的每乙個平台上都可以使用,即所謂的跨平台特性。

乙個執行著的mongodb 資料庫就可以看成是乙個mongodb server,該server 由例項和資料庫組成,在一般的情況下乙個mongodb server 機器上包含乙個例項和多個與之對應的資料庫,但是在特殊情況下,如硬體投入成本有限或特殊的應用需求,也允許乙個server 機器上可以有多個例項和多個資料庫。

mongodb 中一系列物理檔案(資料檔案,日誌檔案等)的集合或與之對應的邏輯結構(集合,文件等)被稱為資料庫,簡單的說,就是資料庫是由一系列與磁碟有關係的物理檔案的組成。

體系結構具體分為:邏輯結構和儲存結構。

邏輯結構不難理解。

mongodb 的邏輯結構是一種層次結構。主要由:文件(document)、集合(collection)、資料庫(database)這三部分組成的。邏輯結構是面向使用者的,使用者使用mongodb 開發應用程式使用的就是邏輯結構。

mongodb 的文件(document),相當於關聯式資料庫中的一行記錄。

多個文件組成乙個集合(collection),相當於關聯式資料庫的表。

多個集合(collection),邏輯上組織在一起,就是資料庫(database)。

乙個mongodb 例項支援多個資料庫(database)。

一張非常形象的mongodb與關係型資料庫對比表:

儲存結構,這部分既是重點也是難點,因為很抽象!

mongodb 的預設資料目錄是/usr/local/mongodb/data,它負責儲存所有的mongodb 的資料檔案。在mongodb內部,每個資料庫都包含乙個.ns 檔案和一些資料檔案,而且這些資料檔案會隨著資料量的增加而變得越來越多。所以如果系統中有乙個叫做foo 的資料庫,那麼構成foo 這個資料庫的檔案就會由foo.ns,foo.0,foo.1,foo.2。大家可以開啟自己安裝mongodb時的資料庫資料夾,裡頭就是這些檔案,新建乙個資料庫,就會產生相應的一組以資料庫命名的資料檔案,並且本人也動手試過,foo.2大小是foo.1的兩倍,foo.1大小是foo.0的兩倍。

mongodb 內部有預分配空間的機制,每個預分配的檔案都用0 進行填充,由於有了這個機制, mongodb 始終保持額外的空間和空餘的資料檔案,從而有效避免了由於資料暴增而帶來的磁碟壓力過大的問題。

由於表中資料量的增加,資料檔案每新分配一次,它的大小都會是上乙個資料檔案大小的2倍,每個資料檔案最大2g。這樣的機制有利於防止較小的資料庫浪費過多的磁碟空間,同時又能保證較大的資料庫有相應的預留空間使用。

資料庫的每張表都對應乙個命名空間,每個索引也有對應的命名空間。這些命名空間的元資料都集中在*.ns 檔案中。

在下圖中,foo 這個資料庫包含3 個檔案用於儲存表和索引資料,foo.2 檔案屬於預分配的空檔案。foo.0 和foo.1 這兩個資料檔案被分為了相應的盤區對應不同的名字空間。

上圖顯示了命名空間和盤區的關係。每個命名空間可以包含多個不同的盤區,這些盤區並不是連續的。與資料檔案的增長相同,每乙個命名空間對應的盤區大小的也是隨著分配的次數不斷增長的。這樣做的目的是為了平衡命名空間浪費的空間與保持某乙個命名空間中資料的連續性。上圖中還有乙個需要注意的命名空間:$freelist,這個命名空間用於記錄不再使用的盤區(被刪除的collection 或索引)。每當命名空間需要分配新的盤區的時候,都會先檢視$freelist 是否有大小合適的盤區可以使用,這樣就**空閒的磁碟空間。

這篇文章當然是自己看資料總結的,自己看得都有點暈乎乎的,不過本人mongodb也用了一段時間了,再來看這些內容,比第一次看更容易理解的多。

所以希望初學者,也能邊學邊使用,邊使用邊領悟。

Linux學習之旅 三

如何學習linux 有心向linux 作業系統學習的學習態度 學習linux基礎相關建議 了解計算機概論與硬體相關知識。先從linux的安裝與命令學起。熟悉linux作業系統的基礎技能。務必學會vi文字編輯器。了解shell與shell指令碼的學習。一定要會軟體管理員。建立網路基礎概念。開始試著架設...

菜雞的學習之旅(三)

3.整理一些工作中使用到的晶元 rs232是乙個非常好用的可以用來抽載電壓和電流的晶元,它也是乙個串列埠,可以通過rs232來得到需要的電壓電流。rs232可以與ttl電平轉換,但是需要乙個max232晶元,使用max232晶元可以實現rs232與ttl電平的雙向轉換。如果需要測量電壓電流並且評判是...

微控制器學習之旅(三)

二進位制,十進位制和十六進製制 十進位制是我們日常生活中常用的,就不再多說了。二進位制是實現計算機系統的最基本的理論基礎,計算機晶元是基於成千上萬個開關管組合而成的,它們每乙個都只能有開和關兩種狀態,對應二進位制的1和0兩個值。16進製制本質上是同二進位制是一樣的,是二進位制的一種縮寫形式也是程式編...