Шардирование — горизонтальное разделение данных между несколькими серверами. Каждый шард содержит уникальное подмножество данных.
Основные стратегии:
- Hash-based:
shard = hash(key) % num_shards— равномерное распределение - Range-based:
A-M → shard1, N-Z → shard2— удобно для range-запросов - Directory-based: lookup-таблица определяет расположение
Проблемы шардирования:
- Cross-shard JOIN — невозможен или очень дорог
- Distributed transactions — нужен 2PC или Saga
- Hot spots — один шард может быть нагружен больше других
- Решардирование — сложная операция