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
列的每个唯一值都会在压缩块中生成一条记录,其中所有其他列的值都被压缩在一起。
在问题示例中,segmentby
列 device_id
中有两个唯一值:1
和 2
。然后将其他列中的相应值组合在一起并进行压缩。因此在示例中,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]中所述=].
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
列的每个唯一值都会在压缩块中生成一条记录,其中所有其他列的值都被压缩在一起。
在问题示例中,segmentby
列 device_id
中有两个唯一值:1
和 2
。然后将其他列中的相应值组合在一起并进行压缩。因此在示例中,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]中所述=].