【问题标题】:Use daterange as key in Postgres for aggregated time series data在 Postgres 中使用 daterange 作为键来聚合时间序列数据
【发布时间】:2017-07-13 17:34:51
【问题描述】:

我们正在处理时间序列聚合数据,聚合到固定类型的时间段,例如每周二到周三。

将 Postgres daterange 类型用作此数据的 key 是否会被视为“不好的做法”? (而不是例如有一个 "PeriodID"-key 来定义这个日期范围,然后加入一个日历维度来识别那个日期范围。)

在我看来,单独的 "PeriodID" 只是多余的,因为 daterange 有一个非常明确的定义(在我们的设置中,它对于每个观察都是唯一的)。

有吗:

  • 性能注意事项?
  • 其他注意事项?

【问题讨论】:

  • 我认为这更多地取决于您以后将如何查询它。通常您只需在时间戳上创建索引并将其与 ts.如果你需要范围,你可以只用 7 天的时间生成_series。

标签: postgresql data-modeling data-warehouse


【解决方案1】:

在抽象层面上,tstzrange 将是此类聚合的完美表示。

您应该考虑的问题是如何查询数据,以及如何有效地使用索引。

如果您想索引“包含”运算符@> 或“重叠”运算符&&,则不能使用 B-tree 索引,只能使用 GiST 和 SP-GiST 索引(请参阅 the documentation)。您必须对此进行基准测试,但使用这样的索引可能会比在 timestamptz 列上使用 B 树索引要慢。索引也可能使用更多空间。

timestamptz 与 B 树索引一起使用的一种简单方法是存储范围的下端并像这样查询:

... WHERE weekstart <= atimestamp
      AND weekstart > atimestamp - INTERVAL '1 week'

或者查询重叠区间:

... WHERE weekstart <= endtimestamp
      AND weekstart > starttimestamp - INTERVAL '1 week'

【讨论】:

    猜你喜欢
    • 2019-09-16
    • 2020-05-08
    • 1970-01-01
    • 1970-01-01
    • 2021-04-02
    • 2017-03-07
    • 1970-01-01
    • 2016-06-14
    • 2017-06-21
    相关资源
    最近更新 更多