MongoDB 第2章 MongoDB體系結構
MongoDB是一個可移植的數據庫,它在流行的每一個平臺上都可以使用,即所謂的跨平臺性,在不同的操作系統上雖然略有差別,但是從整體架構上來看,MongoDB在不同的平臺上是一樣的,如數據邏輯結構和數據存儲等等。
一個運行著的MongoDB數據庫就可以看成是一個MongoDB Server,該Server由實例和數據庫組成,在一般情況下,一個MongoDB Server機器上包含一個實例或者多個與之對應的數據庫,但是在特殊情況下,如硬件投入成本或者特殊的應用需求,也允許一個Server機器上可以有多個實例或者多個數據庫。
MongoDB中一系列物理文件(數據文件、日志文件等)的集合與之對應的邏輯結構(集合、文檔等)被稱之為數據庫,簡單的說,就是數據庫是由一系列與磁盤有關系的物理文件的組成。
1、數據邏輯結構
很多人在學習MongoDB體系結構的時候會遇到各種各樣的問題,我在這里給大家簡單的介紹下MongoDB體系結構之一的邏輯結構,MongoDB的邏輯結構是一種層次結構,主要由:文檔(Document)、集合(Collection)、數據庫(database)這三部分組成,邏輯結構是面向用戶的,用戶使用MongoDB開發應用程序使用的就是邏輯結構。
MongoDB的文檔(Document),相當于關系數據庫中的一行記錄。
多個文檔組成一個集合(Collection),相當于關系數據庫的表。
多個集合(Collection),擴及上組織在一起,就是數據庫(database)。
一個MongoDB實例支持多個數據庫(database)。
文檔(Document)、集合(Collection)、數據庫(Database)的層次結構如下圖:
對于習慣了關系型數據庫的朋友們,我將MongoDB與關系型數據庫的邏輯結構進行了對比,以便讓大家更深刻的理解MongoDB的邏輯結構:
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是否有大小合適的盤區可以使用,這樣就回收空閑的磁盤空間。
MongoDB 數據庫
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。