Limitações de coleta de séries temporais
Nesta página
- Recursos Não Suportados
- Aggregation $out e $merge
- Comando distinto
- Tamanho do documento
- Atualizações e exclusões
- Índices Secundários da Série Temporal
- time-series índice secundário com MongoDB 6.0 e posterior
- Índices Secundários de Série Temporal com MongoDB 5.0 e Anteriores
- Capped collections
- Modificação do Tipo de Coleção
- Modificação de
timeField
emetaField
- Modificação de
granularity
- Fragmentação
- Comandos de Administração de Fragmentação
- Campos-Chave de Fragmento
- Refragmentação
- Transações
- Limitações de visualização
- Isolamento de snapshot
Esta página descreve as limitações no uso de coleções de séries temporais.
Recursos Não Suportados
Os recursos a seguir não são compatíveis com coleções de séries temporais:
Em coleções de séries temporais que usam o Atlas Data Ingest, o suporte do Atlas Device Sync é limitado.
Aggregation $out e $merge
Você não pode usar os estágios do aggregation pipeline $out
ou $merge
para adicionar dados de outra collection a uma coleção de séries temporais.
Comando distinto
Devido à estrutura de dados única das coleções de séries temporais, o MongoDB não pode indexá-las de forma eficiente para valores diferentes. Evite usar o comando distinct
ou método assistente db.collection.distinct()
em coleções de séries temporais. Em vez disso, use uma agregação $group
para agrupar documentos por valores distintos.
Por exemplo, para consultar valores meta.type
diferentes em documentos onde meta.project = 10
, em vez de:
db.foo.distinct("meta.type", {"meta.project": 10})
Usar:
db.foo.createIndex({"meta.project":1, "meta.type":1}) db.foo.aggregate([{$match: {"meta.project": 10}}, {$group: {_id: "$meta.type"}}])
Isso funciona da seguinte maneira:
Criando um índice composto em
meta.project
emeta.type
e é compatível com a agregação.O estágio
$match
filtra documentos ondemeta.project = 10
.O estágio
$group
usameta.type
como a chave de grupo para gerar um documento por valor exclusivo.
Tamanho do documento
O tamanho máximo dos documentos em uma coleção de séries temporais é 4 MB.
Atualizações e exclusões
A partir do MongoDB 5.1, você pode executar algumas operações de exclusão e atualização.
Os comandos de exclusão devem atender aos seguintes requisitos:
Você só pode corresponder em valores de campo metaField .
Seu comando de exclusão não deve limitar o número de documentos a serem excluídos. Defina
justOne: false
ou use o métododeleteMany()
.
Se uma coleção de séries temporais contiver documentos com timeField
registros de data e hora anteriores a 1970-01-01T00:00:00.000Z
ou posteriores a 2038-01-19T03:14:07.000Z
, nenhum documento será excluído da coleção pelo recurso TTL "time to live".
Para obter detalhes sobre exclusões de TTL, consulte Expirar dados de collections configurando TTL.
Os comandos de atualização devem atender aos seguintes requisitos:
Você só pode combinar
metaField
ao valor do campo.Você só pode modificar o valor do campo
metaField
.Seu documento de atualização só pode conter expressões de operador de atualização.
Seu comando de atualização não deve limitar o número de documentos a serem atualizados. Defina
multi: true
ou use o métodoupdateMany()
.Seu comando de atualização não deve definir upsert: true.
No MongoDB 5.0, as coleções de séries temporais suportam somente inserir operações e ler consultas. Atualizações e operações manuais de exclusão resultam em um erro.
Para excluir dados antigos automaticamente, configure a remoção automática (TTL).
Para remover todos os documentos de uma collection, use o método drop()
para soltar a collection.
Índices Secundários da Série Temporal
Há um suporte aprimorado para índices secundários no MongoDB 6.0.
time-series índice secundário com MongoDB 6.0 e posterior
A partir do MongoDB 6.0, você pode adicionar um índice secundário a qualquer campo.
Esses tipos de índice não são suportados:
A propriedade do índice TTL não é suportada. Para exclusão de TTL, use expireAfterSeconds.
Os seguintes tipos de índice só podem ser criados no metaField
:
Para obter melhorias no índice secundário de time-series disponíveis a partir do MongoDB 6.0, consulte índice secundário de time-series no MongoDB 6.0.
Se houver coleções de séries temporais e você precisar fazer downgrade da versão de compatibilidade de recursos (FCV), primeiro descartará todos os índices secundários que são incompatíveis com o FCV rebaixado. Consulte setFeatureCompatibilityVersion
.
Índices Secundários de Série Temporal com MongoDB 5.0 e Anteriores
No MongoDB 5.0 e anterior:
O
metaField
pode ter índices secundários.O
timeField
pode ter índices secundários.Se o
metaField
for um documento, você poderá adicionar índices secundários em campos dentro do documento.
Capped collections
Você não pode criar uma coleção de séries temporais como uma capped collection.
Modificação do Tipo de Coleção
Você só pode definir o tipo de collection ao criar uma collection:
Uma coleção existente não pode ser convertida em uma coleção de séries temporais.
Uma coleção de séries temporais não pode ser convertida em um tipo de coleção diferente.
Para mover dados de uma coleção existente para uma coleção de séries temporais, migre os dados para uma coleção de séries temporais.
Modificação do timeField
e do metaField
Você só pode definir os parâmetros timeField
e metaField
de uma collection ao criá-la. Você não poderá modificar esses parâmetros posteriormente.
Modificação de granularity
Depois de definir o granularity
, você só pode aumentá-lo um nível de cada vez. O granularity
pode mudar de "seconds"
para "minutes"
ou de "minutes"
para "hours"
. Outras alterações não são permitidas.
Para alterar o granularity
de "seconds"
para "hours"
, primeiro aumente o granularity
para "minutes"
e depois para "hours"
.
Fragmentação
A partir do MongoDB 5.1 (e 5.0.6), você pode criar coleções de séries temporais fragmentadas.
Em versões anteriores ao MongoDB 5.0.6, você não pode mostrar coleções de séries temporais.
Comandos de Administração de Fragmentação
Não é possível executar comandos de administração de fragmentação em coleções de séries temporais fragmentadas.
Campos-Chave de Fragmento
Ao fragmentar coleções de série temporal, você só pode especificar os seguintes campos na chave de fragmento:
O
metaField
Subcampos de
metaField
O
timeField
Você pode especificar combinações desses campos na chave do fragmento. Nenhum outro campo, incluindo _id
, é permitido no padrão da chave de fragmento.
Quando você especifica a chave de fragmento:
metaField
pode ser um:timeField
deve ser:Uma chave fragmentada de longo alcance
No final do padrão de chave de fragmento
Dica
Evite especificar apenas o timeField
como a chave de fragmento. Como o timeField
aumenta monotonicamente, isso pode fazer com que todas as gravações apareçam em um único bloco dentro do cluster. Idealmente, os dados são distribuídos uniformemente entre os blocos.
Para saber como escolher melhor uma chave de fragmento, consulte:
Refragmentação
Você não pode refragmentar uma collection de séries temporais fragmentada. No entanto, você pode refinar sua chave de shard.
Transações
Não é possível escrever em coleções de séries temporais em transações.
Observação
As leituras de coleções de séries temporais são suportadas em transações.
Limitações de visualização
As coleção de séries temporais são visualizações não materializadas graváveis. As limitações das visualizações se aplicam à coleção de séries temporais.
Você não pode criar uma visualização a partir de um namespace de collection de série temporal (ou seja, uma collection prefixada com
system.buckets
).
Isolamento de snapshot
As operações de leitura em coleções de séries temporais com preocupação de leitura "snapshot"
garantem o isolamento do snapshot somente na ausência de operações simultâneas de remoção ou renomeação de coleções na operação de leitura. A recriação de uma coleção de séries temporais no mesmo namespace com configuração de granularidade diferente não produz isolamento total do snapshot.