TairTS是基于Redis Module开发的时序数据结构,提供低时延、高并发的内存读写访问,及快速地过滤、聚合查询功能,集存储与计算为一体,在简化了处理时序数据流程的同时,大幅度提高了性能。

TairTS简介

相比RedisTimeSeries,TairTS提供了更丰富的功能:
  • 通过自研的Pkey(额外一层Hash结构),轻松实现Pkey级别(多时间线)聚合查询。

    例如您可以在foo(Pkey)中创建以各项指标名称与设备ID命名的Skey,例如temperature:1、pressure:1、distance:1等,可通过TairTS自带的EXTS.S.MRANGE命令轻松获取设备ID为1的自定义监控信息,而使用RedisTimeSeries则需要在业务逻辑代码中嵌入大量数据聚合运算才能实现该功能。

    图 1. TairTS与RedisTS数据结构对比图
    TairTS数据结构图

    TairTS数据结构解析:

    • Pkey(一组时间线):TairTS数据结构,可包含多个Skey。
    • Skey(一条时间线):可包含多个固定容量的Chunk,每个Skey可设置不同的Label(标签),可通过Label在海量数据中快速过滤目标Skey。
    • Chunk(数据块):可存储多个DataPoint。
      • Chunk的容量支持自定义,最多包含256个DataPoint。
      • Chunk为最小的过期单元,即单个Chunk中所有Datapoint都过期后才会删除该Chunk。
    • DataPoint(时序数据):包含一个时间戳和一个value数据(double类型)。
  • 支持降采样、属性过滤、分批查询、多种数值函数等条件下的聚合操作,将批量查询与聚合计算集成到单条命令中,减少网络交互,实现毫秒级响应。
  • 支持对历史时序数据的更新或累加。
  • 支持时间线级别的TTL设定,保证每条时间线都可以按时间窗口自动滚动。
  • 采用高效的Gorilla压缩算法与特定存储,极大降低存储成本。
典型场景
  • 监控数据的存储与计算
  • APM秒级监控
  • IoT(物联网)数据分析与处理
  • 限流风控
  • 热点消息的缓存
  • 时间窗口函数

最佳实践

基于TairTS实现秒级监控

前提条件

实例为Tair(Redis企业版)内存型,且小版本为1.7.20及以上。
说明 最新小版本将提供更丰富的功能与稳定的服务,建议将实例的小版本升级到最新,具体操作请参见升级小版本。若实例为集群架构读写分离架构,请将代理节点的小版本也升级到最新,避免代理节点无法识别部分命令。

注意事项

  • 操作对象为Tair实例中的TairTS数据。
  • TairTS的优势为实时、高并发的写入与查询性能,缺陷为存储容量有限,请合理设置TTL,及时淘汰过期数据。
  • 为节省内存空间,关于设置CHUNK_SIZE的建议如下:
    • 若Skey(时间线)的平均数据点大于5,000个,设置CHUNK_SIZE为256(默认值)。
    • 若Skey(时间线)的平均数据点小于5,000个,设置CHUNK_SIZE为平均数据点个数 / 20。例如某Skey的平均数据点为1,000,可以设置CHUNK_SIZE为50。

命令列表

表 1. TairTS命令
类型 命令 语法 说明
基础写操作 EXTS.P.CREATE EXTS.P.CREATE Pkey

创建一个新的Pkey(TairTS数据结构),若Pkey已存在则创建失败。

EXTS.S.CREATE EXTS.S.CREATE Pkey Skey [DATA_ET time] [CHUNK_SIZE size] [UNCOMPRESSED] [LABELS label1 val1 label2 val2 ...]
在指定的Pkey中创建一个Skey,若Pkey不存在则会自动创建,若Skey已经存在则创建失败。
说明 您可以在创建Skey时设置其相关属性,例如过期时间、是否开启压缩等。
EXTS.S.ALTER EXTS.S.ALTER Pkey Skey [DATA_ET time]

修改指定Skey的元数据信息,当前仅支持修改过期时间(DATA_ET)。

EXTS.S.ADD EXTS.S.ADD Pkey Skey ts value [DATA_ET time] [CHUNK_SIZE size] [UNCOMPRESSED] [LABELS label1 val1 ...]

向Skey中插入一条Datapoint数据。若Pkey或Skey不存在则会自动创建,属性(过期时间、是否开启压缩等)仅在Skey不存在并自动创建的情况下生效。

EXTS.S.MADD EXTS.S.MADD Pkey keynumber Skey ts value [Skey ts value ...] [DATA_ET time] [CHUNK_SIZE size] [UNCOMPRESSED] [LABELS label1 val1 ...]

在指定Pkey的多个Skey分中别插入一条Datapoint数据。若Pkey或Skey不存在则会自动创建,属性(过期时间、是否开启压缩等)仅在Skey不存在并自动创建的情况下生效。

