Curso odoo (Módulos)
11.1. Optimización de módulos
Cuando tu aplicación crece y se manejan grandes volúmenes de datos o muchos usuarios simultáneos, es importante cuidar el rendimiento. A continuación, algunos consejos y prácticas recomendadas:
-
Indexación de campos en la base de datos
- Si realizas búsquedas frecuentes sobre un campo (por ejemplo, un campo
barcodeoserial_number), puedes considerar crear un índice en la base de datos. - Esto se logra usando la propiedad
index=Trueen la definición del campo o mediante la creación de índices a nivel SQL.
1name = fields.Char(string='Name', index=True) - Si realizas búsquedas frecuentes sobre un campo (por ejemplo, un campo
-
Uso de métodos de lectura eficientes
- Si solo necesitas unos cuantos campos de cada registro, utiliza
search_readen lugar de realizarsearch()y luego unread(). Consearch_read, todo ocurre en una única operación. - Para grandes listados, considera paginación (limit, offset) o usar
read_groupcuando requieras agregaciones.
- Si solo necesitas unos cuantos campos de cada registro, utiliza
-
Campos calculados y decoradores
- Si un campo se calcula muy frecuentemente, revisa si puedes almacenar el resultado (con
store=True) para evitar recálculos innecesarios. - Verifica que los decoradores
@api.dependsincluyan solo los campos que realmente impactan el cálculo, de lo contrario se recalculará más de la cuenta.
- Si un campo se calcula muy frecuentemente, revisa si puedes almacenar el resultado (con
-
Prefetch y cache
- Odoo hace un prefetch de campos para optimizar lecturas. Evita romper ese flujo haciendo lecturas campo por campo de manera aislada.
- Si necesitas datos relativamente estables, considera usar mecanismos de cache propios, aunque con cautela para no mostrar datos obsoletos.
-
Evitar bucles costosos
- Cuando proceses muchos registros, intenta agrupar operaciones en lugar de iterar registro por registro con llamados repetidos a la base de datos.
- Utiliza métodos en “bulk”. Por ejemplo, si necesitas actualizar un campo en miles de registros, busca un enfoque vectorizado (un solo
writeen un recordset grande) o un SQL directo si es estrictamente necesario.
11.2. Migración de módulos entre versiones
Odoo avanza con nuevas versiones cada año, introduciendo cambios en la API, en la estructura de modelos y en la interfaz. Para migrar tus módulos, ten en cuenta:
-
Revisar los cambios en la API
- Cada release mayor (por ejemplo, de Odoo 14 a Odoo 15) puede traer cambios en decoradores, modelos o parámetros de funciones.
- Consulta la documentación oficial y las notas de release para ver qué métodos han sido deprecated o modificados.
-
Scripts de actualización
- Si necesitas transformar datos existentes (por ejemplo, un campo
stateque cambió astatus), puedes preparar un script en tu módulo que, al actualizar, ejecute el reajuste en la base de datos. - Usa la función de post-instalación (
post_init_hook) o un método Python que se ejecute justo después de la instalación o actualización del módulo.
- Si necesitas transformar datos existentes (por ejemplo, un campo
-
Pruebas exhaustivas
- Antes de llevar la migración a producción, haz pruebas en una copia de la base de datos real.
- Ejecuta todos los tests que tengas definidos y revisa los registros críticos para confirmar que la información se ha migrado correctamente.
-
Uso de OpenUpgrade
- La comunidad OCA mantiene la herramienta OpenUpgrade, que facilita las migraciones entre versiones grandes, aplicando parches y scripts ya preparados para módulos estándar.
- Para módulos personalizados, igual se requiere trabajo manual adaptando tu código, pero OpenUpgrade puede ayudar con la conversión de datos “core”.
11.3. Despliegue en producción
El despliegue consiste en configurar todo el entorno para que tu aplicación de Odoo sea accesible y estable para los usuarios. Entre los puntos principales:
-
Configuración de base de datos en PostgreSQL
- Asigna recursos adecuados (memoria, conexiones, etc.).
- Crea un usuario y base de datos dedicados para Odoo con privilegios específicos.
- Ajusta parámetros en
postgresql.conf(por ejemplo,shared_buffers,work_mem) si tu servidor tiene muchas conexiones concurrentes.
-
Archivo de configuración
odoo.conf- Define el puerto, la ruta de los módulos, y los parámetros de la base de datos.
- Ajusta
workersylimit_*según la carga esperada.- workers: número de procesos que manejarán peticiones concurrentes.
- limit_memory_hard, limit_memory_soft: control de uso de memoria.
- limit_request: límite de requests por worker para prevenir fugas de memoria.
-
Servidores web y balanceadores
- Normalmente se coloca Nginx o Apache como proxy inverso frente a Odoo:
- Permite usar HTTPS (certificados SSL) y manejar la compresión, cacheo, etc.
- Facilita la administración de múltiples servicios en el mismo servidor.
- En entornos con alta demanda, se usa un balanceador (como HAProxy) para distribuir el tráfico a varios servidores Odoo (scalabilidad horizontal).
- Normalmente se coloca Nginx o Apache como proxy inverso frente a Odoo:
-
Mantenimiento y actualización de módulos
- Prepara un flujo de CI/CD (Integración Continua / Despliegue Continuo) si es viable, para testear y desplegar automáticamente los cambios.
- Mantén una política de backups frecuentes de la base de datos.
- En caso de actualizaciones, programa ventanas de mantenimiento y comunica a los usuarios los posibles tiempos de inactividad.
-
Monitoreo y logging
- Implementa herramientas de monitoreo como Grafana, Prometheus o similares para rastrear métricas (CPU, RAM, solicitudes por segundo, tiempos de respuesta, etc.).
- Configura logs de errores y logs de acceso para detectar incidencias.
- Analiza periódicamente los cuellos de botella y planifica mejoras.
Conclusión de la Parte 11
- Optimización de módulos: Aprovecha índices, uso eficiente de métodos (bulk operations,
read_group, etc.), campos calculados almacenados y evita bucles costosos. - Migración de versiones: Consulta los cambios de la API en cada release, prepara scripts de actualización para transformar datos y ejecuta pruebas en un entorno de staging.
- Despliegue en producción: Ajusta PostgreSQL y
odoo.conf, configura Nginx o Apache como proxy inverso, define un flujo de actualización y backups, y mantén un sistema de monitoreo y logs para detectar problemas temprano.
Con estos conceptos, estarás en condiciones de gestionar de manera profesional tanto el rendimiento como la estabilidad de tus módulos en entornos de producción. En la siguiente parte (y última, la Parte 12), presentaremos ejemplos de proyectos prácticos para consolidar todo lo aprendido hasta ahora. ¡Continuemos!
- Loading...