TairDoc是一种文档类型的数据结构,类似RedisJSON模块,支持JSON标准。本文介绍TairDoc的性能测试方法及测试结果。
TairDoc的主要特性如下:
完整地支持JSON标准。
部分兼容JSONPath RFC draft-4标准。
说明仅JSON.GET命令支持。
完整地支持JSONPointer语法。
文档作为二进制树存储,可以快速访问JSON数据的子元素。
支持JSON到XML或YAML格式的转换。
更多信息请参见Doc。
测试说明
数据库测试环境
测试环境信息 | 说明 |
地域和可用区 | 华北3(张家口)地域,可用区A。 |
存储介质 | 内存型(兼容Redis 6.0)。 |
实例版本 | 6.2.4.6 |
实例架构 | 标准版(双副本)架构,不启用集群,详情请参见标准架构。 |
实例规格 | 由于测试结果受规格影响较小,本次测试以4 GB(tair.rdb.4g)规格为例。 |
客户端测试环境
测试环境信息 | 说明 |
部署压测工具的设备 | |
地域和可用区 | 华北3(张家口)地域,可用区A。 |
操作系统 | Alibaba Cloud Linux 3.2104 LTS 64位。 |
网络 | 与实例为同专有网络(VPC)的ECS实例,且与实例通过专有网络连接。 |
软件 | 已安装Python 3.7及以上版本,并已安装python-redis模块。 |
测试数据
本文使用GitHub公开数据update-center.json,大小为521 KB。
测试工具
使用开源Redis的redis-benchmark工具进行压测。
测试步骤与测试结果
登录ECS实例,执行如下命令,下载测试数据至本地。
wget https://raw.githubusercontent.com/chadaustin/sajson/master/testdata/update-center.json
在同目录下,将如下脚本代码保存为insert.py。
import redis import json host = "r-bp1s02ae14mr****.redis.rds.aliyuncs.com" port = 6379 password = "testaccount:Rp829dlwa" r = redis.Redis(host=host, port=port, password=password) with open("update-center.json", "r") as f: content = f.read() json = json.loads(content) ret = r.json().set("key", ".", json); print(f"insert json to {host}, ret is {ret}")
说明参数说明:
host:Tair实例专有网络连接地址。
port:Tair实例的端口号,默认为6379,您无需修改。
password:Tair实例的账号与密码。如果使用通过控制台创建的账号连接Tair,连接密码格式为
<user>:<password>
。例如,账号名为testaccount,密码为Rp829dlwa,则连接Tair时的密码为testaccount:Rp829dlwa
。
执行如下命令,将update-center.json数据写入Tair实例中。
python3 insert.py
返回如下结果,表示成功插入。
insert json to 127.0.0.1, ret is True
执行测试命令。
查询整个JSON
测试命令示例:
./src/redis-benchmark -h r-bp1s02ae14mr****.redis.rds.aliyuncs.com-p 6379 -a testaccount:Rp829dlwa-c 10 --threads 10 -n 10000 JSON.GET key
测试结果:
数据库CPU使用率
QPS(次/秒)
Average Latency(毫秒)
99th Percentile Latency(毫秒)
20%
569.57
16.951
29.279
查询JSON子元素
测试命令示例:
./src/redis-benchmark -h r-bp1s02ae14mr****.redis.rds.aliyuncs.com-p 6379 -a testaccount:Rp829dlwa-c 10 --threads 10 -n 10000 JSON.GET key $.plugins.ant.developers[0].developerId
测试结果:
数据库CPU使用率
QPS(次/秒)
Average Latency(毫秒)
99th Percentile Latency(毫秒)
92%
205879.94
0.477
0.943
修改JSON子元素
测试命令示例:
./src/redis-benchmark -h r-bp1s02ae14mr****.redis.rds.aliyuncs.com-p 6379 -a testaccount:Rp829dlwa-c 10 --threads 10 -n 10000 JSON.SET key .plugins.ant.developers[0].developerId '"developer_foo"'
测试结果:
数据库CPU使用率
QPS(次/秒)
Average Latency(毫秒)
99th Percentile Latency(毫秒)
95%
79865.83
1.221
2.639
复杂查询(Filter)
测试命令示例:
./src/redis-benchmark -h r-bp1s02ae14mr****.redis.rds.aliyuncs.com-p 6379 -a testaccount:Rp829dlwa-c 10 --threads 10 -n 10000 JSON.GET key '$.plugins[?(@.scm=="github.com" && @.releaseTimestamp>"2013-01-01")].name'
测试结果:
数据库CPU使用率
QPS(次/秒)
Average Latency(毫秒)
99th Percentile Latency(毫秒)
30%
3043.68
32.649
65.311
总结
本文详述了TairDoc的性能测试方法及测试示例,TairDoc通过自行设计的JSON Tree结构以及自研的JSONPath解析和执行框架,在更新和查询上均有不错的性能。