本文介绍Lindorm时序引擎数据建模的过程。
创建时序数据库
Lindorm实例创建成功后,系统会默认创建default数据库,数据默认写入该数据库。您无法删除default数据库。
时序引擎支持创建多个数据库,不同的数据库在存储层进行物理隔离,支持设置不同的数据有效期(TTL)、时间分区和冷热存储分界线。创建数据库的具体操作,请参见CREATE DATABASE。
示例
创建一个名为DB1的数据库,设置数据为不过期。
CREATE DATABASE DB1;创建一个名为DB2的数据库,设置数据有效期(TTL)为60天。
CREATE DATABASE DB2 WITH (ttl=60);创建一个名为DB3的数据库,设置数据有效期(TTL)为60天,冷热存储分界线为30天。
CREATE DATABASE DB3 WITH (cold_boundary=30, ttl=60);说明数据有效期(TTL)和冷热存储分界线单位为天。
冷热存储分界线需要小于数据有效期(TTL)。
时间分区
时序引擎支持在数据库级别设置时间分区。时间分区会按照时间维度进行数据分区存储,存储底层会将不同时间分区内的数据进行分段存储。一个时间分区内的数据包含时间线索引和时序数据。
在创建周期性时间线导致时间线膨胀的场景下,建议开启时间分区,避免同一个分区出现大量非活跃的过期时间线导致的索引膨胀。时间分区不建议设置过小,默认时长为30天。推荐7天或30天。开启时间分区的方法,请参见CREATE DATABASE。
数据查询时,会根据查询的时间范围命中时间分区。
示例
创建一个名为DB4的数据库,设置时间分区为30天。
CREATE DATABASE DB4 WITH (partition_interval=30);对于已经创建的数据库,通过修改数据库参数partition_interval来变更时间分区。
ALTER DATABASE DB4 WITH (partition_interval=60);重要变更时间分区不会立即生效。变更时间分区后,系统会将当前数据的最后一天作为当前分区的结束时间,并在第二天切换新的分区。修改的时间分区只对新的分区有效,对已经存在的分区无效。
例如,数据库DB4的原时间分区为30天,现变更时间分区为60天,变更时已有50天的数据,即已有分区1(存储1~30天的数据)和分区2(存储31~50天的数据)。那么,第51天及之后的数据将会存储在新的分区,且新的分区可存储60天的数据。变更时间分区的操作不会变更已有的分区1和分区2。
冷热存储分界线
Lindorm时序引擎支持数据的冷热分层存储。您可以在数据库级别设置冷热存储分界线(cold_boundary,单位为天),分界线之前的数据会异步转移到更低成本的存储介质。
使用冷热分层存储,需要先开通冷存储,具体操作,请参见开通容量型云存储。
转移至冷存储的数据无法再转移至热存储。
数据转移会在后台异步执行,设置或修改冷热存储分界线后,需要等待片刻才会看到冷存储空间变化。
示例
创建一个名为DB5的数据库,设置冷热存储分界线为30天,即30天之前的数据会被转移到冷存储。
CREATE DATABASE DB5 WITH (cold_boundary=30);对于已经创建的数据库,通过修改数据库参数cold_boundary来变更冷热存储分界线。
ALTER DATABASE DB5 WITH (cold_boundary=30);
创建时序数据表
创建时序数据表之前,需要先根据业务场景构建数据模型,确定创建时序数据表需要的标签(Tag)、时间戳(Timestamp)、量测值(Field)。一般来说,在数据查询时,标签用于快速匹配时间线,时序引擎会为每个标签创建倒排索引。
另外,您可以使用PRIMARY KEY来标识分片键。时序引擎会根据分片键将数据Hash路由到不同的后端节点进行存储,查询时如果查询条件命中分片键,可以直接查询指定节点,从而可以减少查询广播所有节点的情况。通常建议使用唯一ID作为PRIMARY KEY,例如物联网场景设备ID。
示例
创建传感器表sensor。
CREATE TABLE sensor ( device_id VARCHAR TAG, region VARCHAR TAG, time TIMESTAMP, temperature DOUBLE, humidity DOUBLE);创建传感器表,并指定device_id作为分片键。
CREATE TABLE sensor ( device_id VARCHAR TAG, region VARCHAR TAG, time TIMESTAMP, temperature DOUBLE, humidity DOUBLE, PRIMARY KEY(device_id));
自动建表
Lindorm时序引擎提供三种Schema约束策略,分别是强约束、弱约束、无约束。Java Native SDK写入、行协议写入和兼容TSDB接口的多值写入,支持指定Schema约束策略。在弱约束策略下,如果写入的数据表或者列不存在,时序引擎会自动创建表或列,并对已经存在的列进行数据类型校验。更多信息,请参见Schema约束。
单值模型与多值模型
使用OpenTSDB协议或时间序列数据库TSDB接口的单值模式写入的数据,默认为单值模型,不支持自动建表。Lindorm时序引擎底层数据存储实现了对多值模型数据的存储优化,数据读取更加高效,同时支持弱约束策略可以自动建表。建议您将单值模型更改为多值模型。