【问题标题】:Optimal way of storing performance data for statistics (graphs)存储统计性能数据的最佳方式(图表)
【发布时间】: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


【解决方案1】:

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

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

  1. 不直接显示查询结果,而是保存在一个表中,查询该表
  2. 克隆生产数据库,然后查询克隆
  3. 从生产数据库中提取相关数据,以保存相关数据并保留历史记录的结构(谷歌数据保险库)
  4. 直接通过生产数据库,或通过解决方案 2 或 3 构建维度模型(google Kimball Dimensional Model)。请注意,要做好工作,您必须考虑要执行什么样的查询。您最终可能会针对不同的要求使用不同的设计。

您正在使用哪种技术以及可用架构上有哪些可用选项也很重要。根据您手头的情况,您可以有一些解决方案,甚至是复杂的解决方案,并且非常简化。做一些研究。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 2014-07-28
    • 2011-05-10
    • 2014-06-20
    • 2023-03-08
    • 1970-01-01
    相关资源
    最近更新 更多