1. 程式人生 > >mongodb架構

mongodb架構

MongoDB是一個可移植的資料庫,它在流行的每一個平臺上都可以使用,即所謂的跨平臺性,在不同的作業系統上雖然略有差別,但是從整體架構上來看,MongoDB在不同的平臺上是一樣的,如資料邏輯結構和資料儲存等等。

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

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


3.1、資料邏輯結構

很多人在學習MongoDB體系結構的時候會遇到各種各樣的問題,我在這裡給大家簡單的介紹下MongoDB體系結構之一的邏輯結構,MongoDB的邏輯結構是一種層次結構,主要由:文件(Document)、集合(Collection)、資料庫(database)這三部分組成,邏輯結構是面向使用者的,使用者使用MongoDB開發應用程式使用的就是邏輯結構。

  • MongoDB的文件(Document),相當於關係資料庫中的一行記錄。
  • 多個文件組成一個集合(Collection),相當於關係資料庫的表。
  • 多個集合(Collection),擴及上組織在一起,就是資料庫(database)。
  • 一個MongoDB例項支援多個數據庫(database)。
文件(Document)、集合(Collection)、資料庫(Database)的層次結構如下圖:

對於習慣了關係型資料庫的朋友們,我將MongoDB與關係型資料庫的邏輯結構進行了對比,以便讓大家更深刻的理解MongoDB的邏輯結構:

3.2、資料儲存結構 MongoDB對國內使用者來說比較新,它就像是一個黑盒子,但是如果對於它內部的資料儲存瞭解多一些的話,那麼就會很快的理解和駕馭MongoDB,讓它發揮更大的作用。
MongoDB的預設資料目錄是/daba/db,它負責儲存所有的MongoDB的資料檔案,在MongoDB內部,每個資料庫都包含一個.ns檔案和一些資料檔案,而且這些檔案會隨著資料量的增加變的越來越多,所以如果系統中有一個叫做foo的資料庫,那麼構成foo這個資料庫的檔案就會由foo.ns、foo.0、foo.1、foo.2等組成,具體如下:
MongoDB內部有預分配空間的機制,每個預分配的檔案都用0進行填充,由於有了這個機制,MongoDB始終保持額外的空間和空餘的資料檔案,從而有效避免了由於資料暴增而帶來的磁碟壓力過大的問題。 由於表中資料量的增加,資料檔案每新分配一次,它的大小都會是上一個資料檔案大小的2倍,每個資料檔案最大2G,這樣的機制有利於防止較小的資料庫浪費過多的磁碟空間,同時又能保證較大的資料庫有相應的預留空間使用。 資料庫的每張表都對應一個名稱空間,每個索引也有對應的名稱空間,這些名稱空間的元資料集中在*.ns檔案中。 在下圖中。foo這個資料庫包含3個檔案用於儲存表和索引資料,foo.2檔案屬於預分配的空檔案,foo.0和foo.1這兩個資料檔案被分為了相應的盤區對應不同的名字空間。
上圖顯示了名稱空間和盤區的關係,每個名稱空間可以包含多個不同的盤區,這些盤區並不是連續的,與資料檔案的增長相同,每個名稱空間對應的盤區大小的而是隨著分配的次數不斷增長的,這樣做的目的是為了平衡名稱空間浪費的空間與保持某一個名稱空間中資料的連續性,上圖中還有一個需要注意的名稱空間:$freelist,這個名稱空間使用者記錄不再使用的盤區(被刪除的Collection或者索引),每當命令空間需要分配新的盤區的時候,都會先檢視$freelist是否有大小合適的盤區可以使用,這樣就回收空閒的磁碟空間。