El Abuso de las Bases de Datos: Reflexiones de un Desarrollador con 20 Años de Experiencia
El Comienzo: dBase III y Microsoft Access
He estado desarrollando software durante más de 20 años, y la primera base de datos (BBDD) que recuerdo haber utilizado fue dBase III. Aquello era feo y complicado de manejar. Básicamente se usaba como aplicación aislada y no como servicio al que se conectaba un backend.
Por aquel entonces también comenzó a surgir Microsoft Access, el cual, sin duda, democratizó los sistemas de bases de datos. Era mucho más accesible para el usuario promedio y facilitaba la creación y gestión de bases de datos sencillas.
La Era de MySQL y PHP
Mi experiencia conectando bases de datos con otros servicios comenzó con MySQL y PHP (no he visto pareja con más química en mi vida). Recuerdo el mundo de posibilidades que se abrió ante mí. Sus propiedades ACID hacían que escribir aplicaciones PHP se simplificara notablemente, pero también generaba vicios y abusos a los Sistemas de Gestión de Bases de Datos (SGBD).
Abusos Comunes en la Actualidad y sus Consecuencias
20 años después, seguimos abusando de las BBDD. Si tenemos problemas de concurrencia, solemos pasarle la papeleta a la BBDD para que ella se encargue. Si tenemos que hacer cálculos, es mejor tirar de SQL para que nos los calcule. Recuerdo incluso un proyecto de una importante empresa de procesamiento de información, donde abusaban tanto de la BBDD que la utilizaban incluso para realizar cálculos intermedios. El gasto en operaciones de entrada/salida (IOP) era brutal. Miles de QPS (Queries Per Second) que se podrían hacer sin problema en el proceso sin tener que acceder a la BBDD.
La solución propuesta estaba clara: había que leer al principio, procesar la información y solo escribir al final. En fin, no les culpo; aunque en la mayoría de los casos están justificados estos abusos, el problema es que ante una necesidad de persistencia o procesamiento de la información, solemos adjudicarla a la BBDD sin pestañear ni pensar en otras posibles soluciones con sus pros y contras.
Ejemplos Comunes de Abuso y Soluciones Alternativas
1. Uso de bases de datos para caché
Los sistemas de caché como Redis o Memcached están diseñados específicamente para almacenar datos en memoria y acceder a ellos de manera extremadamente rápida, evitando el golpe de rendimiento que supone acceder siempre a la base de datos.
2. Cálculos en la base de datos
Si bien es posible hacer cálculos complejos con SQL, a menudo es más eficiente realizarlos en el backend utilizando lenguajes de programación que son más adecuados para el manejo de estructuras y algoritmos complejos.
3. Demasiadas relaciones en una sola consulta
El desnormalización excesiva puede llevar a consultas muy complejas que son difíciles de optimizar. En su lugar, considera dividir las consultas en varias más pequeñas y manejar las relaciones en la lógica de tu aplicación.
4. Log de eventos en la base de datos principal
Utilizar la base de datos principal para almacenar logs o registros de eventos puede hacerla extremadamente lenta. Una solución es emplear herramientas especializadas en logging como Elasticsearch, que están optimizadas para búsquedas rápidas y almacenamiento eficiente de grandes volúmenes de datos.
5. Validaciones y lógica empresarial en el SQL
En lugar de trasladar todas las validaciones y la lógica empresarial a consultas SQL, es preferible mantener esos controles en el código de la aplicación para que sean más manejables y comprensibles.
Buenas Prácticas y Reflexión Final
Como dice el tito Uncle Bob, a veces un archivo es suficiente para añadir persistencia. De todo este abuso hay ganadores claros; si no, que se lo pregunten a AWS RDS, donde la factura por IOPs suele doler bastante por abusar de la BBDD y hacer un mal diseño.
Es crucial que, como desarrolladores, comprendamos el impacto de nuestras decisiones y exploremos alternativas antes de recurrir a las bases de datos como solución de todos nuestros problemas. Con una planificación adecuada y el uso de buenas prácticas, podemos evitar muchos de los problemas comunes y hacer un uso más eficiente y económico de nuestros recursos.
¿Qué técnicas utilizas para evitar abusar de las bases de datos en tus proyectos? Comparte tus experiencias en los comentarios.