4

我是 timescaledb 的新手,我想为表中的每只股票存储一分钟的 ohlcv 刻度。一只股票每天产生 1440 个刻度,一个月产生 43200 个刻度。我有 100 个资产,我想每个月存储它们的刻度,并且基本上每 30 天左右将表格划分一次,这样我就不必为这个划分构建复杂的逻辑。关于如何使用 timescale DB 完成此操作的任何建议。

目前,我这样做的方式是

  • 获取传入的刻度(例如时间戳1535090420
  • 将其时间戳四舍五入到最近的 30 天周期(1535090420/(86400 * 30)) = 592.241674383
  • 将此数字四舍五入到592并乘以间隔得到1534464000,这是最近的 30 天存储桶,所有刻度都应该存储在其中所以我创建一个名为OHLC_1534464000的表(如果不存在)并在那里添加刻度
  • 有一个更好的方法吗
4

1 回答 1

3

除非我遗漏了什么,否则听起来您只需要一个按 30 天间隔分区的表,它会根据时间戳自动知道将传入数据放入哪个表。这正是 TimescaleDB 的hypertables的功能。

您可以使用以下语法创建表:

SELECT create_hypertable('ohlc', 'timestamp', chunk_time_interval => interval '30 days');

这将创建 30 天的块(只是引擎盖下的 Postgres 表)并根据其时间戳透明地将每个刻度放置在适当的块中。一旦超过当前 30 天期限的滴答声进入,它将自动创建一个新块。您可以在主表 ( ohlc) 上插入和查询,就好像它是一个 Postgres 表一样。

于 2018-08-28T16:04:49.103 回答