Coleções de Time Series
Novidades na versão 5.0.
As coleções de séries temporais armazenam eficientemente sequências de medições durante um período de tempo. Dados de série temporal são quaisquer dados coletados ao longo do tempo e identificados exclusivamente por um ou mais parâmetros imutáveis. Os parâmetros imutáveis que identificam seus dados de série temporal geralmente são os metadados da sua fonte de dados.
Exemplo | Medição | Metadata |
---|---|---|
Dados meteorológicos | Temperatura | Identificador do sensor, localização |
Dados das ações | Preço das ações | Código de ações, câmbio |
Visitantes do website | Contagem de visualizações | URL |
Coleções de Time Series
Novidades na versão 5.0.
As coleções de séries temporais armazenam dados de séries temporais de forma eficiente. Em coleções de séries temporais, as gravações são organizadas para que os dados da mesma fonte sejam armazenados junto com outros pontos de dados de um ponto no tempo semelhante.
Você pode criar coleção de séries temporais na IU para implantações hospedadas no MongoDB Atlas.
Benefícios
Comparadas com coleções normais, armazenar dados de séries temporais em coleções de séries temporais melhora a eficiência da query e reduz o uso do disco para dados de séries temporais e índices secundários.
Procedimentos
Crie uma coleção de séries temporais
Observação
Só é possível criar coleções de séries temporais em um sistema com featureCompatibilityVersion definido como 5.0.
Antes de inserir dados em uma time-series collection, você deve criar explicitamente a collection utilizando o método db.createCollection()
ou o comando create
:
db.createCollection( "weather", { timeseries: { timeField: "timestamp", metaField: "metadata", granularity: "hours" } } )
Ao criar uma coleção de séries temporais, especifique as seguintes opções:
Campo | Tipo | Descrição |
---|---|---|
| string | Obrigatório. O nome do campo que contém a data em cada documento da série temporal. Os documentos em uma collection de séries temporais devem ter uma data BSON válida como o valor do |
| string | Opcional. O nome do campo que contém metadados em cada documento de série temporal. Os metadados no campo especificado devem ser dados utilizados para rotular uma série exclusiva de documentos. Os metadados devem mudar raramente ou nunca. O nome do campo especificado não pode ser |
| string | Opcional. Os valores possíveis são Defina manualmente o parâmetro Se você especificar Se você não especificar |
| número | Opcional. Ative a exclusão automática de documento em uma time-series collection especificando o número de segundos após os quais os documento expiram. O MongoDB exclui documentos expirados automaticamente. Consulte Configurar remoção automática para coleção de séries temporais (TTL) para obter mais informações. |
Outras opções permitidas com a opção timeseries
são:
storageEngine
indexOptionDefaults
collation
writeConcern
comment
Aviso
Não tente criar uma coleção de séries temporais ou visualizar com o nome system.profile
porque o servidor MongoDB falhará.
Inserir medições em uma Coleção de séries temporais
Cada documento inserido deve conter uma única medida. Para inserir vários documentos de uma só vez, emita o seguinte comando:
db.weather.insertMany( [ { "metadata": { "sensorId": 5578, "type": "temperature" }, "timestamp": ISODate("2021-05-18T00:00:00.000Z"), "temp": 12 }, { "metadata": { "sensorId": 5578, "type": "temperature" }, "timestamp": ISODate("2021-05-18T04:00:00.000Z"), "temp": 11 }, { "metadata": { "sensorId": 5578, "type": "temperature" }, "timestamp": ISODate("2021-05-18T08:00:00.000Z"), "temp": 11 }, { "metadata": { "sensorId": 5578, "type": "temperature" }, "timestamp": ISODate("2021-05-18T12:00:00.000Z"), "temp": 12 }, { "metadata": { "sensorId": 5578, "type": "temperature" }, "timestamp": ISODate("2021-05-18T16:00:00.000Z"), "temp": 16 }, { "metadata": { "sensorId": 5578, "type": "temperature" }, "timestamp": ISODate("2021-05-18T20:00:00.000Z"), "temp": 15 }, { "metadata": { "sensorId": 5578, "type": "temperature" }, "timestamp": ISODate("2021-05-19T00:00:00.000Z"), "temp": 13 }, { "metadata": { "sensorId": 5578, "type": "temperature" }, "timestamp": ISODate("2021-05-19T04:00:00.000Z"), "temp": 12 }, { "metadata": { "sensorId": 5578, "type": "temperature" }, "timestamp": ISODate("2021-05-19T08:00:00.000Z"), "temp": 11 }, { "metadata": { "sensorId": 5578, "type": "temperature" }, "timestamp": ISODate("2021-05-19T12:00:00.000Z"), "temp": 12 }, { "metadata": { "sensorId": 5578, "type": "temperature" }, "timestamp": ISODate("2021-05-19T16:00:00.000Z"), "temp": 17 }, { "metadata": { "sensorId": 5578, "type": "temperature" }, "timestamp": ISODate("2021-05-19T20:00:00.000Z"), "temp": 12 } ] )
Para inserir um único documento, use o método db.collection.insertOne()
.
Consultar uma Coleta de Seqüência Temporal
Para recuperar um documento de uma coleção de séries temporais, emita o seguinte comando:
db.weather.findOne({ "timestamp": ISODate("2021-05-18T00:00:00.000Z") })
Execute agregações em uma Coleção de séries temporais
Para funcionalidade de query adicional, use um aggregation pipeline como:
db.weather.aggregate( [ { $project: { date: { $dateToParts: { date: "$timestamp" } }, temp: 1 } }, { $group: { _id: { date: { year: "$date.year", month: "$date.month", day: "$date.day" } }, avgTmp: { $avg: "$temp" } } } ] )
O exemplo de aggregation pipeline grupos todos os documentos pela data da medição e, em seguida, retorna a média de todas as medições de temperatura daquele dia:
{ "_id" : { "date" : { "year" : 2021, "month" : 5, "day" : 18 } }, "avgTmp" : 12.714285714285714 } { "_id" : { "date" : { "year" : 2021, "month" : 5, "day" : 19 } }, "avgTmp" : 13 }
Verificar se uma coleção é do tipo série temporal
Para determinar se uma coleção é do tipo série temporal, use o comando listCollections:
db.runCommand( { listCollections: 1.0 } )
Se a coleção for uma coleção de séries temporais, ela retornará isto:
{ cursor: { id: <number>, ns: 'test.$cmd.listCollections', firstBatch: [ { name: <string>, type: 'timeseries', options: { expireAfterSeconds: <number>, timeseries: { ... } }, ... }, ... ] } }
Comportamento
As coleções de séries temporais se comportam como collections normais. Você pode inserir e consultar seus dados como faria normalmente. O MongoDB trata as coleções de séries temporais como visualizações não materializadas graváveis em collections internas que organizam automaticamente os dados de séries temporais em um formato de armazenamento otimizado na inserção.
Ao query coleção de séries temporais, você opera em um documento por medida. Queries on time series collections take advantage of the optimized internal storage format and return results faster.
Index
Dica
Para melhorar o desempenho da query, você pode adicionar manualmente índices secundários nos campos especificados como metaField
e timeField
.
As coleções de séries temporais ordenam e indexam automaticamente os dados por tempo. O índice interno para uma coleção de séries temporais não é exibido por listIndexes
.
Se você inserir um documento em uma coleção com um valor timeField
antes 1970-01-01T00:00:00.000Z
ou depois 2038-01-19T03:14:07.000Z
, o MongoDB registrará um aviso e impedirá que algumas otimizações de query usem o índice interno. Criar um índice secundário no timeField
para recuperar o desempenho da query e resolver o aviso de log.
Algoritmo de compactação padrão
As coleções de séries temporais ignoram o algoritmo de compressão padrão global, snappy, em favor de zstd, a menos que um algoritmo de compressão diferente seja especificado usando a opção storageEngine
quando a coleção foi criada. Por exemplo, para alterar o algoritmo de snappy
para uma nova weather
de , adicione a seguinte opção:
db.createCollection( "weather", { timeseries: { timeField: "timestamp" }, storageEngine: { wiredTiger: { configString: "block_compressor=snappy" } } } )
As opções block_compressor
válidas são:
snappy
zlib
zstd
(padrão)none