TairRoaring adalah implementasi Roaring bitmap di Tair. TairRoaring menyediakan kinerja komputasi yang kuat dan stabil, meningkatkan kecepatan query sambil menggunakan sejumlah kecil memori.
TairRoaring ditingkatkan dari Roaring bitmaps dalam aspek berikut:
TairRoaring mencapai keseimbangan antara kinerja dan kompleksitas ruang dalam berbagai skenario melalui penggunaan indeks dua tingkat dan kontainer dinamis.
TairRoaring menggunakan teknik optimasi seperti single instruction, multiple data (SIMD), vektorisasi, dan algoritma popcount untuk meningkatkan efisiensi komputasi serta memberikan kompleksitas waktu dan ruang yang efisien.
TairRoaring memanfaatkan kinerja komputasi yang kuat dan stabilitas tinggi dari Tair untuk mendukung skenario bisnis.
Untuk informasi lebih lanjut tentang TairRoaring, lihat TairRoaring.
Alat uji
Alat uji yang disediakan dalam topik ini dikembangkan menggunakan bahasa pemrograman Go dan mirip dengan utilitas redis-benchmark. Alat ini mudah digunakan dan dimodifikasi serta dapat menghasilkan dua nilai acak untuk membantu membuat contoh uji dan menampilkan hasil sebagai histogram. Untuk informasi lebih lanjut, lihat TairRoaring Test Tool.
Penggunaan:
Usage of ./redis:
-a string Kata sandi akun yang digunakan untuk masuk ke instance. Format kata sandi: <user>:<password>.
-batching int Mode pipeline. Parameter ini juga menetapkan jumlah perintah individual yang terkandung dalam setiap pipeline. Mode pipeline menggabungkan perintah MULTI dan EXEC. Sebagai contoh, -batching 10 menunjukkan bahwa ada 10 perintah antara perintah MULTI dan EXEC.
-c int Jumlah tes yang dijalankan. Parameter ini mengabaikan durasi tes (-d).
-command string Perintah tes. Anda dapat menambahkan bidang __RAND__ dan __RAND2__ ke akhiran perintah atau parameter. Bidang tersebut akan berlaku dan menjadi nilai acak hanya ketika ditambahkan ke akhiran perintah atau parameter. Perintah default: TR.GETBIT foo-__RAND__.
-d int Durasi tes. Unit: detik. Nilai default: 30.
-h string Titik akhir yang digunakan untuk terhubung ke instance. Nilai default: 127.0.0.1.
-p int Jumlah tes yang dapat dijalankan secara bersamaan. Nilai default: 4.
-port int Nomor port instance. Nilai default: 6379.
-r int Rentang nilai acak 1. Nilai default: 100000000.
-r2 int Rentang nilai acak 2. Nilai default: 100000000.Contoh Perintah:
# Jalankan perintah TR.SETBIT. Tetapkan kunci ke angka acak yang kurang dari 100000 dan bidang ke angka acak yang kurang dari 10000000.
./redis -h r-**********0d7f.redis.zhangbei.rds.aliyuncs.com -a user:password -d 30 -r 100000 -r2 10000000 -command "TR.SETBIT foo-__RAND__ bar-__RAND2__" -p 20 -c 1Metode pengujian dan hasil untuk arsitektur standar
Instance yang digunakan adalah instance DRAM berbasis 16 GB Tair (Enterprise Edition) dengan arsitektur standar. Latensi jaringan kurang dari 0,1 milidetik.
Pengujian untuk satu kunci
Pengujian Kinerja
Menulis data ke satu kunci secara bersamaan untuk mendapatkan nilai maksimum permintaan per detik (QPS).
Pengujian Perintah Baca
Jalankan perintah berikut: TR.GETBIT, TR.GETBITS, TR.RANGE, TR.SCAN, dan TR.RANK. Contoh perintah:
./redis -h r-**********0d7f.redis.zhangbei.rds.aliyuncs.com -a user:password -d 30 -r 100000 -r2 10000000 -command "TR.GETBIT foo-__RAND__ bar-__RAND2__" -p 20 -c 1Hasil Pengujian:
Perintah
Jumlah kunci yang terlibat
Jumlah catatan data yang terlibat
Rentang parameter
Nilai referensi QPS
Latensi rata-rata (ms)
TR.GETBIT
1
1
1~10000000
255000
0,21
TR.GETBITS
1
100
1~10000000
54000
0,97
TR.RANK
1
1
1~10000000
161000
0,24
TR.RANGE
1
100
0~100
129000
0,46
TR.SCAN
1
100
1~10000000
130000
0,38
Pengujian Perintah Tulis
Jalankan perintah berikut: TR.SETBIT, TR.SETBITS, TR.APPENDBITARRAY, TR.SETRANGE, dan TR.FLIPRANGE. Contoh perintah:
./redis -h r-**********0d7f.redis.zhangbei.rds.aliyuncs.com -a user:password -d 30 -r 100000 -r2 10000000 -command "TR.SETBIT foo-__RAND__ bar-__RAND2__" -p 20 -c 1Hasil Pengujian:
Perintah
Jumlah kunci yang terlibat
Jumlah catatan data yang terlibat
Rentang parameter
Nilai referensi QPS
Latensi rata-rata (ms)
TR.SETBIT
1
1
1~10000000
145000
0,37
TR.SETBITS
1
100
1~10000000
22000
0,71
TR.SETBITS (terurut)
1
100 (Nilai offset maksimum bit adalah 2^32.)
1~6000
28000
0,66
TR.APPENDBITARRAY
1
1000 (Setengah dari bit memiliki nilai 1.)
1~10000000
10000
0,38
TR.SETRANGE
1
-
1000
130000
0,3
TR.FLIPRANGE
1
-
1~10000000
100000
0,46
Pengujian Pipeline
Gunakan ukuran batch yang berbeda untuk menguji kinerja perintah dalam mode pipeline.
TR.SETBIT
Contoh perintah:
./redis -h r-**********0d7f.redis.zhangbei.rds.aliyuncs.com -a user:password -d 30 -r 10000000 -command "TR.SETBIT foo-__RAND__ 1" -batching 10 -p 20 -c 1paralel
batching
Bit per detik
Latensi rata-rata (ms)
20
10
460000
0,42
10
50
665000
0,72
6
100
660000
0,85
3
200
680000
0,79
3
500
681500
1,96
2
100
658000
2,6

