我想了解通过 RJDBC (重新)使用与 MS SQL 数据库的 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)
}
}
PS 相关:如何在 R 包中管理数据库连接