T3.1: Uses Python with InterSystems IRIS

Knowledge Review - InterSystems IRIS Development Professional

1. Identifica capacidades de Embedded Python en InterSystems IRIS

Puntos Clave

  • Ejecución In-Process: Runtime Python ejecuta dentro del kernel IRIS para latencia más baja
  • Keyword Language: Escribir métodos Python en clases IRIS usando `Language = python`
  • Módulo iris: Acceder características IRIS vía `import iris` para globals, SQL, transacciones, clases
  • Integración Bidireccional: Llamar Python desde ObjectScript y ObjectScript desde Python
  • Acceso Directo a Global: Manipular estructuras de almacenamiento multidimensional con `iris.gref()`
  • Procedimientos Almacenados SQL: Crear funciones SQL, procedimientos, y triggers en Python

Notas Detalladas

Resumen

Embedded Python permite al runtime Python ejecutar dentro del mismo proceso que InterSystems IRIS, proporcionando la integración más estrecha posible y latencia más baja de todas las opciones Python. Esta arquitectura elimina sobrecarga de red y costos de serialización asociados con enfoques cliente-servidor.

Integración de Lenguaje

  • Declaraciones de Método: Escribir métodos Python directamente en definiciones de clase IRIS agregando `Language = python` a declaraciones ClassMethod o Method
  • Llamadas Bidireccionales: Métodos Python pueden ser llamados desde ObjectScript y viceversa, habilitando desarrollo políglota sin interrupciones
  • Requisito de Servicio: El servicio %Service_CallIn debe estar habilitado en el Management Portal para que Embedded Python funcione

El Módulo iris

El módulo iris sirve como puerta de entrada a funcionalidad IRIS desde Embedded Python. Después de importar iris, desarrolladores obtienen acceso a:

  • Procesamiento de Transacción: `iris.tstart()`, `iris.tcommit()`
  • Arrays Global: `iris.gref('^globalname')`
  • Instanciación de Clase: `iris.Package.ClassName._New()`
  • Ejecución SQL: `iris.sql.prepare()`

Manejo de Tipo de Dato

  • Conversiones Automáticas: El módulo maneja automáticamente conversiones de tipo de dato entre Python y ObjectScript
  • Tipos Soportados: Listas, diccionarios, y objetos personalizados
  • Acceso a Propiedad: Embedded Python puede acceder propiedades de clase persistente, invocar métodos de clase, y manipular nodos global usando sintaxis Python familiar

Procedimientos Almacenados SQL

Desarrolladores pueden crear procedimientos almacenados SQL, funciones, y triggers enteramente en Python, ejecutando con rendimiento in-process.

Casos de Uso Ideales

  • Machine Learning: Importar librerías como numpy, pandas, scikit-learn para analítica de datos
  • Ecosistema Python: Aprovechar el ecosistema rico de Python para cómputos específicos
  • Migración: Migrar gradualmente lógica ObjectScript a Python mientras se mantiene integración completa con características IRIS

2. Evalúa opciones de estrategia Python para casos de uso específicos

Puntos Clave

  • DB-API/pyODBC: Acceso SQL externo para aplicaciones cliente y frameworks (pandas, SQLAlchemy)
  • Native API: Acceso cliente-servidor a globals y estructuras de datos no relacionales
  • Python Gateway (PEX): IRIS llama código Python externo para producciones de interoperabilidad
  • Embedded Python: Ejecución in-kernel para rendimiento más alto e integración más estrecha
  • Compensación de Rendimiento: Cliente-servidor tiene latencia de red; Embedded Python tiene velocidad in-process
  • Mapeo de Caso de Uso: Emparejar arquitectura con requisitos de aplicación y restricciones de despliegue

Notas Detalladas

Resumen

InterSystems IRIS ofrece cinco estrategias de integración Python distintas, cada una optimizada para diferentes casos de uso. Comprender cuándo usar cada enfoque es crítico para decisiones de arquitectura de aplicación.

Driver DB-API

  • Propósito: Acceso a base de datos relacional compatible con PEP 249 desde aplicaciones Python externas
  • Ideal Para: REST APIs, dashboards, frameworks web (Flask, Streamlit), y herramientas esperando conectividad de base de datos estándar
  • Ejecución: Ejecuta fuera del proceso IRIS, conectando sobre TCP/IP o memoria compartida
  • Mejor Para: Procesamiento de datos externo y flujos de trabajo de analítica

pyODBC

  • Propósito: Sistemas legacy o entornos requiriendo conectividad ODBC
  • Nota: DB-API es ahora recomendado para IRIS 2022.1 y posteriores

Native API

  • Propósito: Acceso cliente-servidor a características específicas de IRIS más allá de SQL
  • Características: Manipulación de global directa, invocación de método de clase, y control de transacción desde procesos Python externos
  • Ideal Para: Aplicaciones necesitando patrones de acceso a datos jerárquicos o multidimensionales que no mapean limpiamente a tablas SQL

Python Gateway (Framework PEX)

  • Propósito: Invierte flujo de control, permitiendo a IRIS iniciar ejecución de código Python externo
  • Arquitectura: Soporta producciones de interoperabilidad donde IRIS orquesta servicios de negocio Python, procesos, y adaptadores ejecutando como servicios externos separados
  • Esencial Cuando: Integrar aplicaciones Python existentes o cuando Embedded Python no está disponible

Embedded Python

  • Propósito: Opción de rendimiento más alto, ejecutando Python dentro del proceso kernel IRIS
  • Beneficios: Elimina latencia de red, habilita acceso directo a memoria a globals, permite mezclar sin interrupciones Python y ObjectScript dentro de la misma clase
  • Sobresale En: Operaciones intensivas de datos cerca de la base de datos, importar paquetes Python de terceros, crear procedimientos almacenados SQL, aumentar clases ObjectScript con métodos Python

