Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

Capped collections

Nesta página

  • Visão geral
  • Comportamento
  • Restrições e recomendações
  • Procedimentos

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.

Os índices TTL não são compatíveis com collection limitada. Você pode criar um índice na collection, mas o mongod não exclui documento expirados.

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 documento em uma collection 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 primeiro a entrar mantém a ordem do evento e gerencia o uso do armazenamento.

  • 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.

Por exemplo, o oplog que armazena um registro das operações em um conjunto de réplicas utiliza uma collection limitada. Diferentemente de outras collection limitada, o oplog pode ultrapassar o limite de tamanho configurado para evitar a exclusão do majority commit point.

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 read concern "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.

Se uma operação de atualização ou substituição alterar o tamanho do documento, a operação falhará.

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é-aloca 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 } )

Se o campo size for menor ou igual a 4096, então a collection terá um limite de 4096 bytes. Caso contrário, o MongoDB aumentará o tamanho fornecido para torná-lo um número inteiro múltiplo de 256.

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

Veja:

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.

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.

← Use uma visualização para participar de duas collections