Durante décadas se han estado uti­li­za­n­do bases de datos re­la­cio­na­les para la gestión de datos. Sin embargo, el tipo de datos que componen las apli­ca­cio­nes web modernas ha hecho que bases de datos con un enfoque orientado a do­cu­me­n­tos como MongoDB se po­si­cio­nen como serios co­m­pe­ti­do­res al modelo tra­di­cio­nal. 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 do­cu­me­n­tos. A di­fe­re­n­cia de bases de datos re­la­cio­na­les, en las que los datos se almacenan en una tabla es­tru­c­tu­ra­da, en las bases de datos MongoDB los datos se almacenan en las llamadas co­le­c­cio­nes no es­tru­c­tu­ra­das.

Además, es im­po­r­ta­n­te 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 Ja­va­S­cri­pt. Este enfoque permite que los registros se almacenen en formato BSON, que sigue el modelo del formato JSON. Esta ca­ra­c­te­rí­s­ti­ca po­si­bi­li­ta el soporte para todos los tipos de datos de Ja­va­S­cri­pt, lo que hace de MongoDB la elección ideal para numerosas pla­ta­fo­r­mas que se basan en este lenguaje de pro­gra­ma­ción.

Otra ca­ra­c­te­rí­s­ti­ca destacada de las bases de datos MongoDB es su capacidad de es­ca­la­bi­li­dad ho­ri­zo­n­tal. Es decir, los datos de una base de datos pueden di­s­tri­bui­r­se entre múltiples se­r­vi­do­res en lugar de co­n­ce­n­trar­se en una ubicación central, lo que puede tener un impacto positivo en la di­s­po­ni­bi­li­dad de los datos y en el re­n­di­mie­n­to general de la base de datos. En general, este enfoque de es­ca­la­bi­li­dad suele resultar más rentable que la al­te­r­na­ti­va de potenciar un único servidor con hardware de mayor capacidad, lo que se conoce como es­ca­la­bi­li­dad vertical.

¿Cómo funciona MongoDB?

