Las bases de datos relacionales o de lenguaje de consulta SQL se empezaron a usar en los años 80 y a día de hoy siguen siendo la opción más empleada para el almacenamiento de datos persistente. Sin embargo, en los últimos años, las bases de datos NoSQL han ido haciéndose más populares como respuesta al crecimiento de Internet y a la necesidad de acelerar la velocidad y procesamiento de los datos no estructurados, pero ¿Son estas bases de datos mejores que las relacionales? ¿Cuál debo elegir para un proyecto?. Comparamos MongoDB vs MySQL.
Bases de datos SQL
Las bases de datos relacionales se caracterizan por ser una colección ordenada de registros que se organizan en un conjunto de tablas con filas y columnas relacionadas entre sí a través de identificadores. Para optimizar el uso y evitar datos duplicados los datos se separan en diferentes tablas que se relacionan entre sí mediante claves (FOREIGN_KEY).
En este modelo los datos están fuertemente estructurados: las tablas contienen un número fijo de campos que contienen un tipo de datos específico. Es decir, las bases de datos SQL requieren un esquema fijo predefinido y todos los datos deben seguir una estructura similar. En consecuencia, se quiere una gran preparación del sistema por adelantado. Además, la flexibilidad se ve comprometida, ya que las posibles modificaciones en la estructura pueden perturbar el sistema.
En cuanto a la escalabilidad, las bases de datos SQL siguen un enfoque vertical, lo que implica tener que añadir más recursos físicos y virtuales al servidor: ampliar la capacidad de computación (CPU), más memoria (RAM) o más capacidad de almacenamiento (SSD). Es decir, un servidor más grande para soportar más datos. Esto tienen limitaciones, ya que el hardware llega un momento en que no puede crecer más.
Por otra parte, las bases de datos SQL suelen seguir las propiedades ACID: atomicidad, consistencia, aislamiento y durabilidad. Propiedades que las bases de datos relacionales aportan a los sistemas y les permiten ser más robustos y menos vulnerables ante fallos.
Bases de datos NoSQL
Las bases de datos no relacionales son las que no tienen un identificador que sirva de relación entre un conjunto de datos y otro. En este caso la información puede estar almacenada de varias maneras, en el caso de MongoDB se organiza mediante colecciones.
Estas bases de datos siguen un esquema dinámico y no requieren una estructura predefinida, por lo que las modificaciones son más fáciles de ejecutar y no es necesario un esquema exacto de lo que se va a almacenar. Por tanto, las bases de datos NoSQL tienen mayor flexibilidad, aunque esta característica también puede comprometer la fiabilidad.
En cuanto a la escalabilidad, las bases de datos NoSQL siguen un enfoque horizontal, relacionado con añadir más instancias o nodos a la base de datos para lidiar con una mayor carga de trabajo. Los objetos de las bases de datos no relacionales pueden estar en diferentes servidores, lo que las hace altamente escalables y rápidas de consultar.
Por otra parte, en las bases de datos no relacionales la fiabilidad y consistencia de los datos que se consigue al seguir las propiedades ACID no suele ser la prioridad número uno, ya que esto puede comprometer la velocidad y la alta disponibilidad del sistema. En este caso, la prioridad tiende a centrarse en la flexibilidad y en una alta tasa de transacciones, por lo que en muchos sistemas de bases de datos NoSQL se sigue el modelo BASE: Basically available, Soft state y Eventually consistent, que ofrece una mayor disponibilidad, escalabilidad y flexibilidad de las transacciones de datos.
Diferencias entre MySQL y MongoDB
Ahora que ya hemos visto las principales diferencias entre una base de datos relacional y una no relacional, podemos comenzar con este versus de MySQL y MongoDB. Hay muchos sistemas de bases de datos, pero casi todos pueden categorizarse como relacionales o no relacionales. En este caso hemos priorizado MySQL y MongoDB por ser los más populares. Los siguientes puntos posiblemente sean extrapolables a otros sistemas de este tipo.
MySQL | MongoDB | |
Definición | Sistema de gestión de bases de datos relacionales de código abierto y multiplataforma. | Sistema de gestión de bases de datos NoSQL de código abierto que almacena datos en formato similar a JSON. |
Estructura | MySQL almacena cada uno de los registros en tablas y puede acceder a ellas utilizando las consultas SQL. | MongoDB almacena cada registro individual en documentos de tipo JSON que pueden variar en sus estructuras. |
SQL o NoSQL | MySQL utiliza el lenguaje SQL para proceder y acceder a la base de datos. Las entradas solo pueden entrar con un esquema definido. SQL no permite trabajar con datos no estructuras y semiestructurados. | MongoBD nos permite definir y adherirnos a la estructura predefinida de los datos entrantes, y trabajar con datos no estructurados y semiestructurados. Su esquema se puede cambiar. |
Lenguaje Query | SQL | MQL (Generalmente Javascript mediante el uso de un ORM) |
Características | Seguro, escalable, sigue la arquitectura cliente-servidor, proporciona un alto rendimiento, permite la reversión de transacciones, commits y la recuperación de fallos. Es flexible, soporta estructura de esquemas y soporta Unicode. | Admite consultas ad hoc, proporciona la duplicación de los datos que se ejecutan en varios servidores, soporta la replicación maestro-esclavo, tiene balanceo de carga automático, no tiene ningún esquema, soporta el modelo de datos tipo JSON. |
Flexibilidad | Una vez definido el diseño del esquema no se puede modificar. | El diseño de su esquema puede cambiarse. |
Terminología | Tabla Fila Columnas Joins | Colección Documento Campo Documento incrustado, enlace |
Escalabilidad | Enfoque vertical | Enfoque horizontal |
Ventajas y desventajas de MySQL
Ventajas
- Posibilidad de abstracción de nuestra base de datos con algún ORM estilo Doctrine o Hibernate.
- Almacenamiento de datos totalmente organizado y jerarquizado con claves primarias y foráneas.
- Nos permite evitar la duplicidad de registros.
- Seguridad basada en privilegios con uso de contraseña y seguridad de la capa de transporte (SSL)
- Es una tecnología madura, muy aceptada por la comunidad y con estándares bien definidos, por lo que es compatible con diversos lenguajes de programación, sistemas operativos y plataformas.
Desventajas
- Difícil de escalar.
- Estructura rígida. Si nuestro sistema evoluciona, tendremos que hacer diseñado la base de datos conforme a estos posibles nuevos requerimientos.
- Requiere más espacio de almacenamiento frente a una base de datos NoSQL.
- Transacciones de datos más pesadas frente a las bases de datos NoSQL.
- Límites en campos de las tablas que nos podrán hacer perder datos si no los configuramos adecuadamente según el tamaño del dato que nos puedan introducir los usuarios.
MongoDB Pros y Contras
Pros
- Su esquema dinámico y flexible nos permite modificar la estructura de nuestra base de datos a medida que ingresamos registros nuevos.
- No se requieren potentes recursos para poder trabajar con bases de datos NoSQL.
- Motores de almacenamiento integrado.
- Menor tiempo de recuperación ante fallas.
- Optimización de las consultas para grandes cantidades de datos almacenados.
Contras
- Aún es una tecnología joven.
- Incompatibilidad con consultas SQL.
- Falta de estandarización entre las diferentes bases de datos NoSQL.
- No permite hacer Joins para consultas.
¿Cuál elegir?
Existen diferentes factores que entran en juego a la hora de elegir entre bases de datos relacionales y NoSQL como, por ejemplo, lo estáticos que serán sus datos, el nivel de dificultad de la herramienta para su equipo, el numero de transacciones y la complejidad de las mismas, la expectativa de actividad o crecimiento o la seguridad de los datos.
- En general, un proyecto con datos que se actualizan con frecuencia se beneficiará más de una base de datos relacional. Por otro lado, un proyecto que rara vez actualiza la información se beneficiará más de una base de datos NoSQL.
- Otro aspecto a tener en cuento es la capacidad del equipo para trabajar con cualquiera de los productos. En esta área, MySQL generalmente tiene una ventaja sobre MongoDB.
- Si para tu proyecto es importante una alta disponibilidad de los datos, con una recuperación automática, rápida e instantánea, lo mejor es optar por una base de datos NoSQL. Sin embargo, si tu proyecto requiere de una alta tasa de transacciones o búsquedas complejas, MySQL ofrece ventajas vs MongoDB.
- Si esperamos crecer mucho y rápido y tienes un sistema inestable y cambiante, puedes beneficiarte de la escalabilidad y flexibilidad de las bases de datos NoSQL.
- Por último, si la seguridad y la fiabilidad de los datos es la prioridad del proyecto, MySQL es la mejor opción.
Además, si te está costando encontrar trabajo como programador tenemois una Guía para conseguir trabajo como programador totalmente gratuita.
Autor
Guillermo Martínez
Desarrollador Junior en OXYGEN Training