EXTS.S.INCRBY EXTS.S.INCRBY Pkey Skey ts value [DATA_ET time] [CHUNK_SIZE size] [UNCOMPRESSED] [LABELS label1 val1 ...]

向Skey中插入一条Datapoint数据,该命令中的value将与Skey中最近Datapoint的value值相加实现递增,也可以指定该命令中的value为负数实现递减。若Pkey或Skey不存在则会自动创建,默认初始值为0,属性(过期时间、是否开启压缩等)仅在Skey不存在并自动创建的情况下生效。

EXTS.S.MINCRBY EXTS.S.MINCRBY Pkey keynumber Skey ts value [Skey ts value ...] [DATA_ET time] [CHUNK_SIZE size] [UNCOMPRESSED] [LABELS label1 val1 ...]

在指定Pkey的多个Skey分别插入一条Datapoint数据,该命令中的value将分别与各个Skey中最近Datapoint的value值相加实现递增,也可以指定该命令中的value为负数实现相减。若Pkey或Skey不存在则会自动创建,默认初始值为0,属性(过期时间、是否开启压缩等)仅在Skey不存在并自动创建的情况下生效。

EXTS.S.DEL EXTS.S.DEL Pkey Skey

删除指定Pkey中的单个Skey,并删除目标Skey中所有的Datapoint数据。

基础读操作 EXTS.S.GET EXTS.S.GET Pkey Skey

查询指定Skey中最新的Datapoint数据。

EXTS.S.INFO EXTS.S.INFO Pkey Skey

查询指定Skey的元数据信息,包含Datapoint数量、最近Datapoint的时间戳与value值、Skey的标签信息等信息。

EXTS.S.QUERYINDEX EXTS.S.QUERYINDEX Pkey filter1 [filter2 ...]

在Pkey中自定义过滤条件(filter),查询目标Skey。

聚合操作 EXTS.S.RANGE EXTS.S.RANGE Pkey Skey fromTs toTs [MAXCOUNT count] [AGGREGATION aggregationType timeBucket]

在Skey中查询指定时间内(包含指定时间点)的Datapoint数据。

EXTS.S.MRANGE EXTS.S.MRANGE Pkey fromTs toTs [MAXCOUNT count] [AGGREGATION aggregationType timeBucket] [WITHLABELS] FILTER filter1 [filter2 ...]

在Skey中自定义过滤条件(filter)与查询时间点(包含指定时间点),查询目标Datapoint数据。

EXTS.P.RANGE EXTS.P.RANGE Pkey fromTs toTs pkeyAggregationType pkeyTimeBucket [MAXCOUNT count] [AGGREGATION aggregationType timeBucket] [WITHLABELS] FILTER filter1 [filter2 ...]

在Pkey层级对符合过滤条件(filter)的Datapoint数据进行聚合,若您指定了Skey层级的聚合,则会优先进行Skey层级聚合(效果与EXTS.S.MRANGE命令相同),再从Pkey层级对第一次聚合结果进行二次聚合。

并发写操作 EXTS.S.RAW_MODIFY EXTS.S.RAW_MODIFY Pkey Skey ts value [DATA_ET time] [CHUNK_SIZE size] [UNCOMPRESSED] [LABELS label1 val1 ...]

修改指定Skey中Datapoint数据的value值。若Pkey或Skey不存在则会自动创建,属性(过期时间、是否开启压缩等)仅在Skey不存在并自动创建的情况下生效。

EXTS.S.RAW_MMODIFY EXTS.S.RAW_MMODIFY Pkey keynumber Skey ts value [Skey ts value ...] [DATA_ET time] [CHUNK_SIZE size] [UNCOMPRESSED] [LABELS label1 val1 ...]

批量修改多个指定Skey中Datapoint数据的value值。若Pkey或Skey不存在则会自动创建,属性(过期时间、是否开启压缩等)仅在Skey不存在并自动创建的情况下生效。

EXTS.S.RAW_INCRBY EXTS.S.RAW_INCRBY Pkey Skey ts value [DATA_ET time] [CHUNK_SIZE size] [UNCOMPRESSED] [LABELS label1 val1 ...]

该命令中的value值会与指定Skey中Datapoint数据的value相加实现递增,也可以指定该命令中的value为负数实现递减。若Pkey或Skey不存在则会自动创建,默认初始值为0,属性(过期时间、是否开启压缩等)仅在Skey不存在并自动创建的情况下生效。

EXTS.S.RAW_MINCRBY EXTS.S.RAW_MINCRBY Pkey keynumber Skey ts value [Skey ts value ...] [DATA_ET time] [CHUNK_SIZE size] [UNCOMPRESSED] [LABELS label1 val1 ...]

