Introducción: Particionar para escalar
Sharding divide datos en múltiples particiones (shards) distribuidas en distintos nodos.
Permite escalar almacenamiento y rendimiento, pero requiere reglas claras de distribución y enrutamiento.
El desafío principal es mantener consultas que atraviesan shards y balancear la carga.

Prompt: Database sharding across nodes, clean minimal style.
1. Naturaleza: Archipiélagos
Un archipiélago distribuye población y recursos en islas separadas.
Cada isla gestiona su propio espacio, pero se requiere navegación entre ellas.

Prompt: Islands connected by routes, soft illustration.
2. Mundo Real: Usuarios por región
Una plataforma global guarda usuarios por región para reducir latencia y balancear cargas.
Las consultas locales son rápidas; las globales requieren agregación.

Prompt: Global user distribution map, clean flat style.
3. Implementación en C#: Código Paso a Paso
public string GetShard(string userId)
{
int hash = userId.GetHashCode();
return (hash % 4).ToString();
}
Define una clave de partición estable y evita hot-shards con distribución desigual.
Considera herramientas de re-sharding cuando el crecimiento lo requiera.
4. Sharding vs Replicación
Replicación copia datos para disponibilidad; sharding divide datos para escalar capacidad.
Se pueden combinar: shards replicados para alta disponibilidad.
5. Diagrama UML

Prompt: UML diagram of sharding architecture, clean vector layout.

Prompt: Shard routing flow diagram, minimal infographic style.
⚠️ Cuándo NO Usar Sharding
- Si el volumen no justifica la complejidad.
- Si necesitas consultas globales frecuentes y complejas.
- Si no puedes invertir en monitoreo y balanceo.
💪 Ejercicio
Define una estrategia de partición para usuarios y simula el enrutamiento a shards.
Conclusión
Sharding permite escalar datos cuando un solo nodo no alcanza.
Con reglas claras de partición, mejora rendimiento y capacidad.