本文介绍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);

时间分区

时间分区会按照时间维度进行数据分区存储,存储底层会将不同时间分区内的数据进行分段存储,一个时间分区内的数据包含时间线索引和时序数据。时序引擎支持在数据库设置时间分区,一般情况下,如果创建周期性时间线导致了时间线膨胀,建议您开启时间分区来避免同一个分区出现大量索引膨胀。时间分区不建议设置的过小,默认时长为30天。具体操作,请参见CREATE DATABASE

示例

  • 创建一个名为DB4的数据库,设置时间分区为60天。
    CREATE DATABASE DB4 WITH (partition_interval=60);
  • 对于已经创建的数据库,可以通过修改数据库参数partition_interval的方式设置时间分区。但是目前需要等到下次分区自动切换时,修改后的时间分区才会生效,对于已经创建的分区无法生效。
    ALTER DATABASE DB4 WITH (partition_interval=60);

冷热存储分界线

Lindorm时序引擎支持数据的冷热分层存储,但需要先开通冷存储,具体操作,请参见开通冷存储。时序引擎支持在数据库设置冷热分层分界线,分界线设置完成后,分界线之前的数据会异步转移到更低成本的存储介质,需要等待数据转移完成后冷存空间才会发生变化。

重要 已经转移至冷存储的数据无法再转移至热存储。

示例

  • 创建一个名为DB5的数据库,设置冷热存储分界线为30天,即30天之前的数据会被转移到冷存储。
    CREATE DATABASE DB5 WITH (cold_boundary=30);
  • 对于已经创建的数据库,可以通过修改数据库参数cold_boundary的方式设置冷热存储分界线。
    ALTER DATABASE DB5 WITH (cold_boundary=30);

自动建表

Lindorm时序引擎提供三种Schema约束策略,分别是强约束、弱约束、无约束。通过Java Native SDK写入数据和通过行协议写入数据时可以指定Schema约束策略,更多信息,请参见关于时序数据的Schema约束。在弱约束条件下,写入数据的表或者列不存在时,时序引擎会自动创建,并对已经存在的列进行数据类型校验。

创建时序数据表

创建时序数据表之前,需要先根据业务场景构建数据模型,相关内容,请参见数据模型如何设计时序数据表

时序引擎会创建倒排索引,在查询数据时,tag用来快速匹配时间线。除此以外,可以使用PRIMARY KEY来标识分片键,通常建议选择数据源的唯一标识作为PRIMARY KEY,例如物联网场景设备ID。时序引擎会根据分片键对数据进行分片,然后路由到不同的后端节点进行存储,查询时如果查询条件命中分片键,则直接查询指定节点。

示例

  • 创建传感器表。
    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));

单值模型与多值模型

使用OpenTSDB协议或时间序列数据库TSDB接口单值写入的数据为单值模型,目前不支持建表和SQL访问。时序引擎底层数据存储实现了对多值模型数据的存储优化,建议您将单值模型更改为多值模型,让数据读取更加高效。