我正在使用OpenCPU和R开发一个应用程序,我对两者都是全新的.我使用mongolite包连接到MongoDB.每次都有多次调用DB并连接,需要很长时间.加上数据处理,绘图等需要花费大量时间来加载具有生成的图的页面.在许多情况下,我必须绘制从多个集合中获取数据.
我注意到,我能够节省3-4秒(每个连接),如果我不连接每一次分贝,而使用现有连接.
如果有人能用最好的方法来指导我是否已经建立了与DB的连接,那将会很棒.
让我简要介绍一下到目前为止我做了什么!
这是我的connect_to_db.R文件
library(mongolite)
dbConnection <- NULL
connect_mongodb = function() {
db={
if(is.null(dbConnection)){ # connect to DB only if connection is NULL, else return global connection object
m <- mongo(collection = myCollection, db = myDb, url = myUrl)
assign("dbConnection", m, envir = .GlobalEnv)
}
return(dbConnection)
}
}
Run Code Online (Sandbox Code Playgroud)
它用于获取文件并从R控制台运行它.但是,当我在opencpu服务器中使用它时,我从另一个用于绘图的R方法调用connect_mongodb方法.我从javascript文件中调用绘图方法如下.
var req = $("#plot").rplot(myPlottingMethod, options).fail(function(){
alert("Error loading results");
})
Run Code Online (Sandbox Code Playgroud)
这样,我的变量"dbConnection"对于该方法是未知的.
我尝试了其他一些使用<<的方式 - 我读的并不是一个很好的方法.我也尝试使用exists()代替is_null.
我尝试了另一种选择,使用ocpu.rpc调用从我的javascript文件调用我的connect_mongodb方法,并将其作为参数传递给rplot调用中的R方法.
var req = ocpu.rpc("connect_mongodb", {})
Run Code Online (Sandbox Code Playgroud)
由于连接到mongolite不会返回一个JSON对象,这个尝试也失败了以下错误 无法获取http:// localhost:xxxx/ocpu/tmp/x07c82b16bb的 JSON响应/ 遗憾的是,jsonlite的jSON和rjson没有帮助转换db对象为JSON