Подтвердить что ты не робот

Может ли MongoDB повторно использовать удаленное пространство?

Во-первых, я знаю об этом вопросе:

Автоматическое сжатие удаленного пространства в mongodb?

Мой вопрос заключается не в сокращении размеров файлов DB, ​​а в повторном использовании удаленных пространств. Скажем, у меня есть 100K документов в коллекции, тогда я удаляю 50K из них. Будет ли Монго повторно использовать пространство в своем файле данных, которое удаленные документы освободили? Или они просто "помечены" как удаленные?

Меня не волнует фактический размер файла на диске, его больше о "он просто растет и растет".

4b9b3361

Ответ 1

Обновление (март 2015 г.):. Начиная с версии 3.0 в MongoDB доступно несколько систем хранения. Этот ответ относится к механизму хранения MMAP (по-прежнему используется по умолчанию в MongoDB 3.0), ответ для других двигателей (например, WiredTiger) совершенно другой, и его можно настраивать и настраивать. Следовательно, если вы используете другой движок, ознакомьтесь с соответствующими документами для этого механизма хранения, чтобы определить, какое пространство следует использовать по умолчанию и параметры.

С механизмом хранения MMAP, когда документы удаляются, оставшееся место помещается в свободный список. Тем не менее, чтобы использовать пространство, необходимо будет добавить документы с одинаковым размером, добавленные позже, и MongoDB необходимо будет найти подходящее пространство для этого документа в течение определенного периода времени (как только он истечет время просмотра списка, он просто будет добавлен) в противном случае повторное использование пространства не произойдет очень часто. Это удаление выполняется в файлах данных, поэтому здесь не происходит рекультивации дискового пространства - все это делается внутри существующих файлов данных.

Если впоследствии вы выполните repair или повторите повторную проверку вторичного с нуля, файлы данных перезаписаны, и пространство на диске будет восстановлено (любое дополнение на документах также удаляется). Здесь вы увидите фактическую рекультивацию пространства на диске. Для любых других действий (compact включено) использование на диске не изменится и даже может увеличиться.

С 2.2+ теперь вы можете использовать команду collMod и usePowersOf2Sizes, чтобы сделать повторное использование удаленного пространства более вероятным (обратите внимание, что это по умолчанию в 2.6 +). Это означает, что исходное распределение пространства для документа является немного менее эффективным (например, 512 байт для 400-байтного документа), но означает, что при вставке нового документа он, скорее всего, сможет повторно использовать это пространство. Если вы удаляете (или увеличиваете и, следовательно, двигаете) документы много, тогда это будет более эффективным в долгосрочной перспективе.

Для всех, кого это интересует, один из людей, который написал много кода хранения (Mathias Stearn), имеет отличную презентацию о которые могут быть найдены здесь