1. Diferencia entre PPGs, variables, globals temporales y globals
Puntos Clave
- Variables locales: Alcance del proceso, se pierden cuando el proceso termina o se ejecuta QUIT desde el nivel de la pila
- Globals Privados de Proceso (PPGs): Sintaxis `^||name`, visibles solo para el proceso propietario, se limpian automáticamente al terminar el proceso
- Globals temporales: Globals `^CacheTempXxx` o `^IRIS.Temp*` almacenados en la base de datos IRISTEMP, visibles para todos los procesos, se borran al reiniciar el sistema
- Globals: Sintaxis `^name`, datos persistentes almacenados en bases de datos, registrados en el journal, replicados, sobreviven a reinicios
- Distinción clave: El journaling y la replicación solo se aplican a globals persistentes en bases de datos con journal habilitado
- Rendimiento: Los PPGs y globals temporales evitan la sobrecarga del journaling; las variables locales son las más rápidas (solo en memoria)
Notas Detalladas
Descripción general
InterSystems IRIS proporciona cuatro categorías distintas de almacenamiento de datos, cada una con diferentes características de alcance, tiempo de vida y visibilidad. Elegir el medio de almacenamiento correcto es crítico para el rendimiento, la corrección y la integridad de datos de la aplicación. El examen espera que sepa cuándo usar cada tipo y comprenda sus diferencias de comportamiento.
Variables locales
Las variables locales existen solo en la memoria del proceso actual (tabla de símbolos). Son la forma más rápida de almacenamiento porque nunca tocan el disco. Las variables creadas con SET en una rutina o método son locales por defecto. Persisten durante la vida del proceso a menos que se eliminen explícitamente o se delimiten con el comando NEW. Cuando se usa NEW, la variable se apila y se restaura cuando el nivel de ejecución retorna. Las variables locales son ideales para cálculos intermedios, contadores de bucle y datos temporales que no necesitan sobrevivir más allá del contexto de ejecución actual.
SET name = "John"
SET count = 42
// Estos existen solo en la tabla de símbolos de este proceso
KILL name // eliminar explícitamente
Globals Privados de Proceso (PPGs)
Los Globals Privados de Proceso usan el prefijo ^|| (dos barras verticales) y se comportan como globals en términos de estructura de subíndices, pero son visibles solo para el proceso que los creó. Se almacenan en un área privada del proceso y se limpian automáticamente cuando el proceso termina. Los PPGs no se registran en el journal, no se replican y no son visibles para otros procesos. Son ideales para almacenar grandes conjuntos de resultados intermedios que exceden lo que las variables locales pueden manejar cómodamente, particularmente cuando se necesitan estructuras de arrays con subíndices.
// Global Privado de Proceso - solo este proceso puede verlo
SET ^||tempResults(1) = "First result"
SET ^||tempResults(2) = "Second result"
// Se limpia automáticamente cuando el proceso termina
// También se puede usar la sintaxis extendida con una referencia de base de datos
SET ^|"^"|myPPG(1) = "value"
Los PPGs son particularmente útiles en el procesamiento de consultas SQL, operaciones de ordenamiento personalizadas y cualquier escenario que requiera grandes estructuras de datos temporales que no deberían interferir con otros procesos ni persistir más allá de la sesión actual.
Globals temporales
Los globals temporales se almacenan en la base de datos IRISTEMP y usan convenciones de nombres como ^CacheTempXxxxx o ^IRIS.Temp.*. A diferencia de los PPGs, los globals temporales son visibles para todos los procesos, haciéndolos adecuados para la comunicación entre procesos de datos transitorios. No se registran en el journal y se borran cuando el sistema se reinicia. La base de datos IRISTEMP está específicamente optimizada para almacenamiento temporal sin sobrecarga de journaling.
// Global temporal - visible para todos los procesos, se borra al reiniciar
SET ^CacheTempMyApp($JOB, "key") = "shared temp value"
// Patrón común: usar $JOB para particionar por proceso
SET ^IRIS.Temp.MyApp($JOB, 1) = "process-specific temp data"
// Limpiar cuando termine (buena práctica aunque el reinicio los borra)
KILL ^CacheTempMyApp($JOB)
Debido a que los globals temporales son visibles para todos los procesos, la práctica común es incluir $JOB (ID de proceso) como un subíndice de nivel superior para prevenir colisiones entre procesos.
Globals persistentes
Los globals persistentes (globals regulares con prefijo ^) son el mecanismo fundamental de almacenamiento en InterSystems IRIS. Se almacenan en bases de datos en disco, sobreviven a reinicios del sistema y pueden registrarse en el journal y replicarse. Cuando se almacenan en una base de datos con journal habilitado, todos los cambios se registran en el journal para propósitos de recuperación. En entornos con mirror, los cambios de globals registrados en el journal se replican a los miembros del mirror.
// Global persistente - sobrevive a reinicios, registrado en journal, replicado
SET ^Patient(12345, "Name") = "Smith, John"
SET ^Patient(12345, "DOB") = "1985-03-15"
// Estos datos persisten hasta que se eliminan explícitamente
Resumen comparativo
| Característica | Variables Locales | PPGs (^||) | Globals Temporales (^CacheTemp*) | Globals (^name) |
|---|---|---|---|---|
| Alcance | Solo proceso | Solo proceso | Todos los procesos | Todos los procesos |
| Tiempo de vida | Proceso/nivel de pila | Proceso | Hasta el reinicio | Permanente |
| Registrado en journal | No | No | No | Sí (si la BD tiene journal) |
| Replicado | No | No | No | Sí (si hay mirror) |
| Almacenamiento | Memoria (tabla de símbolos) | Memoria/IRISTEMP | Base de datos IRISTEMP | Base de datos nombrada |
| Rendimiento | El más rápido | Rápido | Rápido | Estándar |
Referencias de Documentación
Resumen de Preparación para el Examen
Conceptos críticos a dominar:
- Sintaxis de PPG: El prefijo `^||name` distingue los globals privados de proceso de los globals regulares
- Visibilidad: Las variables locales y los PPGs tienen alcance de proceso; los globals temporales y persistentes son visibles para todos los procesos
- Journaling: Solo los globals persistentes en bases de datos con journal habilitado se registran en el journal; los PPGs y globals temporales nunca se registran
- Tiempo de vida: Las variables locales mueren con el nivel de pila o el proceso; los PPGs mueren con el proceso; los globals temporales mueren al reiniciar; los globals persisten para siempre
- Base de datos IRISTEMP: Base de datos especial sin journaling utilizada tanto para globals temporales como para PPGs
- Implicaciones de rendimiento: Evitar la sobrecarga del journaling con PPGs y globals temporales para datos transitorios
Escenarios comunes de examen:
- Elegir el medio de almacenamiento correcto para un caso de uso dado (ej., gran conjunto de resultados intermedios visible solo para un proceso = PPG)
- Identificar qué tipos de almacenamiento sobreviven a un reinicio del sistema (solo globals persistentes)
- Determinar qué tipos de almacenamiento se registran en el journal y se replican (solo globals persistentes en bases de datos con journal habilitado)
- Reconocer la sintaxis `^||` como globals privados de proceso vs `^CacheTemp` como globals temporales
- Entender por qué `$JOB` se usa como subíndice en globals temporales (aislamiento de procesos)
Recomendaciones de práctica:
- Crear variables locales, PPGs, globals temporales y globals persistentes en una sesión de Terminal
- Abrir dos sesiones de Terminal y verificar que los PPGs son invisibles entre procesos mientras que los globals temporales son compartidos
- Reiniciar el sistema y verificar qué datos sobreviven
- Examinar la base de datos IRISTEMP en el Portal de Administración para entender su función
- Practicar comandos KILL para limpiar cada tipo de almacenamiento
- Usar `$ORDER` para iterar sobre PPGs y globals temporales para entender su estructura de subíndices