Должен ли я пинговать MySQL сервер перед каждым запросом?

Вы можете опустить первую нулевую проверку, так как equals делает это для вас:

Результат является истинным тогда и только тогда, когда аргумент не является нулевым и является объектом String, который представляет одну и ту же последовательность символов как этот объект.

Итак, лучшее решение просто:

if(someOtherString.equals(someObject.getFoo())
13
задан Rihards 23 June 2010 в 17:24
поделиться

9 ответов

Вы не должны пинговать MySQL перед запросом по трем причинам:

  1. Это ненадежный способ проверки того, что сервер будет включен, когда вы попытаетесь выполнить свой запрос, он вполне может упасть за время между ping ответ и запрос.
  2. Ваш запрос может завершиться ошибкой, даже если сервер работает.
  3. По мере увеличения объема трафика на ваш сайт вы будете добавлять много дополнительных накладных расходов в базу данных. Это не редкость в корпоративных приложениях, которые использовали этот метод, чтобы увидеть, как огромное количество ресурсов базы данных тратится впустую на эхо-запросы.

Лучший способ справиться с подключениями к базе данных - это обработка ошибок (try / catch), повторные попытки и транзакции.

Подробнее об этом в блоге о производительности MySQL: Проверка наличия активного соединения с базой данных считается вредоносной

В этом сообщении в блоге вы увидите, что 73% нагрузки на этот экземпляр MySQL было вызвано приложениями, проверяющими, работает ли БД.

23
ответ дан 1 December 2019 в 17:33
поделиться

Я этого не делаю. Я рассчитываю на то, что у меня будет ошибка подключения, если сервер отключится, и я попытаюсь что-то сделать.

Выполнение эхо-запроса может сэкономить вам немного времени и будет казаться более отзывчивым для пользователя, но ошибка быстрого подключения не намного лучше, чем ожидание в течение нескольких секунд с последующей ошибкой подключения. В любом случае пользователь ничего не может с этим поделать.

12
ответ дан 1 December 2019 в 17:33
поделиться

Нет.

Вы пингуете SO перед переходом на него в браузере, чтобы убедиться, что сервер работает?

10
ответ дан 1 December 2019 в 17:33
поделиться

Так что я хотел спросить, должен ли я или или нет пинговать сервер mysql (mysqli_ping), чтобы убедиться, что сервер что сервер всегда жив перед выполнением запрос?

Не совсем. Если он не жив, вы узнаете об этом из сообщений об ошибках, приходящих через ваши запросы или при подключении к базе данных. Вы можете получить ошибку mysql с помощью:

mysql_error()

Пример:

mysql_connect(......) or die(mysql_error());
5
ответ дан 1 December 2019 в 17:33
поделиться

Вообще говоря, нет.

Однако, если у вас есть долго выполняющийся сценарий, например, какой-то внутренний процесс, который вызывается как задание cron, где может быть промежуток времени между подключением и последующими запросами, mysqli_ping() может быть полезен.

Установка mysqli.reconnect в true в php.ini полезна в этом случае.

1
ответ дан 1 December 2019 в 17:33
поделиться

Это не стандартный способ решения проблемы... Если есть исключение, вы будете решать его тогда.

Это похоже на разницу между проверкой существования файла перед попыткой его открыть и перехватом исключения "файл не найден", когда оно возникает... Если это очень, очень распространенная и вероятная ошибка, то, возможно, стоит проверить перед этим, но обычно выполнение должно идти нормально, а исключения должны быть пойманы и обработаны, когда они возникают.

2
ответ дан 1 December 2019 в 17:33
поделиться

Нет.

Если пинг прошел успешно, это не значит, что запрос пройдет успешно. Что если сервер станет недоступным между моментом, когда вы его пингуете, и моментом, когда вы выполняете запрос?

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

Добавление пинга просто добавляет ненужные обходные пути, что в конечном итоге замедляет работу вашего кода.

0
ответ дан 1 December 2019 в 17:33
поделиться

Единственное, что я могу придумать для этого, это если база данных является
1. некритична для функционирования вашего приложения, и,
2. имеет тенденцию к отключению от сети.

В остальных случаях - нет.

0
ответ дан 1 December 2019 в 17:33
поделиться

Единственный случай, когда имеет смысл использовать ping, это если вы реализуете свою собственную систему пула соединений с БД. Даже в этом случае я бы не стал пинговать перед каждым запросом, только при каждом "подключении" / выходе из пула.

0
ответ дан 1 December 2019 в 17:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: