Reúne antipatrones frecuentes de MongoDB relacionados con modelado, arrays sin límite, consultas sin índices, datos inconsistentes, seguridad y operación.
Un antipatrón no es una regla prohibida en todo contexto. Es una decisión que parece conveniente al inicio, pero acumula coste, inconsistencia o riesgo cuando crecen los datos, la concurrencia o el equipo.
Texto
comodidad local
→ comportamiento oculto
→ escala o fallo
→ deuda operacional
Para reconocerlo pregunta: qué access pattern intenta resolver, qué supuesto de cardinalidad hace, cómo falla y qué evidencia permitiría mantenerlo o reemplazarlo.
Guardar perfil, historial, archivos y analíticas juntos obliga a leer y reescribir información innecesaria.
Síntomas:
FETCH costoso;
alta red y deserialización;
cache churn;
writes lentos;
documentos cercanos al límite.
Corrige con projection, subset pattern, GridFS para archivos grandes o separación por lifecycle. No fragmentes documentos pequeños únicamente por imitar un modelo relacional.
Embeber relaciones con lifecycle independiente genera duplicación masiva y fan-out de updates. Ejemplo: copiar el catálogo completo dentro de cada orden.
Distingue:
snapshot histórico necesario;
copia sincronizada;
referencia estable;
dato derivado.
La orden debe guardar nombre y precio vendidos, pero no todo el producto actual.
Sharding añade shard key, balancer, routers, operaciones distribuidas y complejidad de backup. No corrige queries sin índices ni documentos mal modelados.
Primero optimiza replica set. Shardea cuando capacidad, locality o escala lo requieren y existe una shard key defendible.
Una key monotónica puede concentrar writes; una key de baja cardinalidad produce chunks desequilibrados; una key ausente en queries genera scatter-gather.
Evalúa cardinalidad, frecuencia, distribución, targeting y crecimiento.
La mayoría de antipatrones nacen de ignorar cardinalidad, concurrencia o operación. MongoDB funciona mejor cuando los límites documentales, query shapes, índices y garantías están diseñados juntos. No corrijas por dogma: mide el coste, protege la invariantes y conserva una alternativa reversible.
Comprueba lo aprendido
¿Cuándo un array embebido deja de ser adecuado?
¿Por qué un índice por campo no reemplaza un compound?
¿Qué riesgo tiene read-modify-write?
¿Por qué sharding no corrige una query mala?
¿Qué diferencia existe entre réplica y backup?
¿Cómo decidirías si una denormalización es válida?