TR.GETBIT
Contoh perintah:
./redis -h r-**********0d7f.redis.zhangbei.rds.aliyuncs.com -a user:password -d 30 -r 100000 -r2 10000000 -command "TR.GETBIT foo-__RAND__ __RAND2__" -batching 10 -p 20 -c 1CatatanJika kunci yang ditentukan oleh foo-__RAND__ tidak ada, kunci tersebut dianggap sebagai kunci kosong. Oleh karena itu, Anda harus menulis data ke kunci terlebih dahulu untuk tujuan pengujian.
paralel
batching
Bit per detik
Latensi rata-rata (ms)
20
10
572700
0,34
10
50
725900
0,65
7
100
772000
0,85
7
200
788800
1,67
5
500
746000
3,1
2
100
770000
2,1

Pengujian Memori
Jalankan perintah TR.STAT beberapa kali untuk menganalisis distribusi bit dalam sebuah kunci. Kapasitas kunci yang berbeda digunakan. Contoh perintah:
TR.STAT foo JSONSkenario Data Jarang
Data jarang menunjukkan bit yang didistribusikan secara jarang dengan kepadatan kurang dari 6,25%. Dalam skenario ini, kunci sebagian besar berisi kontainer array. Kapasitas kunci dapat dihitung menggunakan rumus berikut: Kapasitas kunci = Kardinalitas kunci × 2 byte.
kardinalitas
rle-c
array-c
bitset-c
heap mem (byte)
37700484
-
65536
-
75400968
75011384
-
65536
-
150022768
100403264
-
65536
-
200806528
163090592
-
65536
-
326181184
Skenario Data Acak
Dalam skenario ini, kunci sebagian besar berisi kontainer bitset. Sistem mengonversi kontainer array menjadi kontainer bitset ketika kontainer array memiliki lebih dari 4.096 elemen.
kardinalitas
rle-c
array-c
bitset-c
heap mem (byte)
253104088
-
65534
2
506208102
261169659
-
63273
2263
522227634
267974804
-
35932
29604
533159296
273694253
-
6607
58929
536491922
343504134
-
0
65536
536870912
535589835
-
0
65536
536870912
Skenario Bit Acak Berturut-turut
Dalam skenario ini, kapasitas penyimpanan sangat terkait dengan distribusi bit. Akibatnya, pengujian yang dilakukan dalam skenario ini memiliki sedikit nilai.
Pengujian untuk beberapa kunci
Pengujian Penulisan
Uji kinerja mesin saat data ditulis ke beberapa kunci secara bersamaan. TR.SETBITS membuat 100 bit acak setiap kali. Contoh perintah:
./redis -h r-**********0d7f.redis.zhangbei.rds.aliyuncs.com -a user:password -d 30 -r 10000000 -r2 100000 -command "TR.SETBITS foo-__RAND2__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __RAND__ __<table><colgroup></colgroup><colgroup></colgroup><colgroup></colgroup><colgroup></colgroup><tbody><tr><td colspan="1" id="task_2213193__entry_hih_y9q_qgu" rowspan="1" style="background-color:#e5e5e5"><p></p></td><td colspan="1" id="task_2213193__entry_qx0_d93_me1" rowspan="1" style="background-color:#e5e5e5"><p></p></td><td colspan="1" id="task_2213193__entry_grc_8x5_i2v" rowspan="1" style="background-color:#e5e5e5"><p></p></td><td colspan="1" id="task_2213193__entry_biv_wnc_83l" rowspan="1" style="background-color:#e5e5e5"><p></p></td></tr><tr><td colspan="1" id="entry_s4a_piz_95o" rowspan="1"><p>TR.SETBIT</p></td><td colspan="1" id="entry_b1m_zsu_98e" rowspan="1"><p>1</p></td><td colspan="1" id="entry_zan_adb_45s" rowspan="1"><p>91003</p></td><td colspan="1" id="entry_x12_96f_ucv" rowspan="1"><p>0,43</p></td></tr><tr><td colspan="1" id="entry_vmp_smh_ew6" rowspan="1"><p>TR.SETBITS</p></td><td colspan="1" id="entry_zws_bbk_12c" rowspan="1"><p>100</p></td><td colspan="1" id="entry_0v5_45k_ims" rowspan="1"><p>15127</p></td><td colspan="1" id="entry_bbc_5x3_esg" rowspan="1"><p>0,96</p></td></tr><tr><td colspan="1" id="entry_6ey_fbd_3ew" rowspan="1"><p>TR.GETBIT</p></td><td colspan="1" id="entry_trp_gfk_mnx" rowspan="1"><p>1</p></td><td colspan="1" id="entry_11n_mvt_z1l" rowspan="1"><p>154941</p></td><td colspan="1" id="entry_u5m_bfn_qt8" rowspan="1"><p>0,32</p></td></tr><tr><td colspan="1" id="entry_2d8_fbi_cgp" rowspan="1"><p>TR.GETBITS</p></td><td colspan="1" id="entry_rym_2j0_aut" rowspan="1"><p>100</p></td><td colspan="1" id="entry_h2z_tys_cpl" rowspan="1"><p>40166</p></td><td colspan="1" id="entry_r3u_2f9_2uf" rowspan="1"><p>1,08</p></td></tr><tr><td colspan="1" id="entry_f7j_aga_rab" rowspan="1"><p>TR.SCAN</p></td><td colspan="1" id="entry_95x_2dh_h7x" rowspan="1"><p>100</p></td><td colspan="1" id="entry_jeq_f7o_uvi" rowspan="1"><p>104637</p></td><td colspan="1" id="entry_hnj_8qd_eoy" rowspan="1"><p>0,47</p></td></tr><tr><td colspan="1" id="entry_884_r3h_dmz" rowspan="1"><p>TR.RANK</p></td><td colspan="1" id="entry_8l9_tn6_ex1" rowspan="1"><p>-</p></td><td colspan="1" id="entry_zfm_vgy_mg4" rowspan="1"><p>151161</p></td><td colspan="1" id="entry_ir4_aag_dod" rowspan="1"><p>0,32</p></td></tr></tbody></table><p><img/></p></li><li><p>Pengujian untuk operasi bitwise</p><ul><li><p>TR.BITOP</p><p>Perintah ini melakukan operasi bitwise pada beberapa kunci dan menyimpan hasilnya dalam kunci baru. Operasi bitwise AND, OR, NOT, DIFF, dan XOR didukung.</p><div><p>Perintah contoh:</p><code code-type="xCode" data-tag="codeblock" id="codeblock_yhk_r0l_hpc" outputclass="language-plaintext">./redis -h r-**********0d7f.redis.zhangbei.rds.aliyuncs.com -a user:password -d 30 -r 100000 -r2 10000000 -command "TR.BITOP dest-__RAND__ AND foo-__RAND__ foo-__RAND__" -p 3 -c 1Perintah
BIDANG/RENTANG
Nilai referensi QPS
Latensi rata-rata (ms)
TR.SETBIT
1
91003
0,43
TR.SETBITS
100
15.127
0,96
TR.GETBIT
1
154.941
0,32
TR.GETBITS
100
40.166
1,08
TR.SCAN
100
104.637
0,47
TR.RANK
-
151.161
0,32

