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

自托管产品

MST

随着时间的推移,您会积累大量数据。由于这些数据大多是不可变的,您可以对其进行压缩以节省空间并避免产生额外费用。

TimescaleDB 专为处理事件驱动型数据(如时序数据和快速分析查询)而构建,它支持 hypercore,并具有列式存储功能。

Hypercore 使您能够以更高效的格式存储数据,与普通 PostgreSQL 表相比,压缩率最高可达 90 倍。然而,这高度依赖于数据和配置。

Hypercore 原生实现在 PostgreSQL 中,不需要特殊的存储格式。当您将数据从行式存储转换为列式存储时,TimescaleDB 会使用 PostgreSQL 功能将数据转换为列式格式。使用列式格式可以实现更好的压缩率,因为相似的数据存储在相邻位置。有关列式格式的更多详细信息,请参阅 hypercore

压缩数据的一个有益的副作用是,某些查询会显著加快,因为需要读入内存的数据更少。

要压缩 crypto_ticks 表中的数据,请执行以下操作

  1. 连接到您的 Timescale Cloud 服务

    Timescale Console 中打开一个 SQL 编辑器。控制台中的编辑器会显示查询速度。您也可以使用 psql 连接到您的服务。

  2. 将数据转换为列式存储

    您可以自动或手动执行此操作

    • 自动转换块 将超表中的数据块按特定时间间隔转换为列式存储

      CALL add_columnstore_policy('crypto_ticks', after => INTERVAL '1d');
    • 手动转换所有数据块 将超表中的所有数据块转换为列式存储

      CALL convert_to_columnstore(c) from show_chunks('crypto_ticks') c;
  3. 现在您已将超表中的数据块转换为列式存储,请比较压缩前后数据集的大小

    SELECT
    pg_size_pretty(before_compression_total_bytes) as before,
    pg_size_pretty(after_compression_total_bytes) as after
    FROM hypertable_columnstore_stats('crypto_ticks');

    这表明数据使用量显著改善

    before | after
    --------+-------
    694 MB | 75 MB
    (1 row)

以前,列式存储中的数据是按 block_id 列值分段的。这意味着通过该列进行筛选或分组来获取数据会更高效。排序设置为时间降序。这意味着当您运行尝试以相同方式排序数据的查询时,会看到性能优势。

  1. 连接到您的 Timescale Cloud 服务

    Timescale Console 中打开一个 SQL 编辑器。控制台中的编辑器会显示查询速度。

  2. 运行以下查询

    SELECT
    time_bucket('1 day', time) AS bucket,
    symbol,
    FIRST(price, time) AS "open",
    MAX(price) AS high,
    MIN(price) AS low,
    LAST(price, time) AS "close",
    LAST(day_volume, time) AS day_volume
    FROM crypto_ticks
    GROUP BY bucket, symbol;

    性能提升了两个数量级,列式存储压缩时约为 15 毫秒,行式存储解压时约为 1 秒。

关键词

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