бд из 1 хендлера. aiohttp+asyncpg. Может даже есть хорошие примеры?
Если из одного хэндлера, то создавая на каждый запрос новый коннект. Если их может быть больше ста то не стоит, нужно юзать очередь
https://pym.dev/p/2fvpu/ скопировал сгенерированный тест. Я создаю пачку коннекторов, список фьючеров и жду и в gather. Но по сравнению с 1 запросом этот отрабатывает ровно в 10 раз дольше. Подозреваю что-то делаю не так и они последовательно выполняются
Плохой совет. Коннекшены можно переиспользовать, между запросами, не обязательно их открывать на каждый запрос новый. Это довольно ресурсоемкое занятие.
Может неверно переношу опыт с SQLAlchemy, но там сессии аналогичным способом нельзя использовать. Странно. С тем что ресурсоемкое согласен и я бы предпочел либо делать вызовы синхронно, либо использовать очередь
Там сессия - это не коннекшен, а состояния orm, которое действительно надо сбрасывать на каждый запрос. При этом сессия использует коннекшены из пула и не открывает их каждый раз на новый запрос/сессию в общем случае.
Очередь тоже не надо. Сейчас люди начитаются и пойдут строить грабли. У каждого нормального драйвера есть пул, вот вам и очередь. Если этого мало или не достаточно для контроля соединений, то ходите в БД через какой-нибудь pgbouncer. Особенно актуально в микросеврисах.
А можно поподробнее про pgbouncer или статью какую-то хорошую?
https://postgrespro.ru/docs/postgrespro/10/pgbouncer
Обсуждают сегодня