English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Фиксированная коллекцияЭто фиксированного размера циклическая коллекция, которая следует порядку вставки, чтобы поддерживать высокую производительность при создании, чтении и удалении операций. Циклический означает, что когда размер, выделенный для коллекции, исчерпывается, она начинает удалять самые старые документы в коллекции, не требуя никаких явных команд.
Если обновление вызывает увеличение размера документа, ограничивается обновление документов. Поскольку фиксированные集合 хранят документы в порядке их хранения на диске, они могут обеспечить, что размер документа не увеличится по сравнению с размером, выделенным на диске. Фиксированные集合 идеально подходят для хранения информации о логах, кэшированных данных или любой другой большой объем данных.
Чтобы создать ограниченную по размеру коллекцию, мы используем обычную команду createCollection, но сcapped
Параметр установлен в:true
и указать максимальный размер集合а (в байтах).
db.createCollection("cappedLogCollection",{capped:true,size:10000})
Кроме размера集合а, мы можем использоватьmax
Параметр - ограничение количества документов в集合е:
db.createCollection("cappedLogCollection",{capped:true,size:10000,max:1000})
Если нужно проверить, ограничена ли коллекция, используйте следующий:isCapped
Команда:
db.cappedLogCollection.isCapped()
Если есть план преобразовать существующую коллекцию с ограничением, можно использовать следующий код для обработки:
db.runCommand({"convertToCapped":"posts",size:10000})
Этот код преобразует нашу текущую коллекциюposts
Для ограниченных коллекций.
По умолчанию, запросы поиска в коллекциях с ограничением по размеру возвращают результаты в порядке вставки. Но если вы хотите получить документы в обратном порядке, используйтеsort
Команды, показанные в следующем коде -
>db.cappedLogCollection.find().sort({$natural:-1})
Есть еще несколько других важных моментов о коллекциях с ограничением по размеру -
Мы не можем удалить документ из коллекции с ограничением по размеру.
В коллекциях с ограничением по размеру по умолчанию нет индексов, даже на поле _id.
При вставке нового документа MongoDB не обязан физически искать место на диске для容纳新 документ. Он может слепо вставить новый документ в конец коллекции. Это делает вставку документов в коллекцию очень быстрой.
Таким образом, при чтении документов MongoDB возвращает их в том же порядке, что и на диске. Это делает чтение операций очень быстрым.