Закрытые коллекции — это круглые коллекции фиксированного размера, которые следуют порядку вставки для поддержки высокой производительности операций создания, чтения и удаления. По кругу это означает, что, когда фиксированный размер, выделенный для коллекции, исчерпан, он начнет удалять самый старый документ в коллекции без предоставления каких-либо явных команд.
Ограниченные коллекции ограничивают обновления документов, если обновление приводит к увеличению размера документа. Поскольку закрытые коллекции хранят документы в порядке хранения на диске, это гарантирует, что размер документа не увеличит размер, выделенный на диске. Ограниченные коллекции лучше всего подходят для хранения информации журнала, данных кэша или любых других больших объемов данных.
Создание закрытой коллекции
Чтобы создать ограниченную коллекцию, мы используем обычную команду 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})
Этот код преобразовал бы наши существующие сообщения коллекции в ограниченную коллекцию.
Запрашивая ограниченную коллекцию
По умолчанию поисковый запрос для ограниченной коллекции будет отображать результаты в порядке вставки. Но если вы хотите, чтобы документы были получены в обратном порядке, используйте команду сортировки, как показано в следующем коде —
>db.cappedLogCollection.find().sort({$natural:-1})
Есть несколько других важных моментов, касающихся ограниченных коллекций, которые стоит знать.
Мы не можем удалить документы из закрытой коллекции.
В закрытой коллекции нет индексов по умолчанию, даже в поле _id.
При вставке нового документа MongoDB не нужно на самом деле искать место для размещения нового документа на диске. Он может вслепую вставить новый документ в хвост коллекции. Это делает операции вставки в ограниченные коллекции очень быстрыми.
Аналогично, при чтении документов MongoDB возвращает документы в том же порядке, что и на диске. Это делает операцию чтения очень быстрой.