Otavio, ótima pergunta! Em questão de performance, é inquestionável que deixar elas abertas será mais rápido, dado que abrir a conexão com o banco de dados é mais demorado do que só reutilizar uma conexão que estava aberta.
Mas mais rápido não necessariamente resulta em ser melhor. Digo isso, pois no Postgres por exemplo, abrir uma conexão com o banco de dados é milisegundos, por exemplo 10ms
ou 50ms
se o banco estiver no mesmo local que a aplicação. Não é muita coisa, mas é bem mais devagar do que uma query subsequente que custaria 0.1ms
ou 1.6ms
. Estou tirando esses valores aqui dos meus testes locais, pois neste exato momento estou rodando o serviço do TabNews localmente e pegando esses valores.
Agora, nas primeiras versões do TabNews, a gente abria e fechava a conexão a cada query e dava para usar o site. Ambas camadas da Aplicação e Banco estavam hospedadas na mesma região na AWS. Mas depois a gente fez uma nova abordagem para reutilizar o máximo que possível um pool de conexões, mesmo num ambiente serverless. Se você quiser acompanhar a pesquisa feita na época, veja essa issue que está dentro do repositório do módulo que usamos para se conectar ao banco.
De qualquer forma, eu não deixaria conexões abertas com o banco de dados sem serem reaproveitadas e gerenciadas por um pool. Pois se você só ficar abrindo conexões infinitamente sem fechar elas, rapidamente você irá esbarrar no limite máximo de conexões que o banco de dados consegue manter aberta.
Hoje no TabNews estamos usando a menor instância do RDS e ele possibilita no máximo 78
conexões abertas (isso já considera conexões reservadas para o super user do banco). Caso queira ver isso rodando em Produção, acesse o /status aqui do TabNews. Tem mais dados legais lá 🤝