Menu Docs

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

Dados do modelo de IoT

Nesta página

  • O padrão de bucket
  • Representações de tempo no MongoDB
  • Exemplo

A Internet das Coisas (IoT) é uma rede de objetos físicos conectados à Internet. Muitos desses dispositivos, como sensores, geram dados.

Para armazenar e recuperar esses dados de forma eficiente, você pode usar o padrão de contêiner.

Um método comum para organizar dados de IoT é grupo em buckets. O bucketing organiza grupos específicos de dados para ajudar:

  • Descubra tendências históricas,

  • Prever tendências futuras, e

  • Otimizar o uso do armazenamento.

Parâmetros comuns para agrupar dados são:

  • hora

  • fonte de dados (se você tiver vários conjuntos de dados)

  • consumidor

  • tipo de dados (por exemplo, tipo de transação em dados financeiros)

Observação

A partir do MongoDB 5.0, as coleções de séries temporais são o tipo de coleção recomendado para dados de séries temporais. Não use o padrão bucket em conjunto com coleções de séries temporais, pois isso pode prejudicar o desempenho.

Considere uma coleção que armazena os dados de temperatura obtidos de um sensor. O sensor registra a temperatura a cada minuto e armazena os dados em uma coleção chamada temperatures:

// temperatures collection
{
"_id": 1,
"sensor_id": 12345,
"timestamp": ISODate("2019-01-31T10:00:00.000Z"),
"temperature": 40
}
{
"_id": 2,
"sensor_id": 12345,
"timestamp": ISODate("2019-01-31T10:01:00.000Z"),
"temperature": 40
}
{
"_id": 3,
"sensor_id": 12345,
"timestamp": ISODate("2019-01-31T10:02:00.000Z"),
"temperature": 41
}
...

Essa abordagem não escala bem em termos de dados e tamanho do índice. Por exemplo, se o aplicativo exigir índices nos campos sensor_id e timestamp, cada leitura recebida do sensor precisará ser indexada para melhorar o desempenho.

Você pode aproveitar o modelo de documento para agrupar os dados em documentos que contêm as medidas para um período de tempo específico. Considere o seguinte esquema atualizado, que agrupa as leituras feitas a cada minuto em grupos de uma hora:

{
"_id": 1,
"sensor_id": 12345,
"start_date": ISODate("2019-01-31T10:00:00.000Z"),
"end_date": ISODate("2019-01-31T10:59:59.000Z"),
"measurements": [
{
"timestamp": ISODate("2019-01-31T10:00:00.000Z"),
"temperature": 40
},
{
"timestamp": ISODate("2019-01-31T10:01:00.000Z"),
"temperature": 40
},
...
{
"timestamp": ISODate("2019-01-31T10:42:00.000Z"),
"temperature": 42
}
],
"transaction_count": 42,
"sum_temperature": 1783
}

Este esquema atualizado melhora a escalabilidade e reflete como o aplicativo realmente utiliza os dados. O usuário provavelmente não fará uma query para obter uma leitura de temperatura específica. Em vez disso, o usuário provavelmente faria uma query do comportamento de temperatura ao longo de uma hora ou dia. O padrão de bucket facilita estas queries ao agrupar os dados em períodos de tempo uniformes.

Odocumento de exemplo contém dois campos calculados: transaction_count e sum_temperature. Se o aplicativo precisar recuperar frequentemente a soma das temperaturas em uma determinada hora, calcular um total em execução da soma pode ajudar a economizar recursos do aplicativo. Essa abordagem de Padrão Computado elimina a necessidade de calcular a soma cada vez que os dados são solicitados.

Os valores sum_temperature e transaction_count pré-agregados permitem cálculos adicionais, como a temperatura média (sum_temperature / transaction_count) para um bucket específico. É muito mais provável que os usuários consultem o aplicativo para a temperatura média entre 2:00 e 3:00, em vez de executar query da temperatura específica às 2:03. O agrupamento e o pré-cálculo de determinados valores permitem que o aplicativo forneça essas informações com mais facilidade.

O MongoDB armazena horas em UTC por padrão e converte quaisquer representações de hora local nesse formulário. Os aplicativos que devem operar ou relatar algum valor de hora local não modificado podem armazenar a zona ao lado do carimbo de data/hora UTC e calcular a hora local original em sua lógica de aplicativo.

Na concha MongoDB, você pode armazenar a data atual e o deslocamento do cliente atual a partir de UTC.

var now = new Date();
db.data.insertOne( { date: now,
offset: now.getTimezoneOffset() } );

Você pode reconstruir a hora local original aplicando o deslocamento salvo:

var record = db.data.findOne();
var localNow = new Date( record.date.getTime() - ( record.offset * 60000 ) );
← Dados monetários do modelo