Introducción a MongoDB: Documentos y NoSQL

Última actualización: 07/05/2021

En esta entrada aprenderás sobre MongoDB, una base de datos documental NoSQL muy popular en la actualidad. Será un pequeño tutorial en el que repasaremos sus características más importantes, sus ventajas y también analizaremos algunas alternativas comunes a esta base de datos.

Qué es MongoDB

¿Qué es MongoDB?

MongoDB es una base de datos NoSQL open source orientada a almacenar documentos en formato JSON en colecciones. Debido a su arquitectura, permite escalar el sistema para almacenar grandes cantidades de datos.

En esta base de datos el esquema de los datos no es fijo y es posible modificar y añadir las propiedades de los documentos. Esto hace que sea muy flexible al almacenar diferentes tipos de documentos en las colecciones.

Búsquedas en el tiempo de MongoDB y Elasticsearch
Búsquedas en el tiempo de MongoDB (Azul) y Elasticsearch (Rojo)

Esta imagen nos muestra la gráfica de Google Trends con las búsquedas o popularidad de MongoDB y de Elasticsearch en el tiempo. Como vemos, tiene una gran popularidad en la actualidad y su uso se está extendiendo.

Las bases de datos en MongoDB almacenan colecciones, que son agrupaciones de documentos (las colecciones son equivalentes a las tablas en un modelo relacional). Cada documento puede ser único e independiente, con su propia estructura y campos. A cada documento se le asigna un identificador único en la colección llamado “_id”. Los documentos a su vez contienen campos, que serían equivalentes a las columnas en un modelo relacional.

A continuación, un ejemplo de documento sencillo:

{
    Nombre: Oscar,
    Ciudad: Madrid,
    Edad: 25
}

Arquitectura y Componentes

Como sabemos, MongoDB es una base de datos fácilmente escalable. Se pueden tener clústeres de cientos de nodos con millones de documentos almacenados.

Además incorpora una utilidad de consola que usa lenguaje Javascript. También, podemos usar alguna de las herramientas de gestión o clientes MongoDB GUI con interfaz gráfica para aumentar la productividad como MongoDB Compass.

MongoDB Atlas

MongoDB Atlas es el servicio cloud que proporciona esta base de datos gestionada en diferentes proveedores cloud, como AWS, Azure o Google Cloud (GCP). Incluye mecanismos de automatización y simplifica la gestión de la escalabilidad y seguridad de los datos.

Se trata de una solución multicloud, con la posibilidad de desplegar entre diferentes servicios y regiones para aumentar la disponibilidad de los datos. Podríamos compararla con soluciones como CosmosDB o Amazon DocumentDB.

Ventajas de MongoDB

En esta sección, veremos algunas de las razones por las que usar esta base de datos NoSQL:

  • Orientación a Documentos. La capacidad de almacenar directamente documentos en formato JSON convierte a MongoDB en una base de datos muy flexible y que reduce el tiempo de implementación de nuestras aplicaciones.
  • MongoDB usa expresiones regulares para hacer las consultas, que son más potentes y flexibles que el lenguaje SQL. Además, existen numerosos drivers para lenguajes de programación como PyMongo para Python, Jongo para Java, mgo para Go o Mongoose para Node.js.
  • Alta disponibilidad. MongoDB puede implementar replicación de los datos, manteniendo copias en varios nodos, que permiten mantener una alta disponibilidad y tolerancia a errores.
  • Escalabilidad. Al repartir los datos en múltiples nodos con el mecanismo de sharding, el sistema puede escalar horizontalmente y balancear la carga en varios servidores.

Ejemplos y Comandos Útiles

Para desplegar Mongo en nuestro sistema, podemos usar Docker. El repositorio docker hub nos proporciona imágenes oficiales con todo lo que necesitaremos.

El primer paso es definir una base de datos y una colección. Para crear o usar una base de datos en particular, usaremos el comando:

> use nombre_bd
switched to db nombre_db

Ahora, podemos listar todas las bases de datos con el comando

show dbs

Para mostrar las colecciones:

show collections o show tables

