7

我正在使用 OpenCPU 和 R 开发一个应用程序,我对两者都是全新的。我正在使用 mongolite 包连接到 MongoDB。多次调用数据库并每次连接都需要很长时间。加上数据处理、绘图等需要相当多的时间来加载带有生成图的页面。在许多情况下,我必须绘制从多个集合中获取数据的图。

我注意到,如果我不是每次都连接到数据库,而是使用现有连接,我可以节省 3-4 秒(每个连接)。

如果有人能用最好的方法指导我检查是否已经建立了与数据库的连接,那就太好了。

让我简要介绍一下我到目前为止所做的事情!

这是我的 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");
})

这样,我的变量“dbConnection”对该方法是未知的。

我尝试了其他几种使用 <<- 的方法,我读到这不是一个好方法。我还尝试使用 exists() 代替 is_null。

我尝试了另一种选择,即使用 ocpu.rpc 调用从我的 javascript 文件中调用我的 connect_mongodb 方法,并将其作为参数传递给 rplot 调用中的 R 方法。

var req = ocpu.rpc("connect_mongodb", {})

由于连接到 mongolite 不会返回 JSON 对象,因此此尝试也失败并出现以下错误 Failed to get JSON response for http://localhost:xxxx/ocpu/tmp/x07c82b16bb/ 遗憾的是,jsonlite 和 rjson 的 toJSON 对转换没有帮助JSON 的 db 对象

4

0 回答 0