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)規格為例。 |
用戶端測試環境
測試環境資訊 | 說明 |
部署壓測工具的裝置 | Elastic Compute Service執行個體,規格為ecs.c6e.8xlarge,詳情請參見執行個體規格類型系列。 |
地區和可用性區域 | 華北3(張家口)地區,可用性區域A。 |
作業系統 | Alibaba Cloud Linux 3.2104 LTS 64位。 |
網路 | 與執行個體為同Virtual Private Cloud的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解析和執行架構,在更新和查詢上均有不錯的效能。