Подключение к базе данных — это средство в компьютерной науке , которое позволяет клиентскому программному обеспечению общаться с программным обеспечением сервера базы данных , независимо от того, находится ли оно на той же машине или нет. Подключение требуется для отправки команд и получения ответов, обычно в форме набора результатов.
Подключения являются ключевым понятием в программировании, ориентированном на данные. Поскольку некоторым движкам СУБД требуется значительное время для подключения, для повышения производительности был изобретен пул подключений . Ни одна команда не может быть выполнена в отношении базы данных без «открытого и доступного» подключения к ней.
Подключения создаются путем предоставления базовому драйверу или поставщику строки подключения , которая является способом обращения к определенной базе данных или серверу и экземпляру, а также учетным данным аутентификации пользователя (например, Server= sql_box; Database= Common; User ID= uid; Pwd= password; ). После создания подключения его можно открывать и закрывать по желанию, а также можно устанавливать свойства (например, длительность тайм-аута команды или транзакция , если таковая имеется). Строка подключения состоит из набора пар ключ/значение, как это предписывается интерфейсом доступа к данным и используемым поставщиком данных.
Многие базы данных (например, PostgreSQL ) позволяют выполнять только одну операцию за раз на каждом соединении. Если запрос данных ( оператор SQL Select ) отправляется в базу данных и возвращается набор результатов, соединение открывается, но недоступно для других операций, пока клиент не закончит использовать набор результатов. Другие базы данных, такие как SQL Server 2005 (и более поздние версии), не накладывают этого ограничения. Однако базы данных, которые предоставляют несколько операций на соединение, обычно несут гораздо больше накладных расходов, чем те, которые разрешают только одну задачу операции за раз.
Подключения к базе данных являются конечными и дорогими и могут занять непропорционально много времени для создания по сравнению с операциями, выполняемыми над ними. Для приложения неэффективно создавать, использовать и закрывать подключение к базе данных всякий раз, когда ему нужно обновить базу данных.
Пул соединений — это метод, призванный облегчить эту проблему. Можно создать пул соединений с базой данных, а затем поделиться им между приложениями, которым нужен доступ к базе данных.
Объект соединения, полученный из пула соединений, часто является оберткой вокруг фактического соединения с базой данных. Обертка понимает свою связь с пулом и скрывает подробности пула от приложения. Например, объект оболочки может реализовать метод «close», который может быть вызван так же, как метод «close» в соединении с базой данных. В отличие от метода в соединении с базой данных, метод в обертке может фактически не закрывать соединение с базой данных, а вместо этого возвращать его в пул. Приложению не нужно знать о пуле соединений, когда оно вызывает методы в объекте оболочки.
Такой подход поощряет практику открытия соединения в приложении только при необходимости и его закрытия сразу после завершения работы, а не удержания соединения открытым в течение всего срока службы приложения. Таким образом, относительно небольшое количество соединений может обслуживать большое количество запросов. Это также называется мультиплексированием .
С другой стороны, в архитектуре клиент/сервер обычно используется постоянное соединение, чтобы можно было управлять состоянием сервера. Это «состояние» включает в себя серверные курсоры, временные продукты, функциональные настройки, специфичные для соединения, и т. д.
Сбой приложения происходит, когда пул подключений переполнен. Это может произойти, если все подключения в пуле используются, когда приложение запрашивает подключение. Например, приложение может использовать подключение слишком долго, когда слишком много клиентов пытаются получить доступ к веб-сайту или одна или несколько операций заблокированы или просто неэффективны.