Shinyproxy: ShinyProxy下如何在闪亮的应用程序之间共享数据库连接池

创建于 2020-10-01  ·  8评论  ·  资料来源: openanalytics/shinyproxy

在我的实践中,许多闪亮的应用程序需要访问安装在主机上的 Postgresql DB。 我使用 pool 包来获取 Postgresql 的连接池,并将其设置为其他应用程序共享的全局变量。 但是每个新用户触发应用程序,它都会获得 Postgresql 的新连接。 当太多并发用户使用闪亮的应用程序时,我担心 Postgresql 会崩溃。 这个场景有什么解决方案吗?

池包介绍如下网址。 https://shiny.rstudio.com/articles/pool-basics.html

一位专家建议我使用 pqbouncer,但我不知道如何在 ShinyProxy 中实现,有什么建议或解决方案吗?

非常感谢。

question

最有用的评论

只需加上我的两分钱。

我实际上部署了一些类似的服务,但使用的是 Plumber API,正如我上面评论的那样。

它有点复杂,您必须编写一个包装函数才能使用它。 但它允许连接多个不同的数据库,而不仅限于 PostgreSQL。

我这样做的方式:

  1. 服务器:设置运行 Plumber API 的 docker-compose 服务。 Plumber API 接收 SQL 并提供 R 数据框。 所有数据都被序列化为 R 对象(而不是 JSON),以便更轻松地处理极端情况。 此外,序列化 R 对象允许您返回 R 错误或消息(如果有)。
  2. 客户端:编写一个包装函数以使用httr来使用已部署的 Plumber API。 此包装函数将使用 HTTP 方法从 API 或错误消息(如果有)获取 SQL 查询数据。 您可以通过简单的 R 脚本或内部 R 包分发包装函数。

我个人更喜欢这种方法,因为我几乎总是使用包装器来获取 SQL 数据(因为我需要连接到多个不同的数据库并正确处理编码/时区/日期数据类型并不是那么容易)。

我希望这对像我这样面临类似情况的人有所帮助。

所有8条评论

如果 Shinyproxy 在闪亮的应用程序中支持数据库连接池(例如 postgresql、mysql 等),对于开发人员来说会方便得多。 是否有可能?

我不认为有这样做的本地方式。 但是解决方法很多。 一种可能的简单解决方法是使用管道工部署 API。

感谢@shrektan ,我稍后再试。

我安装了 pgbouncer,并将闪亮的连接设置为 pgbouncer 服务,它解决了问题。 非常感谢

@chienyuchuan很高兴听到您找到了解决方案!
因此我现在关闭这个问题。
如果您在使用 ShinyProxy 时遇到问题,请不要犹豫打开一个新问题!

我安装了 pgbouncer,并将闪亮的连接设置为 pgbouncer 服务,它解决了问题。 非常感谢

@chienyuchuan你好! 你能告诉我你用什么 R 包来连接 pgbouncer 吗?

我的你请分享一个字符串连接的例子?

我安装了 pgbouncer,并将闪亮的连接设置为 pgbouncer 服务,它解决了问题。 非常感谢

@chienyuchuan你好! 你能告诉我你用什么 R 包来连接 pgbouncer 吗?

我的你请分享一个字符串连接的例子?

亲爱的@kuzmenkov111 ,我仍然使用闪亮的池包,但连接到 pgbouncer。
编辑 /etc/pgbouncer/pgbouncer.ini 后,输入 [databases] 部分,您可以编写 R 程序,使用池包连接到 [databases] 部分的 dbname 和端口。

这里有一些参考网站供您参考,希望您可以从中学习......

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

PostgreSQL 连接池与 PgBouncer
https://pgdash.io/blog/pgbouncer-connection-pool.html

使用 pool 包(基础)
https://shiny.rstudio.com/articles/pool-basics.html

只需加上我的两分钱。

我实际上部署了一些类似的服务,但使用的是 Plumber API,正如我上面评论的那样。

它有点复杂,您必须编写一个包装函数才能使用它。 但它允许连接多个不同的数据库,而不仅限于 PostgreSQL。

我这样做的方式:

  1. 服务器:设置运行 Plumber API 的 docker-compose 服务。 Plumber API 接收 SQL 并提供 R 数据框。 所有数据都被序列化为 R 对象(而不是 JSON),以便更轻松地处理极端情况。 此外,序列化 R 对象允许您返回 R 错误或消息(如果有)。
  2. 客户端:编写一个包装函数以使用httr来使用已部署的 Plumber API。 此包装函数将使用 HTTP 方法从 API 或错误消息(如果有)获取 SQL 查询数据。 您可以通过简单的 R 脚本或内部 R 包分发包装函数。

我个人更喜欢这种方法,因为我几乎总是使用包装器来获取 SQL 数据(因为我需要连接到多个不同的数据库并正确处理编码/时区/日期数据类型并不是那么容易)。

我希望这对像我这样面临类似情况的人有所帮助。

此页面是否有帮助?
0 / 5 - 0 等级