【发布时间】:2017-03-11 10:35:51
【问题描述】:
目前我正在使用 PHP/MySQL 开发一个仪表板,其中包含几个统计信息/事实,例如:售出的商品数量、收入、用户的性别(男性/女性)比例等(所有这些都可在上周/月过滤/年)。数据量(目前)并不多:20.000 个用户行、1.000 个项目、每天售出 500 个项目,但预计未来会增长,甚至可能成倍增长。
现在,希望有几个图表来显示性能,以查看策略变化是否对用户数量、收入、性别比例等产生影响。为此,需要每天都有数字。目前,仪表板只能显示“NOW() - 1 周/1 个月/1 年”,但为了显示概述增长的图表,这些数字应每天保存。
我的问题是:在这种情况下有哪些选择?可以设置一个 cronjob 来保存这些数字并将它们写入单独的“性能”或“历史”表,该表将访问者、销售额、性别比例等保存在与当天日期相关的行中。这对性能有好处,但某些数据会丢失。另一种选择是使用复杂的查询(按天分组)等来计算这些数字,但这似乎很密集,因为查询是在生产数据库上执行的。特别是因为数据库结构有点复杂。考虑避免在生产数据库上执行此操作,使用 ETL 流程设置数据仓库是避免生产数据库过载的更好选择吗?在这种情况下,数据将不会实时显示。
老实说,在这种情况下,我真的不知道什么是最好的选择。我对答案很好奇!非常感谢。
【问题讨论】:
-
如果您的计算速度太慢而无法即时执行,标准方法是每天(例如在午夜)运行一次复杂查询,以从您的基础数据(您可以决定是否只为新的一天添加数据,以防旧日的数据永远不会改变,或者重新创建所有内容)。无论如何,当天在统计数据中都是无效的,因此它不必是“实时”的。您的预先计算取决于您以后想要显示/过滤的内容,但如果您找不到一个满足所有所需统计数据的结构,则创建多个表是完全有效的。
-
如果您提供有关您的表格的更多信息,这将有所帮助......每个表格中有什么,现在大概有很多行,现在和一年后的预测。
-
Summary Tables 听起来是个好主意。
-
汇总表看起来很有前途!
标签: mysql data-warehouse business-intelligence query-performance