@inviziblll

Каким образом можно снизить нагрузку на MySQL базу данных?

Есть проект для разработки на 1С-Битрикс. Проект лежит на shared-хостинге, там слабые ресурсы, при запросах к бд постоянно возникает ошибка MySQL.

В проекте используется самописный модуль со своей ORM и таблицей, которая создана по документации

Таблица модуля содержит список городов, каждый элемент, город, имеет ID, символьный код, название, название на английском и описание на русском и английском языках, идентификатор страны.

Сайт через API со стороннего сервиса получает json массив с актуальным списком городов (каждый элемент это город и актуальное описание к нему ), затем массив конвертируется в PHP массив и обходится циклом , при каждой итерации идёт обращение к ORM таблице городов, сравнивается описание города и если оно отличается происходит апдейт записи.

$result = CityTable::update($id, $params);

Периодически при апдейте и просто выведении списка городов, происходит ошибки MySQL server has gone away

Каким образом можно убрать эту ошибку не изменяя параметров настроек MySQL на сервере?

Не проблема обновлять список город за долгое время час или два. Может быть при обходе цикла поставить директиву sleep?

Я думал сам запрос поместить в статический метод класса, где при каждой итерации будет изменяться значение статического поля число итераций, и например когда прошло 10 итераций выставлять директиву sleep.
  • Вопрос задан
  • 138 просмотров
Пригласить эксперта
Ответы на вопрос 2
@rPman
Загрузить всю или часть таблицы на бакэед, провести работу в памяти и уже на ее основе выполнить необходимые апдейты.

Как частный случай наоборот, загрузить данные во временную таблицу и выполнять анализ уже на sql сервере, но это только если таблица не вмещается в память бакэнда или это неоправданно

Много мелких запросов это сильно тяжёлая задача для sql баз данных, тем более для слабой машины
Ответ написан
Комментировать
Adamos
@Adamos
при каждой итерации идёт обращение к ORM таблице городов, сравнивается описание города и если оно отличается происходит апдейт записи.

Вообще-то для этого достаточно одного INSERT ... ON DUPLICATE KEY UPDATE.
Ну, а массовая вставка по одной строчке - это верный способ убить БД на любых ресурсах независимо от движка сайта.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы