我目前正在构建一个带有高图和高品质统计数据和图表的小型管理平台。现在,图表总是在每次加载时从数据库中获取数据。但由于未来数据将大幅增长,因此效率非常低,并且会使数据库速度降低。我现在的问题是存储或预先计算数据的最佳方法是什么,这样图表就不必在每次加载时都从数据库中获取数据。
答案 0 :(得分:2)
如果数据量非常大并且您可以牺牲一些实时呈现方式,最好的方法是在某个单独的数据库表中计算图表的数据并显示其中的图表。您可以设置后台流程(使用whenever或delayed_job或您喜欢的任何内容),以定期使用新值更新预处理数据表。
另一种选择是通过您喜欢的任何方式缓存图表响应(使用内置的Rails缓存,编写自定义缓存等),以便为数量较多的用户提供相同的数据。
然而,一般来说,预处理似乎是赢家,因为统计表通常包含非常“稀疏”的数据,可以预先计算到更小的集合以显示在图表上但是可以选择应用某些过滤/排序如果需要的话。
编辑只是忘了提到在数据库方面可能有一些优化空间。例如,如果您可以限制用户能够查看数据的时间段(=上限每次使用的查询数量),那么正确的索引和数据库设置可以提供实质性的性能,而无需像缓存或预先计算。