重复数据需求 - 自动查询,或直接在SQL中存储数据?

时间:2014-10-14 21:45:05

标签: mysql sql reporting aggregation

即使标题听起来很复杂,这也是一个简单的问题。

让我们说我将来自一堆应用程序的数据存储到一个中央数据库/数据仓库中。这是一个非常精细的数据 - 比如各种指标的每日摘要。

然而,我知道在前端我会经常显示这些数据的每周和每月汇总。

一个想法是让脚本语言在查询SQL数据库后为我做这个 - 但这似乎非常低效,或许。

第二个想法是在数据库中包含代表商业周和月的视图 - 这可能是最好的方法。

但我最后的想法是 - 不能让SQL客户端只运行一个查询,将所有日常数据聚合成几周(或几个月)并将它们存储在一个单独的表中?这样做的好处是它可以减少任何用户的查询时间,因为所有的查询工作都是在网站或按钮被加载/推送之前完成的。即使有了观点,我想在查询视图后必须立即进行聚合计算。

从周/月开始汇总查询的唯一不足之处,甚至可能是每天一次(而不是每次加载网站) - 是它不会是最新的/可能反映出来的不一致。

对于这些更大的图片来说,我并不是真正的专家 - 任何人都有任何想法?感谢

1 个答案:

答案 0 :(得分:1)

这取决于您尝试创建的用户体验。

在观看本月的统计数据时,用户群是否希望在F5键上用一根手指观看每月聚合?为了涵盖这种情况,您可能希望拥有一个带有条件的视图,该条件提供一个始终相对于getdate()的窗口。请记住,通过良好的索引策略和查询设计,应该可以减轻这种方法对几乎没有影响的影响。

用户是否期望信息数据不包含今天的数据?可以从夜间工作中看到更多的性能,这种工作将聚合到新表中。

但在所有场景中,我不建议手动聚合。在这条道路上是意想不到的错误和异常,可以用一个好的SQL语句来处理。聚合是所有DBMS的重要组成部分,让他们的软件处理它并在你的应用程序的其余部分工作。