Je suis très nouveau sur brillant et R, mais en utilisant brillant, j'essaie de me connecter à une base de données pour récupérer les données à partir de là. Quand j'essaye d'accéder au travail de mon RShiny sur le navigateur continuellement j'ai une erreur comme Cannot allocate a new connection: 16 connections already opened
. Comment puis-je surmonter cette erreur ou Rshine n'attend que 16 utilisateurs à la fois?. J'ai un autre poste de pile ici RStudio Shiny Error mysqlNewConnection maxinum de 16 connexions mais l'explanaation n'était pas claire sur l'URL ci-dessus.
Peut-être que vous ouvrez une nouvelle connexion à la base de données avec obj <- dbConnect(...)
chaque fois que vous envoyez une requête dans votre code. Vous pouvez simplement appeler dbDisconnect(obj)
sur l'objet que vous avez créé pour supprimer la connexion respective à chaque fois que votre requête est exécutée.
Aussi, vous pouvez utiliser cette fonction tuer toutes les connexions ouvertes à la fois:
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."))
}
J'avais recommandé d'écrire une petite fonction en dehors de Shiny qui gère tout le processus d'ouverture et de fermeture:
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)
}
J'espère que cela pourra aider!
Si vous rencontrez ce problème, vous devez d'abord exécuter le code suivant de manière interactive pour déconnecter toutes vos connexions à la base de données MySQL:
lapply(dbListConnections(MySQL()), dbDisconnect)
(Notez que vous pouvez remplacer MySQL () par un autre pilote DBI, si vous utilisez un autre système de gestion de base de données).
Il suffit de redémarrer la session R: command/ctrl + shift + F10
sur RStudio
Vous devez indiquer à Shiny comment se déconnecter correctement. Cette partie dépend du cas d'utilisation. Si vous établissez une connexion chaque fois que vous démarrez brillant, vous pouvez ajouter dans server.ui
:
session$onSessionEnded(function(){
dbDisconnect(con)
}
Où con est votre connexion . Si vous démarrez une connexion à chaque fois que vous exécutez une requête, vous devez vous déconnecter immédiatement après son exécution.
Vous devriez également jeter un coup d'œil au paquet pool
qui est suggéré par l'équipe brillante de gestion des connexions . Il existe également une section très utile sur (articles brillants } dans la base de données.
dbDisconnect () ne fonctionnait pas dans mon cas. J'avais donc arrêté le serveur MySQL depuis le terminal et commencé à nouveau à utiliser
Sudo service mysql stop
Sudo service mysql start
Ensuite, j'ai exécuté le code en utilisant dbDisconnect () et cela fonctionne maintenant pour moi.