分享自己寫的shiny app 主題是海洋浮游動物的生態資料庫查詢
在這就不介紹生態上的議題,主要分享技術上心得可供參考
http://bio.odb.ntu.edu.tw/query/
資料連結部分...
shiny-server 和 PostgresSQL資料庫可架在不同server,在UI 完成篩選條件後,
抓資料的function寫成內部使用的package,經由Opencpu API 去抓使用者要的資料,
抓完即斷掉和資料庫連結。 Opencpu API作法參考
https://www.opencpu.org/posts/scoring-engine/
Opencpu server可在Apache 和 Nginx屏蔽成內網使用。用此做法在shiny-server
session中,不需要持續和資料庫保持連結。
Async...
另一個好處是預先要抓的資料,可以丟進 future::future() (以及其他讀外部檔等工作)
讓shiny-server繼續完成其他UI要做的事,等到需要render資料時才用future::value()
叫用出來。這樣減少一些lag..
順提,前日在Hadley twitter讀到他介紹 RPostgres 相對於RPostgresql這個
目前使用的package的優勢,包括會自動清除佚失的連結,與query速度較快。之後應該會
改用看看~~ https://github.com/r-dbi/RPostgres
Loading...
網頁一開始會慢的一部分原因都在掛載的javascript and css,這在nginx中若設
js | css 的cache, 網站都會出錯。但可以把這些倚賴的資源放在CDN上,
參考做法:https://goo.gl/fum9Ji
可以看到重複連結網站時,掛載在CDN上的resource都是取用被cache的,速度就會提升。
其實遇到很多問題,都靠孤狗大神一個個解決。我列了我使用到的package在這,其他有
機會再續談。
http://bio.odb.ntu.edu.tw/index_tech_citations.html
以上做法可能都有其他更好、更快的方式,目前這樣做僅供參考,也歡迎討論。
(如果您有使用此網站,使用經驗上好或不好的地方,或有其他細節要聯絡,
敬請告知或透過網頁上email聯絡。)
[關鍵字]: Shiny-server, API, Database