全部產品
Search
文件中心

Tair (Redis® OSS-Compatible):TairDoc效能白皮書

更新時間:Oct 30, 2024

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工具進行壓測。

測試步驟與測試結果

  1. 登入ECS執行個體,執行如下命令,下載測試資料至本地。

    wget https://raw.githubusercontent.com/chadaustin/sajson/master/testdata/update-center.json
  2. 在同目錄下,將如下指令碼代碼儲存為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}")
    說明

    參數說明:

    • hostTair執行個體專用網路串連地址。

    • portTair執行個體的連接埠號碼,預設為6379,您無需修改。

    • passwordTair執行個體的帳號與密碼。如果使用通過控制台建立的帳號串連Tair,串連密碼格式為<user>:<password>。例如,帳號名為testaccount,密碼為Rp829dlwa,則串連Tair時的密碼為testaccount:Rp829dlwa

  3. 執行如下命令,將update-center.json資料寫入Tair執行個體中。

    python3 insert.py

    返回如下結果,表示成功插入。

    insert json to 127.0.0.1, ret is True
  4. 執行測試命令。

    • 查詢整個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解析和執行架構,在更新和查詢上均有不錯的效能。