SQL vs NoSQL
Introducción
Cuando hablamos de temas relacionados con los Data Centers, los primeros temas que se nos vienen a la cabeza suelen ser especificaciones de hardware y red, e incluso temas de virtualización. Otro tema muy relevante que no se suele asociar tanto con los centros de datos pero que creemos que merece la pena tener un post dedicado es la forma en la que se estructuran los datos que se guardan en estos centros de datos, ya que, como su nombre indica, son precisamente centros que entre otras funciones tienen las de almacenar, consultar, modificar y eliminar datos.
En el mundo de la programación se suele decir que un buen informático no es ese que programa con menos líneas de código o más rápido, sinó aquel que puede analizar un problema y encontrar las estructuras de datos que haran que ese problema se pueda solucionar de la forma más óptima y sencilla posible, ahorrando tanto costos temporales como espaciales (aunque se suelen sacrificar los costos espaciales frente a los temporales debido a que el espacio en disco es muy barato comparado con el valor que se le atribuye al tiempo).
Así pues, en este post se compararán las bases de datos relacionales con las no relacionales.
Bases de datos relacionales (SQL)
Cuando pensamos en bases de datos, normalmente imaginamos directamente una base de datos estructurada en tablas relacionadas entre si (lo que vendría a ser una base de datos SQL), ya que estas son muy populares.
El principio de las bases de datos relacionales se basa en la organización de la información en trozos pequeños (tablas), que se relacionan entre si mediante la relación de identificadores (una especie de punteros que hacen que algunos campos de algunas tablas apunten a otros campos de otras tablas para evitar así repetir una información).
En el ámbito informático se habla mucho de ACID (Atomicidad, Consistencia, Aislamiento y Durabilidad). Estas son propiedades que las bases de datos relacionales aportan a los sistemas y les permiten ser más robustos y menos vulnerables ante fallos.
Dos de las bases de datos relacionales más usadas y conocidas son MySQL y PostgreSQL, ambas enseñadas en la asignatura de bases de datos de La Salle.
Bases de datos no relacionales (NoSQL)
Como su propio nombre indica, las bases de datos no relacionales son las que, a diferencia de las relacionales, no tienen un identificador que sirva de relación entre un conjunto de datos y otros, es decir que no tienen relaciones entre si (realmente existen esas relaciones en muchos lenguajes como MongoDB, aunque la gracia es reducir su uso al mínimo o incluso eliminarlo). La información se organiza normalmente mediante documentos (archivos JSON por ejemplo) y es muy útil cuando no tenemos un esquema exacto de lo que se va a almacenar.
La base de datos no relacional más popular y más usada actualmente es MongoDB, aunque existen alternativas a esta orientadas a arquitecturas distribuidas, big data y IoT. Entre estas se encuentra Cassandra, por ejemplo.
SQL vs NoSQL
Aunque ambos tipos de bases de datos son perfectamente válidos, hay casos en los que es mejor usar una base de datos relacional o una no relacional. Aunque no hay forma de poder saber cuál de las dos va a tener mejor rendimiento a no ser que se pruebe (y aún así es difícil de medir y depende de como se estructuren los datos y qué lenguaje se use), se pueden seguir unas pautas básicas para identificar las necesidades de la base de datos respecto el problema:
- Volumen de datos: cuando el volumende datos no crece o lo hace poco a poco, puede ser un indicativo para usar una base de datos SQL, mientras que si el volumen de datos crece muy rápidamente en momento puntuales, ese puede ser un indicativo para usar una base de datos NoSQL.
- Necesiades de proceso: cuando las necesidades de proceso se pueden asumir en un solo servidor se puede usar una base de datos SQL, mientras que cuando no se pueden preveer las necesidades de proceso o incluso cuando se prevé que se necesitará una capacidad de proceso superior a la que ofrece un único servidor, se recomienda usar una base de datos NoSQL, por la facilidad que suelen ofrecer estas para montar sistemas ditribuidos.
- Picos de uso: cuando no hay picos de uso en el sistema por parte de los usuarios (a parte de los ya previstos en el análisis del problema), se puede usar una base de datos SQL, mientras que si tenemos picos de uso por parte de los usuarios en múltiples ocasiones, sería más adecuado hacer uso de NoSQL.
Conclusiones
Si bien tanto SQL como NoSQL son válidos y usados en una gran variedad de contextos y ocasiones, a la hora de compararlos se puede ver que si se trabaja bajo un entorno controlado, con poco crecimiento y con un comportamiento estático y sin sorpresas, SQL puede ser la mejor opción. No obstante, los servicios en la nube se encuentran en entornos no controlados, con un crecimiento enorme e irregular, asi como un comportamiento de caracter impredecible. Todo eso, juntamente con las herramientas ya existentes para crear bases de datos con arquitecturas distribuidas, hace que cada día más proyectos alojados en data centers usen bases de datos no relacionales.
Autores
Joan Farràs Tasias
Ferran Montoliu Boneu