English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Учебник MongoDB для начинающих

Учебник MongoDB для продвинутых

Фиксированные коллекции MongoDB

Фиксированная коллекцияЭто фиксированного размера циклическая коллекция, которая следует порядку вставки, чтобы поддерживать высокую производительность при создании, чтении и удалении операций. Циклический означает, что когда размер, выделенный для коллекции, исчерпывается, она начинает удалять самые старые документы в коллекции, не требуя никаких явных команд.

Если обновление вызывает увеличение размера документа, ограничивается обновление документов. Поскольку фиксированные集合 хранят документы в порядке их хранения на диске, они могут обеспечить, что размер документа не увеличится по сравнению с размером, выделенным на диске. Фиксированные集合 идеально подходят для хранения информации о логах, кэшированных данных или любой другой большой объем данных.

создание фиксированной коллекции

Чтобы создать ограниченную по размеру коллекцию, мы используем обычную команду 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 возвращает их в том же порядке, что и на диске. Это делает чтение операций очень быстрым.