R中的多个(同时)用户可以访问MySQL数据库

R中的多个(同时)用户可以访问MySQL数据库,mysql,r,shiny,Mysql,R,Shiny,我有一个闪亮的应用程序(托管在shinyapps.io上),它记录了用户对MySQL数据库的某些操作按钮的点击。我想从以下几方面得到一些建议: 在哪里放置dbConnect代码(即shinyServer功能的内部或外部) 何时关闭连接(因为我遇到了打开的连接太多的问题) 向数据库中添加的每个元素只会添加一个新行,因此用户不会访问和修改相同的元素。我问这个问题的原因是,我遇到了多个用户无法同时使用该应用程序的问题(错误为“断开与服务器的连接”),我不确定它是否来自MySQL连接 谢谢大家! 评

我有一个闪亮的应用程序(托管在shinyapps.io上),它记录了用户对MySQL数据库的某些操作按钮的点击。我想从以下几方面得到一些建议:

  • 在哪里放置
    dbConnect
    代码(即
    shinyServer
    功能的内部或外部)
  • 何时关闭连接(因为我遇到了打开的连接太多的问题)
向数据库中添加的每个元素只会添加一个新行,因此用户不会访问和修改相同的元素。我问这个问题的原因是,我遇到了多个用户无法同时使用该应用程序的问题(错误为“断开与服务器的连接”),我不确定它是否来自MySQL连接


谢谢大家!

评论中有人发布了关于
pool
软件包的评论,该软件包正是为了达到这个目的!以下是我的
server.R
code的相关部分:

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
  }
库(闪亮)
图书馆(RMySQL)
图书馆(泳池)

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