Design de esquema para dados de séries temporais

Nesta página, descrevemos padrões de design de esquema para armazenar dados de série temporal no Cloud Bigtable. Esta página foi desenvolvida para explicar como projetar o esquema. Consideramos que você os conceitos e as recomendações descritas aqui.

Uma série temporal é uma coleção de dados que consiste em medições e os tempos em que as medições são registradas. Exemplos de séries temporais incluem:

  • o gráfico de uso de memória no computador;
  • a temperatura ao longo do tempo em uma reportagem;
  • os preços da bolsa de valores durante um período;

Um esquema bom resulta em excelente desempenho e escalonabilidade, e um esquema ruim pode levar a um sistema de baixo desempenho. No entanto, não há um design de esquema único que seja o melhor para todos os casos de uso.

Os padrões descritos nesta página são um ponto de partida. Seu conjunto de dados exclusivo e as consultas que você planeja usar são os itens mais importantes a serem considerados ao projetar um esquema para os dados de série temporal.

Os padrões de projeto básicos para armazenar dados de série temporal no Bigtable estes:

Dados para exemplos

Para ilustrar as diferenças entre os padrões, os exemplos desta página presumem que você esteja armazenando dados de um app que registra as medidas feitas por balões meteorológicos uma vez por minuto. Usamos event para indicar uma única solicitação que grava uma ou várias células ao mesmo tempo. Os IDs de local correspondem às regiões do Google Cloud.

Medição Exemplo
  1. Os carimbos de data/hora nesta página são formatados como "tYYYY-MM-DD-HHMM" para facilitar a leitura. Em uma tabela de produção, os carimbos de data/hora geralmente são expressos como o número de microssegundos desde 1970-01-0100:00:00 UTC, como "1616264288050807".
Pressão (pascal) 94587
Temperatura (Celsius) 9,5
Umidade (porcentagem) 65
Altitude (metros) 601
Dados relacionados Exemplo
ID do balão 3698
Local asia-southeast1
Carimbo de data/hora1 t2021-03-05-1204

Intervalos de tempo

Em um padrão de intervalo de tempo, cada linha na tabela representa um "intervalo" de tempo, como hora, dia ou mês. Uma chave de linha inclui um identificador que não é de carimbo de data/hora, como week49, para o período registrado na linha, além de outros dados de identificação.

O tamanho do intervalo que você usa, como minuto, hora ou dia, depende das consultas que pretende usar e dos limites de tamanho de dados do Bigtable. Por exemplo, se linhas que contêm uma hora de dados são maiores do que o tamanho máximo recomendado de 100 MB, linhas que representam meia hora ou um minuto serão, provavelmente, uma escolha melhor.

As vantagens dos padrões de intervalo de tempo incluem o seguinte:

  • O desempenho será melhor. Por exemplo, se você armazenar 100 medições, o Bigtable gravará e lerá essas medições mais rápido se elas estiverem em uma linha do que se estiverem em 100 linhas.

  • Os dados armazenados dessa maneira são compactados com mais eficiência do que os dados em tabelas altas e estreitas.

As desvantagens incluem o seguinte:

  • Os padrões de design de esquema de intervalo de tempo são mais complicados do que os de carimbo de data/hora único e podem levar mais tempo e esforço para serem desenvolvidos.

Como adicionar colunas novas para eventos novos

Nesse padrão de intervalo de tempo, você escreve uma nova coluna em uma linha para cada evento, armazenando os dados no qualificador de coluna, e não como um valor de célula. Isso significa que, para cada célula, você envia o grupo de colunas, o qualificador de coluna e o carimbo de data/hora, mas nenhum valor.

Usando esse padrão para os dados de balão meteorológicos de amostra, cada linha contém todas as medidas de uma única métrica, como pressure, para um único balão meteorológico ao longo de uma semana. Cada chave de linha contém o local, o ID do balão, a métrica que você está gravando na linha e um número de semana. Cada vez que um balão informa os dados de uma métrica, você adiciona uma coluna nova à linha. O qualificador de coluna contém a medida, a pressão em Pascals, para o minuto identificado pelo carimbo de data/hora da célula.

Neste exemplo, após três minutos, uma linha pode ter esta aparência:

Chave de linha 94558 94122 95992
us-west2#3698#pressure#week1 t2021-03-05-1200 t2021-03-05-1201 t2021-03-05-1202

Os casos de uso desse padrão incluem o seguinte:

Como adicionar células novas para eventos novos

Nesse padrão de intervalo de tempo, você adiciona novas células às colunas existentes quando grava um novo evento. Esse padrão permite que você use a capacidade do Bigtable de armazenar várias células com carimbo de data/hora em uma determinada linha e coluna. É importante especificar regras de coleta de lixo ao usar esse padrão.

Usando os dados do balão meteorológico como exemplo, cada linha contém todas as medidas de um único balão meteorológico ao longo de uma semana. O prefixo da chave de linha é um identificador da semana. Assim, você pode ler os dados de uma semana inteira de vários balões com uma única consulta. Os outros segmentos de chave de linha são o local em que o balão opera e o número do ID dele. A tabela tem um grupo de colunas, measurements, que tem uma coluna para cada tipo de medida: pressure, temperature, humidity e altitude.

