1. Introducción

MongoDB es una base de datos NoSQL orientada a documentos. A diferencia de las bases de datos relacionales tradicionales con sus tablas y filas, MongoDB almacena datos en documentos flexibles similares a JSON.

¿Qué es NoSQL?

NoSQL no significa "sin SQL", sino "Not Only SQL". Es la creencia de que tu capa de persistencia no necesariamente es responsabilidad de un único sistema. Puedes usar MySQL para ciertas partes de tu aplicación, Redis para otras y MongoDB para el resto.

¿Por qué MongoDB?

MongoDB debe verse como una alternativa directa a las bases de datos relacionales. Es una solución generalista que puede hacer lo que muchas otras herramientas hacen. Algunas cosas las hace mejor, otras peor.

Ventajas principales:

  • Esquema flexible: no necesitas definir la estructura de tus tablas de antemano
  • Documentos JSON: trabajas con objetos nativos de tu lenguaje de programación
  • Arrays como ciudadanos de primera clase: puedes almacenar listas directamente
  • Consultas potentes: con operadores y agregaciones avanzadas
  • Escalabilidad horizontal: mediante sharding
  • Alta disponibilidad: mediante replica sets

Teorema CAP

El teorema CAP (también llamado teorema de Brewer) establece que en un sistema distribuido solo puedes garantizar 2 de estas 3 propiedades simultáneamente:

  • Consistency (Consistencia): todos los nodos ven los mismos datos al mismo tiempo
  • Availability (Disponibilidad): el sistema siempre responde, aunque algún nodo falle
  • Partition tolerance (Tolerancia a particiones): el sistema funciona aunque haya fallos de red entre nodos

Cuando diseñas una base de datos distribuida, debes elegir qué propiedad estás dispuesto a sacrificar:

Combinación Descripción Ejemplos de bases de datos
CP Consistencia + Tolerancia a particiones. Sacrifica disponibilidad durante particiones de red MongoDB (configuración por defecto), HBase, Redis (en modo cluster)
AP Disponibilidad + Tolerancia a particiones. Sacrifica consistencia temporal Cassandra, CouchDB, DynamoDB
CA Consistencia + Disponibilidad. No tolera particiones de red (sistemas no distribuidos) PostgreSQL, MySQL, SQL Server (modo single-node)

MongoDB por defecto prioriza consistencia sobre disponibilidad. Cuando hay una partición de red, prefiere no responder antes que dar datos inconsistentes. Pero puedes configurarlo para que sea más disponible si lo necesitas.

ACID vs BASE

Las bases de datos tradicionales siguen el modelo ACID:

  • Atomicity (Atomicidad): las transacciones se completan totalmente o no se realizan
  • Consistency (Consistencia): los datos siempre cumplen las reglas definidas
  • Isolation (Aislamiento): las transacciones concurrentes no se afectan entre sí
  • Durability (Durabilidad): los datos confirmados nunca se pierden

MongoDB soporta transacciones ACID desde la versión 4.0, pero históricamente las bases de datos NoSQL han preferido el modelo BASE:

  • Basically Available (Básicamente disponible): el sistema responde la mayor parte del tiempo
  • Soft state (Estado flexible): el estado puede cambiar sin intervención externa por replicación
  • Eventual consistency (Consistencia eventual): los datos se volverán consistentes eventualmente

Esto significa que MongoDB puede operar en ambos mundos, dándote la flexibilidad de elegir según tus necesidades.

Conceptos clave

Antes de empezar, necesitas entender 6 conceptos:

  1. Database (base de datos): contenedor de nivel superior, como en sistemas relacionales
  2. Collection (colección): equivalente a una tabla, pero sin esquema fijo
  3. Document (documento): equivalente a una fila, pero en formato JSON
  4. Field (campo): equivalente a una columna
  5. Index (índice): mejora el rendimiento de las consultas
  6. Cursor: puntero al resultado de una consulta

La diferencia fundamental es que las bases de datos relacionales definen las columnas a nivel de tabla, mientras que MongoDB define los campos a nivel de documento. Cada documento en una colección puede tener campos completamente diferentes.

This work is under a Attribution-NonCommercial-NoDerivatives 4.0 International license.

Desafíos de programación atemporales y multiparadigmáticos

Desafíos de programación atemporales y multiparadigmáticos

Te encuentras ante un librillo de actividades, divididas en 2 niveles de dificultad. Te enfrentarás a los casos más comunes que te puedes encontrar en pruebas técnicas o aprender conceptos elementales de programación.

Buy the book

Will you buy me a coffee?

Comments

There are no comments yet.

Visitors in real time

You are alone: 🐱