timescaledb - Timescaledb 压缩、segmentby 和分块
问题描述
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 个单独的块?这很重要,因为无法写入/更新压缩块,因此如果在同一时间范围内稍后出现新的设备 ID 数据点以供摄取,这会是一个问题吗?
解决方案
压缩的超表以与原始超表相同的方式进行分块。压缩应用于每个块,并为每个原始块创建一个压缩块。
segmentby
指定如何组合或分组行以进行压缩。列的每个唯一值都会segmentby
在压缩块中产生一条记录,其中所有其他列的值都被压缩在一起。
segmentby
在问题示例中,列device_id
:1
和中有两个唯一值2
。然后将其他列中的对应值组合在一起并压缩。因此,在示例中,有两行 fordevice_id = 1
和两行 for device_id = 2
。如果所有四个原始记录都存储在原始超表的同一个块中,则两个对应的压缩记录将存储在一个压缩块中。
这很重要,因为无法写入/更新压缩块,因此如果在同一时间范围内稍后出现新的设备 ID 数据点以供摄取,这会是一个问题吗?
不支持对压缩的原始块进行任何更改。因此插入具有新segmentby
值的数据将失败并出现错误。
更新:要更新压缩块中的数据,例如回填数据,必须手动解压缩块,更新数据,然后按照解压块文档中的说明将数据压缩回去。
推荐阅读
- php - 无法使用 eloquent 运行工匠并且无法在我的表中创建新记录
- azure - 具有 SAS 令牌缓存机制的 Azure CDN
- r - 在 ggmap 和 ggplot2 中为英国绘制地图
- python - 循环遍历 HTML 中的一组元素以便按照它们出现的顺序使用 2 个单独的标签名称的最佳方法是什么?
- php - 可填充的 PDF(php-pdftk) 单选按钮全有或全无,无法填充特定值
- mocking - 使用空手道 API 测试容器化微服务
- android - 如何在 Windows 中手动设置 ANDROID_SDK_ROOT
- java - 计算登录页面按钮的位置
- wso2 - WSO2 APIM 3.1.0 与 Azure AD 的集成
- javascript - 在nodejs中序列化和压缩哈希图(对象)的最快方法?