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
Antwort
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!
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
Es ist alles in der Dokumentation des RMySQL-Pakets. Geben Sie einfach '? RMySQL' in die Konsole ein und beginnen Sie mit dem Lesen;) – ThankGoat
Ich rate dringend,' on.exit (dbDisconnect (DB)) 'direkt nach' DB <- dbConnect' zu verwenden.Andernfalls wird die Verbindung durch Abfrage-Syntaxfehler geöffnet. – Marek
dbDisconnect() funktionierte nicht in meinem Fall. So hatte ich MySQL-Server vom Terminal gestoppt und wieder gestartet
mitsudo Service mysql Stop
sudo Service mysql
startet Dann lief ich den Code unter Verwendung dbDisconnect() jetzt sein für mich arbeiten.
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.
- 1. Schließen von aktiven Verbindungen mit RMySQL
- 2. Rmysql Verbindung fehlgeschlagen
- 3. IIS Express (WebMatrix) für externe Verbindungen geöffnet
- 4. Anzahl der DB-Verbindungen geöffnet
- 5. netbeans neue Verbindung - keine Verbindung herstellen
- 6. Kann Bibliothek nicht laden RMySQL
- 7. "Maximale Anzahl bereits geöffneter Verbindungen" Fehlermeldung
- 8. Netbeans kann keine Verbindung zu MSSQL
- 9. Existierende Verbindung wird geschlossen, wenn neue TCP-Verbindungen hergestellt werden
- 10. Kann trotz Portweiterleitung keine Verbindung herstellen
- 11. Ich kann keine SSL-Verbindung herstellen
- 12. ImportError: libpng16.so.16: Gemeinsame Objektdatei kann nicht geöffnet werden: Keine solche Datei oder Verzeichnis
- 13. Neo4j BOLT überprüfen, ob Verbindung geöffnet ist und gezählte Anzahl von Verbindungen
- 14. Arbiter akzeptiert keine Verbindungen
- 15. Verbindung bereits geschlossen
- 16. SQL Server-Datenbank - kann keine Verbindung herstellen
- 17. kann keine Verbindung jedis
- 18. kann keine Verbindung
- 19. kann keine Verbindung herstellen
- 20. RMySQL über SSH-Tunnel
- 21. "WARNUNG: Kann keine geschützten Attribute zuweisen"
- 22. Kann keine neue App auf itunesconnect erstellen
- 23. SQL Azure - Fehlgeschlagene Verbindungen - Aber keine Probleme?
- 24. Sie SQL-Verbindungen mit PDO in PHP geöffnet müssen
- 25. SSMS-Fenster mit 'Neue Abfrage' geöffnet
- 26. Der Skriptdebugger konnte keine Verbindung zum Zielprozess herstellen. Adebugger bereits
- 27. Überprüfen Sie, ob eine Browser-Registerkarte bereits geöffnet ist, damit ich keine zusätzlichen Registerkarten anlegen kann.
- 28. Kolben kann keine Verbindung sqlalchemy
- 29. Python kann keine Verbindung hiveserver2
- 30. Kann keine Verbindung aus Anwendungs
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
Öffnen Sie eine Verbindung vor 'shinyServer' und verwenden Sie diese eine Verbindung die ganze Zeit. –