Apache Kvrocks 2.15.0 版本已经发布,除了新增更多命令之外,此版本也在兼容性以及稳定性方面有不少的提升。
以下是几个值得关注的变更:
- 支持兼容 Redis 的
SELECT [Database] 功能
- 新增更多 TimeSeries 命令,包含 TS.MREVRANGE、TS.QUERYINDEX 和 TS.ALTER,补齐了面向分析型高负载场景的时序 API 能力
- 新增更堵 TDigest 命令,包含 DIGEST.RANK、TDIGEST.REVRANK、TDIGEST.BYRANK 和 TDIGEST.BYREVRANK 等,可用于流式数据的百分位与排名查询
支持 SELECT 数据库
Kvrocks 使用 namespace 机制作为多租户基础,这与 Redis 使用编号逻辑数据库有一些差异。在此版本之前,对 Kvrocks 执行 SELECT 实际是 no-op(空操作)—— 命令会被接受,但不会产生效果。在 2.15.0 引入了 redis-databases 开关(#3294),允许 SELECT 的行为和 Redis 保持一致:
redis-databases 0 — 默认值;SELECT 仍是 no-op(现有 namespace 行为不变)
redis-databases N(N > 0)— 启用 Redis 风格的数据库切换,提供 N 个逻辑数据库;要求当前未配置任何 namespace
# kvrocks.conf
redis-databases 16
启用后,客户端即可像使用 Redis 一样执行 SELECT:
127.0.0.1:6666> SELECT 3
# OK
127.0.0.1:6666[3]> SET mykey "hello"
# OK — 存储在数据库 3 中
新增更多 TimeSeries 命令
Kvrocks 的 RedisTimeSeries 兼容层新增了三个关键命令:
TS.MREVRANGE 允许在一次往返中按时间倒序查询多个序列
TS.QUERYINDEX 可基于标签条件过滤序列而无需拉取数据
TS.ALTER 则可在不重建序列的情况下,修改已有序列的保留策略与标签元数据
# 创建带标签的序列
127.0.0.1:6666> TS.CREATE metrics:us-east:1 LABELS region us-east
127.0.0.1:6666> TS.CREATE metrics:us-east:2 LABELS region us-east
127.0.0.1:6666> TS.CREATE temperature:NYC LABELS sensor temperature location NYC
# 添加样本
TS.ADD metrics:us-east:1 * 42
127.0.0.1:6666> TS.ADD metrics:us-east:2 * 87
# 查询所有 "region=us-east" 序列中最新的 10 个样本(按时间倒序)
127.0.0.1:6666> TS.MREVRANGE - + FILTER region=us-east COUNT 10
# 查找匹配标签过滤条件的序列(不返回数据点)
127.0.0.1:6666> TS.QUERYINDEX sensor=temperature location=NYC
# 修改已有序列的保留周期
127.0.0.1:6666> TS.ALTER temperature:NYC RETENTION 86400000
新增更多 TDigest 命令
TDigest sketch(适用于流式数据的近似分位数计算)现在支持基于排名的查询。TDIGEST.RANK 返回某个值在 digest 中的估计排名。TDIGEST.BYRANK 返回指定排名对应的值。带 REV 的变体按降序工作。结合这四个命令,可以直接在 Kvrocks 中回答诸如“这个延迟处于哪个百分位?”或“p99 值是多少?”这类问题。
# 创建一个 TDigest 键
127.0.0.1:6666> TDIGEST.CREATE latency
# 插入观测值
127.0.0.1:6666> TDIGEST.ADD latency 120 95 200 340 88 150
# 值 150 的排名是多少?
127.0.0.1:6666> TDIGEST.RANK latency 150
# 排名 4 对应的值是什么?
127.0.0.1:6666> TDIGEST.BYRANK latency 4
# 从高到低计算时,排名 4 对应的值是什么?
127.0.0.1:6666> TDIGEST.BYREVRANK latency 4