Shinyproxy: Cómo compartir el grupo de conexiones de la base de datos entre aplicaciones brillantes en ShinyProxy

Creado en 1 oct. 2020  ·  8Comentarios  ·  Fuente: openanalytics/shinyproxy

En mi práctica, muchas aplicaciones brillantes necesitan acceder a Postgresql DB que se instaló en el host. Utilizo el paquete de grupo para obtener el grupo de conexiones de Postgresql y lo configuro en una variable global compartida para otras aplicaciones. Pero cada nueva aplicación de activación de usuario, obtendría una nueva conexión de Postgresql. Me temo que Postgresql colapsaría cuando demasiados usuarios simultáneos usen aplicaciones brillantes. ¿Hay alguna solución para este secenario?

introducción del paquete de grupo como la siguiente URL. https://shiny.rstudio.com/articles/pool-basics.html

Un experto me aconseja usar pqbouncer, pero no sé cómo implementarlo en ShinyProxy, ¿algún consejo o solución?

Muchas gracias.

question

Comentario más útil

Solo agregue mis dos centavos.

De hecho, implementé servicios algo similares pero usando la API de plomero, como comenté anteriormente.

Es un poco más complicado y tienes que escribir una función contenedora para usarlo. Pero permite conectar múltiples bases de datos diferentes y no se limita a PostgreSQL.

La forma en que lo estoy haciendo:

  1. Servidor: configure un servicio de composición de Docker que ejecute una API de fontanero. La API de fontanería recibe SQL y proporciona un marco de datos R. Todos los datos se serializan como objetos R (en lugar de JSON) para manejar los casos de esquina más fácilmente. Además, la serialización de objetos R le permite devolver el error R o los mensajes, si los hubiera.
  2. Cliente: escriba una función contenedora para usar httr para usar la API de plomero implementada. Esta función contenedora utilizará el método HTTP para obtener los datos de consulta SQL de la API o los mensajes de error, si los hubiera. Puede distribuir la función de contenedor a través de un script R simple o un paquete R interno.

Personalmente, prefiero este método, ya que casi siempre uso un contenedor para obtener datos SQL (porque necesito conectarme a varias bases de datos diferentes y manejar correctamente la codificación / zona horaria / tipo de datos de fecha no es tan fácil).

Espero que esto sea útil para cualquiera que se enfrente a casos similares como yo.

Todos 8 comentarios

Si Shinyproxy fuera compatible con el grupo de conexiones de la base de datos (por ejemplo, postgresql, mysql, etc.) en aplicaciones brillantes, sería mucho más conveniente para los desarrolladores. ¿Es posible?

No creo que haya una forma nativa de hacer esto. Pero las soluciones alternativas son muchas. Una posible solución alternativa es implementar una API mediante un plomero.

gracias a @shrektan , lo intentaré más tarde.

Instalo pgbouncer y configuro la conexión brillante al servicio pgbouncer, resuelve el problema. Muchas gracias

Hola @chienyuchuan, feliz de saber que encontraste una solución.
Por lo tanto, estoy cerrando este tema ahora.
¡No dude en abrir un nuevo número si encuentra algún problema con ShinyProxy!

Instalo pgbouncer y configuro la conexión brillante al servicio pgbouncer, resuelve el problema. Muchas gracias

@chienyuchuan ¡Hola! ¿Puede decirme qué paquete R usa para la conexión con pgbouncer?

¿Y por favor, comparte un ejemplo de una conexión de cadena?

Instalo pgbouncer y configuro la conexión brillante al servicio pgbouncer, resuelve el problema. Muchas gracias

@chienyuchuan ¡Hola! ¿Puede decirme qué paquete R usa para la conexión con pgbouncer?

¿Y por favor, comparte un ejemplo de una conexión de cadena?

Estimado @ kuzmenkov111 , sigo usando el paquete shiny pool, pero me conecto a pgbouncer.
Después de editar /etc/pgbouncer/pgbouncer.ini, ingresando la sección [bases de datos], puede escribir el programa R que se conecta al nombre de la base de datos y al puerto de la sección [bases de datos] con el paquete de grupo.

Aquí hay un sitio de referencia para usted, espero que pueda aprender de él ...

PgBouncer + Ubuntu 18.04
https://www.willandskill.se/en/how-to-setup-pgbouncer-on-ubuntu/

Agrupación de conexiones de PostgreSQL con PgBouncer
https://pgdash.io/blog/pgbouncer-connection-pool.html

Usar el paquete de piscina (conceptos básicos)
https://shiny.rstudio.com/articles/pool-basics.html

Solo agregue mis dos centavos.

De hecho, implementé servicios algo similares pero usando la API de plomero, como comenté anteriormente.

Es un poco más complicado y tienes que escribir una función contenedora para usarlo. Pero permite conectar múltiples bases de datos diferentes y no se limita a PostgreSQL.

La forma en que lo estoy haciendo:

  1. Servidor: configure un servicio de composición de Docker que ejecute una API de fontanero. La API de fontanería recibe SQL y proporciona un marco de datos R. Todos los datos se serializan como objetos R (en lugar de JSON) para manejar los casos de esquina más fácilmente. Además, la serialización de objetos R le permite devolver el error R o los mensajes, si los hubiera.
  2. Cliente: escriba una función contenedora para usar httr para usar la API de plomero implementada. Esta función contenedora utilizará el método HTTP para obtener los datos de consulta SQL de la API o los mensajes de error, si los hubiera. Puede distribuir la función de contenedor a través de un script R simple o un paquete R interno.

Personalmente, prefiero este método, ya que casi siempre uso un contenedor para obtener datos SQL (porque necesito conectarme a varias bases de datos diferentes y manejar correctamente la codificación / zona horaria / tipo de datos de fecha no es tan fácil).

Espero que esto sea útil para cualquiera que se enfrente a casos similares como yo.

¿Fue útil esta página
0 / 5 - 0 calificaciones