272. SQLite

El equipo de Core de WordPress está haciendo algunos experimentos con SQLite como alternativa a las bases de datos tradicionales, y veremos qué se está haciendo.

Enlaces comentados

Javier ha comentado cómo le va con sus proyectos:

  • Listo para ir a la WordCamp Chiclana, donde daré una charla sobre ChatGPT
  • Listo para ir a WordCamp Torrelodones donde daré una charla de SQLite, que es el tema de hoy del programa.
  • Preparando la Hackathon de WordPress Granada para este próximo sábado día 11, y tenéis toda la información en animales.wphackathon.es o animales.doaction.es que hace una redirección.
    • Se podrá seguir online. En la web hay instrucciones.

Joan ha presentado sus proyectos:

Patrocinador

Hosting WordPress en SiteGround

Actualidad

Automated performance monitoring in WordPress core

Twitter API Changes

Final de Fase 2

GlotPress as a Local Translation Plugin

Tema de la Semana

Hoy vamos a hablar de SQLite, pero antes, un poco de contexto.

Como sabéis, WordPress está formado de 3 partes principalmente.

La primera de ellas es el núcleo, el core, al que le podemos poner plugins y temas.

Otra parte son los ficheros que subimos, los Media, que encontramos en la carpeta de «uploads».

Y, para acabar, tenemos la base de datos, donde se almacena la información de los contenidos que se publican, configuraciones, y lo que se os venga a la cabeza.

Pues, de esta tercera parte es de la que vamos a hablar hoy, porque WordPress siempre ha funcionado con MySQL, que posteriormente compró Oracle y gracias al código abierto, permitió la creación de MariaDB. Además, es compatible con otros sistemas como Percona MySQL Server, o cosas en Cloud del estilo a Amazon RDS for MariaDB o Amazon RDS for MySQL, también el Azure Database for MySQL o el Google Cloud MySQL, y de otros más o menos conocidos como DigitalOcean MySQL, IBM Cloud Databases for MySQL o MySQL HeatWave. En resumen, y como se puede ver por los nombres, versiones de MySQL o MariaDB al fin y al cabo.

Pero es que en la última WordCamp Europe Matt dejó caer que a lo mejor deberíamos abrir el campo e introducir «otras cosas». Se habló de otros lenguajes de programación, pero si ya tenemos problemas con PHP, no me imagino reprogramar WordPress para otra cosa.

Lo que sí es más sencillo de desarrollar, porque SQL tiene un estándar, es la integración con otras bases de datos, y aquí es donde entra SQLite.

Y, ¿qué es SQLite?

Pues es un motor de base de datos relacional, gratuito y de código abierto, por eso es importante para WordPress, muy utilizado en aplicaciones móviles y pequeñas webs.

Al contrario que MySQL, que es un motor de base de datos de servidor, SQLite es una biblioteca que se ejecuta en el mismo software que la usa y no requiere configuración ni gestión separadas.

Aun así, SQLite es muy simple, rápido y eficiente en consumo de recursos, pero es menos escalable y no ofrece algunas de las características avanzadas de seguridad y gestión de datos que sí ofrece MySQL.

Vale, y ahora diréis que, si es menos escalable que WordPress, ¿de qué va a servirnos?

Pues ahí está la propia respuesta, y es que, al ser más pequeño que un MySQL, sirve para sitios que no necesitan tantos recursos. Ejemplos varios, como puede ser una web corporativa, que al final no dejan de ser 10 páginas, o de un blog pequeñito de menos de 1.000 entradas.

Y, con esta idea, es con la que se comenzó un proyecto dentro del equipo de Performance, en concreto por Ari Stathopoulos, y que basado en código existente, se planteó comenzar todo el proyecto para que la base de datos de WordPress fuera sustituida por una de SQLite.

¿Cómo está este proyecto? Pues en este momento tenemos la versión 1.0.3 del plugin, que está descargable desde el repo, con el nombre SQLite Database Integration, y desde GitHub. Además, lo tenéis en español gracias a la inestimable colaboración de Javier Casares que se ha pegado la currada de traducirlo.

¿Cómo funciona?

Para empezar, y por ahora al ser un plugin experimental, todavía hace falta instalar un WordPress de la manera tradicional, con su MySQL activo. Pero una vez instalado, se activa el plugin y comienza la aventura.

