Un buen diseño de tablas es la base del rendimiento de consultas y almacenamiento en LindormTSDB. Antes de escribir cualquier instrucción SQL, analice sus patrones de consulta y las características de su origen de datos; las decisiones que tome al crear el esquema son difíciles de revertir más adelante.
Este tema utiliza datos de monitoreo de calidad del aire (AQM) como ejemplo para explicar cada decisión de diseño.
Descripción general del modelo de datos
Cada registro en una tabla de series de tiempo de LindormTSDB consta de cuatro componentes:
|
Componente |
Descripción |
|
Tabla |
Conjunto de datos de series de tiempo del mismo tipo. Corresponde a una métrica; por ejemplo, |
|
Etiqueta |
Atributo que identifica el objeto monitoreado y se almacena como un par clave-valor. De forma predeterminada, LindormTSDB indexa cada par clave-valor de etiqueta y asigna las etiquetas a las series de tiempo para agilizar el filtrado. En algunos sistemas también se les conoce como rótulos o dimensiones. |
|
Marca de tiempo |
Momento en que se generó el registro. |
|
Campo |
Valor medido. Un registro puede tener varios campos. LindormTSDB no indexa los campos. |
El siguiente diagrama ilustra cómo se relacionan estos componentes mediante los datos de AQM:

Decida qué columnas deben ser etiquetas
Esta es la decisión de esquema con mayor impacto. Una definición incorrecta provoca que el índice de series de tiempo crezca sin límite, lo cual degrada tanto el rendimiento de escritura como el de consulta.
Las etiquetas sirven para identificar; los campos, para medir.
Defina una columna como etiqueta cuando identifique el origen o el contexto de los datos: ciudad, ID de dispositivo, región o host.
Defina una columna como campo cuando almacene un valor medido que cambia con el tiempo: temperatura, uso de CPU o concentración de PM2.5.
Evite las etiquetas de alta rotación
No utilice atributos cuyos valores cambien con frecuencia, como los ID de proceso o los atributos relacionados con el tiempo, aunque su tipo de dato sea STRING. Cada combinación única de clave-valor de etiqueta genera una nueva entrada de serie de tiempo en el índice. Los atributos de alta rotación producen gran cantidad de series de tiempo distintas, lo que hace que el índice crezca rápidamente y ralentiza las consultas basadas en etiquetas.
En su lugar, defina los atributos de alta rotación como campos.
Cree la tabla
Asigne a la tabla el nombre de la métrica que representa. Utilice la instrucción CREATE TABLE con la palabra clave TAG para marcar las columnas de etiqueta. La palabra clave TAG es una extensión de SQL de LindormTSDB; solo las columnas declaradas con TAG pueden usarse como claves primarias.
A continuación se muestra un ejemplo que crea una tabla de AQM con tres columnas de etiqueta y cuatro columnas de campo:
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.
);
Una vez creada la tabla, inserte registros con 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 insertar varios registros en una sola instrucción:
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);
Elija una clave primaria
LindormTSDB usa la clave primaria para particionar los datos y optimizar las consultas. Las consultas que incluyen la clave primaria en la cláusula WHERE se ejecutan más rápido.
Las tablas de series de tiempo difieren de las tablas de bases de datos relacionales. La columna de clave primaria no necesita contener valores únicos, pero debe estar marcada como etiqueta (declarada con la palabra clave TAG).
Las instancias de nodo único de Lindorm no admiten claves primarias.
Utilice el identificador único del origen de datos como clave primaria:
|
Escenario |
Clave primaria recomendada |
|
IoT (Internet de las cosas) / IIoT (Internet industrial de las cosas) |
ID de dispositivo |
|
IoV (Internet de los vehículos) |
Identificador único del vehículo |
|
Monitoreo de aplicaciones |
ID de aplicación o |
En el ejemplo de AQM, id identifica de manera única cada estación de monitoreo. Si la mayoría de las consultas filtran por ID de estación, utilice id como clave primaria:
PRIMARY KEY (id)
Elija los tipos de datos
Columnas de etiqueta
Las columnas de etiqueta deben ser de tipo VARCHAR. Este tipo de dato no se puede modificar después de crear la tabla.
Columnas de marca de tiempo
LindormTSDB almacena internamente las marcas de tiempo como valores BIGINT en formato de época UNIX dentro de LindormDFS, lo cual optimiza la compresión. Al crear la tabla, elija el tipo de columna según la forma en que su aplicación maneje las marcas de tiempo:
|
Tipo |
Cuándo utilizarlo |
|
|
Su aplicación trabaja con cadenas de fecha y hora legibles y desea que la base de datos convierta los valores automáticamente. |
|
|
Su aplicación trabaja directamente con valores de época UNIX o realiza operaciones aritméticas con las marcas de tiempo (por ejemplo, calcular duraciones). |
Columnas de campo
Las columnas de campo admiten todos los tipos de datos. Evite usar VARCHAR en estas columnas, ya que se comprime de forma deficiente y ralentiza las consultas en comparación con los tipos numéricos.
Para consultar la lista completa de tipos de datos compatibles, consulte Data types.