亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MongoDB > 正文

深入了解MongoDB是如何存儲數據的

2020-03-14 12:56:57
字體:
來源:轉載
供稿:網友

前言

本文主要介紹了關于MongoDB存儲數據的相關內容,分享出來供大家參考學習,下面來一起看看詳細的介紹:

想要深入了解MongoDB如何存儲數據之前,有一個概念必須清楚,那就是Memeory-Mapped Files。

Memeory-Mapped Files

下圖展示了數據庫是如何跟底層系統打交道的。

  • 內存映射文件是OS通過mmap在內存中創建一個數據文件,這樣就把文件映射到一個虛擬內存的區域。
  • 虛擬內存對于進程來說,是一個物理內存的抽象,尋址空間大小為2^64
  • 操作系統通過mmap來把進程所需的所有數據映射到這個地址空間(紅線),然后再把當前需要處理的數據映射到物理內存(灰線)
  • 當進程訪問某個數據時,如果數據不在虛擬內存里,觸發page fault,然后OS從硬盤里把數據加載進虛擬內存和物理內存
  • 如果物理內存滿了,觸發swap-out操作,這時有些數據就需要寫回磁盤,如果是純粹的內存數據,寫回swap分區,如果不是就寫回磁盤。

mongodb存儲數據,mongodb如何存儲數據,mongodb數據存儲結構

MongoDB的存儲模型

mongodb存儲數據,mongodb如何存儲數據,mongodb數據存儲結構

  • 有了內存映射文件,要訪問的數據就好像都在內存里面,簡單化了MongoDB訪問和修改數據的邏輯
  • MongoDB讀寫都只是和虛擬內存打交道,剩下都交給OS打理
  • 虛擬內存大小=所有文件大小+其他一些開銷(連接,堆棧)
  • 如果journal開啟,虛擬內存大小差不多翻番
  • 使用MMF的好處1:不用自己管理內存和磁盤調度2:LRU策略3:重啟過程中,Cache依然在。
  • 使用MMF的壞處1:RAM使用會受磁盤碎片的影響,高預讀也會影響2:無法自己優化調度算法,只能使用LRU

mongodb存儲數據,mongodb如何存儲數據,mongodb數據存儲結構

mongodb存儲數據,mongodb如何存儲數據,mongodb數據存儲結構

mongodb存儲數據,mongodb如何存儲數據,mongodb數據存儲結構

  • 磁盤上的文件是有extent構成,分配集合空間的時候也是以extent為單位進行分配的
  • 一個集合有一個或者多個etent
  • ns文件里面命名空間記錄指向那個集合的第一個extent

數據文件與空間分配

當創建數據庫時(其實MongoDB沒有顯式創建數據庫的方法,在向數據庫中的集合寫入數據時會自動創建該數據庫),MongoDB會在磁盤上分配一組數據文件,所有集合,索引和數據庫的其他元數據都保存在這些文件里。數據文件被放在啟動時指定的dbpath里,默認放入/data/db下面。典型的一個文件組織結構如下:

