Vic*_* K. 11 sql sql-server r shiny rjdbc
我想了解(重新)通过RJDBC使用SQL连接到MS SQL数据库的最佳实践.
我可以想象三种可能的情况:
我在一个有几十个客户端的闪亮应用程序中使用我的代码,如果我使用方法1,我担心会发生一些不好的事情.所以我使用方法2,使用下面的代码为每个请求创建一个新连接.
我可以看到这种方法的一些潜在缺点:性能,对数据库资源征税等等.但是,由于R是单线程的,即使在闪亮的使用场景中,我可能会过于谨慎吗?
所以我的具体问题是:
A.在我的闪亮应用程序中,我可以通过RJDBC安全地使用单个连接到MS SQL数据库吗?
B.上述方案2中是否存在任何真正的缺点(内存泄漏,性能等)?
NewConnection <- function() {
file = NULL
# make it work on three different OSes - Linux, MacOS, Windows
for (path in c('/Users/victor/Documents/R/sqljdbc_3.0/enu/sqljdbc4.jar',
'/home/oracle/sqljdbc_3.0/enu/sqljdbc4.jar',
'C:/Projects/jdbc/sqljdbc_4.0/enu/sqljdbc4.jar')) {
if (file.exists(path)) {
file = path
break
}
}
if (is.null(file))
return(NULL)
else {
drv <- JDBC("com.microsoft.sqlserver.jdbc.SQLServerDriver", file)
passwd <- GetUserNamePassword()
conn <- dbConnect(drv, "jdbc:sqlserver://sql.server.address.com",
passwd$username, passwd$password)
return(conn)
}
}
Run Code Online (Sandbox Code Playgroud)
PS相关:如何管理R包中的数据库连接
许多问题:
1) 重用连接比每次使用建立新连接更快。根据您的代码,这会稍微加快您的应用程序的速度。但重用连接更为复杂。这就是很多人使用连接池的原因。
2) 如果您的程序运行时间较短,您可以使用一个连接,例如在全局变量中。如果您的应用程序是服务器应用程序(长时间运行),那么您需要维护连接,因为服务器可以关闭连接,如果他认为没有人使用它,因为连接上没有流量。这可能会在夜间在服务器应用程序上发生。连接维护功能是连接池的一部分。
概括。如果您的应用程序是简单的、不是多线程的、不是服务器应用程序,那么请重用您的单个连接。否则,每次都使用新连接或使用连接池。