TairDocはRedisJSONに似たドキュメントデータ構造で、JSON標準に準拠しています。 このトピックでは、TairDocのパフォーマンスをテストするために使用される方法と、テスト結果について説明します。
テストの説明
データベーステスト環境
項目 | 説明 |
リージョンとゾーン | 中国 (張家口) リージョンのゾーンA |
ストレージタイプ | Redis 6.0互換DRAMベースのインスタンス |
インスタンスのバージョン | 6.2.4.6 |
インスタンスアーキテクチャ | クラスターモードが無効になっている標準のマスターレプリカアーキテクチャ。 詳細については、「標準アーキテクチャ」をご参照ください。 |
インスタンスタイプ | テスト結果は、インスタンスタイプの影響を受けにくくなります。 このテストでは、tair.rdb.4gインスタンスタイプが使用されます。 |
クライアントテスト環境
項目 | 説明 |
クライアントのホスト | ECS. c6e.8xlargeタイプのElastic Compute Service (ecs) インスタンス。 詳細については、「インスタンスファミリーの概要」をご参照ください。 |
リージョンとゾーン | 中国 (張家口) リージョンのゾーンA |
オペレーティングシステム | Alibaba Cloud Linux 3.2104 LTS 64ビット |
ネットワーク | ECSインスタンスはTairインスタンスと同じ仮想プライベートクラウド (VPC) にデプロイされ、VPCを介してTairインスタンスに接続されます。 |
ソフトウェア | Python-redisがインストールされているpython 3.7以降 |
テストデータ
この例では、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インスタンスのVPCエンドポイント。
port: Tairインスタンスのポート番号。 デフォルト値は6379です。 この例では、このパラメーターはデフォルト値に設定されています。
password: Tairインスタンスのユーザー名とパスワード。 コンソールで作成されたデータベースアカウントを使用してTairインスタンスに接続する場合は、
<user >:< password>
形式でパスワードを指定する必要があります。 たとえば、ユーザー名がtestaccountで、パスワードがRp829dlwaの場合、Tairインスタンスへの接続に使用されるパスワードはtestaccount:Rp829dlwa
です。
次のコマンドを実行して、update-center.jsonのデータをTairインスタンスに書き込みます。
python3 insert.py
データがTairインスタンスに書き込まれると、次の出力が表示されます。
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
平均レイテンシ (ms)
99パーセンタイル遅延 (ms)
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
平均レイテンシ (ms)
99パーセンタイル遅延 (ms)
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
平均レイテンシ (ms)
99パーセンタイル遅延 (ms)
95%
79865.83
1.221
2.639
フィルター条件を指定するクエリの実行
サンプルコマンド:
./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
平均レイテンシ (ms)
99パーセンタイル遅延 (ms)
30%
3043.68
32.649
65.311
概要
TairDocには、解析とクエリ実行のための社内JSONツリー構造とJSONPathフレームワークが用意されています。 このコンテキストでは、TairDocは更新とクエリで優れたパフォーマンスを示します。