Na minha prática, muitos aplicativos brilhantes precisam acessar o banco de dados Postgresql instalado no host. Eu uso o pacote pool para obter o pool de conexão do Postgresql e configurá-lo para a variável global compartilhada por outros aplicativos. Mas a cada novo aplicativo de gatilho de usuário, ele obteria uma nova conexão do Postgresql. Temo que o Postgresql travaria quando muitos usuários simultâneos usassem aplicativos brilhantes. Existe alguma solução para este secenario?
introdução do pacote pool como url a seguir. https://shiny.rstudio.com/articles/pool-basics.html
Um especialista me aconselhou a usar o pqbouncer, mas não sei como implementar no ShinyProxy, algum conselho ou solução?
Muito obrigado.
Se o Shinyproxy suportasse pool de conexão de banco de dados (ex. Postgresql, mysql etc) em aplicativos brilhantes, seria muito mais conveniente para os desenvolvedores. É possível?
Não acho que haja uma maneira nativa de fazer isso. Mas as soluções alternativas são muitas. Uma possível solução alternativa fácil é implantar uma API usando encanador.
graças a @shrektan , vou tentar mais tarde.
Eu instalo o pgbouncer e configuro o serviço Bright Connect para o serviço pgbouncer para resolver o problema. Muito obrigado
Olá @chienyuchuan, fico feliz em saber que você encontrou uma solução!
Portanto, estou encerrando este problema agora.
Não hesite em abrir um novo exemplar se encontrar algum problema com o ShinyProxy!
Eu instalo o pgbouncer e configuro o serviço Bright Connect para o serviço pgbouncer para resolver o problema. Muito obrigado
@chienyuchuan Hi! Você pode me dizer qual pacote R você usa para conexão com o pgbouncer?
E meu, por favor, compartilhe um exemplo de uma conexão de string?
Eu instalo o pgbouncer e configuro o serviço Bright Connect para o serviço pgbouncer para resolver o problema. Muito obrigado
@chienyuchuan Hi! Você pode me dizer qual pacote R você usa para conexão com o pgbouncer?
E meu, por favor, compartilhe um exemplo de uma conexão de string?
Caro @ kuzmenkov111 , Eu ainda uso o pacote Bright Pool, mas conecto ao pgbouncer.
Depois de editar /etc/pgbouncer/pgbouncer.ini, inserindo a seção [bancos de dados], você pode escrever o programa R conectando-se a dbname e porta da seção [bancos de dados] com o pacote pool.
Aqui está um site de referência para você, espero que possa aprender com ele ...
PgBouncer + Ubuntu 18.04
https://www.willandskill.se/en/how-to-setup-pgbouncer-on-ubuntu/
Pool de conexão PostgreSQL com PgBouncer
https://pgdash.io/blog/pgbouncer-connection-pool.html
Usando o pacote pool (básico)
https://shiny.rstudio.com/articles/pool-basics.html
Basta adicionar meus dois centavos.
Na verdade, implantei serviços semelhantes, mas usando a API Encanador, como comentei acima.
É um pouco mais complicado e você precisa escrever uma função de wrapper para usá-lo. Mas permite conectar vários bancos de dados diferentes e não se limitando ao PostgreSQL.
Do jeito que estou fazendo:
httr
para usar a API Plumber implementada. Esta função de wrapper usará o método HTTP para obter os dados de consulta SQL da API ou mensagens de erro, se houver. Você pode distribuir a função de wrapper por meio de um script R simples ou de um pacote R interno.Pessoalmente, prefiro esse método, pois quase sempre uso um wrapper para obter dados SQL (porque preciso me conectar a vários bancos de dados diferentes e lidar corretamente com a codificação / fuso horário / tipo de dados de data não é tão fácil).
Espero que isso seja útil para qualquer pessoa que enfrente casos semelhantes como eu.
Comentários muito úteis
Basta adicionar meus dois centavos.
Na verdade, implantei serviços semelhantes, mas usando a API Encanador, como comentei acima.
É um pouco mais complicado e você precisa escrever uma função de wrapper para usá-lo. Mas permite conectar vários bancos de dados diferentes e não se limitando ao PostgreSQL.
Do jeito que estou fazendo:
httr
para usar a API Plumber implementada. Esta função de wrapper usará o método HTTP para obter os dados de consulta SQL da API ou mensagens de erro, se houver. Você pode distribuir a função de wrapper por meio de um script R simples ou de um pacote R interno.Pessoalmente, prefiro esse método, pois quase sempre uso um wrapper para obter dados SQL (porque preciso me conectar a vários bancos de dados diferentes e lidar corretamente com a codificação / fuso horário / tipo de dados de data não é tão fácil).
Espero que isso seja útil para qualquer pessoa que enfrente casos semelhantes como eu.