TairDoc是一种文档类型的数据结构,类似RedisJSON模块,支持JSON标准。本文介绍TairDoc的性能测试方法及测试结果。
TairDoc的主要特性如下:
完整地支持JSON标准。
部分兼容JSONPath RFC draft-4标准。
说明仅JSON.GET命令支持。
完整地支持JSONPointer语法。
文档作为二进制树存储,可以快速访问JSON数据的子元素。
支持JSON到XML或YAML格式的转换。
测试说明
数据库测试环境
测试环境信息 | 说明 |
地域和可用区 | 华北3(张家口)地域,可用区A。 |
存储介质 | 内存型(兼容Redis 6.0)。 |
实例版本 | 6.2.4.6 |
实例架构 | 标准版(双副本)架构,不启用集群,详情请参见标准架构。 |
实例规格 | 由于测试结果受规格影响较小,本次测试以4 GB(tair.rdb.4g)规格为例,规格详情请参见内存型实例规格。 |
客户端测试环境
测试环境信息 | 说明 |
部署压测工具的设备 | 云服务器ECS实例,规格为ecs.c6e.8xlarge,详情请参见实例规格族。 |
地域和可用区 | 华北3(张家口)地域,可用区A。 |
操作系统 | Alibaba Cloud Linux 3.2104 LTS 64位。 |
网络 | 与Tair实例为同专有网络(VPC)的ECS实例,且与Tair通过专有网络连接。 |
软件 | 已安装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
- 查询整个JSON
总结
本文详述了TairDoc的性能测试方法及测试示例,TairDoc通过自行设计的JSON Tree结构以及自研的JSONPath解析和执行框架,在更新和查询上均有不错的性能。
文档内容是否对您有帮助?