T1.3: Plans Data Lifecycle

Knowledge Review - InterSystems IRIS Development Professional

1. Evalúa estrategias de almacenamiento y recuperación (MDX, SQL, acceso a objeto)

Puntos Clave

  • Acceso a Objeto: Manipulación de objeto directa vía %OpenId(), %Save(), y métodos de propiedad
  • Acceso SQL: Consultas relacionales con embedded SQL o dynamic SQL para operaciones basadas en conjunto
  • Acceso MDX: Consultas multidimensionales para tablas dinámicas OLAP/Business Intelligence
  • Selección de Estrategia: Elegir basado en caso de uso - transaccional vs. analítico vs. navegacional
  • Compensaciones de Rendimiento: Acceso a objeto para registros únicos, SQL para conjuntos, MDX para agregaciones
  • Enfoques Híbridos: Combinar métodos dentro de aplicaciones para rendimiento óptimo

Notas Detalladas

Resumen

InterSystems IRIS proporciona tres patrones de acceso a datos primarios, cada uno optimizado para diferentes casos de uso.

Acceso a Objeto

  • Modelo de Programación: Más natural para aplicaciones transaccionales
  • Operaciones: Usar %OpenId() para cargar objetos de disco a memoria, modificar propiedades vía sintaxis punto, persistir cambios con %Save()
  • Swizzling: Maneja automáticamente carga perezosa de objetos referenciados
  • Integridad Referencial: Mantiene integridad a través de objetos relacionados
  • Ideal Para: Operaciones de registro único, grafos de objeto complejos, lógica de negocio encapsulada en métodos de clase

Acceso SQL

  • Capacidades: Operaciones basadas en conjunto optimizadas para consultar, filtrar, y agregar datos a través de múltiples registros
  • Opciones de Implementación: Embedded SQL (&sql()) y dynamic SQL (%SQL.Statement)
  • Compatibilidad: Acceso relacional basado en estándares a los mismos objetos persistentes accesibles vía métodos de objeto
  • Optimización de Consulta: El optimizador de consulta SQL automáticamente selecciona índices y genera planes de ejecución
  • Ideal Para: Reportería, actualizaciones batch, análisis de datos, e integración con herramientas externas vía JDBC/ODBC

Acceso MDX

  • Propósito: Lenguaje de consulta especializado para bases de datos OLAP usado en aplicaciones Business Intelligence
  • Operación: Las consultas operan contra cubos definidos en modelos BI, retornando conjuntos de resultados mostrados como tablas dinámicas
  • Capacidades: Consultas analíticas complejas involucrando dimensiones, jerarquías, niveles, y medidas, con agregación automática
  • Diferencia Clave: Mientras acceso a objeto y SQL consultan registros individuales, MDX agrega valores a través de grupos y los representa con valores únicos computados

Elección de la Estrategia Correcta

  • Sistemas Transaccionales: Favorecer acceso a objeto para tipado fuerte y encapsulación de lógica de negocio
  • Reportería y Analítica: Favorecer SQL para operaciones basadas en conjunto y sintaxis de consulta estándar
  • Business Intelligence: Requieren MDX para análisis multidimensional
  • Aplicaciones de Alto Rendimiento: A menudo combinan los tres enfoques para rendimiento óptimo

2. Gestiona operaciones CRUD efectivamente

Puntos Clave

  • Create: Usar %New() para instanciar, establecer propiedades, llamar %Save() dentro de transacciones
  • Read: %OpenId() para objetos únicos, SQL SELECT para conjuntos, swizzling para objetos relacionados
  • Update: Modificar propiedades en objetos abiertos, %Save() confirma cambios atómicamente
  • Delete: %DeleteId() para objetos únicos, %DeleteExtent() para extents completos de clase
  • Control de Transacción: Todas las operaciones CRUD soportan TSTART/TCOMMIT para consistencia de datos
  • Ganchos Callback: %OnBeforeSave(), %OnAfterSave(), %OnDelete() para lógica de negocio

Notas Detalladas

Resumen

La gestión efectiva de operación CRUD en InterSystems IRIS requiere comprender la API de persistencia y semántica de transacción.

Operaciones Create

  • Proceso: Instanciar con %New(), establecer propiedades vía sintaxis punto, llamar %Save() para persistir
  • Valor de Retorno: %Save() retorna un valor %Status indicando éxito o fallo
  • Causas de Fallo: Valores de propiedad inválidos, restricciones de unicidad violadas, o validación fallida
  • Asignación de Object ID: El sistema automáticamente asigna un Object ID usando $Increment por defecto, o usa ID proporcionado por usuario basado en propiedades de índice IDKEY
  • Transacción Atómica: %Save() automáticamente guarda todos los objetos embebidos modificados, colecciones, streams, objetos referenciados, y relaciones, revirtiendo completamente si cualquier componente falla

