Коллекции с ограниченным размером в MongoDB

MongoDB Capped Collections — это высокопроизводительные коллекции фиксированного размера. Фиксированный размер можно представить как кольцевую очередь. Когда пространство коллекции заканчивается, только что вставленные элементы перезаписывают исходные элементы в начале!


Создание Capped Collection

Мы создаём capped-коллекцию с помощью createCollection и устанавливаем для параметра capped значение true:

>db.createCollection("cappedLogCollection",{capped:true,size:10000})

Также можно указать количество документов, добавив свойство max:1000:

>db.createCollection("cappedLogCollection",{capped:true,size:10000,max:1000})

Проверка, является ли коллекция capped-коллекцией:

>db.cappedLogCollection.isCapped()

Если нужно преобразовать существующую коллекцию в capped-коллекцию, можно использовать следующую команду:

>db.runCommand({"convertToCapped":"posts",size:10000})

Приведённый выше код преобразует нашу существующую коллекцию posts в capped-коллекцию.


Запросы к Capped Collection

Документы в capped-коллекции хранятся в порядке вставки. По умолчанию запросы возвращают результаты в порядке вставки, также можно использовать $natural для изменения порядка возврата.

>db.cappedLogCollection.find().sort({$natural:-1})

Особенности capped-коллекций

Можно вставлять и обновлять, но обновления не могут превышать размер коллекции, иначе обновление завершается ошибкой. Удаление не допускается, но можно вызвать drop() для удаления всех строк в коллекции. Однако после выполнения drop() необходимо явно заново создать коллекцию.

На 32-битной машине максимальный размер capped-коллекции составляет около 482.5M; на 64-битной он ограничен только размером системного файла.


Свойства и использование capped-коллекции

Свойства

  • Свойство 1: Вставка в capped-коллекцию выполняется чрезвычайно быстро.
  • Свойство 2: Вывод запроса в порядке вставки выполняется чрезвычайно быстро.
  • Свойство 3: При вставке последних данных самые старые данные могут вытесняться.

Использование

  • Использование 1: Хранение логов.
  • Использование 2: Кэширование небольшого количества документов.
Другие расширения