Design de esquema para dados de séries temporais
Esta página descreve padrões de design de esquema para armazenar dados de série temporal no Bigtable. Esta página explica um pouco mais sobre como projetar o esquema, considerando que você esteja familiarizado com os conceitos e as recomendações já apresentados.
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 fornecem um ponto de partida. Seu conjunto de dados exclusivo e as consultas que você planeja usar são os pontos mais importantes a considerar ao criar um esquema para seus dados de séries temporais.
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 nesta página presumem que você esteja armazenando dados para um aplicativo que registra as medidas que os balões meteorológicos levam uma vez a cada minuto. Usamos evento para significar uma única solicitação que grava uma ou várias células ao mesmo tempo. Os IDs do local correspondem às regiões do Google Cloud.
Medição | Exemplo |
---|---|
|
|
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 bucket de tempo, cada linha na tabela representa um "bucket" de tempo,
como uma hora, um dia ou um 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ê grava 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 sem 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:
Não é necessário avaliar as alterações nos dados de série temporal.
Você quer economizar espaço de armazenamento utilizando qualificadores de coluna como dados.
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, após três minutos, as duas primeiras colunas de uma linha podem ter este aspecto:
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
Necessidade de desserializar os dados depois que eles 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 uma linha separada, mesmo que esteja registrando apenas uma medida. 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 normalmente 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 |
Estratégias adicionais
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 as linhas não fiquem grandes demais.
A seguir
- Analise as etapas envolvidas no planejamento de um esquema.
- Compreenda as práticas recomendadas para projetar um esquema.
- Leia sobre o desempenho que você pode esperar do Bigtable.
- Explore os recursos de diagnóstico do Key Visualizer.