mongodump显示`skipping collection:my_db.my_collection。$ _ id_`是否正常?

时间:2013-12-03 05:03:14

标签: mongodb backup mongodump database

我试图mongodump我的db:

sudo mongodump -v --dbpath /var/lib/mongodb --out ~/backups/mongodb_dump/

但是每个集合都有有趣的输出(它很冗长),有一些有趣的行:

Tue Dec  3 06:32:32 [tools] query my_db.my_collection nreturned:101 reslen:43408 0ms
Tue Dec  3 06:32:32 [tools] getmore my_db.my_collection cursorid:7364310293552401077 nreturned:8565 reslen:4194597 77ms
Tue Dec  3 06:32:32 [tools] getmore my_db.my_collection cursorid:7364310293552401077 nreturned:8053 reslen:4194704 75ms
Tue Dec  3 06:32:32 [tools] getmore my_db.my_collection cursorid:7364310293552401077 nreturned:7936 reslen:4194704 82ms
Tue Dec  3 06:32:32 [tools] getmore my_db.my_collection cursorid:7364310293552401077 nreturned:7932 reslen:4194524 83ms
Tue Dec  3 06:32:32 [tools] getmore my_db.my_collection cursorid:7364310293552401077 nreturned:9201 reslen:4194491 201ms
Tue Dec  3 06:32:33 [tools] getmore my_db.my_collection cursorid:7364310293552401077 nreturned:7253 reslen:3078796 544ms
         49041 objects
Tue Dec  3 06:32:33 [tools]     skipping collection: my_db.my_collection.$_id_
    flickr-app-development-production.download_stats to /home/user/backups/mongodb_dump/my_db/my_collection.bson

这是什么意思:skipping collection: my_db.my_collection.$_id_,为什么 id 字段? 是否意味着某些数据未被转储,或备份中没有ID(因此在恢复数据库时,将分配新ID?

奇怪的是,mongo show dbs返回my_db的大小约为1Gb,但.bson文件的整个大小只有150Mb?

1 个答案:

答案 0 :(得分:1)

  

这是什么意思:跳过集合:my_db.my_collection。$ id ,为什么是id字段?是否意味着某些数据未被转储,或者备份中没有ID(因此在恢复数据库时,将分配新的ID?)

系统命名空间(在本例中为您的集合的$索引)使用具有id_的集合,并且可以安全地跳过这些集合。您只看到此信息性消息,因为您包含-v(详细)选项。

mongodump(2.2+)将索引定义导出到<dbname>.metadata.json文件,mongorestore在恢复转储时将使用该文件重新创建索引。

  

奇怪的是,mongo show dbs返回的my_db大小约为1Gb,但.bson文件的整个大小只有150Mb?

默认情况下,MongoDB预分配存储以防止文件系统碎片并减少需要创建新数据文件时的延迟。分配的文件大小将大于数据大小。此外,MongoDB为文档分配record padding,以便文档有适当的增长空间。 MongoDB手册中的Storage FAQ有更多详细信息。

如果您为数据库运行db.stats(),则应该会看到fileSizedataSize值以进行比较。您的BSON文件的150Mb应该接近dataSize值,而show dbs中的1Gb将是fileSize