我正在使用OpenCPU和R开发一个应用程序,我对两者都是全新的。我使用mongolite包连接到MongoDB。每次都有多次调用DB并连接,需要很长时间。加上数据处理,绘图等需要花费大量时间来加载具有生成的图的页面。在许多情况下,我必须绘制从多个集合中获取数据。
我注意到,如果我不是每次都连接到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)
}
}
它用于获取文件并从R控制台运行它。但是,当我在opencpu服务器中使用它时,我从另一个用于绘图的R方法调用connect_mongodb方法。我从javascript文件中调用绘图方法如下。
var req = $("#plot").rplot(myPlottingMethod, options).fail(function(){
alert("Error loading results");
})
这样,我的变量&#34; dbConnection&#34;该方法未知。
我尝试了其他几种使用&lt;&lt;的方式 - 我认为这不是一个很好的方法。我也尝试使用exists()代替is_null。
我尝试使用ocpu.rpc调用从我的javascript文件调用我的connect_mongodb方法,并将其作为参数传递给rplot调用中的R方法。
var req = ocpu.rpc("connect_mongodb", {})
由于连接到mongolite并不返回JSON对象,因此尝试也失败并出现以下错误 无法获得http://localhost:xxxx/ocpu/tmp/x07c82b16bb/ 的JSON响应 遗憾的是,jsonlite和rjson的jSON没有帮助将db对象转换为JSON