MongoDB, en contraste con MySQL, adopta un enfoque de al­ma­ce­na­mie­n­to de datos distinto al funcionar de forma orientada a do­cu­me­n­tos. 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 re­lle­nar­se con valores, MongoDB almacena los datos en do­cu­me­n­tos BSON sin es­tru­c­tu­rar. Cada documento puede contener la cantidad de campos que se desee, y no es necesario que estos coincidan entre sí. De esta manera, los do­cu­me­n­tos en MongoDB re­em­pla­za­rían las filas en una tabla SQL, y los campos definidos en estos do­cu­me­n­tos su­s­ti­tui­rían a las columnas. Hay varias he­rra­mie­n­tas di­s­po­ni­bles para trabajar con bases de datos MongoDB. Además de la conocida MongoDB Shell, también existe MongoDB Compass, una he­rra­mie­n­ta gráfica para gestionar bases de datos MongoDB. Sin embargo, nos ce­n­tra­re­mos 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 es­tru­c­tu­ra (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 ex­pli­ca­dos en la do­cu­me­n­ta­ció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 co­n­se­cu­ti­vos con la misma es­tru­c­tu­ra en una base de datos MongoDB. “db” hace re­fe­re­n­cia a toda la base de datos y “es­tu­dia­n­tes”, a la carpeta de la colección en la que se van a realizar las distintas ope­ra­cio­nes. Después se incluye el método que se va a aplicar.

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

El método updateOne() puede uti­li­zar­se para so­bre­s­cri­bir valores en un documento. En el ejemplo, en este método se incluyen dos ar­gu­me­n­tos. El primero es el llamado criterio de selección, y el segundo es el par clave-valor que se desea so­bre­s­cri­bir. En este caso, en el campo “Semestre” se escribirá un 2 para todos los es­tu­dia­n­tes 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 eli­mi­nar­se los do­cu­me­n­tos. En el ejemplo, se eliminan todos los es­tu­dia­n­tes 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 do­cu­me­n­tos, es im­po­r­ta­n­te recordar que cada documento de una colección MongoDB consta de un ID de objeto de 12 bytes en formato he­xa­de­ci­mal. Si no se es­pe­ci­fi­ca este parámetro al insertar el documento, MongoDB genera au­to­má­ti­ca­me­n­te un ID.

Ventajas de MongoDB

El diseño de MongoDB presenta varias ventajas para los usuarios, sobre todo en lo que a fle­xi­bi­li­dad y es­ca­la­bi­li­dad respecta. Por un lado, el al­ma­ce­na­mie­n­to de datos basado en do­cu­me­n­tos po­si­bi­li­ta que no todas las entradas tengan los mismos atributos, como es el caso de las bases de datos re­la­cio­na­les. Gracias a ello, es posible almacenar datos no es­tru­c­tu­ra­dos y se­mie­s­tru­c­tu­ra­dos. Además, se pueden re­es­tru­c­tu­rar los do­cu­me­n­tos in­di­vi­dua­les (por ejemplo, añadiendo o eli­mi­na­n­do un atributo/campo) sin tener que hacerlo con otros do­cu­me­n­tos de la misma carpeta. Dado que BSON es el formato en el que se almacenan los do­cu­me­n­tos, se juega con otra ventaja clave: las bases de datos MongoDB ofrecen un alto grado de co­m­pa­ti­bi­li­dad con muchas pla­ta­fo­r­mas Ja­va­S­cri­pt comunes.

Además del al­ma­ce­na­mie­n­to de datos no es­tru­c­tu­ra­dos, MongoDB también ofrece un alto grado de es­ca­la­bi­li­dad ho­ri­zo­n­tal sin violar los pri­n­ci­pios del modelo ACID (Ato­mi­ci­dad, Co­n­si­s­te­n­cia, Ai­s­la­mie­n­to, Du­ra­bi­li­dad). No obstante, con las bases de datos di­s­tri­bui­das es difícil ga­ra­n­ti­zar la co­he­re­n­cia, pues no todos los datos se almacenan en el mismo servidor. Si se realizan cambios en varios do­cu­me­n­tos al mismo tiempo, estos no pueden ser adoptados de forma inmediata por todos los se­r­vi­do­res im­pli­ca­dos. Si el volumen de pe­ti­cio­nes es alto, pueden generarse datos in­cohe­re­n­tes. No obstante, desde el la­n­za­mie­n­to de MongoDB 4.2 en 2019, es posible realizar cambios en varios do­cu­me­n­tos en di­fe­re­n­tes se­r­vi­do­res sin poner en riesgo la co­n­si­s­te­n­cia o la di­s­po­ni­bi­li­dad de los datos.

Posibles es­ce­na­rios de apli­ca­ción para MongoDB

MongoDB siempre es una excelente opción cuando se quieren realizar proyectos web apoyados en grandes conjuntos de datos sin es­tru­c­tu­rar. Sin estar atado a ningún esquema, el trabajo basado en do­cu­me­n­tos es el método ideal para gestionar un gran número de datos di­fe­re­n­tes que deben ser al­ma­ce­na­dos y pro­ce­sa­dos rá­pi­da­me­n­te.

La es­ca­la­bi­li­dad ho­ri­zo­n­tal de este sistema de bases de datos es casi ilimitada, pues las bases de datos se pueden di­s­tri­buir fá­ci­l­me­n­te en di­fe­re­n­tes se­r­vi­do­res sin co­m­pro­me­ter la fu­n­cio­na­li­dad. Para ga­ra­n­ti­zar la seguridad y la di­s­po­ni­bi­li­dad de los datos a largo plazo, MongoDB facilita la creación de copias de la totalidad de los datos y las pone a di­s­po­si­ción en di­fe­re­n­tes se­r­vi­do­res. Esta base de datos orientada a do­cu­me­n­tos también juega un papel im­po­r­ta­n­te a la hora de resumir grandes ca­n­ti­da­des de datos de una o más fuentes.

Así, la im­ple­me­n­ta­ción de MongoDB resulta apropiada para casi todo tipo de proyectos web que quieran ca­ra­c­te­ri­zar­se por:

  • Es­ca­la­bi­li­dad: si tu proyecto web está en cre­ci­mie­n­to, pro­ba­ble­me­n­te aumentará el número de visitas y so­li­ci­tu­des, lo que demanda una mayor capacidad de respuesta por parte de la base de datos.
  • Di­s­po­ni­bi­li­dad: una de las prio­ri­da­des de todo proyecto web es la di­s­po­ni­bi­li­dad en todo momento, incluso en el caso de fallos en el servidor.
  • Fle­xi­bi­li­dad: 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 de­ca­n­tar­se por una co­m­bi­na­ción de di­fe­re­n­tes modelos que puede re­pre­se­n­tar la solución perfecta para tus ne­ce­si­da­des.

Consejo

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

Ir al menú principal