我们有一个相当大的数据库,其中有一些相当大的表(数以百万行计的一千万行)。报告了其中一些表格。
我们已经建立了索引,以尽可能快地实现这一点,但我们仍然达到了所能达到的极限。因此,我们将任何报告限制为每个用户1个月的数据。
我试图找出一个人如何能够实现更大范围的报告,例如超过一年,或将一年与前一年进行比较。
我认为实现这一目标的唯一方法是以不同的规模将数据汇总成聚合。因此,您可以每天存储1个聚合数据点,而不是每天5个数据点,包括每天、每周、每个月等。
在考虑时区之前,这个选项看起来很棒;我们所有的数据都存储在UTC中,但是用户可能与他们的同事处于不同的时区。我原以为我们可以在使用中的每个时区聚集一次,但随后数据又开始上升。
我相信,对于这类工作,有一些最佳实践,但一直未能挖掘出来,如果有人能让我朝着正确的方向前进,我将不胜感激。
一些补充信息:
发布于 2020-01-12 21:58:17
这种报告工作的标准技术是定义所需的聚合,然后定期递增地计算它们,并存储结果。然后,当准备报告的时候,您可以从这些存储的结果中组装它(至少尽可能多)。
较长范围集合的计算本身可能使用包含较小范围的存储总量,例如,计算年度汇总将不使用原始数据,它将使用以前根据原始数据编写的每月汇总。
您似乎已经说服自己,时区问题使得这是不可行的,但是从您所提供的信息中还不清楚这是否正确。
一个想要一份年度或三年报告的人,可能愿意容忍一些小的不准确之处,因为在不同的时区,一年的临界值被视为发生在不同的时区--特别是如果另一种方法根本得不到报告的话。
如果结果必须是精确的,那么仍然可以使用UTC年总量作为对正确值的近似,然后在年底查找详细数据,添加和减去为“本地年”建立正确的汇总值所需的少量值。
https://softwareengineering.stackexchange.com/questions/403716
复制相似问题