Criterios de Selección

  • Ubicación de Ejecución: Si Python ejecuta dentro o fuera de IRIS
  • Requisitos de Rendimiento: Tolerancia de latencia para su caso de uso
  • Acceso Directo a Global: Necesidad de manipulación de global directa
  • Integración de Ecosistema: Integración con ecosistemas Python externos
  • Flujo de Control: Si IRIS inicia ejecución Python o Python inicia conexiones IRIS

Matriz de Capacidades de Soporte Python

  • Procedimientos Almacenados SQL: Solo Embedded Python
  • Aumentar Clases IRIS: Solo Embedded Python
  • Aplicaciones Cliente Externas: Solo DB-API/Native API
  • Interoperabilidad: Python Gateway es elección primaria
  • Manipulación de Global Directa: Todos excepto DB-API/pyODBC

Resumen de Preparación para el Examen

Conceptos Críticos a Dominar:

  1. Arquitectura Embedded Python: Comprender que Python ejecuta in-process con kernel IRIS (no cliente-servidor)
  2. Keyword Language: Saber cómo declarar métodos Python en clases IRIS con `Language = python`
  3. Módulo iris: Memorizar capacidades clave - transacciones, globals, SQL, acceso a clase
  4. Cinco Opciones Python: DB-API, pyODBC, Native API, Python Gateway, Embedded Python
  5. Mapeo de Caso de Uso: Emparejar cada opción con escenarios apropiados (apps cliente, interoperabilidad, lógica in-kernel)
  6. Características de Rendimiento: Embedded Python = latencia más baja; cliente-servidor = sobrecarga de red
  7. Acceso a Global: Saber qué opciones soportan manipulación de global directa (no DB-API/pyODBC)
  8. Matriz de Capacidades: Memorizar qué opciones soportan procedimientos almacenados SQL, aumentar clases, interoperabilidad

Escenarios Comunes de Examen:

  • Identificar cuándo usar Embedded Python vs. DB-API para un requisito de aplicación dado
  • Reconocer Python Gateway (PEX) como la solución para ejecución Python externa iniciada por IRIS
  • Comprender que procedimientos almacenados SQL en Python requieren Embedded Python
  • Saber que aplicaciones cliente externas (Flask, Streamlit) usan DB-API, no Embedded Python
  • Seleccionar Native API cuando acceso de global directo es necesario desde Python externo
  • Comprender que Embedded Python proporciona latencia más baja a través de ejecución in-process
  • Reconocer que aumentar clases IRIS existentes con métodos Python requiere Embedded Python

Recomendaciones de Práctica Práctica:

  • Escribir métodos Python en clases IRIS usando keyword `Language = python`
  • Importar y usar el módulo iris para acceder globals, ejecutar SQL, e instanciar clases IRIS
  • Crear un procedimiento almacenado SQL en Python y llamarlo desde SQL
  • Comparar rendimiento entre DB-API (externo) y Embedded Python (in-process) para la misma operación
  • Usar `iris.gref()` para manipular nodos global desde Embedded Python
  • Construir un cliente Python externo simple usando DB-API para consultar datos IRIS
  • Evaluar un escenario de caso de uso y justificar la selección de estrategia Python apropiada
  • Habilitar %Service_CallIn en Management Portal para permitir ejecución Embedded Python

Distinciones Clave a Recordar:

  • Módulo iris de Embedded Python (in-kernel) vs. Módulo iris de DB-API (cliente-servidor) - APIs diferentes, no intercambiables
  • Python llama IRIS (DB-API, Native API) vs. IRIS llama Python (Python Gateway, Embedded Python)
  • Acceso solo SQL (DB-API, pyODBC) vs. Acceso completo a características IRIS (Native API, Embedded Python)
  • Proceso externo (DB-API, Native API, Python Gateway) vs. Mismo proceso (Embedded Python)
  • Opción de memoria compartida (DB-API cuando cliente en misma máquina) vs. TCP/IP requerido (clientes remotos)

Referencia Rápida - Árbol de Decisión de Estrategia Python:

  1. ¿Necesita procedimientos almacenados/funciones/triggers SQL? → Embedded Python
  2. ¿Necesita aumentar clases IRIS existentes con métodos Python? → Embedded Python
  3. ¿Aplicación cliente Python externa (Flask, Streamlit, analítica)? → DB-API
  4. ¿IRIS debe llamar código/servicios Python externos? → Python Gateway (PEX)
  5. ¿Acceso de global directo desde Python externo? → Native API
  6. ¿Rendimiento más alto, integración más estrecha, in-process? → Embedded Python
  7. ¿Producción de interoperabilidad con componentes Python? → Python Gateway (PEX)
  8. ¿Versiones IRIS legacy (pre-2022.1) o infraestructura ODBC existente? → pyODBC

Detalles de Implementación Importantes:

  • Métodos Python en clases deben usar guión bajo (_) en lugar de porcentaje (%) en nombres: `iris._SYSTEM` no `iris.%SYSTEM`
  • Habilitar servicio %Service_CallIn o Embedded Python fallará con error IRIS_ACCESSDENIED
  • Usar `iris.sql.prepare()` para consultas SQL parametrizadas desde Embedded Python
  • Códigos de estado: 1 = éxito; usar `iris.check_status()` para validar ejecución de método
  • Operaciones global: `iris.gref('^globalname')` retorna referencia global; métodos `.set()`, `.get()`, `.order()` disponibles
  • Embedded Python soporta sintaxis más corta opcional para referencias de clase (IRIS 2024.2+)
  • DB-API usa método `connect()`; Embedded Python usa `import iris` (sin conexión necesaria - ya in-process)

Report an Issue