Должен ли сервер быть постоянно подключённым к БД или только во время запросов?
Делаю небольшой сервис без фреймворка. Прямо сейчас настраиваю работу с БД. Не могу понять, как будет правильнее: постоянное подключение сервера с БД или подключаться, выполнять запрос и отключаться?
Нагрузка планируется не большая , так что с обоими вариантами проблем быть не должно. Но хочется сделать всё правильно.
Ответы (2 шт):
Думаю, что подключение к БД нужно оставить "от откуп" драйверу базы. В некоторых случаях (например, драйвер SqlClient для доступа из C# к MSSQL) драйвер сам управляет пулом соединений. Это приводит к тому, что программисту можно "не думать", открывать ему соединение с базой каждый раз, или держать, например, один статический экземпляр всегда открытого соединения - разница очень мала.
Если же подключаться к базе каждый раз - то, как минимум, это будет расходовать время на установление шифрованного канала (мне кажется, в современном мире уже нет "не сетевых" баз данных, так что я рассуждаю в этих терминах). Это довольно долго по сравнению с тем, чтобы просто послать запрос в уже открытый connection.
Без примера кода и понимания, какая база имеется в виду - трудно дать более конкретный совет...
Для небольших проектов нет необходимости открывать пул соединений. Достаточно использовать клиента БД для создания соединения. Если ваше приложение многопользовательское, то для каждого пользователя нужно открывать свое соединение. Если ваше приложение - многопотоковое, то требуется открывать соединение для каждого потока, если этот поток использует соединение к БД. Каждое соединение требуется закрывать по мере его использования.
Так будет намного проще, особенно если не используются фреймворки. Также нет необходимости поддерживать интеграцию сервиса с пулом соединений, а также избежать проблем с БД.