一文快速搞懂mongodb怎样存储数据
Admin 2021-05-26 群英技术资讯 1636 次浏览
很多朋友对于mongodb数据库是比较陌生,关于mongodb是如何存储数据的也不是很了解,对此下面就给大家介绍关于mongodb实现存储数据的内容,感兴趣的朋友继续往下看。
想要深入了解MongoDB如何存储数据之前,有一个概念必须清楚,那就是Memeory-Mapped Files。
Memeory-Mapped Files
下图展示了数据库是如何跟底层系统打交道的。

MongoDB的存储模型




数据文件与空间分配
当创建数据库时(其实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.lock drwxr-xr-x 2 root root 4096 11-13 18:39 journal drwxr-xr-x 2 root root 4096 11-13 19:02 _tmp
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
}
总结
现在大家对于mongodb是如何存储数据的应该都有所了解了,希望大家阅读完这篇文章能有所收获,想要了解使用mongodb技巧的,大家可以继续关注其他文章。
文本转载自脚本之家
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要给大家介绍MongoDB的日志,关于MongoDB日志,有四种,分别是系统日志、Journal日志、oplog主从日志、慢查询日志。那么它们的用处都是什么呢?
本文给大家分享的是关于mongodb安全的问题,关于MongoDB安全有物理隔离、网络隔离、防火墙隔离和用户名密码鉴权这四方面。此外关于MongoDB角色管理操作也是很重要的,下面我们就一起来看看。
这篇文章给大家分享的是有关MongoDB 游标的内容,关于游标我们在SQL数据库中也有接触过,在MongoDB中的游标在功能上与关系型数据库中的游标也是大同小异,下面就跟随小编一起来了解一下MongoDB中的游标吧。
MongoDB的基本管理命令有什么,怎样用?一些朋友可能会遇到这方面的问题,对此在下文小编向大家来讲解一下,内容详细,易于理解,希望大家阅读完这篇能有收获哦,有需要的朋友就往下看吧!
小编今天来给大家分享下MongoDB数据分页和排序用户的一些基础语句,然后用一个实例详细介绍MongoDB 数据分页和排序实例方法,一起来看一看吧!
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008