Реализую сервер который 24 на 7 будет работать с базой данных и должен постоянно обрабатывать запросы от всех пользователей, на всех примерах по работе с БД вижу что после выполнения запросов идет отключение от базы данных, соответственно вопрос: Обязательно ли при каждом запросе подключатся к базе данных? поскольку выходит что один запрос пользователя будет выглядеть как подключение, получение данных, отключение.
Можно ли реализовать подключение во время инициализации сервера и все время держать его открытым ?
Стек: C# Drapper + Postgre.
На всех примерах по работе с БД вижу что после выполнения запросов идет отключение от базы данных, соответственно вопрос: Обязательно ли при каждом запросе подключатся к базе данных? поскольку выходит что один запрос пользователя будет выглядеть как подключение, получение данных, отключение.
Да, обязательно. Дело в том, что в npgsql, как и почти во всех других клиентах для SQL в реализован механизм Connection Pooling.
NpgsqlConnection
- это не реальное сетевое соединение к базе. Это "одолженное" на время соединение из общего пула долгоживущих соединений.
Когда вы вызываете NpgsqlConnection.Open()
- этому экземпляру NpgsqlConnection
выделяется уже открытое соединение из пула. И только если в пуле свободных открытых соединений не оказалось - создается новое физическое соединение.
При вызове NpgsqlConnection.Close()/Dispose()
реальное соединение не закрывается, а просто возвращается в пул.
Поэтому самым эффективным по переиспользованию подключений является именно
using (var conn = new NpgsqlConnection(connectionString))
{
conn.Open(); // получение соединение из пула
...// получение данных
} // возврат соединения в пул
Т.к. чем быстрее вы отдадите соединение в пул - тем меньше шанс, что другому потоку соединений в пуле не хватит, и ему открывать реальное соединение при вызове Open
.
В рамках одного подключения нельзя реализовать одновременное выполнение запросов. Если у вас есть http запросы, которые долго выполняются то следует либо объединить несколько запросов к бд в один, либо оптимизировать сам запрос, либо масштабировать бд так, чтобы она выдерживала нагрузку.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Задача "Как сохранить порядок отображения подстрок"!