批量修改多个指定Skey中Datapoint数据的value值,该命令中的value值会与指定Skey中Datapoint数据的value相加实现递增,也可以指定该命令中的value为负数实现递减。若Pkey或Skey不存在则会自动创建,属性(过期时间、是否开启压缩等)仅在Skey不存在并自动创建的情况下生效。

通用 DEL DEL key [key ...] 使用原生Redis的DEL命令可以删除一条或多条TairTS数据。
说明 本文的命令语法定义如下:
  • 大写关键字:命令关键字。
  • 斜体:变量。
  • [options]:可选参数,不在括号中的参数为必选。
  • A|B:该组参数互斥,请进行二选一或多选一。
  • ...:前面的内容可重复。

EXTS.P.CREATE

类别 说明
语法 EXTS.P.CREATE Pkey
时间复杂度 O(1)
命令描述

创建一个新的Pkey(TairTS数据结构),若Pkey已存在则创建失败。

选项
  • Pkey:Key名称(TairTS数据结构),用于指定命令调用的TairTS对象。
返回值
  • OK:表示执行成功。
  • 其它情况返回相应的异常信息。
示例

命令示例:

EXTS.P.CREATE foo

返回示例:

OK

EXTS.S.CREATE

类别 说明
语法 EXTS.S.CREATE Pkey Skey [DATA_ET time] [CHUNK_SIZE size] [UNCOMPRESSED] [LABELS label1 val1 label2 val2 ...]
时间复杂度 O(1)
命令描述
在指定的Pkey中创建一个Skey,若Pkey不存在则会自动创建,若Skey已经存在则创建失败。
说明 您可以在创建Skey时设置其相关属性,例如过期时间、是否开启压缩等。
选项
  • Pkey:PKey名称(TairTS数据结构),用于指定命令调用的TairTS对象。
  • Skey:Skey名称。
  • DATA_ET time:DataPoint数据的相对过期时间,单位为毫秒,默认为不填(表示不会过期)。
  • CHUNK_SIZE:单个Chunk可保存的Datapoint数,默认值为256条,取值范围为[1,256]。
  • UNCOMPRESSED:设置Skey不开启压缩,默认为不填(即开启压缩)。
  • LABELS:Skey的属性,输入一组或多组对应的标签名、标签值,例如LABELS sensor_id 1
返回值
  • OK:表示执行成功。
  • 其它情况返回相应的异常信息。
示例

命令示例:

EXTS.S.CREATE foo temperature DATA_ET 10000000 LABELS sensor_id 1

返回示例:

OK

EXTS.S.ALTER

类别 说明
语法 EXTS.S.ALTER Pkey Skey [DATA_ET time]
时间复杂度 O(1)
命令描述

修改指定Skey的元数据信息,当前仅支持修改过期时间(DATA_ET)。

选项
  • Pkey:PKey名称(TairTS数据结构),用于指定命令调用的TairTS对象。
  • Skey:Skey名称。
  • DATA_ET time:DataPoint数据的相对过期时间,单位为毫秒,默认为不填(表示不会过期)。
返回值
  • OK:表示执行成功。
  • 其它情况返回相应的异常信息。
示例

命令示例:

EXTS.S.ALTER foo temperature DATA_ET 100000

返回示例:

OK

EXTS.S.ADD

类别 说明
语法 EXTS.S.ADD Pkey Skey ts value [DATA_ET time] [CHUNK_SIZE size] [UNCOMPRESSED] [LABELS label1 val1 ...]
时间复杂度 O(1)
命令描述

向Skey中插入一条Datapoint数据。若Pkey或Skey不存在则会自动创建,属性(过期时间、是否开启压缩等)仅在Skey不存在并自动创建的情况下生效。

选项
  • Pkey:PKey名称(TairTS数据结构),用于指定命令调用的TairTS对象。
  • Skey:Skey名称。
  • ts:Datapoint数据的Unix时间戳,单位为毫秒,支持用*表示系统当前的时间戳。
  • value:Datapoint数据的值,数据类型为双精度浮点(double)型。
  • DATA_ET time:DataPoint数据的相对过期时间,单位为毫秒,默认为不填(表示不会过期)。
  • CHUNK_SIZE:单个Chunk可保存的Datapoint数,默认值为256条,取值范围为[1,256]。
  • UNCOMPRESSED:设置Skey不开启压缩,默认为不填(即开启压缩)。
  • LABELS:Skey的属性,输入一组或多组对应的标签名、标签值,例如LABELS sensor_id 1
返回值
  • OK:表示执行成功。
  • 其它情况返回相应的异常信息。
示例

命令示例:

EXTS.S.ADD foo temperature 1644310456023 30.5 DATA_ET 1000000 LABELS sensor_id 1

返回示例:

OK

EXTS.S.MADD

类别 说明
语法 EXTS.S.MADD Pkey keynumber Skey ts value [Skey ts value ...] [DATA_ET time] [CHUNK_SIZE size] [UNCOMPRESSED] [LABELS label1 val1 ...]
时间复杂度 O(n),其中n为keynumber。
命令描述

