将新聚合添加到时间序列数据库

时间:2015-11-18 23:01:16

标签: database postgresql time-series

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

我创建了插入触发器,只要将一行插入到事件表中,就会将数据插入到聚合表中。这种方法效果很好,并且在当前的事件数量方面提供了出色的性能,我认为它应该可以很好地扩展到。

但是,如果我想创建一个新的聚合,那么只会聚合来自该点的事件。要包含所有旧事件,必须重新插入它们。我认为有两种方法可以实现。第一个是创建一个“重新运行”功能,基本上执行以下操作:

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

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

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

0 个答案:

没有答案