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:
- Database (base de datos): contenedor de nivel superior, como en sistemas relacionales
- Collection (colección): equivalente a una tabla, pero sin esquema fijo
- Document (documento): equivalente a una fila, pero en formato JSON
- Field (campo): equivalente a una columna
- Index (índice): mejora el rendimiento de las consultas
- 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.
Este trabajo está bajo una licencia Attribution-NonCommercial-NoDerivatives 4.0 International.
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.
Comprar el libro
Comentarios
Todavía no hay ningún comentario.