Qué es MongoDB

Durante décadas se han estado utilizando bases de datos relacionales para la gestión de datos. Sin embargo, el tipo de datos que componen las aplicaciones web modernas ha hecho que bases de datos con un enfoque orientado a documentos como MongoDB se posicionen como serios competidores al modelo tradicional. Descubre cómo funciona este nuevo enfoque y qué ventajas ofrece.

¿Qué hace diferente a MongoDB?

MongoDB, derivado del inglés “humongous” (español: inmenso, enorme), es un sistema de base de datos orientado a documentos. A diferencia de bases de datos relacionales, en las que los datos se almacenan en una tabla estructurada, en las bases de datos MongoDB los datos se almacenan en las llamadas colecciones no estructuradas.

Además, es importante destacar que MongoDB es un sistema de bases de datos NoSQL, pues no utiliza el lenguaje de consulta SQL. En su lugar, MongoDB emplea un lenguaje de consulta conocido como MQL, basado en JavaScript. Este enfoque permite que los registros se almacenen en formato BSON, que sigue el modelo del formato JSON. Esta característica posibilita el soporte para todos los tipos de datos de JavaScript, lo que hace de MongoDB la elección ideal para numerosas plataformas que se basan en este lenguaje de programación.

Otra característica destacada de las bases de datos MongoDB es su capacidad de escalabilidad horizontal. Es decir, los datos de una base de datos pueden distribuirse entre múltiples servidores en lugar de concentrarse en una ubicación central, lo que puede tener un impacto positivo en la disponibilidad de los datos y en el rendimiento general de la base de datos. En general, este enfoque de escalabilidad suele resultar más rentable que la alternativa de potenciar un único servidor con hardware de mayor capacidad, lo que se conoce como escalabilidad vertical.

¿Cómo funciona MongoDB?

MongoDB, en contraste con MySQL, adopta un enfoque de almacenamiento de datos distinto al funcionar de forma orientada a documentos. En lugar de almacenar los datos en forma de tabla, en la que cada fila está formada por un conjunto fijo de campos que deben rellenarse con valores, MongoDB almacena los datos en documentos BSON sin estructurar. Cada documento puede contener la cantidad de campos que se desee, y no es necesario que estos coincidan entre sí. De esta manera, los documentos en MongoDB reemplazarían las filas en una tabla SQL, y los campos definidos en estos documentos sustituirían a las columnas. Hay varias herramientas disponibles para trabajar con bases de datos MongoDB. Además de la conocida MongoDB Shell, también existe MongoDB Compass, una herramienta gráfica para gestionar bases de datos MongoDB. Sin embargo, nos centraremos en los comandos shell.

Como MQL se basa en JavaSript, hay bastantes funciones por defecto que permiten realizar consultas y usar comandos complejos. No obstante, todos los comandos de escritura y lectura tienen en principio la misma estructura (que puede verse en el siguiente ejemplo). Además de estos comandos, hay muchos otros que permiten la gestión de tu base de datos MongoDB. Todo ellos aparecen explicados en la documentación de MongoDB.

db.estudiantes.find({ Apellido: "Pérez" })
db.estudiantes.updateOne({ Name: "Pérez" }, { $set: { Semester: 2 } })
db.estudiantes.deleteOne({ Name: "Martín" })
db.estudiantes.insertOne({
  Name: "Alegre",
  Alter: 18,
  Semester: 1
})

El ejemplo anterior muestra varios comandos consecutivos con la misma estructura en una base de datos MongoDB. “db” hace referencia a toda la base de datos y “estudiantes”, a la carpeta de la colección en la que se van a realizar las distintas operaciones. Después se incluye el método que se va a aplicar.

El método find() sirve para buscar documentos concretos. Si se deja vacío este campo, se obtendrán todos los documentos de la colección. En el ejemplo anterior, sin embargo, se buscan todos los documentos en los que el campo “Apellido” tiene el valor “Pérez”.

