MongoDB之資料儲存結構

2021-06-20 14:25:02 字數 2517 閱讀 1192

1、mysql的資料儲存結構

mysql的每個資料庫都對應存放在乙個與資料庫同名的資料夾中,mysql資料庫檔案包括mysql所建資料庫檔案和mysql所用儲存引擎建立的資料庫檔案。

mysql如果使用myisam儲存引擎,資料庫檔案型別就包括.frm、.myd、.myi

mysql如果使用innodb儲存引擎,資料庫檔案型別就包括.frm、ibdata1、.ibd

(1)、資料庫檔案:

.frm檔案:儲存資料表的框架結構,mysql資料庫檔名與表名相同,每個表對應乙個同名frm檔案,與作業系統和儲存引擎無關,即不管mysql執行在何種作業系統上,使用何種儲存引擎,都有這個檔案。除了必有的.frm檔案,根據mysql所使用的儲存引擎的不同(mysql常用的兩個儲存引擎是myisam和innodb),儲存引擎會建立各自不同的資料庫檔案。

(2)、myisam資料庫表檔案:

.myd檔案:即my data,表資料檔案

.myi檔案:即my index,索引檔案

.log檔案:日誌檔案

(3)、innodb採用表空間:

ibdata1、ibdata2:系統表空間mysql資料庫檔案,儲存innodb系統資訊和使用者資料庫表資料和索引,被所有表共用;

.ibd檔案:單表表空間檔案,每個表使用乙個表空間檔案(file per table),用於存放使用者資料庫表資料和索引;

日誌檔案:ib_logfile1、ib_logfile2。

2、mongodb的資料儲存結構

mongodb對國內使用者來說比較新, 它就像是乙個黑盒子,但是如果對於它內部的資料儲存了解多一些的話,那麼將會很快的理解和駕馭mongodb,讓它發揮它更大的作用。

mongodb的預設資料目錄是/data/db,它負責儲存所有的mongodb的資料檔案。在mongodb內部,每個資料庫都包含乙個.ns檔案和一些資料檔案,而且這些資料檔案會隨著資料量的增加而變得越來越多。所以如果系統中有乙個叫做foo的資料庫,那麼構成foo這個資料庫的檔案就會由foo.ns,foo.0,foo.1,foo.2 等等組成,具體如下:

[root@localhost db]# ll /data/db/  

總計 196844  

-rw------- 1 root root 16777216 04-15 16:33 admin.0  

-rw------- 1 root root 33554432 04-15 16:33 admin.1  

-rw------- 1 root root 16777216 04-15 16:33 admin.ns  

-rw------- 1 root root 16777216 04-21 17:30 foo.0  

-rw------- 1 root root 33554432 04-21 17:30 foo.1  

-rw------- 1 root root 67108864 04-21 17:30 foo.2  

-rw------- 1 root root 16777216 04-21 17:30 foo.ns  

-rwxr-xr-x 1 root root 6 04-21 17:16 mongod.lock  

-rw------- 1 root root 16777216 04-15 16:30 test.0  

-rw------- 1 root root 33554432 04-15 16:30 test.1  

-rw------- 1 root root 16777216 04-15 16:30 test.ns  

drwxr-xr-x 2 root root 4096 04-21 17:30 _tmp  

[root@localhost db]# 

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

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

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

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

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

mongodb 的儲存結構

描述mongodb是如何儲存資料檔案的 解答為何實際使用的檔案系統空間比資料本身大很多 解釋db.stats 命令 datasize,storagesize,filesize的不同含義 日誌檔案 mongodb 缺省會建立3組100m 大小的journal日誌檔案 日誌檔案用來在故障時恢復沒有及時寫...

ORACLE 資料儲存結構之邏輯儲存結構

資料塊 data blocks 資料塊是 oracle 邏輯儲存結構中的最小的邏輯單位,也是執行資料庫輸入輸出操作的最小儲存單位。oracle 資料存放在 oracle 資料塊 中,而不是 作業系統塊 中。通常 oracle 資料塊是作業系統塊的整數倍,如果作業系統快的大小為 2048b 並且ora...

ORACLE 資料儲存結構之物理儲存結構

資料檔案 資料檔案是用於儲存使用者應用程式資料和oracle系統內部資料的檔案,這些檔案在作業系統中就是普通的作業系統檔案,oracle在建立表空間的同時會建立資料檔案。oracle資料庫在邏輯上由表空間組成,每個表空間可以包含乙個或多個資料檔案,乙個資料檔案只能隸屬於乙個表空間。控制檔案 控制檔案...