Mongodb 转储大小比数据库中的小

Mongodb dump size too smaller than it was in the database

我想将旧的 Mongodb2.6.8 数据库迁移到新的 Mongodb4.4。所以我尝试用 mongodump 备份下面的“okapp”数据库​​。

[okapp@centos101 bin]$ ./bin/mongo localhost:27018
MongoDB shell version: 2.6.8
connecting to: localhost:27001/test
> show dbs
admin    (empty)
okapp    6.497GB
ca423    0.031GB
local    0.031GB
>

如您所见,okapp 大小为 6.497GB。但是在我 运行 之后:

./mongodump -h localhost:27001 -d okapp

我会得到一个转储:

2021-11-02T15:47:14.550+0100 DATABASE: okapp to     dump/okapp
2021-11-02T15:47:14.550+0100    okapp.system.indexes to dump/okapp/system.indexes.bson
2021-11-02T15:47:14.551+0100             5 documents
2021-11-02T15:47:14.551+0100    okapp.findjobsee to dump/okapp/findjobsee.bson
2021-11-02T15:47:14.551+0100             10 documents
2021-11-02T15:47:14.551+0100    Metadata for okapp.findjobsee to dump/okapp/findjobsee.metadata.json
2021-11-02T15:47:14.552+0100    okapp.findtasksee to dump/okapp/findtasksee.bson
2021-11-02T15:47:14.552+0100             0 documents
2021-11-02T15:47:14.552+0100    Metadata for okapp.findtasksee to dump/okapp/findtasksee.metadata.json
2021-11-02T15:47:14.552+0100    okapp.findresultsee to dump/okapp/findresultsee.bson
2021-11-02T15:47:14.614+0100             2937 documents
2021-11-02T15:47:14.614+0100    Metadata for okapp.findresultsee to dump/okapp/findresultsee.metadata.json
2021-11-02T15:47:14.615+0100    okapp.findjobarchivesee to dump/okapp/findjobarchivesee.bson
2021-11-02T15:47:14.618+0100             751 documents
2021-11-02T15:47:14.618+0100    Metadata for okapp.findjobarchivesee to dump/okapp/findjobarchivesee.metadata.json

[okapp@centos101 somedir]$ cd ./mongodb-linux-x86_64-2.6.8/dump/okapp
[okapp@centos101 somedir]$ du -sh  okapp
7.7MB okapp
[okapp@centos101 somedir]$ cd ./mongodb-linux-x86_64-2.6.8/dump/okapp
[okapp@centos101 okapp]$ du -sh *
316K    findalljobarchivesee.bson
4.0K    findalljobarchivesee.metadata.json
4.0K    findalljobsee.bson
4.0K    findalljobsee.metadata.json
7.4M    findallresultsee.bson
4.0K    findallresultsee.metadata.json
0       findalltasksee.bson
4.0K    findalltasksee.metadata.json
4.0K    system.indexes.bson
[okapp@centos101 okapp]$ 
[okapp@centos101 okapp]$ 

注意:我已经检查了 Mongodb

中的集合
> db.findjobarchivesee.count()
751
> db.findjobsee.count()
10
> db.findresultsee.count()
2937
> db.findtasksee.count()
0
> db.system.indexes.count()
5

有谁知道为什么尺寸缩小太多?它在数据库中是 6.497GB,但在 mongodump 之后只有 7.7 MB。

我认为造成差异的原因有以下几点:

  • MMAP 不压缩。 show dbs 报告的大小包括文件中的空 space,这可能是由于文件被删除。
  • MongoDB 使用 MMAP 填充每个文档,因此它们之间有自由 space 以允许文档增长。导出时,此填充不会包含在文档中。
  • mongodump 不导出索引数据。它导出 mongorestore 需要的信息,以便在恢复时重新创建索引。