3
我想提供一个网络工具,需要访问大型数据集。优选地,这个R数据对象应该被加载到内存中一次,然后可用于用户定义的查询。数据对象在openCPU的R会话中是否持久?
openCPU框架是否以任何方式支持持久数据对象还是每个查询都以空白开头?
我想提供一个网络工具,需要访问大型数据集。优选地,这个R数据对象应该被加载到内存中一次,然后可用于用户定义的查询。数据对象在openCPU的R会话中是否持久?
openCPU框架是否以任何方式支持持久数据对象还是每个查询都以空白开头?
OpenCPU API是无状态的,没有办法让请求之间的进程保持活动状态。但是,通过将数据集放入一个包中并将其安装到服务器上,您可以轻松解决您的问题。
可以使用server manual中描述的preload
选项,或者在服务器启动时使用/etc/opencpu/Rprofile
脚本将数据集加载到内存中。这样,数据将在请求进入时准备好使用。
太棒了!非常感谢您的快速回复。我正在使用基因组数据集,但是(到现在为止)它可以加载到内存中。缓存数据将可能适用于我的应用程序。 – user1678609
处理会话的一个非常简单的方法是将用户数据保存在数据库中,如mysql(或小型网站的sqlite)以及唯一的ID。然后,在R/opencpu中预先加载相关数据库包之后,每个新函数调用都需要查看cookie和/或请求来查找会话标识。还可能包括一些更多的安全性,例如添加一个过期的时间戳,使用cookie而不是url字符串标识符,oauth等。 –
@Jeroen您的答案在最新的opencpu版本中仍然有效吗?如果没有,通过一个平静的Web服务在内存大数据框中查询最佳实践是什么? – ajkl