在指定Pkey的多个Skey分中别插入一条Datapoint数据。若Pkey或Skey不存在则会自动创建,属性(过期时间、是否开启压缩等)仅在Skey不存在并自动创建的情况下生效。

选项
  • Pkey:PKey名称(TairTS数据结构),用于指定命令调用的TairTS对象。
  • keynumber:指定多条数据的个数。
  • Skey:Skey名称。
  • ts:Datapoint数据的Unix时间戳,单位为毫秒,支持用*表示系统当前的时间戳。
  • value:Datapoint数据的值,数据类型为双精度浮点(double)型。
  • DATA_ET time:DataPoint数据的相对过期时间,单位为毫秒,默认为不填(表示不会过期)。
  • CHUNK_SIZE:单个Chunk可保存的Datapoint数,默认值为256条,取值范围为[1,256]。
  • UNCOMPRESSED:设置Skey不开启压缩,默认为不填(即开启压缩)。
  • LABELS:Skey的属性,输入一组或多组对应的标签名、标签值,例如LABELS sensor_id 1
返回值
  • OK:表示执行成功。
  • 其它情况返回相应的异常信息。
示例

命令示例:

EXTS.S.MADD foo 3 temperature * 30.2 pressure * 2.05 distance * 0.5

返回示例:

1) OK
2) OK
3) OK

EXTS.S.INCRBY

类别 说明
语法 EXTS.S.INCRBY Pkey Skey ts value [DATA_ET time] [CHUNK_SIZE size] [UNCOMPRESSED] [LABELS label1 val1 ...]
时间复杂度 O(1)
命令描述

向Skey中插入一条Datapoint数据,该命令中的value将与Skey中最近Datapoint的value值相加实现递增,也可以指定该命令中的value为负数实现递减。若Pkey或Skey不存在则会自动创建,默认初始值为0,属性(过期时间、是否开启压缩等)仅在Skey不存在并自动创建的情况下生效。

选项
  • Pkey:PKey名称(TairTS数据结构),用于指定命令调用的TairTS对象。
  • Skey:Skey名称。
  • ts:Datapoint数据的Unix时间戳,单位为毫秒,支持用*表示系统当前的时间戳。
  • value:待增加操作的值,可以指定该值为负数实现相减,数据类型为双精度浮点(double)型。
  • DATA_ET time:DataPoint数据的相对过期时间,单位为毫秒,默认为不填(表示不会过期)。
  • CHUNK_SIZE:单个Chunk可保存的Datapoint数,默认值为256条,取值范围为[1,256]。
  • UNCOMPRESSED:设置Skey不开启压缩,默认为不填(即开启压缩)。
  • LABELS:Skey的属性,输入一组或多组对应的标签名、标签值,例如LABELS sensor_id 1
返回值
  • OK:表示执行成功。
  • 其它情况返回相应的异常信息。
示例

提前执行EXTS.S.ADD foo temperature 1644310456023 30.0命令。

命令示例:

EXTS.S.INCRBY foo temperature 1644372093031 2

返回示例:

OK
若此时执行EXTS.S.GET foo temperature命令,将会返回如下结果:
1) (integer) 1644372093031
2) "32"

EXTS.S.MINCRBY

类别 说明
语法 EXTS.S.MINCRBY Pkey keynumber Skey ts value [Skey ts value ...] [DATA_ET time] [CHUNK_SIZE size] [UNCOMPRESSED] [LABELS label1 val1 ...]
时间复杂度 O(n),其中n为keynumber。
命令描述

在指定Pkey的多个Skey分别插入一条Datapoint数据,该命令中的value将分别与各个Skey中最近Datapoint的value值相加实现递增,也可以指定该命令中的value为负数实现相减。若Pkey或Skey不存在则会自动创建,默认初始值为0,属性(过期时间、是否开启压缩等)仅在Skey不存在并自动创建的情况下生效。

选项
  • Pkey:PKey名称(TairTS数据结构),用于指定命令调用的TairTS对象。
  • keynumber:指定多条数据的个数。
  • Skey:Skey名称。
  • ts:Datapoint数据的Unix时间戳,单位为毫秒,支持用*表示系统当前的时间戳。
  • value:待增加操作的值,可以指定该值为负数实现相减,数据类型为双精度浮点(double)型。
  • DATA_ET time:DataPoint数据的相对过期时间,单位为毫秒,默认为不填(表示不会过期)。
  • CHUNK_SIZE:单个Chunk可保存的Datapoint数,默认值为256条,取值范围为[1,256]。
  • UNCOMPRESSED:设置Skey不开启压缩,默认为不填(即开启压缩)。
  • LABELS:Skey的属性,输入一组或多组对应的标签名、标签值,例如LABELS sensor_id 1
