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_number y channel_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.

CampoTipoDescripción
idbigintIdentificador único del registro (clave primaria).
equipment_idbigintReferencia al equipo (equipment.id).
seance_idbigintReferencia a la sesión (seances.id).
channel_idbigintReferencia al canal (channels.id).
unit_idbigintReferencia a la unidad de medida (units.id).
archive_type_idintegerReferencia al tipo de archivo (referenceparameters.id).
event_timeintegerEl momento del evento (p. ej., marca de tiempo).
valuecharacter varying(100)El valor recibido desde el canal.
created_attimestamp(6) without time zoneMomento en que se creó el registro.
updated_attimestamp(6) without time zoneMomento de la última actualización del registro.

Relaciones:

  • La clave foránea unit_id hace referencia a la tabla units.
  • La clave foránea archive_type_id hace referencia a la tabla referenceparameters.
  • La clave foránea equipment_id hace referencia a la tabla equipment.
  • La clave foránea channel_id hace referencia a la tabla channels.
  • La clave foránea seance_id hace referencia a la tabla seances.

Tabla units

Esta tabla almacena las unidades de medida utilizadas para los datos de los canales.

CampoTipoDescripción
idbigintIdentificador único del registro (clave primaria).
namecharacter varying(30)Nombre de la unidad de medida.
varnamecharacter varying(30)Nombre de variable abreviado de la unidad de medida.
descriptioncharacter varying(100)Descripción de la unidad de medida.
conversion_factordouble precisionFactor de conversión de la unidad de medida.
roundingsmallintNúmero de decimales a los que redondear.
synonymscharacter varying[]Matriz de sinónimos de la unidad de medida.
created_attimestamp(6) without time zoneMomento en que se creó el registro.
updated_attimestamp(6) without time zoneMomento de la última actualización del registro.

Tabla referenceparameters

Esta tabla almacena parámetros de referencia, como los tipos de archivo u otros cualificadores.

CampoTipoDescripción
idbigintIdentificador único del registro (clave primaria).
namecharacter varying(30)El nombre de la unidad de medida.
varnamecharacter varying(30)Nombre de variable abreviado de la unidad de medida.
descriptioncharacter varying(100)Descripción de la unidad de medida.
parent_idintegerReferencia al parámetro padre (jerarquía).
referencemodel_idintegerReferencia al modelo del directorio.
created_attimestamp(6) without time zoneMomento en que se creó el registro.
updated_attimestamp(6) without time zoneMomento de la última actualización del registro.
deleted_attimestamp(6) without time zoneMomento en que se eliminó el registro (borrado lógico).

Relaciones:

  • La clave foránea parent_id hace referencia a la misma tabla (referenceparameters.id), lo que permite construir jerarquías.

Tabla equipment

CampoTipoDescripción
idbigintIdentificador único del registro (clave primaria).
equipment_type_idbigintReferencia al tipo de equipo.
serial_numbercharacter varying(25)Número de serie del equipo.
manufacture_datetimestamp(6) without time zoneLa fecha de fabricación del equipo.
installation_datetimestamp(6) without time zoneFecha de instalación del equipo.
program_versioncharacter varying(100)Versión del software del equipo.
created_attimestamp(6) without time zoneMomento en que se creó el registro.
updated_attimestamp(6) without time zoneMomento de la última actualización del registro.

Tabla channels

Esta tabla almacena información sobre los canales de los equipos.

CampoTipoDescripción
idbigintIdentificador único del registro (clave primaria).
equipment_type_idbigintReferencia al tipo de equipo (equipment_type.id).
unit_idbigintReferencia a la unidad de medida (units.id).
namecharacter varying(100)Nombre del canal.
varnamecharacter varying(20)Nombre de variable abreviado del canal.
created_attimestamp(6) without time zoneMomento en que se creó el registro.
updated_attimestamp(6) without time zoneMomento de la última actualización del registro.

Relaciones:

  • La clave foránea equipment_type_id hace referencia a la tabla equipment_type.
  • La clave foránea unit_id hace referencia a la tabla units.

Tabla seances

Esta tabla almacena información sobre las sesiones de comunicación de los equipos.

CampoTipoDescripción
idbigintIdentificador único del registro (clave primaria).
telemetry_idbigintReferencia a la telemetría (telemetry.id).
event_timeintegerEl momento del evento.
evtidsmallintEl identificador del evento.
trycntsmallintEl número de intentos.
tryflcharacter varying(12)El indicador del intento.
statesmallintEstado de la sesión.
btmintegerCarga de la batería.
rssiintegerIntensidad de la señal (si se utiliza).
created_attimestamp(6) without time zoneMomento en que se creó el registro.
updated_attimestamp(6) without time zoneMomento de la última actualización del registro.

Estructura general y relaciones

Tabla principalchannel_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 sesionesseances, 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:

example.json
{
  "device_id": "sensor-123",
  "timestamp": 1739950861,
  "value": 42.5
}

El adaptador convierte los datos en una estructura channel_data:

example.sql
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:

Request example
GET /api/v1/channel_data?equipment_id=1&archive_type=daily&channel_id=3

Respuesta:

Response example
[
  {
    "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

Última actualización el

¿Te resultó útil esta página?