El método updateOne() puede utilizarse para sobrescribir valores en un documento. En el ejemplo, en este método se incluyen dos argumentos. El primero es el llamado criterio de selección, y el segundo es el par clave-valor que se desea sobrescribir. En este caso, en el campo “Semestre” se escribirá un 2 para todos los estudiantes con apellido “Pérez”.

El método deleteOne() recibe un único argumento, con el que se indica el criterio de selección según el cual deben eliminarse los documentos. En el ejemplo, se eliminan todos los estudiantes con apellido “Martín” de la base de datos. Por otro lado, el método insertOne() también recibe un argumento, aunque en este caso se trata del contenido completo en formato JSON del documento que se va a insertar. Al insertar documentos, es importante recordar que cada documento de una colección MongoDB consta de un ID de objeto de 12 bytes en formato hexadecimal. Si no se especifica este parámetro al insertar el documento, MongoDB genera automáticamente un ID.

Ventajas de MongoDB

El diseño de MongoDB presenta varias ventajas para los usuarios, sobre todo en lo que a flexibilidad y escalabilidad respecta. Por un lado, el almacenamiento de datos basado en documentos posibilita que no todas las entradas tengan los mismos atributos, como es el caso de las bases de datos relacionales. Gracias a ello, es posible almacenar datos no estructurados y semiestructurados. Además, se pueden reestructurar los documentos individuales (por ejemplo, añadiendo o eliminando un atributo/campo) sin tener que hacerlo con otros documentos de la misma carpeta. Dado que BSON es el formato en el que se almacenan los documentos, se juega con otra ventaja clave: las bases de datos MongoDB ofrecen un alto grado de compatibilidad con muchas plataformas JavaScript comunes.

Además del almacenamiento de datos no estructurados, MongoDB también ofrece un alto grado de escalabilidad horizontal sin violar los principios del modelo ACID (Atomicidad, Consistencia, Aislamiento, Durabilidad). No obstante, con las bases de datos distribuidas es difícil garantizar la coherencia, pues no todos los datos se almacenan en el mismo servidor. Si se realizan cambios en varios documentos al mismo tiempo, estos no pueden ser adoptados de forma inmediata por todos los servidores implicados. Si el volumen de peticiones es alto, pueden generarse datos incoherentes. No obstante, desde el lanzamiento de MongoDB 4.2 en 2019, es posible realizar cambios en varios documentos en diferentes servidores sin poner en riesgo la consistencia o la disponibilidad de los datos.

Posibles escenarios de aplicación para MongoDB

MongoDB siempre es una excelente opción cuando se quieren realizar proyectos web apoyados en grandes conjuntos de datos sin estructurar. Sin estar atado a ningún esquema, el trabajo basado en documentos es el método ideal para gestionar un gran número de datos diferentes que deben ser almacenados y procesados rápidamente.

La escalabilidad horizontal de este sistema de bases de datos es casi ilimitada, pues las bases de datos se pueden distribuir fácilmente en diferentes servidores sin comprometer la funcionalidad. Para garantizar la seguridad y la disponibilidad de los datos a largo plazo, MongoDB facilita la creación de copias de la totalidad de los datos y las pone a disposición en diferentes servidores. Esta base de datos orientada a documentos también juega un papel importante a la hora de resumir grandes cantidades de datos de una o más fuentes.

Así, la implementación de MongoDB resulta apropiada para casi todo tipo de proyectos web que quieran caracterizarse por:

  • Escalabilidad: si tu proyecto web está en crecimiento, probablemente aumentará el número de visitas y solicitudes, lo que demanda una mayor capacidad de respuesta por parte de la base de datos.
  • Disponibilidad: una de las prioridades de todo proyecto web es la disponibilidad en todo momento, incluso en el caso de fallos en el servidor.
  • Flexibilidad: un proyecto debe poder ajustarse en cualquier momento de forma dinámica.

¿No sabes cuál es el modelo de base de datos más apropiado para tu proyecto? No es necesario que tomes una decisión, también es posible decantarse por una combinación de diferentes modelos que puede representar la solución perfecta para tus necesidades.

Consejo

¿Te has decidido por MongoDB y quieres empezar a usar tu base de datos? Nuestro artículo sobre la instalación de MongoDB te puede ayudar.