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
Referencias de Documentación
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.
Referencias de Documentació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
Referencias de Documentación
Resumen de Preparación para el Examen
Conceptos Críticos a Dominar:
- Selección de Patrón de Acceso: Comprender cuándo usar acceso a objeto vs. SQL vs. MDX
- Métodos API CRUD: Memorizar %Save(), %OpenId(), %DeleteId(), y sus parámetros
- Semántica de Transacción: Saber que %Save() es atómico y revierte en fallo
- Valores de Concurrencia: Comprender niveles 0-4 y diferencias de comportamiento de bloqueo
- Mecanismo Swizzling: Reconocer carga automática de objetos relacionados e implicaciones de rendimiento
- Optimización de Consulta: Usar EXPLAIN/SHOW PLAN para predecir rendimiento de consulta
- 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