TairDoc adalah struktur data dokumen yang mirip dengan RedisJSON dan sesuai dengan standar JSON. Topik ini menjelaskan metode pengujian kinerja TairDoc serta menyajikan hasil pengujian.
TairDoc menawarkan fitur-fitur berikut:
Dukungan penuh untuk standar JSON.
Kompatibel dengan JSONPath RFC draft-ietf-jsonpath-base versi 04.
CatatanHanya perintah JSON.GET yang mendukung versi draf ini.
Dukungan penuh untuk JSON Pointer.
Penyimpanan data dalam pohon biner untuk mempermudah pengambilan elemen anak.
Dukungan konversi dari format JSON ke format XML atau YAML.
Untuk informasi lebih lanjut, lihat Dokumen.
Deskripsi pengujian
Lingkungan pengujian database
Item | Deskripsi |
Wilayah dan zona | Zona A di wilayah China (Zhangjiakou) |
Jenis penyimpanan | Instance Redis 6.0-compatible DRAM-based |
Versi instance | 6.2.4.6 |
Arsitektur instance | Arsitektur master-replika standar dengan mode kluster dinonaktifkan. Untuk informasi lebih lanjut, lihat Arsitektur standar. |
Jenis instance | Hasil pengujian kurang dipengaruhi oleh jenis instance. Dalam pengujian ini, jenis instance tair.rdb.4g digunakan. |
Lingkungan pengujian klien
Item | Deskripsi |
Host klien | Elastic Compute Service (ECS) instance tipe ecs.c6e.8xlarge. Untuk informasi lebih lanjut, lihat Ikhtisar keluarga instance. |
Wilayah dan zona | Zona A di wilayah China (Zhangjiakou) |
Sistem operasi | Alibaba Cloud Linux 3.2104 LTS 64-bit |
Jaringan | Instance ECS ditempatkan di virtual private cloud (VPC) yang sama dengan instance Tair dan terhubung ke instance Tair melalui VPC. |
Perangkat lunak | Python 3.7 atau lebih baru dengan python-redis terinstal |
Data pengujian
Dalam contoh ini, data diambil dari update-center.json di GitHub. Ukuran data tersebut adalah 521 KB.
Alat pengujian
Dalam contoh ini, alat redis-benchmark dari Redis sumber terbuka digunakan.
Prosedur dan hasil pengujian
Masuk ke instance ECS dan jalankan perintah berikut untuk mengunduh data pengujian ke komputer Anda:
wget https://raw.githubusercontent.com/chadaustin/sajson/master/testdata/update-center.jsonSimpan skrip berikut sebagai file bernama insert.py di direktori tempat data pengujian yang diunduh disimpan:
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}")CatatanParameter:
host: Titik akhir VPC dari instance Tair.
port: Nomor port dari instance Tair. Nilai default adalah 6379. Dalam contoh ini, parameter ini disetel ke nilai default.
password: Nama pengguna dan kata sandi dari instance Tair. Jika Anda menggunakan akun basis data yang dibuat di konsol untuk terhubung ke instance Tair, Anda harus menentukan kata sandi dalam format
<user>:<password>. Sebagai contoh, jika nama pengguna adalah testaccount dan kata sandi adalah Rp829dlwa, kata sandi yang digunakan untuk terhubung ke instance Tair adalahtestaccount:Rp829dlwa.
Jalankan perintah berikut untuk menulis data update-center.json ke instance Tair:
python3 insert.pyJika data berhasil ditulis ke instance Tair, keluaran berikut akan ditampilkan:
insert json to 127.0.0.1, ret is TrueJalankan perintah untuk memulai pengujian.
Kueri seluruh file JSON
Contoh perintah:
./src/redis-benchmark -h r-bp1s02ae14mr****.redis.rds.aliyuncs.com-p 6379 -a testaccount:Rp829dlwa-c 10 --threads 10 -n 10000 JSON.GET keyHasil Pengujian
Pemanfaatan CPU database
QPS
Latensi rata-rata (ms)
Latensi persentil ke-99 (ms)
20%
569.57
16.951
29.279
Kueri elemen anak dari file JSON
Contoh perintah:
./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].developerIdHasil Pengujian
Pemanfaatan CPU database
QPS
Latensi rata-rata (ms)
Latensi persentil ke-99 (ms)
92%
205879.94
0.477
0.943
Modifikasi elemen anak dari file JSON
Contoh perintah:
./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"'Hasil Pengujian
Pemanfaatan CPU database
QPS
Latensi rata-rata (ms)
Latensi persentil ke-99 (ms)
95%
79865.83
1.221
2.639
Lakukan kueri dengan kondisi filter tertentu
Contoh perintah:
./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'Hasil Pengujian
Pemanfaatan CPU database
QPS
Latensi rata-rata (ms)
Latensi persentil ke-99 (ms)
30%
3043.68
32.649
65.311
Ringkasan
TairDoc dilengkapi dengan struktur JSON Tree internal dan kerangka kerja JSONPath untuk penguraian serta eksekusi kueri. Dalam konteks ini, TairDoc menunjukkan performa yang baik dalam pembaruan dan kueri.