Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ /

Capped collections

Nesta página

  • Visão geral
  • Comportamento
  • Ordem de inserção
  • Remoção automática dos documentos mais antigos
  • Coleta de registros
  • _id Índice
  • Restrições e recomendações
  • Atualizações
  • Fragmentação
  • Eficiência da query
  • Agregação $out
  • Transações
  • Stable API
  • Procedimentos
  • Criar uma collection com limite
  • Consultar uma Coleção Limitada
  • Verifique se uma coleta está limitada
  • Converter uma coleta em limitada
  • Alterar o tamanho de uma capped collection
  • Alterar o número máximo de documentos em uma capped collection
  • Cursor atualizado

As coleções limitadas são coleções de tamanho fixo que oferecem suporte a operações de alta taxa de transferência que inserem e recuperam documentos com base na ordem de inserção. As coleções limitadas funcionam de maneira semelhante aos buffers circulares: uma vez que uma coleção preenche seu espaço alocado, ela abre espaço para novos documentos substituindo os documentos mais antigos da coleção.

Consulte createCollection() ou create para obter mais informações sobre a criação de capped collections.

Dica

Como alternativa às capped collections, considere os índices TTL (Time To Live) do MongoDB. Conforme descrito em Expirar dados de collections definindo compilações de índices TTL, esses índices permitem que você expire e remova dados de collections normais com base no valor de um campo do tipo data e em um valor TTL para o índice.

TTL não são compatíveis com collection limitada.

Coletas limitadas garantem a preservação do pedido de inserção. Como resultado, as consultas não precisam de um índice para retornar documentos na ordem de inserção. Sem essa sobrecarga de indexação, as coletas limitadas podem suportar uma maior taxa de transferência de inserção.

As capped collections removem automaticamente os documentos mais antigos para dar lugar a novos, sem a necessidade de roteiros ou comandos de exclusão manuais.

Considere os seguintes casos de uso possíveis para capped collections:

  • Armazene informações de registro geradas por sistemas de alto volume. A inserção de documentos em uma coleção limitada sem um índice é próxima à velocidade de gravação de informações de registro diretamente em um sistema de arquivos. Além disso, a propriedade incorporada de primeiro em primeiro lugar mantém a ordem dos eventos e gerencia o uso do armazenamento. Por exemplo, ooplog utiliza uma capped collection.

  • Armazene em cache pequenas quantidades de dados em capped collections. Como os caches são mais pesados para leitura do que para escritura, você precisaria garantir que essa collection permaneça sempre no conjunto de trabalho (ou seja, na RAM) ou aceitar alguma penalidade de escritura para o índice ou os índices necessários.

A collection oplog.rs que armazena um registro das operações em um conjunto de réplicas utiliza uma capped collection.

A partir do MongoDB 4.0, diferentemente de outras capped collections, o oplog pode ultrapassar o limite de tamanho configurado para evitar a exclusão do majority commit point.

Observação

O MongoDB arredonda o tamanho limitado do oplog para o número inteiro mais próximo que seja múltiplo de 256, em bytes.

As coletas mapeadas têm um campo _id e um índice no campo _id por padrão.

A partir do MongoDB 5.0, você não pode utilizar a preocupação de leitura "snapshot" ao ler de uma coleção limitada.

Se você planeja atualizar documentos em uma capped collection, crie um índice para que essas operações de atualização não exijam uma varredura da collection.

Você não pode fragmentar uma coleta limitada.

Use a ordem natural para recuperar os elementos inseridos mais recentemente da coleta de forma eficiente. Isto é semelhante ao uso do comando tail em um arquivo de log.

O estágio de pipeline de agregação $out não pode gravar resultados em uma coleção limitada.

Não é possível escrever em capped collections em transações.

Capped collections não são aceitas na Stable API V1.

Você deve criar capped collections explicitamente utilizando o método db.createCollection() , que é um auxiliar do mongosh para o comando create . Ao criar uma capped collection, você deve especificar o tamanho máximo da collection em bytes, que o MongoDB pré-alocará para ela. O tamanho da capped collection inclui um pequeno volume de espaço para a sobrecarga interna.

db.createCollection( "log", { capped: true, size: 100000 } )

Observação

O valor que você fornece para o campo size deve ser maior que 0 e menor ou igual a 1024^5 (1 PB). O MongoDB arredonda o size de todas as coletas limitadas até o número inteiro mais próximo de 256, em bytes.

Além disso, você também pode especificar um número máximo de documentos para a collection usando o campo max como no seguinte documento:

db.createCollection("log", { capped : true, size : 5242880, max :
5000 } )

Importante

O argumento size é sempre exigido, mesmo quando você especifica o número max de documentos. O MongoDB remove documento mais antigos se uma collection atingir o limite de tamanho máximo antes de ela atingir a contagem máxima de documento.

Dica

Consulte:

Se você executar um find() em uma capped collection sem nenhuma ordem especificada, o MongoDB garantirá que a ordem dos resultados seja igual à ordem de inserção.

Para recuperar documentos na ordem inversa de inserção, execute find() junto com o método sort() com o parâmetro $natural definido como -1, conforme o exemplo a seguir:

db.cappedCollection.find().sort( { $natural: -1 } )

Utilize o método isCapped() para determinar se uma collection é capped, da seguinte forma:

db.collection.isCapped()

Você pode converter uma coleção sem limite em uma coleção limitada com o comandoconvertToCapped:

db.runCommand({"convertToCapped": "mycoll", size: 100000});

O parâmetro size especifica o tamanho da capped collection em bytes.

Isso mantém uma trava exclusiva do banco de dados durante a operação. Outras operações que travam o mesmo banco de dados serão bloqueadas até a operação ser concluída. Consulte Quais travas são feitas por algumas operações comuns do cliente? para saber quais operações travam o banco de dados.

Novidades na versão 6.0.

Você pode redimensionar uma capped collection usando a opção cappedSize do comando collMod para definir o cappedSize em bytes. cappedSize deve ser maior que 0 e menor ou igual a 1024^5 (1 PB).

Observação

Antes de poder redimensionar uma coleta limitada, você já deve ter definido o featureCompatibilityVersion para, no mínimo, a versão "6.0".

Por exemplo, o seguinte comando define o tamanho máximo da capped collection "log" como 100000 bytes:

db.runCommand( { collMod: "log", cappedSize: 100000 } )

Novidades na versão 6.0.

Para alterar o número máximo de documentos em uma coleta limitada, use a opção collMod do comando cappedMax. Se cappedMax for menor ou igual a 0, não há limite máximo de documentos. Se cappedMax for menor que o número atual de documentos na coleta, o MongoDB removerá o excesso de documentos na próxima operação de inserção.

Por exemplo, o seguinte comando define o número máximo de documentos na capped collection "log" como 500:

db.runCommand( { collMod: "log", cappedMax: 500 } )

Você pode usar um cursor tailable com coleções limitadas. Semelhante ao comando Unix tail -f , o cursor tailable "tails" o final de uma coleção limitada. À medida que novos documentos são inseridos na coleção limitada, você pode usar o cursor tailable para continuar recuperando documentos.

Veja Cursores Tailable para obter informações sobre como criar um cursor tailable.

← Visualizações materializadas sob demanda