En los últimos años el uso de bases no relacionales (NoSQL) ha aumentado exponencialmente, la mayor parte de las veces esto va asociado a casos de uso específicos, pero también he visto que muchos proyectos simplemente deciden utilizarlo porque es lo de "moda", o por ser el "hot new stuff", sin entender si realmente es lo que necesitan, o si quizá están preparando el camino para tener un problema a futuro por no haber analizado bien la problemática.
Elegir entre una base de datos NoSQL y una base de datos relacional depende de tus necesidades específicas. Aquí te explicaré las razones principales para optar por NoSQL en algunos casos y por bases de datos relacionales en otros.
NoSQL para nuevos usuarios
Si eres nuevo en NoSQL, es importante saber que estas bases de datos son ideales cuando:
- Escalabilidad horizontal es crucial: NoSQL brinda la capacidad de agregar servidores fácilmente para manejar un mayor volumen de datos y tráfico, lo que es útil si esperas un crecimiento rápido.
- Datos no estructurados o semiestructurados: NoSQL es excelente para datos que no encajan bien en tablas y columnas tradicionales, como documentos JSON o XML. El caso de uso más común para esto es cuando recibimos datos de diferentes sistemas o de diferentes fuentes, de esa manera siempre podremos almacenar lo que nos envían y en un proceso aparte
- Agilidad de desarrollo: NoSQL permite cambios en el esquema de datos sin interrupciones, lo que es útil en entornos ágiles de desarrollo de software.
Principales motores NoSQL
- MongoDB: Ampliamente utilizado, especialmente para aplicaciones web, es altamente escalable y admite documentos BSON.
- DynamoDB: Si utilizas AWS, esta será tu opción "de facto", fácil de usar y utiliza el esquema de un par entre llave y valor (key/value) permite crear índices es más campos, pero cada uno que se agregue aumentará el costo, así que hay que planificarlo bien.
- Cassandra: Ideal para aplicaciones de alto rendimiento, especialmente en tiempo real y aplicaciones distribuidas.
¿Cuándo convienen las Bases de datos relacionales?
Elegir una base de datos relacional tiene sentido en situaciones donde:
- Integridad y consistencia de datos son críticos: Si necesitas garantizar que tus datos estén siempre estructurados y relacionados de manera específica, las bases de datos relacionales son ideales.
- Transacciones complejas: Si tu aplicación requiere transacciones ACID (atómicas, coherentes, aisladas y duraderas), las bases de datos relacionales son la elección obvia.
- Consultas complejas y análisis: Si tus necesidades incluyen consultas SQL avanzadas y análisis de datos, una base de datos relacional es más adecuada. Este suele ser el mayor traspié que se encuentran la primera vez con NoSQL, cuando quieren hacer una consulta compleja en base a múltiples datos relacionados, si bien ya hay algunas soluciones para eso (inclusive poder usar un lenguaje similar al SQL) no fue para lo que se lo diseñó, así que presenta problemas que hacen que nos tardemos mucho más de lo que deberíamos y que están ya fácilmente resueltos en las bases relacionales tradicionales.
Principales motores de bases de datos relacionales
- MySQL / MariaDB: Ampliamente utilizado y de código abierto, es una excelente opción para aplicaciones web y empresariales. Está enfocado en tener un alto rendimiento para lectura de datos, aunque aún se queda por detrás en cuando a herramientas que otras bases transaccionales tienen por defecto.
- PostgreSQL: Con una sólida reputación por su integridad y soporte de datos geoespaciales, es ideal para aplicaciones exigentes. Toma un tiempo acostumbrarse a su configuración y herramientas, pero es una base sólida y que puede crecer con facilidad.
- MS SQL Server: La base de datos oficial de Microsoft, ha tenido algunas críticas durante el tiempo, pero si utilizas .NET y en especial la plataforma Azure, probablemente sea tu opción por defecto.
En resumen, la elección entre NoSQL y bases de datos relacionales depende de tus necesidades específicas. Para los nuevos usuarios de NoSQL, ten en cuenta la escalabilidad, la naturaleza de tus datos y la agilidad de desarrollo. Conoce los motores principales de NoSQL.
Si la integridad, las transacciones y las consultas complejas son fundamentales, opta por una base de datos relacional como MySQL o PostgreSQL. Ambos enfoques tienen sus ventajas, así que elige sabiamente según tus requisitos.
Antes de cerrar este artículo, existe una última opción, que es la de hacer un mix. En algunos proyectos en los que trabajé tuvimos una mezcla de necesidades, y ninguna de los 2 tipos de motores de bases de datos cubría nuestras expectativas, así que pensamos en un mix.
Los datos en "bruto" sin procesar y con una estructura que podía cambiar fácilmente se ingresaban en una base de datos NoSQL, donde podíamos crecer y atender solicitudes de clientes rápidamente y sin tener que esperar para poder dar una respuesta. Y luego en diferido, ya con un proceso por lotes tomábamos esa data, la procesábamos, estructurábamos y movíamos a una base de datos relacional donde podía ser utilizada con queries avanzados y obtener los resultados que esperábamos.
En pocas palabras, no existe una única solución, es necesario analizar cuál es el objetivo que seguimos con nuestro proyecto y diseñar la solución en base a eso.