Shinyproxy: Como compartilhar pool de conexão de banco de dados entre aplicativos brilhantes no ShinyProxy

Criado em 1 out. 2020  ·  8Comentários  ·  Fonte: openanalytics/shinyproxy

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.

question

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:

  1. Servidor: configure um serviço docker-compose que execute uma API Plumber. O Plumber API recebe SQL e fornece um R data.frame. Todos os dados são serializados como objetos R (em vez de JSON) para lidar com casos de canto mais facilmente. Além disso, a serialização de objetos R permite retornar o erro R ou mensagens, se houver.
  2. Cliente: Escreva uma função de wrapper para usar 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.

Todos 8 comentários

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:

  1. Servidor: configure um serviço docker-compose que execute uma API Plumber. O Plumber API recebe SQL e fornece um R data.frame. Todos os dados são serializados como objetos R (em vez de JSON) para lidar com casos de canto mais facilmente. Além disso, a serialização de objetos R permite retornar o erro R ou mensagens, se houver.
  2. Cliente: Escreva uma função de wrapper para usar 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.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

algo-se picture algo-se  ·  6Comentários

benkates picture benkates  ·  3Comentários

thomas-chauvet picture thomas-chauvet  ·  5Comentários

erossini picture erossini  ·  3Comentários

lucius-verus-fan picture lucius-verus-fan  ·  8Comentários