Tutorial-7 de la serie Apache IoTDB: formato de archivo de datos de serie temporal TsFile

Hay muchos formatos de archivo en el ecosistema de big data, como Parquet, ORC, Avro, etc., que son todos formatos de archivo diseñados para datos anidados. Estos formatos de archivo generalmente tienen un esquema predefinido y los datos se escriben en filas, se organizan por atributos y se almacenan en columnas. Sin embargo, estos formatos de archivo generalmente no pueden cumplir bien los requisitos de gestión de los datos de series temporales. Por ejemplo, en algunos escenarios de datos de series de tiempo, generalmente cada secuencia se escribe de forma independiente y las marcas de tiempo no están alineadas; los resultados de la consulta también deben ordenarse por marca de tiempo. TsFile (archivo de serie temporal) es el formato de archivo que diseñamos para escenarios de datos de series temporales. Hoy presento principalmente el uso, principalmente para la versión 0.10.

El texto tiene 2587 palabras y el tiempo de lectura estimado es de 7 minutos.

escenas a utilizar

Debido a que el formato de archivo es relativamente liviano, es adecuado para su uso como paquete de compresión de datos en el borde. Este borde puede estar dentro del dispositivo, a nivel de computadora industrial o fábrica. Los datos generados en el dispositivo se pueden conservar en un archivo para su almacenamiento en cualquier momento. El equipo aquí mencionado puede ser un ventilador con múltiples puntos de medición, como sensor de velocidad del viento, sensor de temperatura, etc. Los datos recopilados por cada sensor son una serie de tiempo. La plataforma IoT de Lenovo ha estado utilizando TsFile para almacenar datos de series temporales desde 2017.

Por lo tanto, el escenario objetivo de TsFile es administrar los datos de series de tiempo de uno o más dispositivos.

Modelo de punto de medición de equipo

Dispositivo (DeviceId): un concepto similar a una tabla.

Punto de medición (MeasurementId): un dispositivo puede tener múltiples puntos de medición, similar al concepto de una columna en una tabla.

Ruta de la serie temporal (ruta): la ruta (Id del dispositivo, Id del punto de medición) se puede definir mediante el equipo y el punto de medición.

Información de descripción del punto de medición (MeasurementSchema): cada serie temporal corresponde a una información de descripción, incluido el tipo de datos, el método de codificación y el método de compresión.

Cada serie de tiempo tiene dos columnas: columna de tiempo y columna de valor.

Me gusta hacer un dibujo recientemente. Básicamente es así. Cada equipo puede tener diferentes puntos de medición.

Metadatos de registro

Usando TsFile, el primer paso es registrar metadatos.

Serie de tiempo de registro: Path + MeasurementSchema

Cada serie temporal se puede registrar de esta forma.

Para registrar la serie temporal, debe proporcionar una ruta y un esquema de medición 

String path = "test.tsfile";
File f = FSFactoryProducer.getFSFactory().getFile(path);
TsFileWriter tsFileWriter = new TsFileWriter(f);
// add measurements into file schema
tsFileWriter.registerTimeseries(new Path("device_1", "measurement_1"),new MeasurementSchema("measurement_1", TSDataType.INT64, TSEncoding.RLE));

Antes de 0.10, todos los dispositivos compartían una tabla de puntos y el esquema de medición del mismo nombre también debía ser el mismo (esta es la fuente de las mismas restricciones para los tipos de puntos de medición del mismo nombre en un grupo de almacenamiento en IoTDB). Después de 0.10, cada serie de tiempo es verdaderamente independiente y no interfiere entre sí.

Registrar dispositivos por plantilla: plantilla de dispositivo + dispositivo

El registro uno por uno anterior es más problemático, por lo que proporciona la función de una plantilla de dispositivo. Cada plantilla define un conjunto de MeasurementSchema, por ejemplo, hay 10 puntos de medición.Cuando un dispositivo está asociado con esta plantilla, se registran automáticamente 10 secuencias.

Primero genere la plantilla del dispositivo y luego regístrela.

Map<String, MeasurementSchema> template = new HashMap<>();
template.put("measurement_1", new MeasurementSchema("measurement_1", TSDataType.INT64, TSEncoding.RLE));
template.put("measurement_2", new MeasurementSchema("measurement_2", TSDataType.DOUBLE, TSEncoding.GORILLA));
tsFileWriter.registerTemplate("template_1", template);

A continuación, registre el dispositivo y asócielo a la plantilla por el nombre de la plantilla:

tsFileWriter.registerDevice("device_1", "template_1");
tsFileWriter.registerDevice("device_2", "template_1");

De esta manera, registré 2 dispositivos, cada uno con 2 puntos de medición.

Registra una plantilla y escribe datos en tiempo real

Ésta es una versión avanzada simplificada. Cuando solo registramos una plantilla de dispositivo, podemos escribir datos directamente sin registrar el dispositivo. Durante el proceso de escritura, si se encuentra que los datos escritos por este dispositivo no están registrados, buscará directamente el MeasurementSchema con el mismo nombre en la plantilla para el registro. Esto también hereda la fina tradición de las versiones anteriores a la 0.9 (para las versiones anteriores a la 0.9, TsFile solo puede registrar una plantilla y luego puede escribir datos).

Escribir datos

La escritura de datos de TsFile tiene una limitación: cada columna debe escribirse en incrementos de tiempo, de lo contrario no se garantiza la corrección.

Escribe una fila de datos según el dispositivo: TSRecord

Un TSRecord es un dispositivo, una marca de tiempo y el valor de múltiples puntos de medición. Similar a una fila de datos en una tabla.

Escriba un lote de datos por dispositivo: tableta

Jaja, vi Tablet de nuevo, sí, esta estructura es una estructura que se ejecuta a través de TsFile y la sesión de IoTDB. Representa el valor de varios puntos de medición con varias marcas de tiempo para un dispositivo, similar a una subtabla. Esta subtabla no puede tener valores nulos.

Del mismo modo, esta interfaz de escritura es rápida y puede alcanzar una velocidad de escritura de decenas de millones de puntos por segundo.

Leer datos

La interfaz de consulta recibe un lote de rutas y una expresión (se puede realizar filtrado de tiempo y filtrado de valor), que en realidad corresponde a las cláusulas select y where.

Al realizar consultas, la estructura de tabla predeterminada de TsFile es tabla ancha, tiempo, d1.m1, d1.m2, d2.m1, d2.m2. De forma predeterminada, esta estructura alinea la ruta de consulta dada por tiempo y realiza un filtrado condicional.

datos

Código de muestra:

https://github.com/apache/incubator-iotdb/blob/master/example/tsfile/

Documentación:

http://iotdb.apache.org/zh/UserGuide/V0.10.x/Client/Programming%20-%20TsFile%20API.html

para resumir

Hoy presentamos el modelo de datos, el registro de metadatos, el proceso de escritura y lectura del formato de archivo de serie temporal TsFile. Eso es. ¡Todos, ordenen Star!

https://github.com/apache/incubator-iotdb/tree/master

¡me gusta! ¡atención! ¡Adelante!

Supongo que te gusta

Origin blog.csdn.net/qiaojialin/article/details/107587660
Recomendado
Clasificación