Soy 100% nuevo en iniciar sesión en una base de datos y probablemente por eso habrá algunas preguntas estúpidas aquí y espero que esté bien. Me gustaría registrar datos de un controlador Beckhoff plc en una base de datos que se coloca en el mismo IPC que mi PLC. Beckhoff plc tiene una función de enlace directo tanto a InfluxDB como a PostgreSQL en el que se basa TimescaleDB, por lo que la conexión funcionará bien. Nos gustaría registrar los datos en el tiempo para poder retroceder y ver a qué hora sucedieron ciertas cosas y también hacer preguntas a la base de datos en función del tiempo. He estado hablando con diferentes personas y la mayoría recomienda usar TimescaleDB, por lo que sería genial escuchar los beneficios entre ellos y lo que me recomendarían elegir.
El tamaño de los datos que registraremos es bastante pequeño. Tendremos una estructura de datos y que contendrá como 10 registros INT o 20 bytes. Haremos un registro en la base de datos cada 1 segundo en las máquinas rápidas y, a veces, solo una vez cada 20 minutos, pero esta parte la controlaré en mi plc.
Entonces, creo que poner datos en la base de datos será bastante sencillo, pero luego tengo algunas ideas sobre lo que me gustaría hacer y lo que es posible.
¿Es posible hacer preguntas a la base de datos para que me dé la cantidad, el valor más alto, el valor más bajo, el valor medio de los últimos 60 minutos o 24 horas, etc. y luego la base de datos puede devolver estos valores según el marco de tiempo que le doy a la base de datos en mi pregunta a ella?
La resolución con la que inicio sesión que se controla desde el plc solo es necesaria para estar en ese nivel alto durante 7 días y luego me gustaría "descargar / comprimir" los datos. ¿Es eso posible en ambas bases de datos y hay algún beneficio en una de ellas? ¿Quizás más fácil en uno de ellos?
¿Existe en una de estas dos bases de datos la posibilidad de no escribir en el HD/disco cada vez que mi plc le ingresa datos? ¿O escribirá en el disco cada vez automáticamente? Leí sobre algo llamado WAL, ¿qué es eso o que no usará la RAM para almacenar los datos antes de escribir más datos y no tan a menudo en el disco?
¿Hay alguna gran diferencia en la configuración de estas dos bases de datos?
Probablemente tengo más preguntas, pero estas son las principales funciones que necesito en el sistema.
Muchas gracias
¿Es posible hacer preguntas a la base de datos para que me dé la cantidad, el valor más alto, el valor más bajo, el valor medio de los últimos 60 minutos o 24 horas, etc. y luego la base de datos puede devolver estos valores según el marco de tiempo que le doy a la base de datos en mi pregunta a ella?
¡Sí! Puedes usar consultas para hacerlo. Considere la siguiente estructura de tabla:
CREATE TABLE conditions ( time TIMESTAMPTZ NOT NULL, device INTEGER NOT NULL, temperature FLOAT NOT NULL ); SELECT * FROM create_hypertable('conditions', 'time'); ALTER TABLE conditions SET (timescaledb.compress, timescaledb.compress_orderby='time');La resolución con la que inicio sesión que se controla desde el plc solo es necesaria para estar en ese nivel alto durante 7 días y luego me gustaría "descargar / comprimir" los datos. ¿Es eso posible en ambas bases de datos y hay algún beneficio en una de ellas? ¿Quizás más fácil en uno de ellos?
Puede crear agregados continuos que es un método rápido para mantener materializados sus datos resumidos.
CREATE MATERIALIZED VIEW conditions_hourly(time, device, low, high, average ) WITH (timescaledb.continuous) AS SELECT time_bucket('1 hour', time) as time, device, min(temperature) as low, max(temperature) as high, AVG(temperature) as average FROM conditions GROUP BY 1,2;Y luego puede agregar una política de retención para mantener solo los últimos 7 días.
SELECT add_retention_policy('conditions', INTERVAL '7 day');Y agregue una política de agregados continuos que mantendrá su vista actualizada cada hora:
SELECT add_continuous_aggregate_policy('conditions_hourly', start_offset => INTERVAL '1 day', end_offset => INTERVAL '1 hour', schedule_interval => INTERVAL '1 hour');¿Existe en una de estas dos bases de datos la posibilidad de no escribir en el HD/disco cada vez que mi plc le ingresa datos? ¿O escribirá en el disco cada vez automáticamente? Leí sobre algo llamado WAL, ¿qué es eso o que no usará la RAM para almacenar los datos antes de escribir más datos y no tan a menudo en el disco?
En Postgresql puede usar confirmaciones asíncronas: https://www.postgresql.org/docs/current/wal-async-commit.html