Highload — это не про "сколько", а про "как".
ℹ️Определить, что СУБД работает в режиме Highload, можно по комплексу признаков:
- Физические или экономические пределы вертикального масштабирования
- Отказ одного компонента неприемлем, главной задачей становится не добавление новой функциональности, а обеспечение стабильности, предсказуемости и горизонтального роста системы под экстремальной нагрузкой.
В данной статье рассматривается особенности функционирования СУБД в условиях нагрузки, приводящей к достижению пределов вертикального масштабирования (признак-1).
1️⃣JOIN vs Коррелированный подзапрос
👎Гипотеза о преимуществе при использовании "JOIN" - опровергнута экспериментально.
2️⃣Seq scan vs Index only scan
👎Гипотеза о преимуществе при использовании "Index only scan" - опровергнута экспериментально.
3️⃣IN vs EXISTS
👍Рабочая модель для параллельной нагрузки.
4️⃣MAX vs Array
ℹ️Не является общей рекомендацией. Для тяжёлых запросов - равноценные решения.
5️⃣"Collate=C vs Collate=ru_RU"
👎Гипотеза о преимуществе при использовании "Collate=C" - опровергнута экспериментально.
Гипотеза принимается верной пока не будет опровергнута экспериментально. Или - подтвердить гипотезу экспериментом нельзя , опровергнуть можно.
ℹ️Это утверждение в целом верно и очень точно отражает один из ключевых принципов научного метода, сформулированный философом Карлом Поппером — принцип фальсифицируемости.
1. "Гипотеза принимается верной пока не будет опровергнута экспериментально"
Это верно, но с очень важными оговорками.
ℹ️ "Принимается верной" не означает, что она истина в последней инстанции. В науке это скорее означает "является рабочей моделью". Гипотеза (а затем и теория) считается наилучшим доступным объяснением фактов, пока не появятся новые данные, которые она не может объяснить.
ℹ️"Пока не будет опровергнута" — это суть принципа фальсифицируемости. Научная гипотеза должна быть сформулирована таким образом, чтобы в принципе можно было представить эксперимент, который мог бы ее опровергнуть. Если гипотезу нельзя опровергнуть никаким мыслимым экспериментом, она ненаучна (например, астрология).
Пример: Долгое время ньютоновская механика "принималась верной". Она прекрасно предсказывала движение планет и поведение объектов на Земле. Но когда эксперименты (например, с движением Меркурия или частиц со скоростями, близкими к скорости света) показали расхождения с ее предсказаниями, она была "опровергнута" как универсальная теория и заменена общей теорией относительности и квантовой механикой.
2. "Подтвердить гипотезу экспериментом нельзя, опровергнуть можно"
⚠️Это строго верно с логической точки зрения.
ℹ️ Почему нельзя подтвердить окончательно? Потому что для полного подтверждения гипотезы потребовалось бы провести бесконечное количество экспериментов во всех возможных условиях. Это логически невозможно.
◽Пример: Гипотеза "Все лебеди белые".
Сколько бы белых лебедей вы ни видели (тысячу, миллион), вы не можете подтвердить гипотезу на 100%, так как всегда существует вероятность найти где-то черного лебедя. Что, в итоге, и произошло в Австралии.
◽Почему можно опровергнуть? Потому что для опровержения достаточно одного надежного, воспроизводимого контрпримера.
⚠️Пример: Всего один черный лебедь мгновенно и окончательно опровергает гипотезу "Все лебеди белые".
Итог и важное дополнение
Утверждение верно и является краеугольным камнем современной науки. Оно смещает фокус ученых с попыток "доказать" свою теорию на попытки ее проверить, то есть попытаться найти ее слабые места и ограничения. Именно так наука и прогрессирует — через опровержение старых и создание новых, более точных моделей.
⚠️Важный нюанс: Хотя мы не можем окончательно подтвердить гипотезу, мы можем укрепить ее с помощью множества успешных экспериментов и предсказаний. Когда гипотеза выдерживает множество строгих проверок и становится широко принятой, она превращается в теорию (например, теория эволюции, теория относительности). Но даже самая устоявшаяся теория в принципе может быть опровергнута новыми данными.
ℹ️Таким образом, утверждение не только верно, но и фундаментально для понимания того, как работает наука.
Пример : эксперимент "JOIN vs Коррелированный подзапрос".
ℹ️Одного эксперимента может быть достаточно для опровержения гипотезы в контексте тестируемой системы.
1. Медианные сглаженные значения:
· Использование медианы вместо среднего защищает от выбросов
· Сглаживание уменьшает влияние кратковременных флуктуаций
· Это дает более репрезентативную картину "типичной" производительности
2. Измерение при разной нагрузке:
· Это критически важное улучшение! Вы проверяете гипотезу не в идеальных условиях, а в реалистичных сценариях
· Если JOIN проигрывает при РАЗНЫХ уровнях нагрузки, это сильное доказательство
· Позволяет выявить, не является ли преимущество подзапроса специфичным для определенного уровня нагрузки
3. Прогрев кэшей:
· Устраняет один из главных источников методической ошибки
· Измеряете установившийся режим работы, а не переходные процессы
4. Продолжительность и периодичность:
· 2 часа × 60 замеров = 120 точек данных на каждый сценарий
· Это достаточный объем для статистического анализа
· Позволяет увидеть долгосрочные тренды и стабильность результатов
ℹ️Эксперимент фактически представляет собой не "один эксперимент", а серию экспериментов при разных условиях нагрузки, агрегированных надежным статистическим методом.
➡️Медианная производительность коррелированного подзапроса выше
➡️Эта картина сохраняется при разных уровнях нагрузки
➡️Результаты устойчивы во времени (2 часа тестирования)
⚠️Есть веские основания утверждать, что в конкретной системе с конкретными данными и нагрузкой гипотеза не подтверждается.
Практический вывод
ℹ️Для практических целей (принятия решения о том, какой паттерн использовать в вашей системе) такого эксперимента достаточно.
Можно с уверенностью заключить, что коррелированный подзапрос предпочтительнее.
Для научной публикации или создания универсальных рекомендаций потребовалась бы дополнительная валидация на других конфигурациях, но как инженерное решение для конкретной системы - доказательств более чем достаточно.👍
Итог
⚠️Экспериментальный дизайн значительно повышает надежность результатов и делает опровержение гипотезы в рамках тестируемого контекста вполне обоснованным.