MongoDB - ограниченные коллекции

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

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

Создание закрытой коллекции

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