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

Coleções de Time Series

Nesta página

  • Coleções de Time Series
  • Procedimentos
  • Comportamento

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

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.

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.

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

timeseries.timeField

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

timeseries.metaField

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 _id ou o mesmo que o timeseries.timeField. O campo pode ser de qualquer tipo.

timeseries.granularity

string

Opcional. Os valores possíveis são "seconds", "minutes" e "hours". Por padrão, o MongoDB define granularity como "seconds" para ingestão de alta frequência.

Defina manualmente o parâmetro granularity para melhorar o desempenho, otimizando a forma como os dados da collection de séries temporais são armazenados internamente. Para selecionar um valor para granularity, escolha a correspondência mais próxima do período entre as medições de entrada consecutivas.

Se você especificar timeseries.metaField, considere o período entre as medições de entrada consecutivas que têm o mesmo valor único para o campo metaField. As medições muitas vezes têm o mesmo valor exclusivo para o campo metaField se forem da mesma origem.

Se você não especificar timeseries.metaField, considere o período entre todas as medições inseridas na collection.

expireAfterSeconds

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

Dica

Consulte:

Aviso

Não tente criar uma coleção de séries temporais ou visualizar com o nome system.profile porque o servidor MongoDB falhará.

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().

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")
})

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
}

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: { ... }
},
...
},
...
]
}
}

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.

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.

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

Voltar

Capped collections