#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. Нет, он — это не я.