2015-08-21 4 views
11

Ich bin sehr neu zu glänzend und R, aber mit glänzenden ich versuche, eine Verbindung zu einer Datenbank holen Sie die Daten von dort. Wenn ich versuche, auf meine RShiny-Arbeit auf dem Browser kontinuierlich zuzugreifen, bekam ich einen Fehler wie Cannot allocate a new connection: 16 connections already opened. Wie kann ich diesen Fehler oder Rshine nur 16 Benutzer gleichzeitig erwarten ?. Ich habe einen weiteren Stack Post hier RStudio Shiny Error mysqlNewConnection maxinum of 16 connections aber die Erklärung war nicht auf der obigen URL klar.Kann keine neue Verbindung zuweisen: 16 Verbindungen bereits geöffnet RMySQL

+0

Brauchen Sie * 16+ Verbindungen zur gleichen Zeit geöffnet oder suchen Sie nach einer Möglichkeit, nicht verwendete Verbindungen zu schließen? Wenn es der ehemalige ist, scheint [dieser Blog-Beitrag] (http://fransvandunne.com/2015/07/allow-for-more-than-16-rmysql-connections-in-r/) eine Lösung zu bieten. – nrussell

+0

Öffnen Sie eine Verbindung vor 'shinyServer' und verwenden Sie diese eine Verbindung die ganze Zeit. –

Antwort

30

Vielleicht öffnen Sie eine neue DB-Verbindung mit obj <- dbConnect(...) jedes Mal, wenn Sie eine Abfrage in Ihrem Code senden. Sie können einfach dbDisconnect(obj) für das Objekt, das Sie erstellt haben, aufrufen, um die jeweilige Verbindung jedes Mal zu beenden, nachdem Ihre Abfrage ausgeführt wurde.

Auch können Sie diese Funktion töten verwenden, um alle offenen Verbindungen auf einmal:

library(RMySQL) 

killDbConnections <- function() { 

    all_cons <- dbListConnections(MySQL()) 

    print(all_cons) 

    for(con in all_cons) 
    + dbDisconnect(con) 

    print(paste(length(all_cons), " connections killed.")) 

} 

Ich würde recommed eine kleine Funktion außerhalb glänzend zu schreiben, die die ganze Öffnen und Schließen Sache Griffe:

library(RMySQL) 

sqlQuery <- function (query) { 

    # creating DB connection object with RMysql package 
    DB <- dbConnect(MySQL(), user="youruser", password='yourpassword', dbname='yourdb', host='192.168.178.1') 

    # close db connection after function call exits 
    on.exit(dbDisconnect(DB)) 

    # send Query to btain result set 
    rs <- dbSendQuery(DB, query) 

    # get elements from result sets and convert to dataframe 
    result <- fetch(rs, -1) 

    # return the dataframe 
    return(result) 
} 

Hoffe das hilft!

+0

Danke @ThankGoat. Dies war sehr hilfreich und behob das Problem. Aber können Sie bitte erklären, woher ich die richtige Dokumentation für alle diese bekommen habe. – anoop

+0

Es ist alles in der Dokumentation des RMySQL-Pakets. Geben Sie einfach '? RMySQL' in die Konsole ein und beginnen Sie mit dem Lesen;) – ThankGoat

+2

Ich rate dringend,' on.exit (dbDisconnect (DB)) 'direkt nach' DB <- dbConnect' zu verwenden.Andernfalls wird die Verbindung durch Abfrage-Syntaxfehler geöffnet. – Marek

1

dbDisconnect() funktionierte nicht in meinem Fall. So hatte ich MySQL-Server vom Terminal gestoppt und wieder gestartet

mit

sudo Service mysql Stop

sudo Service mysql

startet Dann lief ich den Code unter Verwendung dbDisconnect() jetzt sein für mich arbeiten.

1

Wenn Sie dieses Problem bekommen, sollten Sie zunächst den folgenden Code ausführen interaktiv alle Verbindungen zur MySQL-Datenbank zu trennen:

lapply(dbListConnections(MySQL()), dbDisconnect) 

(Beachten Sie, dass Sie ersetzen MySQL() von einem anderen DBI-Treiber, wenn Sie verwenden ein anderes Datenbankverwaltungssystem).

Dann müssen Sie explizit zu glänzend, wie Sie richtig trennen. Dieser Teil hängt vom Anwendungsfall ab. Wenn Sie eine Verbindung jedes Mal starten Sie glänzend beginnen, könnten Sie innerhalb server.ui hinzufügen:

session$onSessionEnded(function(){ 
    dbDisconnect(con) 
} 

Wo con Ihre Verbindung ist. Wenn Sie bei jeder Ausführung einer Abfrage eine Verbindung herstellen, müssen Sie die Verbindung sofort trennen, nachdem die Abfrage ausgeführt wurde.

Sie sollten auch einen Blick auf die pool-Paket, das suggested von dem glänzenden Team ist, um Verbindungen zu verwalten. Es gibt auch einen sehr nützlichen Abschnitt auf Shiny Articles auf Datenbank.

Verwandte Themen