MySQL vs PostgreSQL: Primeros pasos con Supabase y pgvector

¡Hola de nuevo! Si lleváis unos cuantos años dedicándoos a esto de crear páginas webs, sabréis que hay herramientas que acaban convirtiéndose en viejas compañeras de fatigas. Para la inmensa mayoría de nosotros, la dupla formada por MySQL y phpMyAdmin es, literalmente, como de la familia. Las usamos a diario en cada instalación nueva de WordPress, nos conocemos sus prefijos, sus tablas de memoria y sabemos localizar una tabla como sospechosa con solo ver su nombre o formato.

Pero, como os contábamos en nuestro artículo anterior sobre cómo pasamos al Frontend estático, el desarrollo de nuestro nuevo SaaS (Normatia) nos ha obligado a explorar nuevos horizontes tecnológicos. No tomamos esta decisión porque MySQL sea una mala base de datos (sigue siendo una herramienta fantástica y robusta para el 90% de las webs de internet), sino porque para este proyecto en concreto, necesitábamos que el corazón de nuestros datos hiciera cosas que se escapan por completo del modelo relacional clásico de filas y columnas.

Hoy os traemos un post muy especial donde os contamos por qué hemos abrazado PostgreSQL con los brazos abiertos y cómo Supabase nos ha facilitado la vida hasta límites insospechados. ¡Manos a la obra!

Por qué tuvimos que salir de nuestra zona de confort

Para entender el cambio, primero hay que entender el problema. En un proyecto web tradicional o en una tienda online, MySQL es absolutamente perfecto para relacionar información altamente estructurada. Un usuario concreto tiene muchos Posts, un Post pertenece a una Categoría y tiene varias Etiquetas. Todo encaja limpiamente en tablas vinculadas por IDs.

El problema surge cuando quieres hacer búsquedas sobre esa información. En el mundo tradicional, si un usuario busca algo, usamos el clásico operador LIKE %termino%. Si buscas «escalera», la base de datos recorre los textos buscando exactamente esas 8 letras en ese orden.

Pero Normatia no es un buscador de palabras; Normatia integra Inteligencia Artificial para buscar en la compleja normativa técnica. Nosotros no buscamos por palabras exactas, buscamos por significado y contexto. Y ahí es donde el modelo clásico de búsqueda de texto se rompe en mil pedazos. Necesitábamos almacenar y consultar vectores matemáticos (que es la forma abstracta en la que la Inteligencia Artificial «entiende» y agrupa los textos), y PostgreSQL es, hoy por hoy, el rey indiscutible en este terreno gracias a su ecosistema de extensiones.

¿Qué es Supabase y por qué es el BaaS de moda?

Decidido el motor de base de datos (PostgreSQL), nos enfrentamos a otro reto: la infraestructura. Montar un servidor PostgreSQL desde cero en crudo, configurar sus copias de seguridad, asegurar las conexiones y gestionarlo a mano a través de consola no entraba en nuestros planes. Somos desarrolladores de producto, no administradores de sistemas puros, y nuestro tiempo es oro.

Así que apostamos todo al negro con Supabase, una plataforma que se engloba dentro de lo que llamamos Backend as a Service (BaaS). Supabase envuelve a PostgreSQL y te da una capa de superpoderes visuales e integraciones automáticas.

Para que nos entendamos rápido: Supabase es como si alguien hubiera cogido el concepto de cPanel, lo hubiera modernizado con diseño exquisito y lo hubiera pensado exclusivamente para desarrolladores de aplicaciones.

Desde su panel de control no solo creamos y vemos las tablas de datos como lo haríamos en phpMyAdmin, sino que nos resuelve problemas complejísimos como la autenticación de usuarios de un solo plumazo. En apenas un par de clics y unas líneas de código en nuestro Frontend, teníamos el Login completo de Normatia funcionando. Soporta autenticación por correo, Google, GitHub, contraseñas seguras y generación de tokens JWT, todo sin tener que programar nosotros el tedioso flujo de seguridad del lado del servidor.

La seguridad a nivel de fila (RLS)

Una de las cosas que más nos voló la cabeza al pasar de la forma de pensar de WordPress a la de Supabase fue el RLS (Row Level Security).

En WordPress, la seguridad a menudo se gestiona en la capa de la aplicación (PHP). Si un usuario pide ver una factura, el código PHP comprueba si es suya antes de mostrársela. En Supabase, la seguridad reside en la propia base de datos. Tú escribes «Políticas» directas en la tabla que dicen: «Nadie puede leer esta fila a menos que el ID del usuario coincida con el ID del creador de la fila». Es un cambio de paradigma brutal que garantiza que, incluso si alguien encuentra un fallo en tu código del Frontend, tus datos siguen protegidos a nivel de núcleo.

La verdadera magia: pgvector y las búsquedas semánticas

Llegamos al verdadero motivo de este cambio de Stack. La «Killer Feature» que nos hizo mudarnos se llama pgvector. Es una extensión de código abierto para PostgreSQL que permite guardar, comparar y buscar vectores generados por modelos de IA.

¿Cómo explicamos esto de forma sencilla? Pensad en una base de datos normal como en el archivo de una biblioteca clásica donde los libros están ordenados estrictamente por orden alfabético. Si vas y le pides al sistema «transmitancia», el sistema buscará en el cajón de la ‘T’ y te dará los libros que tengan esa palabra exacta en el título. Si el libro se llama «Pérdida de calor en ventanas», no te lo dará, porque no coincide la palabra.

Sin embargo, una base de datos vectorial impulsada por pgvector es como tener a un bibliotecario inteligente y experto. Si le preguntas por «pérdida de calor», el bibliotecario «entiende» el concepto subyacente de tu frase y sabrá entregarte los artículos del Código Técnico que hablan de «transmitancia térmica» y «aislamiento», porque sabe que el concepto semántico es el mismo, aunque las palabras literales no coincidan.

Por ello, la combinación de Supabase + su soporte nativo para pgvector se han convertido en la dupla perfecta para el motor de búsqueda semántica de nuestro proyecto. Cuando un usuario introduce una duda en Normatia, la IA convierte su frase en un vector (un array de 768 números en nuestro caso), Supabase compara ese vector matemático con los miles de artículos normativos que ya tenemos vectorizados en milisegundos, y nos devuelve los más relevantes.

El cambio de mentalidad como desarrolladores

No os vamos a engañar, cambiar herramientas que llevas usando 15 años no es fácil. Hemos tenido que desaprender cómo hacíamos complejas WP_Query para aprender a utilizar el SDK de JavaScript de Supabase y entender cómo funciona PostgreSQL por debajo.

Aprender un nuevo sistema de base de datos siempre da respeto, y los primeros días te sientes como un novato buscando cómo hacer un simple JOIN. Pero os aseguramos que el esfuerzo vale muchísimo la pena cuando ves el resultado final y la velocidad a la que tu aplicación es capaz de cruzar datos hipercomplejos.

Y vosotros, desarrolladores, ¿seguís siendo absolutamente fieles a MySQL para todos vuestros desarrollos o ya habéis empezado a trastear con PostgreSQL, Supabase y bases de datos vectoriales en vuestros proyectos?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *