• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    深入了解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" : "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系列教程(八):GridFS存储详解
    • PHP操作MongoDB GridFS 存储文件的详解
    • PHP MongoDB GridFS 存储文件的方法详解
    • Spring Boot集成Shiro并利用MongoDB做Session存储的方法详解
    • Nodejs使用Mongodb存储与提供后端CRD服务详解
    • python将MongoDB里的ObjectId转换为时间戳的方法
    • python根据时间生成mongodb的ObjectId的方法
    • 深究从MongoDB的ObjectId中获取时间信息
    • MongoDB批量将时间戳转为通用日期格式示例代码
    • MongoDB存储时间时差问题的解决方法
    上一篇:关于Mongodb参数说明与常见错误处理的总结
    下一篇:MongoDB中如何使用JOIN操作详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    深入了解MongoDB是如何存储数据的 深入,了解,MongoDB,是,如何,