Базы данных
Sharding: тест с выбором ответа
Шесть вопросов, проходящих сквозь весь юнит. Каждый отражает решение, которое вы принимаете у доски или в разгар инцидента — это не определение для пересказа, а компромисс, который нужно взвесить, когда одного Postgres уже не хватает.
Убедитесь, что вы связываете воедино выбор shard key, различие partitioning и sharding, ко-локацию, режим hot shard, cross-shard транзакции и online resharding — синтез, к которому вели семь уроков.
B2B SaaS шардируется по tenant_id. Топ-5 арендаторов дают 60% трафика. Предлагают чистый hash sharding, потому что он 'распределяет равномерно'. В чём изъян и каково senior-решение?
Команда добавляет `PARTITION BY RANGE (created_at)` к самой большой таблице и заявляет, что 'зашардировала базу'. Через месяц пропускная способность записи не изменилась. Почему?
В Citus-кластере, шардированном по tenant_id, инженер добавляет `audit_log`, распределённый по `id` вместо `tenant_id`, и выполняет `SELECT … FROM orders o JOIN audit_log a ON a.order_id = o.id WHERE o.tenant_id = 42`. Что происходит?
Срабатывает алерт на перекос: один шард на 94% CPU, остальные 31 в среднем на 18%, и pg_stat_statements относит 62% времени запросов этого шарда к одному арендатору. Каково правильное немедленное действие?
Транзакция возврата обновляет `orders` (tenant-scoped) и глобальную таблицу `ledger`, шардированную по `account_id`, так что две строки лежат на разных шардах. Citus выполняет это через two-phase commit. Какой режим отказа нужно мониторить?
Чтобы добавить ёмкость, команда запускает online rebalancing в Citus 11.1+. Посреди переезда падает координатор, и коллега паникует, что переезжающий шард повреждён. Как это читать и какой механизм делает ответ верным?
Сквозная линия юнита — одна цепочка решений: выберите shard key, который селективен, равномерен, стабилен и присутствует при маршрутизации; партиционируйте ради pruning и retention, но шардируйте ради пропускной способности; ко-локируйте каждую tenant-scoped таблицу, чтобы 99% join оставались single-node; ждите hot shard на степенных арендаторах и отвечайте на них tenant isolation, а не ребалансировкой; держите транзакции single-shard, чтобы обойти in-doubt риск 2PC; и опирайтесь на online resharding на logical replication — помня, что смена shard key — это многомесячное решение, с которым живут годами.