Odoo y PostgreSQL - Un matrimonio silencioso pero efectivo

4 de marzo de 2023 por
Gustavo Orrillo
| Sin comentarios aún
 

Odoo tiene tres pilares de tecnología:

  • Un cliente web desarrollado en Javascript / Typescript
  • Un backend con un ORM desarrollado en Python
  • Una base de datos que es PostgreSQL

En este post vamos a hablar de PostgreSQL, que es (como dirían los americanos) el 
"work-horse" de Odoo. Vamos a ver que es dicha base de datos, que hace en Odoo y porqué es importante conocer dicha tecnología. No vamos a hablar sobre la performance de la base de datos ni de su optimización debido a que es material para otro post.

Que es PostgreSQL?

PostgreSQL es una base de datos relacional open-source. Es un proyecto open-source que ya tiene más de un cuarto de siglo (27 años, debido a que el primer release ocurrió en 1996) de historia.

Si bien cuenta con versiones para Windows y otras plataformas, PostgreSQL es una base de datos que corre principalmente en Linux. Es muy popular en Linux o (como está ocurriendo ahora) en plataformas como AWS, Azure, Linode, etc... debido a que dichas plataformas ocultan muchas de las complejidades de su administración y brindan una escalabilidad y performance destacables.

Al ser una base de datos cuyo origen está en Linux, su administración no es precisamente intuitiva. Pero no es compleja, ya que aprender a administrarla requiere poca capacitación. Y como indica nuestra experiencia es una base de datos que la mayoría de las veces es invisible para los usuarios de Odoo debido a que funciona sin intervención de un DBA. 

Es una base de datos que funciona sola, y facil de mantener. Una vez escuché a un muy experimentado consultor de soporte de PostgreSQL, que tenía años experiencia brindando soporte técnico de Informix a lo largo de toda Latinoamérica. Este consultor dijo "PostgreSQL anda solo, y cuando tenes problemas los solucionas ejecutando un VACUUM; y ya está". Un reconocimiento de alguien que pasó muchos años de su vida lidiando con los problemas que suelen traer los optimizadores de queries de las bases de datos.

Como funciona el matrimonio Odoo - PostgreSQL

Uno de los principales componentes de Odoo es el ORM. Este abstrae componente abstrae al desarrollador de las complejidades de como es la interacción con la base de datos y de la seguridad. Si uno es desarrollador en Odoo, no tiene que estar lidiando (a menos que sea necesario por motivos de performance) con el hacer JOINs de SQL, etc etc... de eso se encarga el ORM. Esto tuvo a lo largo de los últimos quince años un enorme beneficio, hacer Odoo facil de mantener y extender. El hecho que en este momento tengamos miles de módulos disponibles se debe en gran parte a este heroe silencioso que es el ORM.

Dicho ORM (anteriormente conocido como OpenObject) solo funciona con PostgreSQL por el simple motivo que el ORM trabaja con la librería psycopg2. Y no va a cambiar (es por eso que si sueña con manejar su ERP con MySQL, tendrá que buscar otro proyecto). A lo largo de los años vi cientos de discusiones sobre los aspectos de infraestructura de Odoo, ninguno puso en duda PostgreSQL.

Por otra parte, la instalación de Odoo hace que la gestión de PostgreSQL sea practicamente transparente para el usuario. Es por eso que tenemos miles de instalaciones de Odoo donde se desconoce la presencia de la base de datos (es divertido cuando deben restaurarla). Y la relación Odoo - PostgreSQL, es una relación muy estable, sinceramente funciona muy bien. No conozco casos de instalaciones de Odoo que hayan tenido problemas con la integridad de los datos ni con su instalación de PostgreSQL, y no conozco instalaciones con el costo extra (y caro) de un DBA. 

Por que es importante conocer PostgreSQL?

La mayoría de los usuarios de Odoo no saben que existe PostgreSQL (y menos si trabajan con odoo.sh). Por el simple motivo que es sencilla y transparente su administración, y porque tiene una muy buena performance out-of-the-box o con practicamente pocas optimizaciones.

Pero es necesario conocerlo principalmente por razones de performance (y aca yo creo está una de las desventajas de trabajar con odoo.sh). El ORM de Odoo abstrae al desarrollador de muchas de las complejidades de la interacción con la base de datos. Y esta abstracción puede llegar a tener un costo desde el lado de la performance.

El primero es, y vamos a hablar de esto en otros posts, un desarrollador de Odoo debe saber SQL porque va a necesitar en numerosas ocasionas utilizar SQL para acelerar consultas en Odoo (por ejemplo, el saldo de una cuenta contable) o para insertar registros de manera más performante (por ejemplo, crear decenas o centenares de números de serie en segundos). El ORM si bien tiene grandes beneficios de abstracción y seguridad, tiene un costo a nivel performance que en ocasiones puede ser prohibitivo. Y la única manera de hacerlo es con SQL realizando las consultas o actualizaciones directamente contra la base de datos (esto Odoo lo permite).

El segundo motivo es la performance, cuando se encuentran problemas de performance de la instalación de Odoo, muchas veces esto se debe a que hay problemas en la optimización de las consultas en la base de datos. Y estos problemas de rendimiento de la instalación de Odoo, no se resuelven agregando recursos de hardware. Se resuelven detectando cuales son las consultas que estan ocasionando problemas, comprendiendo su plan de ejecución, y luego resolviendo dichos problemas (que muchas veces conlleva a tener que modificar el código de Odoo, es por eso que para resolver los problemas de performance de Odoo es fundamental contar con la ayuda de un desarrollador de Odoo).

Es por eso que creemos que un buen desarrollador de Odoo, necesita tener el conocimiento de como se trabaja con PostgreSQL. No solo a nivel SQL (eso lo brindan herramientas como psql o pgadmin) sino tambien conocer como se optimizan las consultas de SQL debido a que esto le va a permitir detectar los problemas de performance y solucionarlos. 

Gustavo Orrillo 4 de marzo de 2023
Compartir
Categorías
Archivar
Identificarse dejar un comentario