Mongodb deleteMany, как сохранить использование диска? - PullRequest
0 голосов
/ 30 ноября 2018

У меня довольно большая коллекция, см. Скриншот db.action_traces.stats():

action_traces stats

Я запускаю db.action_traces.deleteMany({ "block_time": { "$lt": "2018-08-15T00:00:00.000Z" } }) и db.action_traces.deleteMany({ "block_time": { "$lt": "2018-09-01T00:00:00.000Z" } })

И получил следующие результаты: { "acknowledged" : true, "deletedCount" : 5151786 } { "acknowledged" : true, "deletedCount" : 16261351 }

Но когда я снова запускаю db.action_traces.stats(), я получаю следующий результат "storageSize" : 630196023296.В общем, я удалил большой кусок данных, но не сохранил ни одного бита ... как это возможно?

Что я могу сделать, чтобы сэкономить место?

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

https://docs.mongodb.com/manual/reference/command/compact/:

В WiredTiger compact пытается уменьшить требуемое пространство для хранения данных и индексов в коллекции, освобождая ненужное дисковое пространство для операционной системы.Эффективность этой операции зависит от рабочей нагрузки, и никакое дисковое пространство не может быть восстановлено.Эта команда полезна, если вы удалили большой объем данных из коллекции и не планируете его заменять.

compact может потребоваться дополнительное дисковое пространство для запуска в базах данных WiredTiger.

Так что для вашей коллекции это должно быть

db.runCommand ( { compact: 'action_traces' } )
0 голосов
/ 30 ноября 2018

Файлы хранилища MongoDB не сжимаются - вместо этого у них есть «дыры», которые используются повторно, когда вы продолжаете добавлять больше данных - по крайней мере, так было с оригинальным механизмом mongodb db до того, как они купили другую компанию/ двигатель.В любом случае, единственный способ сжать файлы - это воссоздать их с нуля.Если вы работаете как набор реплик, вы можете отключить свой узел, удалить свои файлы и восстановить узел - файлы будут записаны заново без дыр в хранилище.Прошло несколько лет с тех пор, как я это сделал - прочитайте документацию, прежде чем идти по этому пути.В любом случае, хранилище mongodb не «сжимается» - это то, что я помню.

(Я только что посмотрел на ваш снимок экрана снова и заметил, что вы используете новый проводной механизм tiger db? Мой ответ относитсяк «оригинальному» поведению pre-wiredtiger - но, возможно, такое же поведение и в новом движке)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...