返回值
  • OK:表示执行成功。
  • 其它情况返回相应的异常信息。
示例

命令示例:

EXTS.S.MINCRBY foo 3 temperature * 0.2 pressure * -0.1 distance * 0.0

返回示例:

1) OK
2) OK
3) OK

EXTS.S.DEL

类别 说明
语法 EXTS.S.DEL Pkey Skey
时间复杂度 O(1)
命令描述

删除指定Pkey中的单个Skey,并删除目标Skey中所有的Datapoint数据。

选项
  • Pkey:PKey名称(TairTS数据结构),用于指定命令调用的TairTS对象。
  • Skey:Skey名称。
返回值
  • OK:表示执行成功。
  • 其它情况返回相应的异常信息。
示例

命令示例:

EXTS.S.DEL foo temperature

返回示例:

OK

EXTS.S.GET

类别 说明
语法 EXTS.S.GET Pkey Skey
时间复杂度 O(1)
命令描述

查询指定Skey中最新的Datapoint数据。

选项
  • Pkey:PKey名称(TairTS数据结构),用于指定命令调用的TairTS对象。
  • Skey:Skey名称。
返回值
  • 执行成功:返回对应的Datapoint数据。
  • nil:表示Pkey或Skey不存在。
  • 其它情况返回相应的异常信息。
示例

命令示例:

EXTS.S.GET foo temperature

返回示例:

1) (integer) 1644372730150
2) "32.2"

EXTS.S.INFO

类别 说明
语法 EXTS.S.INFO Pkey Skey
时间复杂度 O(1)
命令描述

查询指定Skey的元数据信息,包含Datapoint数量、最近Datapoint的时间戳与value值、Skey的标签信息等信息。

选项
  • Pkey:PKey名称(TairTS数据结构),用于指定命令调用的TairTS对象。
  • Skey:Skey名称。
返回值
  • 执行成功:返回Skey的元数据信息。
  • nil:表示Pkey或Skey不存在。
  • 其它情况返回相应的异常信息。
示例

命令示例:

EXTS.S.INFO foo temperature

返回示例:

 1) totalDataPoints            // Datapoint数量。
 2) (integer) 1
 3) maxDataPoints              // Skey可存储Datapoint数量的上限,默认为0(表示不限制)。
 4) (integer) 0
 5) maxDataPointsPerChunk      // 每个Chunk存储的Datapoint个数。
 6) (integer) 32
 7) dataPointsExpireTime       // Skey的相对过期时间(DATA_ET),单位为毫秒,0表示不过期。
 8) (integer) 0
 9) lastTimestamp              // 最近Datapoint的时间戳。
10) (integer) 1644389400996
11) chunkCount                 // Skey的chunk数量。
12) (integer) 1
13) lastValue                  // 最近Datapoint的value。
14) (integer) 28
15) labels                     // Skey的标签信息。
16) 1) 1) "sensor_id"
       2) "1"

EXTS.S.QUERYINDEX

类别 说明
语法 EXTS.S.QUERYINDEX Pkey filter1 [filter2 ...]
时间复杂度 O(n),其中n为过滤条件中的最大集合数。
命令描述

在Pkey中自定义过滤条件(filter),查询目标Skey。

选项
  • Pkey:PKey名称(TairTS数据结构),用于指定命令调用的TairTS对象。
  • filter:过滤条件,您可以根据Skey的标签(LABELS)过滤目标Skey,更多信息请参见索引过滤语法
    说明 构建filter时,必须存在EQ、CONTAINS、LIST_MATCH逻辑中的任意一个,否则会查询失败。
返回值
  • 执行成功:返回符合过滤条件的Skey。
  • nil:表示Pkey或Skey不存在。
  • 其它情况返回相应的异常信息。
示例

命令示例:

EXTS.S.QUERYINDEX foo sensor_id=1

返回示例:

1) "temperature"

EXTS.S.RANGE

类别 说明
语法 EXTS.S.RANGE Pkey Skey fromTs toTs [MAXCOUNT count] [AGGREGATION aggregationType timeBucket]
时间复杂度 O(n),其中n为目标Datapoint的数据块个数。
命令描述

在Skey中查询指定时间内(包含指定时间点)的Datapoint数据。

选项
  • Pkey:PKey名称(TairTS数据结构),用于指定命令调用的TairTS对象。
  • Skey:Skey名称。
  • fromTs:查询的开始时间(Unix时间戳),单位为毫秒。
  • toTs:查询的结束时间(Unix时间戳),单位为毫秒,支持用*表示系统当前的时间戳,若该值等于fromTs可实现单时间点查询。
  • MAXCOUNT:指定返回的Datapoint条数,默认为不填(Tair的上限为1,000,000条)。
  • AGGREGATION
    • aggregationType:聚合类型,例如MAX(最大值)、AVG(平均值)、SUM(求和)等,更多信息请参见聚合功能语法
    • timeBucket:采样间隔,单位为毫秒,最小值为1,000毫秒。

      Tair会将该时间范围内的数据进行聚合并返回一个结果,返回的时间点为采样间隔的开始时间。

    例如AGGREGATION AVG 5000将返回每5,000ms的平均数。