$ 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
  • mongod.lock中存儲了服務器的進程ID,是一個進程鎖定文件。數據文件是依據所屬的數據庫命名的。
  • test.ns是第一個生成的文件(ns擴展名就是namespace的意思),數據庫中的每個集合和索引都有自己的命名空間,每個命名空間的元數據都存放在這個文件里。默認情況下,.ns文件大小固定在16MB,大約可以存儲24000個命名空間。也就是說數據庫中的索引和集合總數不能超過24000,該值可以通過mongod的–nssize選項進行定制。
  • 像test.0這樣以0開始的整數結尾的文件就是集合和索引數據文件。剛開始的時候,即使只有一條數據,MongoDB也會預分配幾個文件,這種預分配的做法,能讓數據盡可能連續存儲,減少磁盤碎片。在像數據庫添加數據時,MongoDB會分配更多的數據文件。每個新數據文件的大小都是上一個已分配文件的兩倍(64M->128M->256M),直到預分配文件大小的上限2G。此處基于一個假設,如果總數據大小呈恒定速率增長,應該逐漸增加數據文件分配的空間。當然這個預分配策略也是可以通過–noprealloc關掉,但是不建議在production環境下使用。
  • 默認的local數據庫,該數據庫不參與replication。當mongod是一個副本集的成員時,在local數據庫中就有一個叫做oplog.rs的預分配的capped集合,預分配的大小為磁盤空間的5%。這個大小可以通過–oplogSize進行調整。oplog主要用于副本集Primary和Secondary成員見的replication,它的大小限制了兩個副本集之間,在重新完全同步之前,允許多長時間不同步。
  • journal目錄,journal功能2.4版本默認是開啟的。
  • 可以使用db.stats()來確認已使用空間和已分配空間。
{ "db" : "test", "collections" : 37, "objects" : 317894523, #文檔總個數 "avgObjSize" : 232.3416429039893, #單位是字節 "dataSize" : 73860135744, #集合中所有數據實際大小(包括padding factor為每個文檔分配的額外空間以允許文檔增長)。該值在文檔size變小的時候,這個值不會減少,除非文檔被刪除,或者執行compact或者repairDatabase操作 "storageSize" : 97834319392, #分配給集合的空間大小(包括為集合增長預留的額外空間和未分配的已刪除空間,即不會因為文檔size變小或者刪除而減小),實際上從數據文件中分配給集合的空間是以塊為單位,也稱之為extents,即分配的extents的大小 "numExtents" : 385, "indexes" : 86, "indexSize" : 58687466992, "fileSize" : 182380920832, #所有數據文件大小之和,不包括命名空間文件(ns文件) "nsSizeMB" : 16, "dataFileVersion" : { "major" : 4, "minor" : 5 }, "ok" : 1}

使用db.accesslog.stats()確認某個集合的使用量

{ "ns" : "test.accesslog", "count" : 145352932, "size" : 37060264352, #實際數據大小,不包括索引 "avgObjSize" : 254.967435758365, "storageSize" : 45794676448, #預分配的數據存儲空間 "numExtents" : 42, "nindexes" : 4, "lastExtentSize" : 2146426864, "paddingFactor" : 1, #當文檔因更新size增長時事先padding可以提速,減少碎片的產生 "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}

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。

 

注:相關教程知識閱讀請移步到MongoDB頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久久国产| 久久99热这里只有精品国产| 91在线视频一区| 久久久999精品免费| 国产精品一区二区三区毛片淫片| 日韩视频免费大全中文字幕| 日本不卡视频在线播放| 国产欧美日韩中文| 欧美福利视频在线| 亚洲bt天天射| 亚洲国产中文字幕久久网| 在线成人中文字幕| 在线播放国产一区中文字幕剧情欧美| 精品中文字幕久久久久久| 中文字幕在线看视频国产欧美| 国产午夜精品一区二区三区| 亚洲综合色激情五月| 最新国产精品拍自在线播放| 最近中文字幕mv在线一区二区三区四区| 欧美在线视频一区二区| 亚洲人成在线一二| 亚洲国产精品va在线看黑人| 日韩精品视频中文在线观看| 色综合久久天天综线观看| 欧美黑人性猛交| 亚洲国产另类久久精品| 青草青草久热精品视频在线观看| 国产欧美日韩视频| 亚洲一区二区三| 一夜七次郎国产精品亚洲| 日韩av网站大全| 日韩成人小视频| 一区二区三区www| 性色av一区二区三区免费| 亚洲激情在线视频| 亚洲最新视频在线| 国产日韩欧美91| 亚洲欧美福利视频| 成人激情电影一区二区| 成人精品视频99在线观看免费| 国产日韩欧美在线播放| 亚洲人线精品午夜| 38少妇精品导航| 日韩欧美视频一区二区三区| 中文字幕自拍vr一区二区三区| 亚洲欧美另类在线观看| 国产精品视频导航| 一区二区三区亚洲| 国产欧美一区二区三区在线| 91极品女神在线| 久久人人爽亚洲精品天堂| 欧美激情喷水视频| 欧美性xxxxxxx| 中文字幕在线观看日韩| 亚洲精品在线91| 亚洲开心激情网| 亚洲性无码av在线| 久久夜精品香蕉| 91国产视频在线| 精品国产一区二区三区久久久狼| 欧美亚洲成人xxx| 久久久久久久久久久国产| 亚洲自拍小视频免费观看| 91干在线观看| 国产亚洲精品久久久久久牛牛| 成人免费福利视频| 成人免费观看网址| 久久影视免费观看| 疯狂蹂躏欧美一区二区精品| 色综合天天综合网国产成人网| 91精品久久久久久久久| 成人在线视频网站| 久久久国产精品一区| 美女扒开尿口让男人操亚洲视频网站| 亚洲福利视频网| 在线日韩av观看| 久久久精品免费| 欧美性猛交视频| 都市激情亚洲色图| 日韩在线免费观看视频| 国产精品女视频| 欧美成人激情视频| 精品国产一区二区三区久久狼黑人| 97碰碰碰免费色视频| 久久综合伊人77777| 亚洲新中文字幕| 欧美寡妇偷汉性猛交| 国产精品丝袜久久久久久高清| 久久精品国产一区二区三区| 日韩美女av在线免费观看| 欧美精品在线看| 亚洲午夜av久久乱码| 亚洲夜晚福利在线观看| 国产成人久久久精品一区| 97视频在线观看免费| 一区二区三区黄色| 久久久久999| 亚洲国产精彩中文乱码av| 国产一区欧美二区三区| 久久黄色av网站| 成人免费视频网| 欧美成人午夜免费视在线看片| 久久亚洲精品毛片| 久久中文字幕视频| 亚洲影院色在线观看免费| 4k岛国日韩精品**专区| 日韩一区av在线| 色妞久久福利网| 国产精品旅馆在线| 欧美最猛性xxxx| 欧美国产第二页| 精品女同一区二区三区在线播放| 国产精品视频1区| 欧美激情在线观看视频| 日韩视频在线免费| 91在线色戒在线| 欧美一区深夜视频| 成人黄在线观看| 97视频在线观看网址| 国产一区二区三区三区在线观看| 日本精品久久中文字幕佐佐木| 欧美日韩福利在线观看| 欧美午夜精品伦理| 久久亚洲精品中文字幕冲田杏梨| 一区二区三区视频在线| 国产精品69精品一区二区三区| 国产亚洲视频在线观看| 国产一区二区成人| 热99精品里视频精品| 亚洲高清福利视频| 国产精品一区二区三区免费视频| 中文字幕久热精品在线视频| 欧美成人激情在线| 在线成人一区二区| 亚洲精品国产综合区久久久久久久| 欧美亚洲成人xxx| 欧美日韩另类字幕中文| 亚洲黄色有码视频| 亚洲激情第一页| 亚洲激情小视频| 97视频在线观看网址| 日本精品久久中文字幕佐佐木| 国自产精品手机在线观看视频| 久久精品亚洲94久久精品| 粉嫩av一区二区三区免费野| 日韩av在线免费观看| 成人免费网站在线观看| 欧美性猛xxx| 久久久久久成人| 久久久久久欧美| 久久精品青青大伊人av| 欧美午夜片欧美片在线观看| 欧美中文字幕在线观看| 91在线精品播放| 一道本无吗dⅴd在线播放一区| 国产精品久久电影观看| 欧美另类高清videos| 国内免费精品永久在线视频| 久久精品一本久久99精品| 日韩精品在线观看网站| 欧美高清不卡在线| 日韩黄在线观看| 久久夜色精品国产亚洲aⅴ| 91久久久久久久|