如何通过SQL查询和大数据处理来减慢R Shiny仪表板

时间:2018-07-09 03:54:02

标签: sql r shiny rmysql

我正在为我工​​作的公司构建一个闪亮的仪表板,其中显示了公司的关键指标。仪表板当前加载非常快,但是随着时间的流逝,仪表板变得越来越慢,因为我正在查询的数据库中的表(我正在为此使用RMySQL)变得越来越大(随着时间的推移,它正在收集更多的数据)。

我已尽力使SQL查询快速运行(利用索引列,重新分区等),但这只需要花很多时间。查询数据后,仪表板随后需要处理该数据,由于数据的大小增加,随着时间的流逝,它也会变慢。

有没有其他解决方案?我与之合作的工程师建议在R中使用Ajax函数,这将允许仪表板在开始时(即最近2个月)仅加载足以填充仪表板图表的数据子集,而在后台将继续加载其余数据(在一个单独的进程上?我不确定)。但是,我不知道如何开始。 (要使用的库,如何调用查询以及在ajax函数中运行后续数据处理代码等)

任何对此的想法将不胜感激。

(侧面注:我的查询将花费很长时间,以至于当我尝试从AWS EC2实例启动闪亮的仪表板时,它会从服务器断开连接。我通过在“ reactivePoll”中调用查询来解决此问题我确信这不是执行此操作的最佳方法。)

编辑1:仪表板也从API端点中获取了一些数据,我不确定这会如何影响使用任何类似于ajax的操作或功能来改进仪表板。

2 个答案:

答案 0 :(得分:1)

一种选择是使用fst包并将sql数据以fst文件格式存储。然后,前端应用程序将继续从fst文件中提取数据,这与打击sql server相反。

答案 1 :(得分:0)

我前一段时间确实遇到了同样的问题。根据仪表板的复杂性,可以通过将所有数据汇总整夜计算并存储在Shiny所选自的临时表中来解决仪表板运行缓慢的问题。 不必每次都花时间进行计算,而是使用R或Python手动创建所有可能的聚合,然后每天使用crontab将结果每天/小时上传到临时数据库。 这样,R Shiny仪表板就可以成为可视化已预先计算数据的工具。

同样,这取决于仪表板的复杂性以及是否有临时数据库/表可用于存储聚合。