如何在 kdb+ 中存储聚合数据

How to store aggregated data in kdb+

我遇到了架构问题:我应该选择什么策略来存储聚合数据。

我知道在某些时间序列数据库中,例如 RRDTools,可以有多个数据库层来存储 1H、1W、1M、1Y 聚合数据。

kdb+ 使用相同的策略是否是一种正常做法:拥有多个具有 date/month/year/int(一周和其他)分区的组屋? (关于网关的规则如何找到合适的来源。)

作为替代方案,我考虑将所有数据存储在表名agg 等表中的单个 HDB 中。但是在我看来,它不像几个组屋那样光滑。

做决定时我应该考虑哪些要点?

很难给出一个普遍的答案,因为每个人的要求都不同,但我可以说,根据我的经验,通常的做法是拥有一个按日期分区的 HDB,因为它可以容纳最广泛的历史数据集。在增加聚合粒度方面:

  1. 完整报价数据 - 在 sym
  2. 上使用 `p# 进行日期分区时效果最佳
  3. 按分钟聚合的数据 - 仍然适用于日期分区,使用 `p# 在 sym 或分钟上,`g# 在分钟或 sym 上
  4. 每小时聚合数据 - 可以根据数据量进行日期分区或展开。同样,您可以在 sym and/or 聚合时间单位(在本例中为小时)
  5. 上有一些属性组合
  6. 每周汇总数据 - 考虑到这会压缩多少数据,您现在可能会在这个按日期分区的数据库中查看展开的 table。如上所述使用属性。
  7. Monthly/Yearly 聚合数据 - 考虑到这些 table 的大小,当然可以展开,甚至可能是平坦的。在平面案例中几乎不需要属性。

维护许多具有不同分区样式的不同 HDB 对我来说似乎有点过分了。但这同样取决于所涉及的情况和数据量以及数据的预期使用模式。