2016-11-07 82 views
1

我有一個Shiny應用程序(託管在shinyapps.io上),用於記錄用戶點擊某個actionButtons到MySQL數據庫。我對一些事情喜歡一些建議:R中的多個(同時)用戶可以訪問MySQL數據庫

  • 放在哪裏dbConnect代碼(即內部或shinyServer功能外)
  • 時關閉連接(因爲我是運行到太多問題許多開放連接)

每個數據庫的添加只是添加一個新行,所以用戶不會訪問和修改相同的元素。我問這個問題的原因是我遇到了多個用戶無法同時使用該應用程序的問題(錯誤「Disconnected from server」),我不確定它是否來自MySQL連接。

謝謝!

+0

你是在shinyapps.io還是你自己的Shiny Server(開源版或專業版)上託管你的應用程序? –

+1

我有幾個應用程序供我的實驗室使用。爲了防止打開太多的連接,每次啓動操作時都會打開一個新連接,並儘快關閉它。換句話說,對於每個操作按鈕,事件觀察者將打開一個新的數據庫連接,運行必要的查詢,然後關閉連接。這可能有助於開發一個函數,您可以將其用作簡化連接的功能。 – Benjamin

+0

根據我的經驗,最好打開並關閉每個querry的新連接(就像您一樣)。我試着打開一個連接,並用'session $ onSessionEnded'關閉它。問題在於我們使用的數據庫具有可以同時完成的連接限制。 – user5029763

回答

1

有人發表評論發佈了關於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成功運行,防止泄漏。

相關問題