Capa de datos abstracta
La capa de datos abstracta, el modelo de datos unificado del sistema, la abstracción de equipos y la normalización de datos que desacoplan las aplicaciones del almacenamiento físico.
La capa de datos abstracta se sitúa entre el almacenamiento físico de los datos y las aplicaciones que los utilizan. Abstrae la implementación física y las particularidades del hardware, y proporciona una única interfaz para trabajar con los datos. Ofrece:
- Independencia del hardware: Los datos se almacenan en distintos dispositivos (servidores, la nube, dispositivos IoT), pero la aplicación interactúa con ellos a través de una única interfaz.
- Desarrollo más sencillo: Los desarrolladores trabajan con entidades abstractas sin preocuparse por los detalles del almacenamiento físico.
- Flexibilidad: Los cambios en la estructura física de los datos (por ejemplo, la migración a la nube) no afectan a las aplicaciones.
Modelo de datos unificado
El sistema utiliza un modelo de datos unificado que se adapta a distintos tipos de equipos y permite trabajar con ellos de manera homogénea, independientemente de su origen o del tipo de equipo. Incluye estructuras de datos comunes, reglas de procesamiento uniformes y coherencia semántica de los datos en todos los sistemas y subsistemas.
Por ejemplo, un modelo de datos unificado del sistema incluye:
- Entidades: Equipos, canales, sesiones, unidades y parámetros de referencia.
- Relaciones: Los equipos tienen canales, los canales están relacionados con los datos y los datos están relacionados con las sesiones.
- Atributos: Se definen atributos para cada entidad (por ejemplo,
equipment.serial_numberychannel_data.value).
Estructura del modelo de datos unificado del sistema
El modelo de datos unificado del sistema es una estructura para almacenar y gestionar los datos relacionados con los equipos, los canales, las sesiones y las mediciones. Veamos cada tabla y su finalidad, así como las relaciones entre ellas.
Tabla channel_data
Esta tabla almacena los datos recibidos desde los canales de los equipos dentro de sesiones concretas.
| Campo | Tipo | Descripción |
|---|---|---|
id | bigint | Identificador único del registro (clave primaria). |
equipment_id | bigint | Referencia al equipo (equipment.id). |
seance_id | bigint | Referencia a la sesión (seances.id). |
channel_id | bigint | Referencia al canal (channels.id). |
unit_id | bigint | Referencia a la unidad de medida (units.id). |
archive_type_id | integer | Referencia al tipo de archivo (referenceparameters.id). |
event_time | integer | El momento del evento (p. ej., marca de tiempo). |
value | character varying(100) | El valor recibido desde el canal. |
created_at | timestamp(6) without time zone | Momento en que se creó el registro. |
updated_at | timestamp(6) without time zone | Momento de la última actualización del registro. |
Relaciones:
- La clave foránea
unit_idhace referencia a la tablaunits. - La clave foránea
archive_type_idhace referencia a la tablareferenceparameters. - La clave foránea
equipment_idhace referencia a la tablaequipment. - La clave foránea
channel_idhace referencia a la tablachannels. - La clave foránea
seance_idhace referencia a la tablaseances.
Tabla units
Esta tabla almacena las unidades de medida utilizadas para los datos de los canales.
| Campo | Tipo | Descripción |
|---|---|---|
id | bigint | Identificador único del registro (clave primaria). |
name | character varying(30) | Nombre de la unidad de medida. |
varname | character varying(30) | Nombre de variable abreviado de la unidad de medida. |
description | character varying(100) | Descripción de la unidad de medida. |
conversion_factor | double precision | Factor de conversión de la unidad de medida. |
rounding | smallint | Número de decimales a los que redondear. |
synonyms | character varying[] | Matriz de sinónimos de la unidad de medida. |
created_at | timestamp(6) without time zone | Momento en que se creó el registro. |
updated_at | timestamp(6) without time zone | Momento de la última actualización del registro. |
Tabla referenceparameters
Esta tabla almacena parámetros de referencia, como los tipos de archivo u otros cualificadores.
| Campo | Tipo | Descripción |
|---|---|---|
id | bigint | Identificador único del registro (clave primaria). |
name | character varying(30) | El nombre de la unidad de medida. |
varname | character varying(30) | Nombre de variable abreviado de la unidad de medida. |
description | character varying(100) | Descripción de la unidad de medida. |
parent_id | integer | Referencia al parámetro padre (jerarquía). |
referencemodel_id | integer | Referencia al modelo del directorio. |
created_at | timestamp(6) without time zone | Momento en que se creó el registro. |
updated_at | timestamp(6) without time zone | Momento de la última actualización del registro. |
deleted_at | timestamp(6) without time zone | Momento en que se eliminó el registro (borrado lógico). |
Relaciones:
- La clave foránea
parent_idhace referencia a la misma tabla (referenceparameters.id), lo que permite construir jerarquías.
Tabla equipment
| Campo | Tipo | Descripción |
|---|---|---|
id | bigint | Identificador único del registro (clave primaria). |
equipment_type_id | bigint | Referencia al tipo de equipo. |
serial_number | character varying(25) | Número de serie del equipo. |
manufacture_date | timestamp(6) without time zone | La fecha de fabricación del equipo. |
installation_date | timestamp(6) without time zone | Fecha de instalación del equipo. |
program_version | character varying(100) | Versión del software del equipo. |
created_at | timestamp(6) without time zone | Momento en que se creó el registro. |
updated_at | timestamp(6) without time zone | Momento de la última actualización del registro. |
Tabla channels
Esta tabla almacena información sobre los canales de los equipos.
| Campo | Tipo | Descripción |
|---|---|---|
id | bigint | Identificador único del registro (clave primaria). |
equipment_type_id | bigint | Referencia al tipo de equipo (equipment_type.id). |
unit_id | bigint | Referencia a la unidad de medida (units.id). |
name | character varying(100) | Nombre del canal. |
varname | character varying(20) | Nombre de variable abreviado del canal. |
created_at | timestamp(6) without time zone | Momento en que se creó el registro. |
updated_at | timestamp(6) without time zone | Momento de la última actualización del registro. |
Relaciones:
- La clave foránea
equipment_type_idhace referencia a la tablaequipment_type. - La clave foránea
unit_idhace referencia a la tablaunits.
Tabla seances
Esta tabla almacena información sobre las sesiones de comunicación de los equipos.
| Campo | Tipo | Descripción |
|---|---|---|
id | bigint | Identificador único del registro (clave primaria). |
telemetry_id | bigint | Referencia a la telemetría (telemetry.id). |
event_time | integer | El momento del evento. |
evtid | smallint | El identificador del evento. |
trycnt | smallint | El número de intentos. |
tryfl | character varying(12) | El indicador del intento. |
state | smallint | Estado de la sesión. |
btm | integer | Carga de la batería. |
rssi | integer | Intensidad de la señal (si se utiliza). |
created_at | timestamp(6) without time zone | Momento en que se creó el registro. |
updated_at | timestamp(6) without time zone | Momento de la última actualización del registro. |
Estructura general y relaciones
Tabla principal — channel_data, que vincula los datos de los canales con los equipos, las sesiones y las unidades.
Tablas de relación:
units— unidades de medida.referenceparameters— tipos de archivo y otros cualificadores.
Tablas de equipos:
equipment— información sobre los equipos.channels— canales de los equipos.
Tabla de sesiones — seances, que almacena información sobre las sesiones de comunicación.
Ejemplo de uso:
- Los datos de los canales (
channel_data) provienen de los equipos (equipment) dentro de sesiones concretas (seances). - Cada canal (
channels) tiene su propia unidad de medida (units). - El tipo de archivo (
referenceparameters) determina cómo deben almacenarse o procesarse los datos.
Ventajas de un modelo unificado
Este modelo de datos proporciona la flexibilidad y la escalabilidad necesarias para almacenar y analizar datos procedentes de distintos equipos.
Algunas de las ventajas de un modelo de datos unificado son:
- Coherencia: Los datos tienen la misma estructura y semántica en todos los sistemas.
- Escalabilidad: Es fácil añadir nuevas fuentes de datos o tipos de equipos.
- Protección de datos: Mecanismos unificados de autenticación, autorización y cifrado.
- Análisis más sencillo: Los datos pueden analizarse con herramientas unificadas.
Abstracción de equipos
La abstracción de equipos es un principio clave del diseño del sistema que separa la lógica de tratamiento de los datos de las características físicas del equipo. Esto es especialmente importante en sistemas que utilizan dispositivos heterogéneos.
La abstracción de equipos significa que el sistema trata los datos a un nivel lógico independiente de los dispositivos físicos en los que se almacenan o procesan los datos. Esto se consigue mediante:
- Unificación de interfaces: Una única forma de acceder a los datos, independientemente del equipo.
- Ocultación de los detalles de implementación: La ubicación física de los datos, los protocolos de transmisión y otros aspectos técnicos quedan ocultos a las aplicaciones.
- Adaptadores: Conversión de los datos de un formato específico del equipo a un formato unificado.
Implementación de la abstracción de equipos
El siguiente ejemplo muestra cómo se implementa este enfoque en nuestro sistema. Sigue el recorrido de los datos desde un dispositivo IoT a través de un adaptador, hacia el modelo de datos unificado y hacia el exterior a través de la API.
Consideremos un dispositivo IoT que envía datos de consumo de gas. Los algoritmos implementados nos permiten:
- Recibir los datos del dispositivo a través de un adaptador.
- Convertirlos en una estructura
channel_data. - Almacenarlos en una base de datos.
- Proporcionar acceso a los datos a través de una API.
Para cada tipo de equipo se crean adaptadores que gestionan los protocolos específicos del dispositivo y convierten los datos a un formato unificado.
Ejemplo: transformación de datos
En un dispositivo IoT, los datos pueden llegar en formato JSON:
{
"device_id": "sensor-123",
"timestamp": 1739950861,
"value": 42.5
}El adaptador convierte los datos en una estructura channel_data:
INSERT INTO channel_data (equipment_id, seance_id, channel_id,
archive_type_id, value, event_time)
VALUES (1, 2, 3, 4, '42.5', 1739950861);Solicitud de datos:
GET /api/v1/channel_data?equipment_id=1&archive_type=daily&channel_id=3Respuesta:
[
{
"id": 123,
"equipment_id": 1,
"seance_id": 2,
"channel_id": 3,
"archive_type_id": 4,
"value": 42.5,
"event_time": 1739950861
}
]Ventajas de la abstracción de equipos
- Independencia del hardware: Las aplicaciones trabajan con los datos sin saber dónde residen físicamente.
- Flexibilidad: Permite añadir nuevos dispositivos o modificar los existentes con facilidad.
- Desarrollo más sencillo: Los desarrolladores trabajan con entidades abstractas sin preocuparse por los detalles del hardware.
- Escalabilidad: Los datos pueden almacenarse en distintos dispositivos, pero el sistema sigue funcionando de manera homogénea.
Normalización de datos
La normalización de datos es el proceso de organizar los datos de una base de datos de forma que se minimice la redundancia y se mejore la integridad de los datos. En el contexto de la capa de datos abstracta, la normalización desempeña un papel clave en la creación de un modelo de datos unificado y eficiente que pueda emplearse para tratar distintos tipos de equipos y fuentes de datos.
La normalización de datos divide los datos en tablas lógicas y establece relaciones entre ellas con el fin de:
- Eliminar los datos duplicados.
- Simplificar el mantenimiento y la actualización de los datos.
- Garantizar la integridad de los datos.
- Mejorar el rendimiento de las consultas.
El modelo de datos unificado del sistema está reducido a la (tercera) forma normal de Boyce-Codd en cuanto a valores atómicos (escalares). Algunas entidades del modelo de datos utilizan estructuras compuestas para optimizar el tratamiento de atributos infrecuentes y no estándar.
Ventajas de la normalización
- Elimina la redundancia: Los datos se almacenan en un único lugar, lo que reduce la redundancia.
- Coherencia de los datos: Se simplifica el mantenimiento de la coherencia de los datos.
- Flexibilidad: Es fácil introducir cambios en la estructura de los datos.
- Rendimiento: Mejora el rendimiento de las consultas (en la mayoría de los casos).
La normalización en el contexto de la capa de datos abstracta
La normalización de datos es un paso importante en el diseño de la capa de datos abstracta.
Permite:
- Crear un modelo de datos unificado que pueda emplearse para tratar distintos tipos de equipos.
- Eliminar la redundancia y la duplicación de datos.
- Garantizar la integridad y la coherencia de los datos, independientemente de su origen.
- Simplificar la integración de nuevos dispositivos y sistemas.
Temas relacionados
¿Te resultó útil esta página?
¡Gracias por tus comentarios!