Database 向时间序列数据库添加新聚合

Database 向时间序列数据库添加新聚合,database,postgresql,time-series,Database,Postgresql,Time Series,我正在postgresql中实现一个数据库系统,以支持用户对时间序列数据的快速查询。例如,事件是:用户U在时间T执行动作A。不同的事件类型被分成不同的表,目前大约20个。由于当前事件的数量约为2000万,并且很快将达到1B,因此我决定创建聚合表。例如,聚合是:在特定的一天有多少用户至少执行一个操作,或者每天执行的操作总数 我创建了插入触发器,每当将一行插入到事件表中时,该触发器就会将数据插入到聚合表中。这非常有效,并且在当前的事件数量中提供了很好的性能,我认为它应该可以很好地扩展到 然而,如果我

我正在postgresql中实现一个数据库系统,以支持用户对时间序列数据的快速查询。例如,事件是:用户U在时间T执行动作A。不同的事件类型被分成不同的表,目前大约20个。由于当前事件的数量约为2000万,并且很快将达到1B,因此我决定创建聚合表。例如,聚合是:在特定的一天有多少用户至少执行一个操作,或者每天执行的操作总数

我创建了插入触发器,每当将一行插入到事件表中时,该触发器就会将数据插入到聚合表中。这非常有效,并且在当前的事件数量中提供了很好的性能,我认为它应该可以很好地扩展到

然而,如果我想创建一个新的聚合,那么只有从该点开始的事件才会被聚合。要包含所有旧事件,必须重新插入它们。我认为有两种方法可以实现这一目标。第一个是创建一个“重新运行”函数,该函数基本上执行以下操作:

  • 查找此聚合所依赖的所有表,以及这些聚合所依赖的所有表等,直到您拥有所有直接和间接依赖关系
  • 将表复制到临时表
  • 清空表和聚合表
  • 重新插入临时表中的数据
  • 这就提出了一些关于原子性的问题。如果复制后插入了事件,该怎么办?是否应该锁定此操作中涉及的所有表

    另一种解决方案是跟踪每个聚合表中已聚合的事件表中的哪些行,然后在某个时刻聚合该聚合表中缺少的所有事件。在我看来,这似乎不太容易出现并发错误,但需要大量的跟踪存储


    是否有其他解决方案,如果没有,您会选择上述哪一种?

    您是否想过使用TSDB或麋鹿堆栈跟踪这些事件?您是否想过使用TSDB或麋鹿堆栈跟踪这些事件?