代码之家  ›  专栏  ›  技术社区  ›  Russ Bradberry

我如何按天汇总数据并仍遵守时区?

  •  9
  • Russ Bradberry  · 技术社区  · 14 年前

    我们目前正在使用一个汇总表,以UTC时间为单位每小时为用户汇总信息。我们面临的问题是,这张桌子变得太大,极大地降低了我们的系统速度。我们已经完成了为PostgreSQL推荐的所有调优技术,但我们仍在经历缓慢的过程。

    我们的想法是开始按天而不是按小时进行聚合,但问题是我们允许客户更改时区,该时区将重新计算当天的数据。

    是否有人知道存储每日摘要的方法,但在切换时区时仍然尊重数字和总计?

    3 回复  |  直到 9 年前
        1
  •  4
  •   Will A    14 年前

    用TimeOffset列和“day”字段(日期)汇总表中的数据,该字段是特定摘要行的日期。索引打开(timeoffset,day,其他相关字段),如果可能的话进行聚集(假设postgressql有聚集索引?)一切都应该很好。

        2
  •  0
  •   shmichael    14 年前

    我假设您已经完成了所有分区考虑事项,比如按用户分区。

    根据使用模式,我可以看到一些解决您问题的方法。

    1. 每天按用户选择聚合数据。如果时区发生更改,则按程序重新计算此合作伙伴的聚合。如果时区更改不频繁,并且当用户更改时区时可能会引入数据中的某些延迟,则这是合理的。

    2. 如果度量值相对较少,则可以为每个度量值维护24列,每个列描述不同时区中度量值的每日聚合。

    3. 如果时区更改频繁,并且有许多度量,那么似乎24个不同的聚合表是可行的。

        3
  •  0
  •   tinyJason    9 年前

    我也遇到了这个问题。我采用这种解决方案:日期类型的数据使用本地时区,而日期类型的其他数据使用UTC时区,因为统计索引是本地的。另一个原因是我们现在只有本地数据。