返回值
  • 执行成功:返回对应的Datapoint数据,若命令中指定了聚合,则返回聚合结果。
    说明 返回结果中会额外返回一个token值,0表示已全部显示,1表示还有符合条件的Datapoint数据未显示。您可以根据该值,同时将已返回结果中最后一个Datapoint的时间戳作为开始时间继续遍历获取,轻松实现分批聚合。
  • nil:表示Pkey或Skey不存在。
  • 其它情况返回相应的异常信息。
示例

命令示例:

EXTS.S.RANGE foo test 1644459031662 * AGGREGATION AVG 10000 MAXCOUNT 2
// 求指定时间点内每10,000ms的平均数,同时指定返回2条数据。

返回示例:

1) 1) 1) (integer) 1644459730000
      2) "20.6"
   2) 1) (integer) 1644459790000
      2) "21.2"
2) (integer) 1                    // 1表示还有符合条件的Datapoint数据未显示,0表示已全部显示。

EXTS.S.MRANGE

类别 说明
语法 EXTS.S.MRANGE Pkey fromTs toTs [MAXCOUNT count] [AGGREGATION aggregationType timeBucket] [WITHLABELS] FILTER filter1 [filter2 ...]
时间复杂度 O(n),其中n为目标Datapoint的数据块个数。
命令描述

在Skey中自定义过滤条件(filter)与查询时间点(包含指定时间点),查询目标Datapoint数据。

选项
  • Pkey:PKey名称(TairTS数据结构),用于指定命令调用的TairTS对象。
  • fromTs:查询的开始时间(Unix时间戳),单位为毫秒。
  • toTs:查询的结束时间(Unix时间戳),单位为毫秒,支持用*表示系统当前的时间戳,若该值等于fromTs可实现单时间点查询。
  • MAXCOUNT:指定每个Skey返回的Datapoint条数,默认为不填(Tair的上限为1,000,000条)。
  • AGGREGATION
    • aggregationType:聚合类型,例如MAX(最大值)、AVG(平均值)、SUM(求和)等,更多信息请参见聚合功能语法
    • timeBucket:采样间隔,单位为毫秒,最小值为1,000毫秒。

      Tair会将该时间范围内的数据进行聚合并返回一个结果,返回的时间点为采样间隔的开始时间。

  • WITHLABELS:设置返回结果中是否包含标签信息,默认为不填(不显示标签信息)。
  • filter:过滤条件,您可以根据Skey的标签(LABELS)过滤目标Skey,更多信息请参见索引过滤语法
    说明 构建filter时,必须存在EQ、CONTAINS、LIST_MATCH逻辑中的任意一个,否则会查询失败。
返回值
  • 执行成功:返回符合过滤条件的Skey组信息。
  • nil:表示Pkey或Skey不存在。
  • 其它情况返回相应的异常信息。
示例

命令示例:

EXTS.S.MRANGE foo 1644451031662 * AGGREGATION MAX 10000 WITHLABELS FILTER sensor_id=1

返回示例:

1) 1) "temperature"
   2) 1) 1) "sensor_id"
         2) "1"
   3) 1) 1) (integer) 1644481000000
         2) "30"
   4) (integer) 0
2) 1) "test"
   2) 1) 1) "sensor_id"
         2) "1"
   3) 1) 1) (integer) 1644459730000
         2) "20"
      2) 1) (integer) 1644459790000
         2) "20"
      3) 1) (integer) 1644460620000
         2) "29"
   4) (integer) 0

EXTS.P.RANGE

类别 说明
语法 EXTS.P.RANGE Pkey fromTs toTs pkeyAggregationType pkeyTimeBucket [MAXCOUNT count] [AGGREGATION aggregationType timeBucket] [WITHLABELS] FILTER filter1 [filter2 ...]
时间复杂度 O(n),其中n为目标Datapoint的数据块个数。
命令描述

在Pkey层级对符合过滤条件(filter)的Datapoint数据进行聚合,若您指定了Skey层级的聚合,则会优先进行Skey层级聚合(效果与EXTS.S.MRANGE命令相同),再从Pkey层级对第一次聚合结果进行二次聚合。

