Saltar al contenido principal

Gestión y Almacenamiento de Datos

El sistema STATUS emplea una estrategia de persistencia políglota, utilizando múltiples tecnologías de bases de datos optimizadas para diferentes tipos de datos y patrones de acceso. Esta sección le guiará a través de entender cómo se gestionan y almacenan los datos en STATUS.

Visión General​

STATUS usa una arquitectura de múltiples bases de datos para optimizar rendimiento, escalabilidad y flexibilidad:

  • PostgreSQL: Para datos estructurados y relacionales con garantías ACID
  • MongoDB: Para datos basados en documentos flexibles con esquemas evolutivos
  • Redis: Para caché de alta velocidad y datos en tiempo real

Arquitectura de Datos Figura 1: Arquitectura de persistencia políglota de STATUS.

⚠️

Este enfoque políglota permite que STATUS aproveche las fuerzas de cada tecnología de base de datos mientras mantiene la consistencia e integridad de los datos.

PostgreSQL​

PostgreSQL se usa para datos estructurados y relacionales que requieren consistencia fuerte y capacidades de consulta complejas.

Características Principales​

  • Modelo de Datos Relacionales: Datos estructurados con relaciones
  • Transacciones ACID: Fuertes garantías de consistencia de datos
  • Consultas Complejas: SQL avanzado con joins, agregados y funciones de ventana
  • Integridad de Datos: Claves foráneas, restricciones y triggers
  • Indexación: Potentes opciones de indexación para optimización de consultas

Casos de Uso​

PostgreSQL almacena los siguientes tipos de datos:

  • Usuarios: Cuentas de usuario, perfiles y datos de autenticación
  • Catálogos: Definiciones de catálogos y metadatos
  • Controles: Definiciones de controles y configuraciones
  • Ámbitos: Definiciones de ámbito y mapeos
  • Secretos: Información sensible cifrada
  • Cuentas de Servicio: Configuraciones de cuentas de servicio

Esquema PostgreSQL Figura 2: Esquema de base de datos PostgreSQL.

Ejemplo de Estructura de Datos​

Una estructura típica de tabla de PostgreSQL para controles:

