В чём разница между шардированием и партиционированием
Оба разделяют данные, но на разных уровнях:
🟢 Junior Level
Оба разделяют данные, но на разных уровнях:
- Партиционирование — разделение внутри одной БД на одном сервере
- Шардирование — разделение между разными серверами
Партиционирование (одна БД):
Table → Partition 1 (2023)
→ Partition 2 (2024)
→ Partition 3 (2025)
Шардирование (много серверов):
DB → Shard 1 (Server 1)
→ Shard 2 (Server 2)
→ Shard 3 (Server 3)
🟡 Middle Level
Партиционирование
-- PostgreSQL range partitioning
-- PARTITION BY RANGE — PostgreSQL физически разделяет таблицу на части.
-- Каждая партиция хранит свои данные, но логически это одна таблица.
CREATE TABLE orders (
id BIGINT,
created_at DATE
) PARTITION BY RANGE (created_at);
CREATE TABLE orders_2024 PARTITION OF orders
FOR VALUES FROM ('2024-01-01') TO ('2025-01-01');
CREATE TABLE orders_2025 PARTITION OF orders
FOR VALUES FROM ('2025-01-01') TO ('2026-01-01');
// Запрос WHERE created_at = ‘2023-06-15’ не попадает ни в одну партицию! // Нужна default partition или обработка ошибки.
Шардирование
MongoDB:
sh.shardCollection("db.orders", { user_id: "hashed" })
Cassandra:
Automatic sharding by partition key
Сравнение
| Партиционирование | Шардирование |
|---|---|
| Один сервер | Много серверов |
| Одна БД | Много БД |
| Проще | Сложнее |
| Для оптимизации запросов | Для масштабирования |
🔴 Senior Level
Когда что использовать
Если таблица помещается в память и запросы быстры — ни партиционирование, ни шардирование не нужны.
Партиционирование:
✅ Большая таблица, один сервер
✅ Оптимизация запросов по дате
✅ Архивирование старых данных
Шардирование:
✅ Один сервер не справляется
✅ Нужно горизонтальное масштабирование
✅ Данные не помещаются на один сервер
Best Practices
✅ Партиционирование для оптимизации
✅ Шардирование для масштабирования
✅ Начинайте с партиционирования
✅ Шардируйте когда упрётесь в лимиты
❌ Шардирование без необходимости
❌ Сложные cross-shard запросы
🎯 Шпаргалка для интервью
Обязательно знать:
- Партиционирование — разделение внутри ОДНОЙ БД на одном сервере
- Шардирование — разделение между РАЗНЫМИ серверами
- Партиционирование для оптимизации запросов, шардирование для масштабирования
- Начинайте с партиционирования — проще, меньше overhead
- PostgreSQL поддерживает PARTITION BY RANGE/LIST/HASH
- MongoDB/Cassandra поддерживают автоматическое шардирование
- Если таблица помещается в RAM и запросы быстры — ни то ни другое не нужно
Частые уточняющие вопросы:
- Когда партиционирование? Большая таблица, один сервер, оптимизация по дате, архивирование.
- Когда шардирование? Один сервер не справляется, данные не помещаются, нужно горизонтальное масштабирование.
- Можно ли комбинировать? Да — партиционирование внутри шарда.
- PostgreSQL партиционирование как работает? PARTITION BY RANGE/LIST — физическое разделение, логически одна таблица.
Красные флаги (НЕ говорить):
- “Партиционирование и шардирование — одно и то же” — нет, разные уровни
- “Шардирование всегда лучше” — нет, сложнее и дороже
- “Партиционирование решает проблему масштабирования” — нет, только одного сервера
- “Нужно шардировать сразу” — нет, начинайте когда упрётесь в лимиты
Связанные темы:
- [[10. Что такое шардирование sharding]]
- [[12. Как реализовать горизонтальное масштабирование микросервисов]]
- [[13. Что такое паттерн Database per Service]]
- [[14. Какие проблемы возникают при использовании общей базы данных]]
- [[26. Какие инструменты используются для оркестрации микросервисов]]