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