前言
本文主要介紹了關(guān)于MongoDB存儲數(shù)據(jù)的相關(guān)內(nèi)容,分享出來供大家參考學習,下面來一起看看詳細的介紹:
想要深入了解MongoDB如何存儲數(shù)據(jù)之前,有一個概念必須清楚,那就是Memeory-Mapped Files。
Memeory-Mapped Files
下圖展示了數(shù)據(jù)庫是如何跟底層系統(tǒng)打交道的。

MongoDB的存儲模型




數(shù)據(jù)文件與空間分配
當創(chuàng)建數(shù)據(jù)庫時(其實MongoDB沒有顯式創(chuàng)建數(shù)據(jù)庫的方法,在向數(shù)據(jù)庫中的集合寫入數(shù)據(jù)時會自動創(chuàng)建該數(shù)據(jù)庫),MongoDB會在磁盤上分配一組數(shù)據(jù)文件,所有集合,索引和數(shù)據(jù)庫的其他元數(shù)據(jù)都保存在這些文件里。數(shù)據(jù)文件被放在啟動時指定的dbpath里,默認放入/data/db下面。典型的一個文件組織結(jié)構(gòu)如下:
$ cat /data/db$ ls -al-rw------- 1 root root 16777216 09-18 00:54 local.ns-rw------- 1 root root 67108864 09-18 00:54 local.0-rw------- 1 root root 2146435072 09-18 00:55 local.1-rw------- 1 root root 2146435072 09-18 00:56 local.2-rw------- 1 root root 2146435072 09-18 00:57 local.3-rw------- 1 root root 2146435072 09-18 00:58 local.4-rw------- 1 root root 2146435072 09-18 00:59 local.5-rw------- 1 root root 2146435072 09-18 01:01 local.6-rw------- 1 root root 2146435072 09-18 01:02 local.7-rw------- 1 root root 2146435072 09-18 01:03 local.8-rw------- 1 root root 2146435072 09-18 01:04 local.9-rw------- 1 root root 2146435072 09-18 01:05 local.10-rw------- 1 root root 16777216 09-18 01:06 test.ns-rw------- 1 root root 67108864 09-18 01:06 test.0-rw------- 1 root root 134217728 09-18 01:06 test.1-rw------- 1 root root 268435456 09-18 01:06 test.2-rw------- 1 root root 536870912 09-18 01:06 test.3-rw------- 1 root root 1073741824 09-18 01:07 test.4-rw------- 1 root root 2146435072 09-18 01:07 test.5-rw------- 1 root root 2146435072 09-18 01:09 test.6-rw------- 1 root root 2146435072 09-18 01:11 test.7-rw------- 1 root root 2146435072 09-18 01:13 test.8...-rwxr-xr-x 1 root root 6 09-18 13:54 mongod.lockdrwxr-xr-x 2 root root 4096 11-13 18:39 journaldrwxr-xr-x 2 root root 4096 11-13 19:02 _tmp
db.stats()來確認已使用空間和已分配空間。{ "db" : "test", "collections" : 37, "objects" : 317894523, #文檔總個數(shù) "avgObjSize" : 232.3416429039893, #單位是字節(jié) "dataSize" : 73860135744, #集合中所有數(shù)據(jù)實際大小(包括padding factor為每個文檔分配的額外空間以允許文檔增長)。該值在文檔size變小的時候,這個值不會減少,除非文檔被刪除,或者執(zhí)行compact或者repairDatabase操作 "storageSize" : 97834319392, #分配給集合的空間大小(包括為集合增長預(yù)留的額外空間和未分配的已刪除空間,即不會因為文檔size變小或者刪除而減小),實際上從數(shù)據(jù)文件中分配給集合的空間是以塊為單位,也稱之為extents,即分配的extents的大小 "numExtents" : 385, "indexes" : 86, "indexSize" : 58687466992, "fileSize" : 182380920832, #所有數(shù)據(jù)文件大小之和,不包括命名空間文件(ns文件) "nsSizeMB" : 16, "dataFileVersion" : { "major" : 4, "minor" : 5 }, "ok" : 1} 使用db.accesslog.stats()確認某個集合的使用量
{ "ns" : "test.accesslog", "count" : 145352932, "size" : 37060264352, #實際數(shù)據(jù)大小,不包括索引 "avgObjSize" : 254.967435758365, "storageSize" : 45794676448, #預(yù)分配的數(shù)據(jù)存儲空間 "numExtents" : 42, "nindexes" : 4, "lastExtentSize" : 2146426864, "paddingFactor" : 1, #當文檔因更新size增長時事先padding可以提速,減少碎片的產(chǎn)生 "systemFlags" : 1, "userFlags" : 0, "totalIndexSize" : 31897944512, "indexSizes" : { "_id_" : 6722168208, "action_1_time_1" : 8606482752, "gz_id_1_action_1_time_1" : 10753778336, "time_1" : 5815515216 }, "ok" : 1}總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網(wǎng)的支持。
新聞熱點
疑難解答