Вопрос о подключении соединения Mysql: стоит ли это?

Я помню, слышал, что процесс соединения в mysql был разработан очень быстро по сравнению с другими RDBMS, и поэтому использует библиотеку, которая обеспечивает объединение пулов (SQLAlchemy) на самом деле не поможет вам, если вы включите пул соединений.

Есть ли у кого-нибудь опыт?

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

Ответы

Ответ 1

Не нужно беспокоиться о остаточном состоянии соединения при использовании пула соединений SQLA, если ваше приложение не меняет параметры подключения, такие как уровни изоляции транзакций (что обычно не так). Пул соединений SQLA вызывает соединение connection.rollback() в соединении, когда оно было проверено, чтобы удалить транзакционное состояние или блокировки.

Возможно, время соединения MySQL довольно быстро, особенно если вы подключаете через unix-сокеты на одном компьютере. Если вы используете пул соединений, вы также хотите убедиться, что соединения переработаны через некоторое время, так как клиентская библиотека MySQL отключит соединения, которые простаивают более 8 часов (в SQLAlchemy это опция pool_recycle).

Вы можете быстро выполнить некоторую оценку пула соединений против non с помощью приложения SQLA, изменив реализацию пула с по умолчанию QueuePool на NullPool, который представляет собой реализацию пула, которая фактически не объединяет ничего - она ​​соединяет и отключает реальный, когда прокси-соединение приобретается и позже закрывается.

Ответ 2

Даже если соединительная часть MySQL сама по себе довольно гладкая, предположительно, есть еще сетевое подключение (будь то loopback или физическое). Если вы делаете много запросов, это может стать значительно дорогим. Это будет зависеть (как это часто бывает) от того, что делает ваше приложение, конечно - если вы выполняете много работы за соединение, тогда это будет доминировать, и вы не получите много.

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

Ответ 3

Короткий ответ: вам нужно сравнить его.

Длинный ответ: это зависит. MySQL работает быстро для установки соединения, поэтому избежать этой стоимости не является хорошей причиной для объединения пулов соединений. Где вы побеждаете, если запросы выполняются немного и быстро, потому что тогда вы увидите выигрыш с пулом.

Другое беспокойство заключается в том, как приложение обрабатывает поток SQL. Если он не выполняет транзакций SQL и не делает никаких предположений о состоянии потока, то объединение не будет проблемой. OTOH, код, который полагается на закрытие потока для удаления временных таблиц или транзакций отката, будет иметь множество проблем с пулом.

Ответ 4

Пул соединений ускоряет то, что вы не создавали объект java.sql.Connection каждый раз, когда выполняете запрос базы данных. Я использую пул соединений Tomcat для базы данных mysql для веб-приложений, которые выполняют много запросов, при высокой загрузке пользователя наблюдается заметное улучшение скорости.

Ответ 5

Я сделал простой сервис RESTful с Django и протестировал его с пулом соединений и без него. В моем случае разница была довольно заметной.

В локальной сети без него время отклика составляло от 1 до 5 секунд. При этом менее 20 мс. Результаты могут различаться, но конфигурация, которую я использую для серверов MySQL и Apache, довольно стандартная, низкая.

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