Operaciones Read

  • Método Primario: %OpenId(id, concurrency, .sc) retorna un OREF si es exitoso o cadena nula si el objeto no existe
  • Información de Error: El parámetro sc recibe un valor %Status para información de error detallada
  • Swizzling: Los objetos referenciados se abren automáticamente (carga perezosa) cuando se acceden por primera vez vía sintaxis punto
  • Control Manual: Usar métodos propertyGetSwizzled() para controlar swizzling
  • Lectura Masiva: Las sentencias SQL SELECT ofrecen rendimiento superior a través de operaciones basadas en conjunto
  • Verificación de Existencia: Usar %ExistsId() o consultas SQL SELECT %ID

Operaciones Update

  • Proceso: Abrir con %OpenId(), modificar propiedades, llamar %Save() para confirmar
  • Atomicidad: Las actualizaciones son atómicas al usar configuraciones de concurrencia apropiadas (concurrency > 0)
  • Ver Valores Originales: Usar propertyGetStored(id) para consultar base de datos directamente sin afectar objeto en memoria
  • Actualizaciones Masivas: Sentencias SQL UPDATE para modificaciones basadas en conjunto a través de múltiples registros

Operaciones Delete

  • Método Primario: %DeleteId(id, concurrency) remueve objetos individuales incluyendo datos de stream asociados
  • Callbacks:
  • %OnDelete(): Llamado antes de eliminación para lógica de validación
  • %OnAfterDelete(): Llamado después de eliminación exitosa para limpieza
  • %OnDeleteFinally(): Ejecuta después de finalización de transacción
  • Eliminación Masiva: %DeleteExtent() itera a través del extent entero invocando %Delete() en cada instancia
  • Nota de Memoria: %DeleteId() no afecta objetos ya cargados en memoria

Todas las operaciones CRUD se integran con control de transacción TSTART/TCOMMIT para consistencia de multi-operación.

3. Predice rendimiento de aplicación basado en volúmenes de datos, conteos de usuario, y procesos concurrentes

Puntos Clave

  • Impacto de Volumen de Datos: Índices críticos para tablas grandes, planes de consulta varían con conteos de fila
  • Niveles de Concurrencia: Valores 0-4 controlan comportamiento de bloqueo y garantías de operación atómica
  • Escalamiento de Bloqueo: Múltiples usuarios concurrentes requieren configuraciones de concurrencia apropiadas
  • Optimización de Consulta: Usar EXPLAIN/SHOW PLAN para analizar planes de ejecución y costos
  • Métricas de Rendimiento: Monitorear tiempo de preparación, tiempo de ejecución, globals, comandos, I/O de disco
  • Patrones de Escalabilidad: Diseñar para escalamiento horizontal con límites de transacción apropiados

Notas Detalladas

Resumen

Predecir rendimiento de aplicación requiere analizar la interacción entre volúmenes de datos, conteos de usuario concurrente, y contención de proceso.

Impacto de Volumen de Datos

  • Tablas Pequeñas: Cientos de filas pueden funcionar adecuadamente con escaneos completos de tabla
  • Tablas Grandes: Millones de filas requieren índices apropiados sobre columnas consultadas frecuentemente
  • Optimización de Consulta: El optimizador de consulta SQL genera planes de ejecución basados en estadísticas de tabla
  • Análisis de Plan: Usar comandos EXPLAIN y SHOW PLAN para revisar planes e identificar índices faltantes u órdenes de join subóptimos
  • Información de Plan de Consulta: Mostrar valores de costo, uso de índice, y estrategia de ejecución para predicciones de rendimiento

Niveles de Concurrencia

InterSystems IRIS proporciona cinco niveles de concurrencia (0-4) que determinan comportamiento de bloqueo:

  • Concurrency 0: Sin bloqueo; rendimiento máximo pero sin garantías de escritura atómica (solo lectura o usuario único)
  • Concurrency 1: Lectura atómica (predeterminado); adquiere y libera bloqueos compartidos según necesidad con retención mínima de bloqueo
  • Concurrency 2: Bloqueos compartidos; siempre adquiere bloqueos compartidos al abrir objetos, previniendo modificaciones por otros
  • Concurrency 3: Bloqueos compartidos/retenidos; retiene bloqueos después de guardar nuevos objetos para consistencia
  • Concurrency 4: Bloqueos exclusivos/retenidos; aislamiento máximo, previniendo acceso concurrente

Establecer concurrencia vía argumentos de método, parámetro de clase DEFAULTCONCURRENCY, o $system.OBJ.SetConcurrencyMode().

Gestión de Contención de Bloqueo

  • Diseño de Transacción: Transacciones cortas con alcance estrecho reducen contención
  • Causa de Cuello de Botella: Transacciones de larga ejecución manteniendo bloqueos sobre objetos accedidos frecuentemente
  • Conciencia de Swizzling: Recorrer relaciones de objeto puede disparar adquisiciones de bloqueo en cascada
  • Estrategias de Alta Concurrencia: Patrones de bloqueo optimista, mecanismos de cola, o partición de datos

Métricas de Rendimiento

El SQL Shell y clases %SYSTEM.SQL exponen métricas clave:

  • Prepare Time: Compilación de sentencia y búsqueda de caché
  • Execute Time: Duración de ejecución transcurrida
  • Global References: Accesos de bloque de base de datos
  • Commands: Comandos ObjectScript ejecutados
  • Disk I/O Operations: Conteo de acceso a disco físico

Planificación de Capacidad

  • Extrapolar de métricas de muestra (ej., 100ms para 1,000 filas) para predecir comportamiento a escala
  • Conducir pruebas de carga con volúmenes de datos similares a producción y conteos de usuario concurrente
  • Monitorear métricas de producción para optimización continua y decisiones de escalamiento proactivas

Resumen de Preparación para el Examen

Conceptos Críticos a Dominar:

  1. Selección de Patrón de Acceso: Comprender cuándo usar acceso a objeto vs. SQL vs. MDX
  2. Métodos API CRUD: Memorizar %Save(), %OpenId(), %DeleteId(), y sus parámetros
  3. Semántica de Transacción: Saber que %Save() es atómico y revierte en fallo
  4. Valores de Concurrencia: Comprender niveles 0-4 y diferencias de comportamiento de bloqueo
  5. Mecanismo Swizzling: Reconocer carga automática de objetos relacionados e implicaciones de rendimiento
  6. Optimización de Consulta: Usar EXPLAIN/SHOW PLAN para predecir rendimiento de consulta
  7. Métricas de Rendimiento: Interpretar tiempo de preparación/ejecución, globals, comandos, métricas de disco

Escenarios Comunes de Examen:

  • Seleccionar método de acceso apropiado para reportería vs. operaciones transaccionales
  • Diseñar operaciones CRUD con manejo de error apropiado y transacciones
  • Elegir niveles de concurrencia para aplicaciones de usuario único vs. multi-usuario
  • Predecir impacto de rendimiento de incrementar volúmenes de datos en consultas sin índice
  • Analizar planes de consulta para identificar cuellos de botella de rendimiento
  • Comprender contención de bloqueo en escenarios de actualización concurrente
  • Reconocer cuándo swizzling impacta rendimiento de aplicación

Recomendaciones de Práctica Práctica:

  • Implementar operaciones CRUD usando métodos de objeto con manejo de error apropiado
  • Escribir operaciones equivalentes usando embedded SQL y comparar rendimiento
  • Crear consultas MDX para cubos Business Intelligence
  • Experimentar con diferentes valores de concurrencia y observar comportamiento de bloqueo
  • Usar EXPLAIN para analizar planes de consulta para consultas indexadas vs. no indexadas
  • Monitorear métricas de rendimiento SQL Shell durante ejecución de consulta
  • Probar actualizaciones concurrentes con múltiples sesiones de terminal
  • Perfilar rendimiento de aplicación con volúmenes de datos variantes (1K, 10K, 100K filas)
  • Practicar lectura e interpretación de planes de ejecución de consulta
  • Implementar métodos callback (%OnBeforeSave, %OnDelete) para lógica de negocio

Secciones de Documentación Clave para Revisar:

  • GOBJ.pdf Capítulo 15: Referencia completa de API de persistencia
  • GSQL.pdf Capítulo 8: Patrones de programación Dynamic SQL
  • GSQL.pdf Capítulo 9: Comandos SQL Shell y análisis de rendimiento
  • D2GMDX.pdf Capítulo 1-2: Fundamentos MDX y sintaxis de consulta
  • GOBJ.pdf Capítulo 16: Opciones de concurrencia y estrategias de bloqueo

Report an Issue