Коллекции с ограниченным размером в 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: Кэширование небольшого количества документов.