Pengujian Operasi Bitwise
TR.BITOP
Perintah ini melakukan operasi bitwise pada beberapa kunci dan menyimpan hasilnya dalam kunci baru. Operasi bitwise yang didukung adalah AND, OR, NOT, DIFF, dan XOR.
Contoh perintah:
./redis -h r-**********0d7f.redis.zhangbei.rds.aliyuncs.com -a user:password -d 30 -r 100000 -r2 10000000 -command "TR.BITOP dest-__RAND__ AND foo-__RAND__ foo-__RAND__" -p 3 -c 1Operasi bitwise
Paralel
Nilai referensi QPS
Latensi rata-rata (ms)
AND
3
940
3,18
OR
2
595
3,45
XOR
2
551
3,61
DIFF
3
3.577
0,83
NOT
1
1.281
0,77

TR.BITOPCARD
Perintah ini melakukan operasi bitwise pada beberapa kunci dan mengembalikan jumlah bit yang bernilai 1. Operasi bitwise yang didukung adalah AND, OR, NOT, DIFF, dan XOR.
Contoh perintah:
./redis -h r-**********0d7f.redis.zhangbei.rds.aliyuncs.com -a user:password -d 30 -r 100000 -r2 10000000 -command "TR.BITOPCARD AND foo-__RAND__ foo-__RAND__" -p 2 -c 1Operasi bitwise
Paralel
Nilai referensi QPS
Latensi rata-rata (ms)
AND
2
971
2,05
OR
2
609
3,27
XOR
2
572
3,48
DIFF
2
4.290
0,46
NOT
2
3.577
0,55