Lo primero es validar algo doble. Por un lado, que el servidor tiene activo el SQLite, la extensión que comentaba antes, y por otro lado, que como va a ser PHP quien lo ejecute, tengamos la extensión de PHP-SQLite.

Con esto tenemos los dos elementos que son necesarios y que, ambos, juntos, no ocupan ni un mega de espacio.

De todas formas, al activar el plugin, si no tenéis lo necesario para que funcione, os avisará con el mensaje correspondiente y podéis pedirlo a vuestra empresa de hosting o al sistema de desarrollo que utilicéis.

A partir de aquí. Si todo está bien, aparece un botón que te pregunta si quieres comenzar a usar esta nueva base de datos y, voilà, comenzará una nueva instalación de WordPress, en este caso, con el nuevo motor.

Sí, es un poco rollo porque esto sirve solo para nuevas instalaciones… pero… ¿y si ya tenéis un WordPress anteriormente?

Sí, se puede llegar a migrar el contenido de una base de datos de MySQL a SQLite de forma más o menos sencilla. Esto en realidad quedará para que plugins existentes hagan todo ese proceso. Incluso, ahora sabiendo dónde están las rutas de los ficheros y todo, sería posible hacer la migración de forma casi transparente y previa a activar el plugin.

Para esto se puede usar una herramienta para Linux llamada mysql2sqlite.

El proceso sería hacer un backup del MySQL al puro estilo MySQLdump, guardar ese fichero .SQL y con esta herramienta crear la base de datos en formato .SQLITE. Una vez se tenga, se sustituye la que ha generado el WordPress nueva, y ya está. Al entrar en el WordPress tendréis absolutamente todo como estaba antes.

Incluso, para asegurarme, hice una prueba que fue comentar en el wp-config los datos de conexión de la base de datos y sí, efectivamente, estaba almacenando todos los datos en el SQLite.

Y ahora, lo importante… ¿Mejora la velocidad de carga del sitio? Pues no, peeerooo, es que no es la idea final de este sistema, que también. Donde se notará el rendimiento es en los hostings muy malos, aquellos que tienen muchos usuarios compartidos, aquellos en los que las bases de datos están masificadas… y es que en esos casos, la base de datos no rinde como debería.

Si hacemos una comparativa entre una máquina normal, y muy potente, el cambio es casi nulo. Pero si se hace una prueba en una máquina muy pequeña, con pocos recursos, ahí sí que se nota bastante el rendimiento, ya que MySQL se atasca, y, en cambio, SQLite no, porque depende más del disco y no de la potencia de la máquina.

Pero, este no es el único proyecto relacionado con SQLite que tenemos… porque si hablamos de almacenar datos… SQLite puede ejercer también de complemento a una instalación normal, usándose como caché de Objetos.

Siempre os comento que podemos usar Redis o Memcached, pero que en hosting compartidos es bastante complejo, por seguridad, utilizarlo… así que, ¿por qué no usar el plugin SQLite Object Cache de Oliver Jones para ello? Al almacenar la información en un fichero en tu zona de disco duro, no hay problemas de seguridad, y tampoco de rendimiento, ya que es más rápido que MySQL para estos datos.

Lo dicho, en este caso, si estáis en un hosting compartido, probablemente sea una muy buena forma de optimizar los recursos sin necesidad de mover todo el sistema a un servidor, que, al final, va a requerir de muchos más recursos.

Para que os hagáis una idea, yo he estado usando durante muchos años Redis como caché de objetos, y no descarto hacer el cambio de Redis a este nuevo sistema, al requerir de muchos menos recursos y prácticamente no hay tanta diferencia si el disco del servidor es al menos SSD o NVMe. Aunque todavía hay que esperar un poco, que el sistema está en desarrollo, pero, yo creo que en breve estará.

Despedida

Nos podéis dejar ideas, posibles temas de los que queréis que hablemos en el pódcast.

Podéis encontrar a Joan Boluda, donde tenéis sus cursos de WordPress, y a Javier Casares, con todos sus proyectos.

Estáis más que invitados a participar a través de la sección de contacto de la web, a través de la que podéis enviar preguntas, dudas, y sugerencias para nuevos episodios.

Puedes suscribirte y escucharnos cada semana en Pocket Casts, Apple Podcasts, Spotify, Google Podcasts e iVoox.

¡Nos vemos el programa que viene con más WordPress!