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 5.0)时,小版本需要为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。

重要

Breaking Change公告:

2024年07月22日发布Tair内存型(兼容Redis 6.0)24.7.0.0版本,该版本中新增了ts-auto-del-empty-skey-enable参数,默认为yes,表示当Skey中的所有数据点都过期时,会自动删除Skey。但在Tair内存型(兼容Redis 6.0)24.7.0.0之前的版本中,默认不会删除数据点已过期的Skey。

在Tair内存型(兼容Redis 6.0)实例使用TairTS前,建议将实例升级至24.7.0.0及以上版本,并确认、手动调整ts-auto-del-empty-skey-enable参数的策略,避免因默认行为的改变对业务产生影响。

命令列表

表 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 * 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:样本标准差