选项
  • Pkey:PKey名称(TairTS数据结构),用于指定命令调用的TairTS对象。
  • fromTs:查询的开始时间(Unix时间戳),单位为毫秒。
  • toTs:查询的结束时间(Unix时间戳),单位为毫秒,支持用*表示系统当前的时间戳,若该值等于fromTs可实现单时间点查询。
  • pkeyAggregationType:Pkey的聚合类型,更多信息请参见聚合功能语法
  • pkeyTimeBucket:Pkey的采样间隔,单位为毫秒,最小值为1,000毫秒。

    Tair会将该时间范围内的数据进行聚合并返回一个结果,返回的时间点为采样间隔的开始时间。

  • MAXCOUNT:指定每个Skey返回的Datapoint条数,默认为不填(Tair的上限为1,000,000条)。
  • AGGREGATION
    • aggregationType:Skey的聚合类型,更多信息请参见聚合功能语法
    • timeBucket:Skey的采样间隔,单位为毫秒,最小值为1,000毫秒。

      Tair会将该时间范围内的数据进行聚合并返回一个结果,返回的时间点为采样间隔的开始时间。

  • WITHLABELS:设置返回结果中是否包含标签信息,默认为不填(不显示标签信息)。
  • filter:过滤条件,您可以根据Skey的标签(LABELS)过滤目标Skey,更多信息请参见索引过滤语法
    说明 构建filter时,必须存在EQ、CONTAINS、LIST_MATCH逻辑中的任意一个,否则会查询失败。
返回值
  • 执行成功:返回聚合结果。
  • nil:表示Pkey或Skey不存在。
  • 其它情况返回相应的异常信息。
示例

命令示例:

EXTS.P.RANGE foo 1644451031662 * SUM 500000 AGGREGATION SUM 10000 FILTER sensor_id=1

返回示例:

1) 1) 1) (integer) 1644459500000
      2) "40"
   2) 1) (integer) 1644460500000
      2) "29"
   3) 1) (integer) 1644481000000
      2) "30"
2) (integer) 0

EXTS.S.RAW_MODIFY

类别 说明
语法 EXTS.S.RAW_MODIFY Pkey Skey ts value [DATA_ET time] [CHUNK_SIZE size] [UNCOMPRESSED] [LABELS label1 val1 ...]
时间复杂度 O(1)
命令描述

修改指定Skey中Datapoint数据的value值。若Pkey或Skey不存在则会自动创建,属性(过期时间、是否开启压缩等)仅在Skey不存在并自动创建的情况下生效。

选项
  • Pkey:PKey名称(TairTS数据结构),用于指定命令调用的TairTS对象。
  • Skey:Skey名称。
  • ts:待更新Datapoint的Unix时间戳,单位为毫秒。
  • value:待更新的值,数据类型为双精度浮点(double)型。
  • DATA_ET time:DataPoint数据的相对过期时间,单位为毫秒,默认为不填(表示不会过期)。
  • CHUNK_SIZE:单个Chunk可保存的Datapoint数,默认值为256条,取值范围为[1,256]。
  • UNCOMPRESSED:设置Skey不开启压缩,默认为不填(即开启压缩)。
  • LABELS:Skey的属性,输入一组或多组对应的标签名、标签值,例如LABELS sensor_id 1
返回值
  • OK:表示执行成功。
  • 其它情况返回相应的异常信息。
示例

命令示例:

EXTS.S.RAW_MODIFY foo temperature 1644310456023 31.5

返回示例:

OK

EXTS.S.RAW_MMODIFY

类别 说明
语法 EXTS.S.RAW_MMODIFY Pkey keynumber Skey ts value [Skey ts value ...] [DATA_ET time] [CHUNK_SIZE size] [UNCOMPRESSED] [LABELS label1 val1 ...]
时间复杂度 O(n),其中n为keynumber。
命令描述

批量修改多个指定Skey中Datapoint数据的value值。若Pkey或Skey不存在则会自动创建,属性(过期时间、是否开启压缩等)仅在Skey不存在并自动创建的情况下生效。

选项
  • Pkey:PKey名称(TairTS数据结构),用于指定命令调用的TairTS对象。
  • keynumber:指定多条数据的个数。
  • Skey:Skey名称。
  • ts:待更新Datapoint的Unix时间戳,单位为毫秒。
  • value:待更新的值,数据类型为双精度浮点(double)型。
  • DATA_ET time:DataPoint数据的相对过期时间,单位为毫秒,默认为不填(表示不会过期)。
  • CHUNK_SIZE:单个Chunk可保存的Datapoint数,默认值为256条,取值范围为[1,256]。
  • UNCOMPRESSED:设置Skey不开启压缩,默认为不填(即开启压缩)。
  • LABELS:Skey的属性,输入一组或多组对应的标签名、标签值,例如LABELS sensor_id 1
返回值
  • OK:表示执行成功。
  • 其它情况返回相应的异常信息。
示例

命令示例:

EXTS.S.RAW_MMODIFY foo 3 temperature 1644565954814 30.2 pressure 1644565954814 2.05 distance 1644565954814 0.5

返回示例:

1) OK
2) OK
3) OK

EXTS.S.RAW_INCRBY

