【问题标题】:Multiple (simultaneous) users in R Shiny with access to MySQL databaseR Shiny 中的多个(同时)用户可以访问 MySQL 数据库
【发布时间】:2016-11-08 08:48:25
【问题描述】:

我有一个 Shiny 应用程序(托管在 shinyapps.io 上),它将用户对某些 actionButtons 的点击记录到 MySQL 数据库中。我想对一些事情提出一些建议:

  • dbConnect 代码的放置位置(即shinyServer 函数的内部或外部)
  • 何时关闭连接(因为我遇到了打开连接过多的问题)

对数据库的每次添加只会添加一个新行,因此用户不会访问和修改相同的元素。我问这个的原因是我遇到了多个用户无法同时使用该应用程序的问题(错误“与服务器断开连接”),我不确定它是否来自 MySQL 连接。

谢谢!

【问题讨论】:

  • 您是在shinyapps.io 还是您自己的Shiny Server(开源版或专业版)上托管您的应用程序?
  • 我托管了几个应用程序供我的实验室使用。为了防止打开的连接过多,我每次启动操作时都会打开一个新连接,并尽快关闭它。换句话说,对于每个动作按钮,事件观察者都会打开一个新的数据库连接,运行必要的查询,然后关闭连接。开发一个可以用作建立联系的捷径的功能可能会有所帮助。
  • 根据我的经验,最好为每个查询打开然后关闭一个新连接(就像你做的那样)。我试过打开一个连接并用session$onSessionEnded 关闭它。问题在于我们使用的数据库有一个可以同时完成的连接限制。
  • 有多少用户?事件多久发生一次?打开和关闭连接会有开销

标签: mysql r shiny


【解决方案1】:

cmets 中的某个人发布了有关 pool 软件包的信息,该软件包正是用于此目的!这是我的server.R 代码的相关部分:

library(shiny)
library(RMySQL)
library(pool)

pool <- dbPool(
  drv = RMySQL::MySQL(),
  user='username', 
  password='password', 
  dbname='words', 
  host='blahblahblah')

shinyServer(function(input, output) {
  ## function to write to databse
  writeToDB <- function(word, vote){
    query <- paste("INSERT INTO word_votes (vote, word) VALUES (", vote, ", '", word, "');", sep="")
    conn <- poolCheckout(pool) 
    dbSendQuery(conn, query) 
    conn <- poolReturn(conn)

  ## rest of code
  }

我添加了poolCheckoutpoolReturn 以成功运行并防止泄漏。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-23
    • 1970-01-01
    • 2018-02-03
    • 1970-01-01
    • 2018-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多