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