Timescale Cloud:性能、扩展性、企业级

自托管产品

MST

创建一项任务,该任务会在特定时间间隔后自动将超表中的数据块移动到列式存储中。

在创建列式存储策略之前,您需要为超表或连续聚合启用列式存储。您可以通过为超表调用 CREATE TABLE 和为连续聚合调用 ALTER MATERIALIZED VIEW 来实现。当列式存储启用后,布隆过滤器默认启用,并且每个新的数据块都将拥有一个布隆索引。如果您使用 TimescaleDB v2.19.3 或更早版本将数据块移动到列式存储中,要对该数据启用布隆过滤器,您必须将这些数据块转换为行式存储,然后再转换回列式存储。

布隆索引不会追溯应用,这意味着现有数据块需要完全重新压缩才能包含布隆索引。请查阅 PR 描述,了解 TimescaleDB 中布隆过滤器工作原理的更深入解释。

要查看您设置的或已存在的策略,请参阅信息视图;要删除策略,请参阅remove_columnstore_policy

始于 TimescaleDB v2.18.0

创建列式存储任务

  1. 启用列式存储

    使用 CREATE TABLE 为您的时序数据创建超表。为了对列式存储中的数据进行高效查询,请记住使用最常用于筛选数据的列进行 segmentby。例如

    • 为超表使用 CREATE TABLE

      CREATE TABLE crypto_ticks (
      "time" TIMESTAMPTZ,
      symbol TEXT,
      price DOUBLE PRECISION,
      day_volume NUMERIC
      ) WITH (
      tsdb.hypertable,
      tsdb.partition_column='time',
      tsdb.segmentby='symbol',
      tsdb.orderby='time DESC'
      );

      如果您自托管 TimescaleDB v2.19.3 及更早版本,请创建一个PostgreSQL 关系表,然后使用create_hypertable进行转换。然后通过调用 ALTER TABLE 来启用 hypercore。

    • 为连续聚合使用 ALTER MATERIALIZED VIEW

      ALTER MATERIALIZED VIEW assets_candlestick_daily set (
      timescaledb.enable_columnstore = true,
      timescaledb.segmentby = 'symbol' );
  2. 添加策略以在特定时间间隔后将数据块移动到列式存储中

    例如

    • 数据添加到表后 60 天

      CALL add_columnstore_policy('crypto_ticks', after => INTERVAL '60d');
    • 运行查询前 3 个月

      CALL add_columnstore_policy('crypto_ticks', created_before => INTERVAL '3 months');
    • 使用基于整数的时间列

      CALL add_columnstore_policy('table_with_bigint_time', BIGINT '600000');
    • 超过八周

      CALL add_columnstore_policy('cpu_weekly', INTERVAL '8 weeks');
    • 超过八周并使用 hypercore 表访问方法

      CALL add_columnstore_policy(
      'cpu_weekly',
      INTERVAL '8 weeks',
      hypercore_use_access_method => true);
  3. 查看您设置的或已存在的策略

    SELECT * FROM timescaledb_information.jobs
    WHERE proc_name='policy_compression';

    请参阅timescaledb_information.jobs

调用 add_columnstore_policy 需要 aftercreated_before,但不能同时使用两者。

名称类型默认值必需描述
hypertableREGCLASS-要运行此任务的超表或连续聚合的名称。
afterINTERVAL 或 INTEGER-将包含早于 now - {after}::interval 数据的块添加到列式存储中。
使用与 hypertable 中时间列类型匹配的对象类型
  • TIMESTAMPTIMESTAMPTZDATE:使用 INTERVAL 类型。
  • 基于整数的时间戳 :使用 integer_now_func 设置整数类型。
aftercreated_before 互斥。
created_beforeINTERVALNULL将创建时间为 now() - created_before 的数据块添加到列式存储中。
created_before
  • 不支持连续聚合。
  • after 互斥。
schedule_intervalINTERVALhypertablechunk_time_interval >= 1 day 时为 12 小时。否则为 chunk_time_interval / 2设置此策略上次执行的完成时间与下次开始时间之间的间隔。
initial_startTIMESTAMPTZ从上次执行完成时间到下次开始时间的间隔。设置此任务首次运行的时间。此时间也是计算 next_start 的起始时间。
timezoneTEXTUTC。但是,夏令时(DST)变更可能会导致此对齐发生偏移。设置为有效时区以缓解夏令时偏移。如果设置了 initial_start,则此策略的后续执行将与 initial_start 对齐。
if_not_existsBOOLEANfalse设置为 true,以便如果 hypertable 上已存在列式存储策略,则此任务会以警告而不是错误的形式失败。
hypercore_use_access_methodBOOLEANNULL设置为 true 以使用 hypercore 表访问方法。如果设置为 NULL,则将使用 timescaledb.default_hypercore_use_access_method 中的值。

关键词

此页面有问题?报告问题编辑此页面 在 GitHub。