Um bom projeto de tabela é a base para o desempenho de consultas e armazenamento no LindormTSDB. Antes de escrever qualquer SQL, analise seus padrões de consulta e as características da source de dados. As decisões tomadas durante a criação do schema são difíceis de reverter posteriormente.
Este tópico utiliza dados de monitoramento da qualidade do ar (AQM) como exemplo prático para explicar cada decisão de projeto.
Visão geral do modelo de dados
Cada registro em uma tabela de séries temporais do LindormTSDB possui quatro componentes:
|
Componente |
Descrição |
|
Table |
Coleção de dados de séries temporais do mesmo tipo. Corresponde a uma medição; por exemplo, |
|
Tag |
Atributo que identifica o objeto monitorado, armazenado como par chave-valor. Por padrão, o LindormTSDB indexa todos os pares chave-valor de tag e mapeia tags para séries temporais, permitindo filtragem rápida. Alguns sistemas também as chamam de rótulos ou dimensões. |
|
Timestamp |
Momento em que o registro foi gerado. |
|
Field |
Valor medido. Um registro pode conter múltiplos fields. O LindormTSDB não indexa fields. |
O diagrama a seguir ilustra a relação entre esses componentes com dados de AQM:

Decida quais colunas devem ser tags
Esta é a decisão de schema mais importante. Escolhas incorretas fazem o índice de séries temporais crescer sem limites, o que degrada o desempenho de gravação e consulta.
Tags servem para identificação; fields servem para medições.
Defina uma coluna como tag quando ela identificar a source ou o contexto dos dados: cidade, ID do dispositivo, região ou host.
Defina uma coluna como field quando ela armazenar um valor medido que varia ao longo do tempo: temperatura, uso de CPU ou concentração de PM2,5.
Evite tags de alta rotatividade
Não use atributos cujos valores mudam frequentemente, como IDs de processo ou atributos relacionados ao tempo, como tags, mesmo que o tipo de dado seja STRING. Cada combinação única de chave-valor de tag cria uma nova entrada de série temporal no índice. Atributos de alta rotatividade geram muitas séries temporais distintas e causam expansão rápida do índice, tornando lentas as consultas baseadas em tags.
Defina atributos de alta rotatividade como fields.
Crie a tabela
Nomeie a tabela conforme a medição que ela representa. Use a instrução CREATE TABLE com a palavra-chave TAG para marcar as colunas de tag. A palavra-chave TAG é uma extensão SQL do LindormTSDB. Apenas colunas declaradas com TAG podem atuar como chaves primárias.
O exemplo a seguir cria uma tabela AQM com três colunas de tag e quatro colunas de field:
CREATE TABLE aqm (
city VARCHAR TAG,
district VARCHAR TAG,
id VARCHAR TAG,
time TIMESTAMP,
pm2_5 DOUBLE,
pm10 DOUBLE,
so2 DOUBLE,
no2 DOUBLE,
PRIMARY KEY (id) -- Remove this line for single-node Lindorm instances, which do not support primary keys.
);
Após criar a tabela, insira registros com INSERT INTO:
INSERT INTO aqm (city, district, id, time, pm2_5, pm10, so2, no2)
VALUES ('hangzhou', 'yuhang', 'HY00001', '2019-04-18 10:00:00', 31.0, 66.0, 10.0, 43.0);
INSERT INTO aqm (city, district, id, time, pm2_5, pm10, so2, no2)
VALUES ('hangzhou', 'yuhang', 'HY00001', '2019-04-18 10:01:00', 31.2, 66.0, 10.5, 43.1);
Para inserir vários registros em uma única instrução:
INSERT INTO aqm (city, district, id, time, pm2_5, pm10, so2, no2)
VALUES
('hangzhou', 'yuhang', 'HY00001', '2019-04-18 10:02:00', 31.3, 66.0, 10.0, 42.9),
('hangzhou', 'yuhang', 'HY00001', '2019-04-18 10:03:00', 31.2, 66.4, 10.3, 43.0);
Escolha uma chave primária
O LindormTSDB usa a chave primária para particionar dados e otimizar consultas. Consultas que incluem a chave primária na cláusula WHERE executam mais rapidamente.
Tabelas de séries temporais diferem de tabelas de bancos de dados relacionais. A coluna de chave primária não precisa conter valores exclusivos, mas deve ser marcada como tag (declarada com a palavra-chave TAG).
Instâncias single-node do Lindorm não suportam chaves primárias.
Use o identificador exclusivo da source de dados como chave primária:
|
Cenário |
Chave primária recomendada |
|
IoT (Internet das Coisas) / IIoT (Internet Industrial das Coisas) |
ID do dispositivo |
|
IoV (Internet dos Veículos) |
Identificador exclusivo do veículo |
|
Monitoramento de aplicações |
ID da aplicação ou |
No exemplo de AQM, id identifica exclusivamente cada estação de monitoramento. Se a maioria das consultas filtrar por ID da estação, use id como chave primária:
PRIMARY KEY (id)
Escolha os tipos de dados
Colunas de tag
Colunas de tag devem ser VARCHAR. Não é possível alterar esse tipo de dado após a criação da tabela.
Colunas de timestamp
O LindormTSDB armazena timestamps internamente como valores BIGINT no formato UNIX epoch no LindormDFS, otimizando a compressão. Ao criar a tabela, escolha o tipo da coluna conforme o tratamento de timestamps pela sua aplicação:
|
Tipo |
Quando usar |
|
|
A aplicação trabalha com strings de data e hora legíveis e você deseja conversão automática pelo banco de dados. |
|
|
A aplicação trabalha diretamente com valores UNIX epoch ou realiza operações aritméticas em timestamps, como cálculo de durações. |
Colunas de field
Colunas de field suportam todos os tipos de dados. Evite VARCHAR nessas colunas, pois esse tipo apresenta baixa compressão e torna as consultas mais lentas em comparação aos tipos numéricos.
Para obter a lista completa de tipos de dados suportados, consulte Tipos de dados.