Timescaledb 压缩、分段和分块

Timescaledb compression, segmentby and chunking

timescaledb 中的 segementby col 设置是否确保它会为每个不同的 col 值创建一个新块?这在文档中有所暗示,但未在任何地方明确说明。

例如,使用文档中的示例将得到以下结果 segmentby deviceid

time    device_id   cpu disk_io energy_consumption
[12:00:02, 12:00:01]    1   [88.2, 88.6]    [20, 25]    [0.8, 0.85]
[12:00:02, 12:00:01]    2   [300.5, 299.1]  [30, 40]    [0.9, 0.95]

这是否会在给定的时间范围内创建 2 个单独的区块? 这很重要,因为不能 written/updated 压缩块,因此如果在同一时间范围内稍后出现新的设备 ID 数据点以供摄取,这会成为问题吗?

压缩超表的分块方式与原始超表相同。压缩应用于每个块,并为每个原始块创建一个压缩块。

segmentby 指定如何合并或分组行以进行压缩。 segmentby 列的每个唯一值都会在压缩块中生成一条记录,其中所有其他列的值都被压缩在一起。

在问题示例中,segmentbydevice_id 中有两个唯一值:12。然后将其他列中的相应值组合在一起并进行压缩。因此在示例中,device_id = 1 有两行,device_id = 2 有两行。如果所有四个原始记录都存储在原始超表中的同一块中,则对应的两个压缩记录将存储在一个压缩块中。

This is important as compressed chunks cannot be written/updated to, so if for the same time range a new device id data point appears later for ingesting, would this be an issue?

不支持对已压缩的原始块进行任何更改。因此,使用新的 segmentby 值插入数据将失败并出现错误。

UPDATE:要更新压缩块中的数据,例如回填数据,需要手动解压块,更新数据,然后将数据压缩回来,如[=20]中所述=].