Шардирование
Шардирование — горизонтальное разбиение большой базы данных на несколько независимых частей (шардов) по ключу шардирования.
Стратегии
Range-based: shard 1 = A-M, shard 2 = N-Z. Простая реализация, риск hot shard. Hash-based: hash(key) % N. Равномерное распределение, сложное resharding. Directory-based: явный маппинг key→shard в lookup-сервисе. Гибкая, single point of failure.
Выбор ключа
Высокая кардинальность (много уникальных значений). Равномерное распределение (не user_id=null). Соответствие типовым запросам (запросы одного user должны попадать в один shard, чтобы избежать scatter-gather). Для iGaming часто user_id как shard key.
Проблемы
Cross-shard queries дороги (scatter-gather). Rebalancing при добавлении шарда — сложная операция. Transactions между шардами (distributed) сложнее. Uneven load: hot user или регион создаёт hot shard. Bookkeeping усложнён.
Продукты и подходы
MongoDB sharding. PostgreSQL: Citus, pg_shard. MySQL: Vitess (используется PlanetScale, YouTube). Cassandra: partition-based sharding из коробки. DynamoDB: managed sharding. ClickHouse для аналитики. Обычно нужно на масштабе >1M активных пользователей.