2012-09-17 30 views
3

我想提供一个网络工具,需要访问大型数据集。优选地,这个R数据对象应该被加载到内存中一次,然后可用于用户定义的查询。数据对象在openCPU的R会话中是否持久?

openCPU框架是否以任何方式支持持久数据对象还是每个查询都以空白开头?

回答

4

OpenCPU API是无状态的,没有办法让请求之间的进程保持活动状态。但是,通过将数据集放入一个包中并将其安装到服务器上,您可以轻松解决您的问题。

可以使用server manual中描述的preload选项,或者在服务器启动时使用/etc/opencpu/Rprofile脚本将数据集加载到内存中。这样,数据将在请求进入时准备好使用。

+0

太棒了!非常感谢您的快速回复。我正在使用基因组数据集,但是(到现在为止)它可以加载到内存中。缓存数据将可能适用于我的应用程序。 – user1678609

+0

处理会话的一个非常简单的方法是将用户数据保存在数据库中,如mysql(或小型网站的sqlite)以及唯一的ID。然后,在R/opencpu中预先加载相关数据库包之后,每个新函数调用都需要查看cookie和/或请求来查找会话标识。还可能包括一些更多的安全性,例如添加一个过期的时间戳,使用cookie而不是url字符串标识符,oauth等。 –

+0

@Jeroen您的答案在最新的opencpu版本中仍然有效吗?如果没有,通过一个平静的Web服务在内存大数据框中查询最佳实践是什么? – ajkl