配置项
建表时可以使用下列的选项配置引擎:
enable_ttl
:布尔类型,默认为true
,当一个表配置 TTL 时,早于ttl
的数据不会被查询到并且会被删除。ttl
:duration
类型,默认值为7d
,此项定义数据的生命周期,只在enable_ttl
为true
的情况下使用。storage_format
:string
类型,数据存储的格式,有两种可选:columnar
, 默认值hybrid
, 注意:此功能仍在开发中,将来可能会发生变化。
上述两种存储格式详见 存储格式 部分。
存储格式
HoraeDB 支持两种存储格式,一个是 columnar
, 这是传统的列式格式,一个物理列中存储表的一个列。
|
|
另一个是 hybrid
, 当前还在实验阶段的存储格式,用于在列式存储中模拟面向行的存储,以加速经典的时序查询。
在经典的时序场景中,如 IoT 或 DevOps,查询通常会先按系列 ID(或设备 ID)分组,然后再按时间戳分组。
为了在这些场景中实现良好的性能,数据的物理布局应该与这种风格相匹配, hybrid
格式就是这样提出的。
|
|
- 在一个文件中,同一个主键(例如设备 ID)的数据会被压缩到一行。
- 除了主键之外的列被分成两类:
collapsible
, 这些列会被压缩成一个 list,常用于时序表中的field
字段。- 注意: 当前仅支持定长的字段
non-collapsible
, 这些列只能包含一个去重值,常用于时序表中的tag
字段。- 注意: 当前仅支持字符串类型
- 另外多加了两个字段,
minTime
和maxTime
, 用于查询中过滤不必要的数据。- 注意: 暂未实现此能力
示例
|
|
这段语句会创建一个混合存储格式的表, 这种情况下用户可以通过 parquet-tools查看数据格式. 上面定义的表的 parquet 结构如下所示:
message arrow_schema {
optional group ts (LIST) {
repeated group list {
optional int64 item (TIMESTAMP(MILLIS,false));
}
}
required int64 tsid (INTEGER(64,false));
optional binary tag1 (STRING);
optional binary tag2 (STRING);
optional group value1 (LIST) {
repeated group list {
optional double item;
}
}
optional group value2 (LIST) {
repeated group list {
optional int32 item;
}
}
}