Cada vez que um balão envia suas medidas, o aplicativo grava novos valores na linha que contém os dados da semana atual do balão, gravando células adicionais com carimbo de data/hora em cada coluna. No final da semana, cada coluna em cada linha tem uma medida para cada minuto da semana, ou 10.080 células (se a política de coleta de lixo permitir).

Cada coluna em cada linha contém uma medida para cada minuto da semana. Nesse caso, depois de três minutos, as duas primeiras colunas de uma linha podem ter esta aparência:

Chave de linha pressão temp
asia-south2#3698#week1 94558 (t2021-03-05-1200) 9,5 (t2021-03-05-1200)
94122 (t2021-03-05-1201) 9,4 (t2021-03-05-1201)
95992 (t2021-03-05-1202) 9,2 (t2021-03-05-1202)

Os casos de uso desse padrão incluem o seguinte:

  • Você quer ter a opção de avaliar as alterações nas medições ao longo do tempo.

Linhas com um único carimbo de data/hora

Nesse padrão, você cria uma linha para cada novo evento ou medida, em vez de adicionar células às colunas de linhas existentes. O sufixo da chave de linha é o valor do carimbo de data/hora. As tabelas que seguem esse padrão tendem a ser altas e estreitas, e cada coluna de uma linha contém apenas uma célula.

Carimbo de data/hora único serializado

Nesse padrão, você armazena todos os dados de uma linha em uma única coluna em um formato serializado, como um buffer de protocolo (protobuf). Essa abordagem é descrita com mais detalhes em Como projetar seu esquema.

Por exemplo, se você usar esse padrão para armazenar os dados do balão meteorológico, sua tabela poderá ter esta aparência após quatro minutos:

Chave de linha measurements_blob
us-west2#3698#2021-03-05-1200 protobuf_1
us-west2#3698#2021-03-05-1201 protobuf_2
us-west2#3698#2021-03-05-1202 protobuf_3
us-west2#3698#2021-03-05-1203 protobuf_4

As vantagens desse padrão incluem o seguinte:

  • Eficiência de armazenamento

  • Velocidade

As desvantagens incluem o seguinte:

  • Incapacidade de recuperar apenas algumas colunas ao ler os dados

  • A necessidade de desserializar os dados depois que forem lidos

Os casos de uso desse padrão incluem o seguinte:

  • Você não tem certeza de como consultar os dados ou suas consultas poderão flutuar.

  • Sua necessidade de equilibrar os custos supera a necessidade de filtrar dados antes de serem recuperados do Bigtable.

  • Cada evento contém muitas medidas que podem ser maiores que o limite de 100 MB por linha se você armazenar os dados em várias colunas.

Carimbo de data/hora único não serializado

Nesse padrão, você armazena cada evento em sua própria linha, mesmo que esteja registrando apenas uma medição. Os dados nas colunas não são serializados.

As vantagens desse padrão incluem o seguinte:

  • Geralmente, é mais fácil implementar do que o padrão de intervalo de tempo.

  • Talvez você passe menos tempo refinando seu esquema antes de usá-lo.

As desvantagens desse padrão geralmente superam as vantagens:

  • O Bigtable tem menos desempenho com esse padrão.

  • Os dados armazenados dessa maneira não são compactados com a mesma eficiência que os dados de colunas mais amplas.

  • Mesmo quando o carimbo de data/hora está no final da chave de linha, esse padrão pode resultar em pontos de acesso.

Os casos de uso desse padrão incluem o seguinte:

  • Você quer sempre recuperar todas as colunas, mas apenas um intervalo especificado de carimbos de data/hora. No entanto, você tem um motivo para não armazenar os dados em uma estrutura serializada.

  • Você quer armazenar um número ilimitado de eventos.

Usando os dados de exemplo do balão meteorológico, o grupo de colunas e os qualificadores de coluna são os mesmos que o exemplo usando intervalos de tempo e novas células. Nesse padrão, no entanto, cada conjunto de medições relatadas para cada balão meteorológico é gravado em uma nova linha. A tabela a seguir mostra cinco linhas que são gravadas usando esse padrão:

Chave de linha pressão temperatura umidade altitude
us-west2#3698#2021-03-05-1200 94558 9,6 61 612
us-west2#3698#2021-03-05-1201 94122 9,7 62 611
us-west2#3698#2021-03-05-1202 95992 9,5 58 602
us-west2#3698#2021-03-05-1203 96025 9,5 66 598
us-west2#3698#2021-03-05-1204 96021 9,6 63 624

Outras estratégias

Se você precisar enviar várias consultas diferentes para o mesmo conjunto de dados, armazene os dados em várias tabelas, cada uma com uma chave de linha projetada para uma das consultas.

Também é possível combinar padrões em alguns casos. Por exemplo, é possível armazenar dados serializados em linhas que representam intervalos de tempo, desde que você não deixe as linhas muito grandes.

A seguir