Производительность
N+1: тест с краткими ответами
Воспроизведение бьёт перечитывание. На каждый промпт скажи или напиши полный ответ по памяти, прежде чем открыть модельный — усилие припоминания и закрепляет материал.
Восстановить хребет юнита — почему число trip’ов задаёт стоимость, четыре семейства фиксов и как выбирать, механизм DataLoader, off-CPU детекцию и вторичные сбои на масштабе — не подглядывая в уроки.
- 01Почему забор 100 строк одним запросом бьёт 100 запросов по одной строке, даже когда каждый запрос быстрый?
- 02Назови четыре семейства фиксов N+1 и форму данных, под которую подходит каждое.
- 03Объясни, как работает DataLoader и почему ORM eager loading не заменяет его для GraphQL.
- 04Почему CPU-профили пропускают N+1, и какие три инструмента его вскрывают?
- 05Как N+1 каскадирует в исчерпание пула соединений, и какие сигналы его выдают?
- 06Когда денормализация (counter cache, materialised view, CQRS read model) — правильный ответ для N+1, и когда она преждевременна?
Если ты смог восстановить каждый ответ по памяти, ты держишь хребет юнита: число trip’ов — а не скорость запроса — задаёт стоимость; четыре семейства фиксов ложатся на cardinality и происхождение lookup’ов; DataLoader батчит на уровне request, куда ORM preload не дотягивается; N+1 прячется off-CPU и находится в query log, APM-waterfall и per-request счётчиках, затем гейтится в CI; а на масштабе он каскадирует в исчерпание пула, переключения plan’а и DoS, причём денормализация резервируется на случай, когда измерение доказывает, что одного батчинга мало для SLO.