CREATE TABLE controls (
id UUID PRIMARY KEY,
catalog_id UUID NOT NULL REFERENCES catalogs(id),
name VARCHAR(255) NOT NULL,
description TEXT,
period VARCHAR(50) NOT NULL,
start_date DATE NOT NULL,
end_date DATE,
mashup_id VARCHAR(255),
parameters JSONB,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
ℹ️

PostgreSQL se elige por su fiabilidad, características avanzadas y fuertes garantías de consistencia. Es ideal para datos que requieren validación estricta de esquema y relaciones complejas.

MongoDB​

MongoDB se usa para datos basados en documentos flexibles que se benefician de esquemas dinámicos y escalabilidad horizontal.

Características Principales​

  • Almacenamiento de Documentos: Documentos tipo JSON con esquemas flexibles
  • Esquema Dinámico: Fácil de evolucionar la estructura de datos a lo largo del tiempo
  • Escalabilidad Horizontal: Escalar a través de múltiples servidores
  • Consultas Ricas: Potente marco de consultas y agregación
  • Indexación Flexible: Múltiples opciones de indexación incluyendo geoespaciales

Casos de Uso​

MongoDB almacena los siguientes tipos de datos:

  • Cálculos: Resultados de cálculo con estructuras de evidencia variables
  • Puntos de Garantía: Puntos de garantía con metadatos diversos
  • Mashups: Definiciones de flujos de Node-RED y configuraciones
  • Fuentes de Datos: Configuraciones de fuentes de datos con ajustes específicos del proveedor
  • Enlazadores: Configuraciones y resultados de vinculación de datos
  • Carpetas: Estructuras jerárquicas de carpetas

Colecciones MongoDB Figura 3: Colecciones de MongoDB y sus relaciones.

Ejemplo de Estructura de Documento​

Un documento típico de MongoDB para un cálculo:

{
"_id": "60bf2620-1075-4d00-aead-7e57fe811469",
"computationGroup": "6956b9d1-8b7d-4422-a7d7-cc4f8dba523f",
"value": true,
"scope": {
"country": "Spain",
"city": "Seville"
},
"evidences": [
{
"id": "e1",
"key": "procedure_formally_documented",
"value": true,
"result": true,
"from": "2025-01-01T08:00:00",
"to": "2025-01-01T17:30:00"
}
],
"period": {
"from": "2025-09-18T22:00:00.000Z",
"to": "2025-09-21T22:00:00.000Z"
},
"controlId": "1234",
"createdAt": "2025-01-01T10:00:00.000Z"
}
ℹ️

MongoDB es ideal para datos con estructuras variables que pueden cambiar a lo largo del tiempo. Su esquema flexible permite evolucionar su modelo de datos sin migraciones.

Redis​

Redis se usa como almacén de datos en memoria de alto rendimiento para caché, gestión de sesiones y características en tiempo real.

Características Principales​

  • Almacenamiento en Memoria: Acceso a datos extremadamente rápido
  • Estructuras de Datos: Cadenas, listas, conjuntos, conjuntos ordenados, hashes, flujos
  • Pub/Sub: Mensajería en tiempo real y notificaciones
  • Expiración: Expiración automática de claves
  • Persistencia: Persistencia opcional en disco para durabilidad

Casos de Uso​

Redis se usa para lo siguiente:

  • Tokens de Autenticación: Tokens de acceso y refresco JWT
  • Datos de Sesión: Información de sesión de usuario
  • Caché: Datos de acceso frecuente para reducir carga de bases de datos
  • Limitación de Tasa: Limitación de tasa y estrangulación de API
  • Actualizaciones en Tiempo Real: Pub/sub para notificaciones en tiempo real
  • Datos Temporales: Datos de corta duración con expiración automática

Uso de Redis Figura 4: Patrones de uso de Redis en STATUS.

Ejemplos de Estructura de Datos​

Patrones comunes de Redis en STATUS:

# Token de autenticación con expiración
SET token:abc123 "user_data" EX 7200

# Datos de sesión de usuario
HSET session:xyz456 user_id "123" created_at "2025-01-01"

# Caché de resultados de cálculo
SET cache:computation:789 "result_data" EX 3600

# Contador de limitación de tasa
INCR rate_limit:user:123
EXPIRE rate_limit:user:123 60
ℹ️

Redis proporciona tiempos de respuesta de sub-milisegundos, haciéndolo ideal para operaciones críticas de rendimiento. Sin embargo, los datos en Redis no deben considerarse como fuente de verdad - es una capa de caché.

Flujo de Datos​

STATUS orquesta datos a través de estas soluciones de almacenamiento con una clara separación de responsabilidades.

Ruta de Escritura​

Cuando se escriben datos en STATUS:

  1. Validación de Solicitud: Los datos se validan antes de escribir
  2. Selección de Base de Datos: Se elige la base de datos apropiada basada en el tipo de datos
  3. Transacción: Los datos se escriben en una transacción (para PostgreSQL)
  4. Actualización de Caché: El caché de Redis se actualiza si es aplicable
  5. Confirmación: La escrita se confirma al cliente

Ruta de Escritura Figura 5: Flujo de escrita de datos.

Ruta de Lectura​

Cuando se leen datos de STATUS:

  1. Verificación de Caché: Redis se verifica primero para datos en caché
  2. Consulta a Base de Datos: La base de datos apropiada se consulta si hay fallo de caché
  3. Población de Caché: El resultado se almacena en Redis para solicitudes futuras
  4. Respuesta: Los datos se devuelven al cliente

Ruta de Lectura Figura 6: Ruta de lectura de datos con caché.

⚠️

Esta estrategia de caché mejora significativamente el rendimiento para datos de acceso frecuente, reduciendo la carga de bases de datos y mejorando los tiempos de respuesta.

Sincronización​

Los cambios se propagan a través de sistemas según sea necesario:

  • Basado en Eventos: Los cambios desencadenan eventos que actualizan sistemas dependientes
  • Consistencia Eventual: Algunos datos son eventualmente consistentes para rendimiento
  • Consistencia Fuerte: Los datos críticos mantienen consistencia fuerte
  • Resolución de Conflictos: Estrategias para manejar actualizaciones conflictivas

Respaldo y Recuperación​

Cada base de datos tiene su propia estrategia de respaldo y recuperación:

  • PostgreSQL: Respaldos regulares con recuperación a punto en el tiempo
  • MongoDB: Instantáneas periódicas y respaldos de oplog
  • Redis: Persistencia opcional e instantáneas periódicas

Fuentes de Datos​

Las fuentes de datos son configuraciones que permiten que STATUS se conecte a sistemas de datos externos y recupere evidencia para cálculos de cumplimiento.

Tipos de Fuentes de Datos Soportados​

STATUS soporta varios tipos de fuentes de datos:

  • APIs REST: Endpoints HTTP/REST para datos JSON
  • Bases de Datos: Bases de datos SQL y NoSQL
  • Sistemas de Archivos: Sistemas de archivos locales y remotos
  • Servicios de Nube: Servicios de AWS, GCP, Azure
  • Proveedores Personalizados: Implementaciones personalizados a través de extensiones

Tipos de Fuente de Datos Figura 7: Tipos de fuentes de datos soportados.

Crear una Fuente de Datos​

Para crear una nueva fuente de datos:

  1. Navegue a la sección Fuentes de Datos
  2. Haga clic en el botón Crear Fuente de Datos
  3. Seleccione el tipo de fuente de datos
  4. Configure los detalles de conexión:
    • Nombre: Nombre descriptivo para la fuente de datos
    • Tipo: Tipo de fuente de datos (API REST, Base de Datos, etc.)
    • Parámetros de Conexión: Host, puerto, credenciales, etc.
    • Autenticación: Método de autenticación y credenciales
    • Configuración de Consulta: Detalles de consulta o endpoint de API
  5. Haga clic en Probar Conexión para verificar la configuración
  6. Haga clic en Guardar para crear la fuente de datos

Crear Fuente de Datos Figura 8: Formulario de creación de fuente de datos.

ℹ️

Las credenciales sensibles como contraseñas y claves API se cifran antes del almacenamiento. Use gestión de secretos para seguridad adicional.

Gestionar Fuentes de Datos​

Una vez creadas, puede:

  • Editar Fuente de Datos: Actualizar parámetros de conexión
  • Eliminar Fuente de Datos: Eliminar fuente de datos (no se puede usar en controles)
  • Probar Conexión: Verificar que la fuente de datos sea accesible
  • Ver Uso: Ver qué controles usan la fuente de datos
  • Monitorear Estado: Verificar la salud y disponibilidad de la fuente de datos

Vinculación de Datos​

La vinculación de datos permite correlacionar datos de diferentes fuentes para crear evidencia integral para cálculos de cumplimiento.

Conceptos de Vinculación​

La vinculación de datos funciona mediante:

  1. Definir Fuentes: Identificar fuentes de datos a vincular
  2. Mapear Claves: Definir claves para correlación
  3. Transformar Datos: Aplicar transformaciones según sea necesario
  4. Fusionar Datos: Combinar datos en una vista unificada

Vinculación de Datos Figura 9: Concepto de vinculación de datos.

Crear un Enlazador​

Para crear un nuevo enlazador de datos:

  1. Navegue a la sección Fuentes de Datos
  2. Haga clic en la pestaña Enlazadores
  3. Haga clic en el botón Crear Enlazador
  4. Configure el enlazador:
    • Nombre: Nombre descriptivo para el enlazador
    • Fuentes de Datos de Origen: Seleccione fuentes de datos a vincular
    • Claves de Vínculo: Defina claves para correlación
    • Transformaciones: Aplique transformaciones de datos
    • Esquema de Salida: Defina la estructura de salida
  5. Haga clic en Probar Enlazador para verificar la configuración
  6. Haga clic en Guardar para crear el enlazador

Crear Enlazador Figura 10: Formulario de creación de enlazador.

Consideraciones de Rendimiento​

ℹ️

La gestión de datos apropiada es crucial para el rendimiento del sistema. Siga estas guías para un rendimiento óptimo.

Consejos de Optimización​

  1. Indexación: Asegúrese de índices apropiados en campos consultados frecuientemente
  2. Caché: Aproveche el caché de Redis para datos calientes
  3. Optimización de Consultas: Optimice consultas SQL y MongoDB
  4. Agrupación de Conexiones: Use agrupación de conexiones para bases de datos
  5. Operaciones por Lotes: Use operaciones por lotes para datos masivos
  6. Paginación: Implemente paginación para conjuntos grandes de datos

Monitoreo​

Monitoree el rendimiento de gestión de datos mediante:

  • Rastrear tiempos de ejecución de consultas
  • Monitorear tasas de aciertos de caché
  • Verificar el uso de agrupación de conexiones de bases de datos
  • Revisar el uso de disco E/S y memoria
  • Analizar registros de consultas lentas
⚠️

Para problemas de rendimiento, revise la sección de Monitoreo o contacte soporte para asistencia.

Mejores Prácticas​

Siga estas mejores prácticas para una gestión de datos eficaz:

  1. Base de Datos Apropiada: Use la base de datos correcta para cada tipo de datos
  2. Estrategia de Indexación: Cree índices en campos consultados frecuientemente
  3. Gestión de Caché: Use caché estratégicamente para datos calientes
  4. Seguridad de Conexiones: Use conexiones seguras (TLS) para bases de datos
  5. Estrategia de Respaldo: Implemente respaldos regulares para todas las bases de datos
  6. Retención de Datos: Defina políticas de retención para datos antiguos
  7. Optimización de Consultas: Optimice consultas antes de ponerlas en producción
  8. Monitoreo: Configure monitoreo para la salud y rendimiento de bases de datos
ℹ️

La gestión de datos eficaz es crítica para la fiabilidad y rendimiento del sistema. Invierta tiempo en entender sus patrones de acceso de datos y optimizar adecuadamente.