«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Аноним 2021/12/24 18:40:23  №2247163 1
Если БД всегда узкоее место в перфомансе,то как его оптимизуруют при хайлоаде?
Ответы: >>2247228 >>2247474
Аноним 2021/12/24 20:04:22  №2247228 2
>>2247163

- выделяют серверу БД много памяти (десятки-сотни гигабайт), чтобы данные были в ней и не надо было лезть на диск, а также хорошие быстрые SSD, и много ядер CPU
- используют кеширование часто используемых данных. Выделяют много памяти и серверов под кеши.
- оптимизируют запросы, чтобы их было меньше и они быстрее выполнялись. Запрещаются любые запросы дольше нескольких мс. Собираются метрики и статистика, проблемные места выявляются и исправляются.
- если идет много чтения и не очень много записи, то можно применить репликацию - сделать один ведущий сервер и несколько ведомых, которые копируют данные с ведущего. Запись ведется на ведущий сервер, а чтение с ведомых. Так как их несколько, то нагрузка равномерно распределяется по ним.
- далее можно попробовать разнести базу данных на несколько частей и одни таблицы поместить на один сервер (при необходимости с репликами), а другие - на другой
- если и этого не хватает, то придется делать сложную операцию - шардинг. В этом случае создается много серверов БД и на каждом из них хранится часть данных. Например, пользователи 1-1000 и их данные хранятся на сервере 1, пользователи 1001-2000 на сервере 2 и тд. Сложных моментов тут два: надо переделывать приложение на поддержку такой схемы работы и надо реализовать балансировку: распределить данные так, чтобы нагрузка была равномерной. То есть не на каждый сервер положить по 1000 пользователей, а например на один - 500, но активных, на другой - 5000, но малоактивных.