类别 说明
语法 EXTS.S.RAW_INCRBY Pkey Skey ts value [DATA_ET time] [CHUNK_SIZE size] [UNCOMPRESSED] [LABELS label1 val1 ...]
时间复杂度 O(1)
命令描述

该命令中的value值会与指定Skey中Datapoint数据的value相加实现递增,也可以指定该命令中的value为负数实现递减。若Pkey或Skey不存在则会自动创建,默认初始值为0,属性(过期时间、是否开启压缩等)仅在Skey不存在并自动创建的情况下生效。

选项
  • Pkey:PKey名称(TairTS数据结构),用于指定命令调用的TairTS对象。
  • Skey:Skey名称。
  • ts:待更新Datapoint的Unix时间戳,单位为毫秒。
  • value:待增加操作的值,可以指定该值为负数实现相减,数据类型为双精度浮点(double)型。
  • DATA_ET time:DataPoint数据的相对过期时间,单位为毫秒,默认为不填(表示不会过期)。
  • CHUNK_SIZE:单个Chunk可保存的Datapoint数,默认值为256条,取值范围为[1,256]。
  • UNCOMPRESSED:设置Skey不开启压缩,默认为不填(即开启压缩)。
  • LABELS:Skey的属性,输入一组或多组对应的标签名、标签值,例如LABELS sensor_id 1
返回值
  • OK:表示执行成功。
  • 其它情况返回相应的异常信息。
示例

提前执行EXTS.S.ADD foo temperature 1644310456 30.0命令。

命令示例:

EXTS.S.RAW_INCRBY foo temperature 1644310456 3.3

返回示例:

OK
若此时执行EXTS.S.GET foo temperature命令,将会返回如下结果:
1) (integer) 1644310456
2) "33.3"

EXTS.S.RAW_MINCRBY

类别 说明
语法 EXTS.S.RAW_MINCRBY Pkey keynumber Skey ts value [Skey ts value ...] [DATA_ET time] [CHUNK_SIZE size] [UNCOMPRESSED] [LABELS label1 val1 ...]
时间复杂度 O(n),其中n为keynumber。
命令描述

批量修改多个指定Skey中Datapoint数据的value值,该命令中的value值会与指定Skey中Datapoint数据的value相加实现递增,也可以指定该命令中的value为负数实现递减。若Pkey或Skey不存在则会自动创建,属性(过期时间、是否开启压缩等)仅在Skey不存在并自动创建的情况下生效。

选项
  • Pkey:PKey名称(TairTS数据结构),用于指定命令调用的TairTS对象。
  • keynumber:指定多条数据的个数。
  • Skey:Skey名称。
  • ts:待更新Datapoint的Unix时间戳,单位为毫秒。
  • value:待增加操作的值,可以指定该值为负数实现相减,数据类型为双精度浮点(double)型。
  • DATA_ET time:DataPoint数据的相对过期时间,单位为毫秒,默认为不填(表示不会过期)。
  • CHUNK_SIZE:单个Chunk可保存的Datapoint数,默认值为256条,取值范围为[1,256]。
  • UNCOMPRESSED:设置Skey不开启压缩,默认为不填(即开启压缩)。
  • LABELS:Skey的属性,输入一组或多组对应的标签名、标签值,例如LABELS sensor_id 1
返回值
  • OK:表示执行成功。
  • 其它情况返回相应的异常信息。
示例

命令示例:

EXTS.S.RAW_MMODIFY foo 3 temperature 1644565954814 30.2 pressure 1644565954814 2.05 distance 1644565954814 0.5

返回示例:

1) OK
2) OK
3) OK

索引过滤语法

您可以根据Skey的标签(LABELS)过滤目标Skey。过滤条件(filter)的语法如下:
说明 构造filter时,支持如下所有命令及组合使用,但必须存在EQ、CONTAINS、LIST_MATCH逻辑中的任意一个。
filter命令 说明 逻辑
L = V 标签L等于V。 EQ(equals)
L != 标签L不为NULL, 即目标Skey包含标签L。 CONTAINS
L = (v1,v2,...) 标签L为v1或v2等。 LIST_TMATCH
L != V 标签L不等于V。 NOEQ(equals)
L = 标签L为NULL, 即目标Skey不包含标签L。 NOCONTAINS
L != (v1,v2,...) 标签L不为v1和v2等。 LIST_NOTMATCH

聚合功能语法

聚合操作会对采集间隔(timeBucket)范围内的数据进行聚合,支持如下聚合类型:

  • MAX:最大值
  • MIN:最小值
  • AVG:平均值
  • SUM:求和
  • FIRST:第一个值
  • LAST:最后一个值
  • RANGE:范围(最大值 - 最小值)
  • COUNT:value数量
  • STD.P:总体方差
  • STD.S:样本方差
  • VAR.P:总体标准差
  • VAR.S:样本标准差