Metode pengujian dan hasil untuk arsitektur kluster
Uji kinerja empat instance berbasis DRAM yang menggunakan arsitektur kluster. Instance tersebut memiliki jumlah shard yang berbeda. Setiap shard berukuran 4 GB. Berikut adalah spesifikasi instance:
Instance Kluster 8 GB (2 shard)
Instance Kluster 16 GB (4 shard)
Instance Kluster 32 GB (8 shard)
Instance Kluster 64 GB (16 shard)
Untuk mencegah gangguan jaringan, tingkatkan bandwidth semua instance ke maksimum 2.048 Mbit/s. Sebarkan klien yang digunakan dalam pengujian di zona tempat instance berada dan gunakan titik akhir proxy untuk mengakses instance. Jalankan perintah berbeda yang melibatkan satu kunci untuk mendapatkan nilai QPS rata-rata dari instance.
Jalankan perintah berikut: TR.GITBIT, TR.GITBITS, TR.SETBIT, dan TR.SETBITS. Contoh perintah:
./redis -h r-**********0d7f.redis.zhangbei.rds.aliyuncs.com -a user:password -d 30 -r 100000 -r2 10000000 -command "TR.SETBIT foo-__RAND__ bar-__RAND2__" -p 20 -c 1Hasil Pengujian:
Perintah | Nilai QPS (instance kluster DRAM dengan dua shard) | Nilai QPS (instance kluster DRAM dengan empat shard) | Nilai QPS (instance kluster DRAM dengan delapan shard) | Nilai QPS (instance kluster DRAM dengan 16 shard) |
TR.GITBIT | 590742 | 567738 | 569610 | 555178 |
TR.GITBITS | 53900 | 91991 | 172969 | 229214 |
TR.SETBIT | 316753 | 530367 | 577406 | 558301 |
TR.SETBITS | 31917 | 57843 | 116614 | 160891 |
