如何改进因 sql 查询和大数据处理而减慢的 R Shiny 仪表板

How to improve R Shiny dashboard slowed by sql queries and big data processing

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

我已尽力使 SQL 查询 运行 快速(利用索引列、重新分区等),但仅此而已。查询数据后,仪表板需要处理该数据,由于数据量的增加,处理速度也会随着时间的推移而变慢。

是否有解决此问题的方法?与我一起工作的一位工程师建议在 R 中使用 Ajax 函数,这将允许仪表板首先仅加载数据的一个子集(即过去 2 个月)足以填充仪表板的图表,并且在后台将继续加载其余数据(在单独的进程中?我不确定)。但是,我不知道如何从这里开始。 (使用什么库,如何在ajax函数中调用查询和运行后续数据处理代码等)

如有任何想法,我们将不胜感激。

(旁注:当我尝试从 AWS EC2 实例启动它时,我的查询将花费足够长的时间,以至于它会导致闪亮的仪表板 'Disconnect from Server'。我通过在 'reactivePoll' 函数,我确信这可能不是执行此操作的最佳方法。)

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

一种选择是使用 fst 包并以 fst 文件格式存储 sql 数据。然后前端应用程序将继续从 fst 文件中提取数据,而不是命中 sql 服务器。

其实我前段时间也遇到过同样的问题。根据仪表板的复杂性,可以通过在一夜之间计算所有数据聚合并将其存储在 Shiny 从中选择的临时 table 中来克服仪表板速度慢的问题。 您不必每次都闪闪发光地进行计算,而是使用 R 或 Python 手动创建所有可能的聚合,然后使用 crontab 每次 day/hour 将结果上传到临时数据库。 这样,R Shiny 仪表板就变成了一个工具,用于可视化已预先计算的数据。

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