为什么一个空的MongoDB数据库如此之大?

时间:2016-06-10 08:39:01

标签: mongodb

使用命令

创建新的mongoDB数据库实例时
mvn clean install

其中mongod --dbpath db 是我在调用命令的目录中创建的文件夹。运行此目录并检查目录的大小后,我看到它的大小超过 300MB - 当时没有数据。

这里发生了什么?

感谢您的帮助!

修改

感谢大家谈论db的预先分配大小。

以下是数据库目录中的文件/文件夹列表,按顺序排序(现在数据库中有一点数据,但这里的大小可以忽略不计):

journal

正如您所看到的,日志目录占据了几乎所有空间。

2 个答案:

答案 0 :(得分:9)

根据您的MongoDB版本和配置的存储引擎,将在启动时预先分配多个数据和元数据文件。这是预期的行为:"空"部署仍然会导致内务和诊断数据。

根据您的目录列表,您运行的MongoDB 3.2默认使用WiredTiger存储引擎。 WiredTiger每个日志文件最多分配100MB,因此您的新部署有大约300MB的预分配journal files

     100M    ./journal/WiredTigerLog.0000000003
     100M    ./journal/WiredTigerPreplog.0000000001
     100M    ./journal/WiredTigerPreplog.0000000002

除日记文件外,将在dbpath中创建的其他元数据(尚未明确创建数据库)将包括:

  • 一个local数据库,其中包含一个名为startup_log的上限集合,其中包含有关此mongod实例的每次启动调用的一些诊断信息。 local.startup_log将有一个关联的集合和索引文件;文件名是不透明的但是作为创建的第一个文件,我猜测你的例子可能是:

     36K    ./collection-0-3697658674625742251.wt
     36K    ./index-1-3697658674625742251.wt
    
  • 多个WiredTiger元数据文件。部署中始终至少有一个数据库,因为默认情况下为local创建了startup_log数据库:

    4.0K    ./WiredTiger
    4.0K    ./WiredTiger.lock
    4.0K    ./WiredTiger.turtle
    4.0K    ./WiredTigerLAS.wt
     16K    ./_mdb_catalog.wt
     36K    ./sizeStorer.wt
     44K    ./WiredTiger.wt
    
  • diagnostic.data目录;这是针对服务器状态指标的定期抽样:

    168K    ./diagnostic.data/metrics.2016-06-10T11-17-58Z-00000
    72K    ./diagnostic.data/metrics.2016-06-10T10-19-31Z-00000
    

答案 1 :(得分:1)

当您创建新数据库时,MongoDB会为oplog创建空间。

oplog(操作日志)是一个特殊的上限集合,它保存了修改存储在数据库中的数据的所有操作的滚动记录。