Para crear una colección nos basta con insertar un documento. Si la colección no existe, creará una nueva con ese nombre de forma automática. Por ejemplo, tomando el documento que definimos arriba, podemos insertarlo en una colección de la siguiente forma:

> db.Usuario.insert
(
    {
		"Nombre": "Oscar",
        "Ciudad": "Madrid",
        "Edad": 25
    }
)

WriteResult({ "nInserted" : 1 })

Para hacer una consulta, podemos pedir que nos devuelva todos los documentos que existen en una colección. Por ejemplo:

> db.Usuario.find({})
> db.Usuario.find({Nombre : "Oscar"}).foreach(printjson);

Replicación

Los Replica Sets en MongoDB con conjuntos de nodos de un clúster que contienen los mismos datos replicados.

En cada Replica Set solo hay un nodo primario, el resto de nodos son secundarios. Las lecturas y las escrituras de datos se realizan en el nodo primario. Aunque no está recomendado, también se puede configurar para permitir las lecturas de datos sobre nodos secundarios.

Si el nodo primario pierde la conectividad o no se encuentra disponible, se elige un nodo secundario para que actúe a partir de ese momento como nodo primario.

Alternativas a MongoDB

Tanto MongoDB como MySQL o PostgreSQL son bases de datos con un buen rendimiento. Debemos comprender sus diferencias para poder elegir la más adecuada en nuestro caso. MySQL y PostgreSQL son bases de datos relacionales (RDBMS) que nos permiten almacenar los datos en tablas y establecer relaciones para consultarlos con el lenguaje SQL.

La ventaja de MongoDB sobre estas bases de datos son las menores limitaciones en cuanto a esquemas y estructuras predefinidas para almacenar los datos. Editar un esquema en MySQL o PostgreSQL es mucho más complejo que en una base de datos documental. Por otro lado, las bases de datos relacionales como MySQL son superiores en consistencia de los datos, transacciones y seguridad.

Bases de datos RelacionalesMongoDB
TablasColecciones
FilasDocumentos
ColumnasCampos
JoinsDocumentos embebidos
Diferencias entre NoSQL documental y Bases de datos Relacionales

Entre las alternativas NoSQL que podríamos evaluar se encuentran las siguientes opciones:

Cursos de MongoDB y Formación

Aquí, puedes encontrar enlaces a los que, en mi opinión, son los tres mejores cursos para aprender MongoDB en Español y empezar a usar esta potente base de datos NoSQL en tus proyectos:

Paso 1:

Aprende MongoDB desde cero

Este curso te enseñará a usar MongoDB 4.x desde cero, incluyendo conceptos NoSQL, instalación y administración.

Paso 2:

Primeros pasos en MongoDB

En este curso de iniciación a MongoDB de 7 horas aprenderás las tareas básicas de gestión de datos: realizar consultas, inserciones y eliminaciones.

Paso 3:

Gestión avanzada de datos con MongoDB

Este curso avanzado de MongoDB te dará los conocimientos necesarios sobre mejora del rendimiento, gestión de índices y diseño.

Preguntas Frecuentes MongoDB – FAQ

¿Qué es MongoDB?

MongoDB es una base de datos NoSQL documental open source que proporciona alta escalabilidad y alta disponibilidad para almacenar documentos.

¿Qué es el sharding en MongoDB?

El sharding consiste en repartir los datos almacenados en diferentes hosts o nodos. De esta forma, el sistema puede escalar horizontalmente añadiendo nuevos nodos al clúster aumentando la capacidad de almacenamiento. Cada partición de los datos se denomina un shard

¿Qué es un Namespace en MongoDB?

Un namespace es la concatenación del nombre de la colección con el nombre de la base de datos en la que se almacena un documento.

¿Qué es un Replica Set en MongoDB?

Un replica set es un conjunto de nodos en un clúster de MongoDB que alojan los mismos datos replicados. Uno de estos nodos se denomina primario y es el que sirve los datos. El resto de nodos con el dataset se denominan secundarios.


¡Echa un ojo a mis listas de reproducción de Big Data y suscríbete al canal de Youtube para no perderte ningún vídeo nuevo!

Si te ayuda el contenido del blog, considera unirte a la lista de correo para estar al día de Big Data y cupones de formación

Deja una respuesta