Размер дампа Mongodb слишком меньше, чем он был в базе данных

#mongodb #mongodump

Вопрос:

Я хочу перенести старую базу данных 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,497 ГБ. Но после того, как я побегу ниже:

 ./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,497 ГБ, но после mongodump это всего 7,7 МБ.

Комментарии:

1. show dbs Команда также включает данные кэша и индекса, хранящиеся на вашем компьютере. Они исключаются при взятии mongodump , кроме того, дамп mongo выполняет некоторое внутреннее сжатие повторяющихся данных, поэтому размер дампа очень мал. Глядя на ваши различные коллекции, я не удивлен размером 7,7 МБ (это правильный размер, насколько мне известно). Но, несмотря на это, я не могу объяснить, как вы получили около 6,5 ГБ! даже если вы проиндексировали все ключи, это значение просто безумно

Ответ №1:

Я думаю, что есть несколько вещей, которые вносят свой вклад в эту разницу:

  • MMAP не уплотняется. Размер, указанный, show dbs включает пустое пространство в файлах, которое может быть вызвано удалением документов.
  • MongoDB с MMAP заполняет каждый документ, чтобы между ними оставалось свободное пространство для расширения документов. Это дополнение не будет включено в документы при экспорте.
  • mongodump не экспортирует данные индекса. Он экспортирует информацию, которая понадобится mongorestore для воссоздания индекса во время восстановления.

Комментарии:

1. Хороший ответ @Джо, ты Joe Karlsson из MongoDB? Мне просто любопытно, пожалуйста, ответьте, если вас это устраивает 🙂

2. Нет, он — это не я.