存储统计数据的性能数据的最佳方式(图表)

时间:2017-03-11 10:35:52

标签: mysql data-warehouse business-intelligence query-performance

目前我在PHP / MySQL的仪表板上工作,其中包含一些统计数据/事实,例如:销售的商品数量,收入,性别(男/女)用户比例等(均为上周可过滤的) /月/年)。 (当前)数据量不是那么多:20.000个用户行,1.000个项目,每天销售500个项目,但预计将来会增长,甚至可能呈指数级增长。

现在,希望有几个图表显示性能,以了解策略变化是否会影响用户数量,收入,性别比等。为此,每天必须有数字。目前,仪表板只能显示" NOW() - 1周/ 1个月/ 1年"但是为了显示概述增长的图表,这些数字应该每天保存。

我的问题是:在这种情况下有哪些选择?可以设置一个cronjob以保存这些数字,并将它们写入单独的“性能”中。或者'历史'在与当天日期相关联的行中保存访问者,销售额,性别比率等的表格。这对性能有好处,但某些数据会丢失。另一种选择是使用复杂查询(按日分组)等计算这些数字,但这似乎是密集的,因为查询是在生产数据库上执行的。特别是因为数据库结构有点复杂。考虑避免在生产数据库上这样做,是建立一个数据仓库,ETL处理是一个更好的选择,以避免生产数据库超载?在这种情况下,数据不会实时显示。

老实说,我不知道在这种情况下最好的选择是什么。我对这些答案非常好奇!非常感谢。

1 个答案:

答案 0 :(得分:1)

在生产数据库(尤其是数量和复杂性不断增长的数据库)上运行查询会很快成为一个失败的主张。有很多可能的替代方案,基本上整个商业智能领域都可以解决这个问题。

对于您只想避免查询生产数据库的小型系统,可能开发一个完整的数据仓库是过度的。如果不了解更多,就不可能给出合理的答案,但我会选择以下其中一种(按复杂程度/结果程度的增长顺序):

  1. 不是直接显示查询结果,而是将其保存在表格中并查询表格
  2. 克隆您的生产数据库,然后查询克隆
  3. 从保存相关数据并保存历史记录的结构中提取生产数据库中的相关数据(Google Data Vault)
  4. 直接通过生产数据库,或通过解决方案2或3构建维度模型(google Kimball Dimensional Model)。注意做好工作你必须考虑你想做什么样的查询。您最终可能会针对不同的要求设计不同的设计。
  5. 您使用的技术以及可用架构上可用的选项也很重要。根据您手头的情况,您可以获得一些非常简化的解决方案,甚至是复杂的解决方案。做一些研究。