Я не уверен, в каком контексте вы используете свои соединения, но я могу поделиться тем, что мне подходит.
Я использую SQL-сервер в качестве бэкэнда и использую с ним комбинацию кэширования для повышения производительности.
Моя практика заключается в том, чтобы поддерживать соединение открытым, только если оно мне действительно нужно, и не объединять соединения, чтобы они сразу очищались, и я могу видеть в мониторе SQL Activity, что именно активно, а что нет. Каждое соединение занимает память, поэтому приятно держать его в унылом реве, когда оно не нужно.
Прежде чем ответить на вопрос об открытом и закрытом соединении, позвольте мне сказать, что кэширование действительно важно. Извлечение объекта из кэша сэкономит вам массу времени. В некоторых из моих приложений asp.net, когда в dev включено кэширование, я обнаружил, что с трудом могу измерить задержку, тогда как при вызове БД для завершения вызова может потребоваться от 15 мс до 45 мс, и это даже не учитывает другие задержки факторы или нагрузка. Другой метод, который я использую, - это хорошая структура объектов для моих данных, поэтому я могу обновлять БД только в случае каких-либо изменений. Я реализовал несколько методов на своем объекте, чтобы убедиться, что я выполняю как можно меньше операций ввода-вывода.
При этом все мы знаем, что в какой-то момент нам нужен доступ и запись в нашу БД, поэтому я следую двум принципам:
Держите двери и окна закрытыми для экономии энергии. Открытое соединение в одном месте означает, что оно недоступно в другом (или память и другие ресурсы более ограничены). Мы отключили объединение, потому что это привело к повышению производительности для нас.
Я делаю как много, так и сразу, когда могу, когда соединение открыто. Это немного сложнее, поэтому позвольте мне объяснить.
- один из методов, который я использовал, - это передача объектов подключения по каналу, чтобы все объекты могли использовать один объект подключения. Это приводит к открытию и закрытию одного соединения вместо 10 или более, в зависимости от вашего приложения. Хорошим примером этого является одна из наших моделей закупок, которая использует возможности сервера SQL для сбора статистики и хеширования сложных шаблонов заказов. Не имеет смысла продолжать открывать и закрывать соединение, когда вы выполняете поиск по базе данных объемом более 200 КБ или для приложений, для которых они предназначены. Другая часть этого заключается в том, что когда я использую объект, я пытаюсь связать свои обновления, чтобы сократить время, в течение которого я оставляю соединение открытым. Таким образом, выполнение scope_identity для вызова вставки позволило мне позаботиться как о вставке, так и о поиске уникального идентификатора, добавляемого в мой объект перед его кэшированием.
В тот день, когда я впервые разрабатывал asp-приложения, я фактически открыл соединение, как только страница начала загружаться, а затем закрыл его. Я не рекомендую делать это больше. Теперь у такого рода абстракций и уровней есть большое преимущество, к которому я бы порекомендовал любой начинающий программист.
Мои два цента:
Кэшируйте ваши данные! Кэшируйте ваши данные! Кэшируйте ваши данные! Делайте как можно меньше доступа к БД, когда вы не можете кешировать, а затем кешируйте свои данные!