Есть несколько встроенных в технологии, которые можно использовать. Наиболее очевидным является TTL collection, который автоматически удалит документы на основе поля даты/времени. Здесь предостережение заключается в том, что для этого удобства вы теряете контроль. Вы будете автоматически удалять все время, когда у вас нет контроля, а удаление не является бесплатным - для них требуется блокировка записи, их необходимо очистить на диске и т. Д. В принципе, вы захотите проверить, может ли ваша система работать уровень удалений, который вы будете делать, и как это влияет на вашу производительность.
Другой вариант: capped collection - коллекции с ограниченным доступом предварительно выделены на диск и не растут (за исключением индексов), они не имеют одинаковых накладных расходов, как это делает удаление TTL (хотя опять же, а не бесплатно). Если у вас есть согласованная скорость вставки и размер документа, вы можете определить, сколько места соответствует временному кадру, который вы хотите сохранить. Возможно, 20GiB составляет 5 дней, поэтому для обеспечения безопасности вы выделяете 30GiB и следите за тем, чтобы время от времени отслеживать, чтобы ваш размер данных не изменился.
После этого вы входите в более ручные варианты. Например, вы можете просто иметь поле, которое помечает документ как истек или нет, возможно, логическое - это означает, что истечение срока действия документа будет обновлением на месте и примерно таким же эффективным, как вы можете получить в терминах операции MongoDB , Затем вы могли бы выполнить пакетное удаление ваших документов с истекшим сроком действия для вашей системы, когда удаление и их влияние на производительность вызывают меньшую озабоченность.
Другая альтернатива: вы можете начать запись в новую базу данных каждые X дней в предсказуемом шаблоне, чтобы ваше приложение узнало, что такое имя текущей базы данных, и может определять имена предыдущих 2. Когда вы создаете новый базы данных, вы удаляете одну из них, которая старше предыдущих двух, и по существу всегда имеет 3 (в соответствующих номерах). Это звучит как большая работа, но преимущество в том, что удаление старых данных - это просто команда базы данных сбрасывания, которая просто отключает/удаляет файлы данных на уровне ОС и намного эффективнее с точки зрения ввода-вывода, чем случайное удаление документы из серии больших файлов. Эта модель также позволяет использовать очень чистую резервную модель - mongodump старой базы данных, сжатие и архивирование, затем падение и т. Д.
Как вы можете видеть, здесь есть много компромиссов - вы можете пойти для удобства, эффективность ввода-вывода , эффективность базы данных или что-то среднее между ними - все зависит от ваших требований и того, что лучше подходит для вашего конкретного случая использования и системы.
Используйте TTL-индексы в MongoDB – vmr