Dokumen ini menjelaskan metode pengujian performa penulisan dan kueri TairSearch dan RediSearch, serta menyajikan hasil pengujian.
TairSearch adalah struktur data pencarian teks lengkap internal dari Tair. TairSearch menggunakan sintaks kueri yang mirip dengan Elasticsearch untuk mengimplementasikan pencarian teks lengkap secara efisien. Untuk informasi lebih lanjut, lihat Pencarian.
Deskripsi pengujian
Lingkungan pengujian klien
Item | Deskripsi |
Host klien | Instance Elastic Compute Service (ECS) tipe ecs.g7.8xlarge. Untuk informasi lebih lanjut, lihat Ikhtisar keluarga instance. |
Wilayah dan zona | Zona K di wilayah China (Hangzhou) |
Sistem operasi | CentOS 7.9 64-bit |
Lingkungan pengujian database
Sebuah database Tair dan sebuah database Redis dihosting pada instance ECS yang sama. Tabel berikut menjelaskan kedua database tersebut.
Tabel 1. Database Tair yang Dikelola Sendiri
Item | Deskripsi |
Versi Tair | Instance berbasis DRAM yang kompatibel dengan Redis 5.0 versi 5.0.30 |
Jumlah thread I/O | 4 |
CPU | 6 vCPU. Contoh perintah: |
Tabel 2. Database Redis yang Dikelola Sendiri
Item | Deskripsi |
Versi Redis | 7.0.10 |
Versi RediSearch | 2.6.6. Parameter CONCURRENT_WRITE_MODE disetel ke true. |
Versi RedisJSON | 2.4.6 |
Jumlah thread I/O | 4 |
CPU | 6 vCPU. Contoh perintah: |
Data pengujian
Data pengujian mencakup kumpulan artikel dalam bahasa Cina dan Inggris dari Wikimedia. Untuk informasi lebih lanjut, lihat Index of /zhwiki/latest/ dan Index of /enwiki/latest/.
Contoh:
{
"id":"History_of_Pakistan",
"title":"History of Pakistan",
"url":"https://en.wikipedia.org/wiki/History_of_Pakistan",
"abstract":"The history of Pakistan for the period preceding the country's independence in 1947Pakistan was created as the Dominion of Pakistan on 14 August 1947 after the end of British rule in, and partition of British India. is shared with that of Afghanistan, India."
}{
"id":"Wikipedia:哲学",
"title":"Wikipedia:哲学",
"url":"https://zh.wikipedia.org/wiki/%E5%93%B2%E5%AD%A6",
"abstract":"哲学()是研究普遍的、基本问题的学科,包括存在、知识、价值、理智、心灵、语言等领域。哲学与其他学科不同之处在於哲学有独特之思考方式,例如批判的方式、通常是系统化的方法,并以理性论证为基础。"
}Alat pengujian
Unduh file biner yang sesuai dengan sistem operasi Anda. File untuk Darwin bernama TairSearchBench.Darwin, file untuk Linux bernama TairSearchBench.Linux, dan file untuk Windows bernama TairSearchBench.Windows.
Dalam contoh ini, TairSearchBench.Linux digunakan. Jalankan perintah ./TairSearchBench.Linux --help untuk memeriksa cara menggunakan alat ini.
Usage of ./TairSearchBench.linux:
-a string
The address(ip:port) of network to connect
# Titik akhir dari instance.
-c int
Benchmark konkurensi (default 30)
# Jumlah tes yang dapat dijalankan secara bersamaan. Nilai default: 30.
-d uint
Specify the number of seconds for the benchmark (default 30)
# Durasi pengujian. Ketika durasi selesai, tes dihentikan. Nilai default: 30. Unit: detik.
-e string
The engine backend to run [tairsearch/redisearch]
# Tentukan TairSearch atau RediSearch sebagai mesin yang dijalankan oleh instance.
-f string
Input file to ingest data from (wikipedia abstracts)
# Path file data eksekusi.
-h string
Print usage (default "help")
# Menampilkan penggunaan alat.
-j string
Specify the big json file to write
# Tentukan path file JSON yang akan ditulis.
-n uint
Specify the number of times to benchmark (default 100000)
# Total jumlah operasi yang dilakukan untuk tes. Nilai default: 100000.
-o int
Overwrite the doc (We will write the document with the same document id)
# Tentukan apakah akan menimpa dokumen asli. Nilai valid: 1 (true) dan 0 (false). Nilai default: 0.
-p string
The password of redis to connect
# Kata sandi instance.
-q string
Search query string to benchmark
# Pernyataan kueri yang digunakan untuk menjalankan tes.
-s uint
Specify the compress threshold for tairsearch (default 10000000000)
# Tentukan ambang batas kompresi untuk TairSearch. Jika ukuran dokumen melebihi ambang batas, dokumen dikompresi. Unit: byte. Nilai default: 10000000000 (10 KB).
-t string
Specify the type of benchmark [write/search/readwrite]
# Setel jenis tes menjadi write, search, atau readwrite.
-z string
Specify the analyzer to use for query (default "standard")
# Tentukan analisis untuk kueri. Nilai default: standard.
Sebelum melakukan pengujian, alokasikan 20 vCPU ke instance ECS. Contoh perintah: taskset -c 10-30 ./TairSearchBench.linux.
Persiapan
Buat skema (indeks). Contoh:
TairSearch
{ "settings": { "compress_doc": { "size": "user-defined compression threshold", "enable": true } }, "mappings": { "properties": { "id": {"type": "keyword"}, "url": {"type": "keyword", "index": false}, "title": {"type": "text", "analyzer": "user-defined analyzer"}, "abstract": {"type": "text", "analyzer": "user-defined analyzer"}, "url_len": {"type": "integer"}, "abstract_len": {"type": "integer"}, "title_len": {"type": "integer"} } } }RediSearch
\\ SCHEMA $.id AS id TEXT $.url AS url TEXT NOINDEX $.title AS title TEXT $.abstract AS abstract TEXT $.abstract_len AS abstract_len NUMERIC $.url_len AS url_len NUMERIC $.title_len AS title_len NUMERIC \\ Jika data uji adalah dokumen dalam bahasa Cina, tambahkan LANGUAGE CHINESE ke kode sebelumnya.
Perintah pengujian dan hasil pengujian
Dalam pengujian berikut, satu juta dokumen ditulis untuk setiap tes penulisan. Satu juta kueri dilakukan terhadap satu juta dokumen untuk setiap tes kueri. Setiap tes yang menggabungkan operasi penulisan dan kueri dikonfigurasi untuk berjalan selama 60 detik.
Menulis data dalam bahasa Inggris
Perintah
TairSearch
taskset -c 10-30 ./TairSearchBench.linux -t write -e tairsearch -f ./enwiki-latest-abstract.xml -c 20 -n 1000000 -a 127.0.0.1:6379RediSearch
taskset -c 10-30 ./TairSearchBench.linux -t write -e redisearch -f ./enwiki-latest-abstract.xml -c 20 -n 1000000 -a 127.0.0.1:6379
Hasil Pengujian
Mesin | QPS | Latensi rata-rata (ms) | Latensi persentil ke-99 (ms) | Penggunaan memori (GB) |
TairSearch | 22615.15 | 0.874 | 1.735 | 1.39 |
RediSearch | 18295.10 | 1.092 | 2.352 | 1.67 |
Menulis data dalam bahasa Cina
Perintah
TairSearch
taskset -c 10-30 ./TairSearchBench.linux -t write -e tairsearch -f ./zhwiki-latest-abstract.xml -c 20 -n 1000000 -a 127.0.0.1:6379 -z jiebaRediSearch
taskset -c 10-30 ./TairSearchBench.linux -t write -e redisearch -f ./zhwiki-latest-abstract.xml -c 20 -n 1000000 -a 127.0.0.1:6379 -z chinese
Hasil Pengujian
Mesin | QPS | Latensi rata-rata (ms) | Latensi persentil ke-99 (ms) | Penggunaan memori (GB) |
TairSearch | 13980.41 | 1.427 | 3.275 | 1.87 |
RediSearch | 10924.40 | 1.830 | 3.857 | 1.83 |
TairSearch memiliki penggunaan memori yang lebih tinggi dibandingkan RediSearch karena analisis jieba digunakan dan token yang lebih halus dihasilkan.
Menimpa data dalam bahasa Inggris
Perintah
TairSearch
taskset -c 10-30 ./TairSearchBench.linux -t write -e tairsearch -f ./enwiki-latest-abstract.xml -c 20 -n 1000000 -o 1 -a 127.0.0.1:6379RediSearch
taskset -c 10-30 ./TairSearchBench.linux -t write -e redisearch -f ./enwiki-latest-abstract.xml -c 20 -n 1000000 -o 1 -a 127.0.0.1:6379
Hasil Pengujian
Mesin | QPS | Latensi rata-rata (ms) | Latensi persentil ke-99 (ms) | Penggunaan memori (GB) |
TairSearch | 9775.03 | 2.041 | 3.974 | 0.0002 |
RediSearch | 22239.67 | 0.898 | 1.38 | 0.165 |
Ketika melakukan operasi penimpaan, RediSearch menandai dokumen asli untuk dihapus nanti, menyebabkan penggunaan memori tambahan. Sebagai perbandingan, TairSearch menghapus dokumen asli secara real-time.
Menimpa data dalam bahasa Cina
Perintah
TairSearch
taskset -c 10-30 ./TairSearchBench.linux -t write -e tairsearch -f ./zhwiki-latest-abstract.xml -c 20 -n 1000000 -o 1 -a 127.0.0.1:6379 -z jiebaRediSearch
taskset -c 10-30 ./TairSearchBench.linux -t write -e redisearch -f ./zhwiki-latest-abstract.xml -c 20 -n 1000000 -o 1 -a 127.0.0.1:6379
Hasil Pengujian
Mesin | QPS | Latensi rata-rata (ms) | Latensi persentil ke-99 (ms | Penggunaan memori (GB) |
TairSearch | 6194.15 | 3.206 | 6.456 | 0.025 (termasuk penggunaan memori oleh kamus analisis jieba) |
RediSearch | 25096.18 | 0.796 | 1.338 | 0.671 |
Ketika melakukan operasi penimpaan, RediSearch menandai dokumen asli untuk dihapus nanti, menyebabkan penggunaan memori tambahan. Sebagai perbandingan, TairSearch menghapus dokumen asli secara real-time.
Menggunakan pernyataan term untuk mengkueri data dalam bahasa Inggris
Perintah
TairSearch
taskset -c 10-30 ./TairSearchBench.linux -t search -e tairsearch -c 20 -n 1000000 -q '{"query":{"term":{"abstract":"hello"}}}' -a 127.0.0.1:6379RediSearch
taskset -c 10-30 ./TairSearchBench.linux -t search -e redisearch -c 20 -n 1000000 -q "@abstract:hello" -a 127.0.0.1:6379
Hasil Pengujian
Mesin | QPS | Latensi rata-rata (ms) | Latensi persentil ke-99 (ms) |
TairSearch | 45501.13 | 0.437 | 0.563 |
RediSearch | 28513.87 | 0.700 | 0.833 |
Menggunakan pernyataan term untuk mengkueri data dalam bahasa Cina
Perintah
TairSearch
taskset -c 10-30 ./TairSearchBench.linux -t search -e tairsearch -c 20 -n 1000000 -q '{"query":{"term":{"abstract":"你好"}}}' -a 127.0.0.1:6379RediSearch
taskset -c 10-30 ./TairSearchBench.linux -t search -e redisearch -c 20 -n 1000000 -q "@abstract:你好" -a 127.0.0.1:6379
Hasil Pengujian
Mesin | QPS | Latensi rata-rata (ms) | Latensi persentil ke-99 (ms) |
TairSearch | 40670.47 | 0.489 | 0.635 |
RediSearch | 24437.48 | 0.817 | 1.331 |
Menggunakan pernyataan match untuk mengkueri data dalam bahasa Inggris
Perintah
TairSearch
taskset -c 10-30 ./TairSearchBench.linux -t search -e tairsearch -c 20 -n 1000000 -q '{"query":{"match":{"abstract":{"operator":"and","query":"chinese history"}}}}' -a 127.0.0.1:6379RediSearch
taskset -c 10-30 ./TairSearchBench.linux -t search -e redisearch -c 20 -n 1000000 -q "@abstract:chinese history" -a 127.0.0.1:6379
Hasil Pengujian
Mesin | QPS | Latensi rata-rata (ms) | Latensi persentil ke-99 (ms) |
TairSearch | 24548.94 | 0.812 | 0.971 |
RediSearch | 2420.66 | 8.261 | 8.523 |
Menggunakan pernyataan match untuk mengkueri data dalam bahasa Cina
Perintah
TairSearch
taskset -c 10-30 ./TairSearchBench.linux -t search -e tairsearch -c 20 -n 100000 -q '{"query":{"match":{"abstract":{"operator":"and","query":"中国的历史"}}}}' -a 127.0.0.1:6379RediSearch
taskset -c 10-30 ./TairSearchBench.linux -t search -e redisearch -c 20 -n 100000 -q "@abstract:中国的历史" -a 127.0.0.1:6379 -analyzer jieba
Hasil Pengujian
Mesin | QPS | Latensi rata-rata (ms) | Latensi persentil ke-99 (ms) |
TairSearch | 6601.05 | 3.027 | 3.669 |
RediSearch | 889.37 | 22.486 | 22.985 |
Menggunakan pernyataan bool untuk mengkueri data dalam bahasa Inggris
Perintah
TairSearch
taskset -c 10-30 ./TairSearchBench.linux -t search -e tairsearch -c 20 -n 100000 -q '{"query":{"bool":{"must":[{"term":{"abstract":"war"}},{"term":{"abstract":"japanese"}},{"range":{"abstract_len":{"gt":500}}}],"must_not":{"term":{"abstract":"America"}},"should":[{"term":{"abstract":"chinese"}},{"term":{"abstract":"china"}}]}}}' -a 127.0.0.1:6379RediSearch
taskset -c 10-30 ./TairSearchBench.linux -t search -e redisearch -c 20 -n 100000 -q "@abstract:(war japanese -America (chinese|china)) @abstract_len:[500 +inf]" -a 127.0.0.1:6379
Hasil Pengujian
Mesin | QPS | Latensi rata-rata (ms) | Latensi persentil ke-99 (ms) |
TairSearch | 4554.22 | 4.388 | 5.702 |
RediSearch | 1124.08 | 17.791 | 18.444 |
Menggunakan pernyataan bool untuk mengkueri data dalam bahasa Cina
Perintah
TairSearch
taskset -c 10-30 ./TairSearchBench.linux -t search -e tairsearch -c 20 -n 100000 -q '{"query":{"bool":{"must":[{"term":{"abstract":"战争"}},{"term":{"abstract":"日本"}},{"range":{"abstract_len":{"gt":500}}}],"must_not":{"term":{"abstract":"美国"}},"should":[{"term":{"abstract":"中国"}},{"term":{"abstract":"亚洲"}}]}}}' -a 127.0.0.1:6379RediSearch
taskset -c 10-30 ./TairSearchBench.linux -t search -e redisearch -c 20 -n 1000000 -q "@abstract:(日本 -美国 (中国|亚洲)) @abstract_len:[500 +inf]" -a 127.0.0.1:6379 -analyzer jieba
Hasil Pengujian
Mesin | QPS | Latensi rata-rata (ms) | Latensi persentil ke-99 (ms) |
TairSearch | 2619.00 | 7.623 | 18.42 |
RediSearch | 1199.76 | 16.669 | 17.064 |
Menggunakan pernyataan range untuk mengkueri data dalam bahasa Inggris
Perintah
TairSearch
taskset -c 10-30 ./TairSearchBench.linux -t search -e tairsearch -c 20 -n 1000000 -q '{"query":{"range":{"abstract_len":{"lte":420, "gte":400}}}}' -a 127.0.0.1:6379RediSearch
taskset -c 10-30 ./TairSearchBench.linux -t search -e redisearch -c 20 -n 1000000 -q "@abstract_len:[400,420]" -a 127.0.0.1:6379
Hasil Pengujian
Mesin | QPS | Latensi rata-rata (ms) | Latensi persentil ke-99 (ms) |
TairSearch | 2840.02 | 7.038 | 8.599 |
RediSearch | 1307.02 | 15.300 | 16.817 |
Menggunakan pernyataan prefix untuk mengkueri data dalam bahasa Inggris
Perintah
TairSearch
taskset -c 10-30 ./TairSearchBench.linux -t search -e tairsearch -c 20 -n 1000000 -q '{"query":{"prefix":{"abstract":"happiness"}}}' -a 127.0.0.1:6379RediSearch
taskset -c 10-30 ./TairSearchBench.linux -t search -e redisearch -c 20 -n 1000000 -q "@abstract:happiness*" -a 127.0.0.1:6379
Hasil Pengujian
Mesin | QPS | Latensi rata-rata (ms) | Latensi persentil ke-99 (ms) |
TairSearch | 36491.10 | 0.545 | 0.688 |
RediSearch | 25558.92 | 0.781 | 0.930 |
Menggunakan pernyataan prefix untuk mengkueri data dalam bahasa Cina
Perintah
TairSearch
taskset -c 10-30 ./TairSearchBench.linux -t search -e tairsearch -c 20 -n 1000000 -q '{"query":{"prefix":{"abstract":"开心"}}}' -a 127.0.0.1:6379RediSearch
taskset -c 10-30 ./TairSearchBench.linux -t search -e redisearch -c 20 -n 1000000 -q "@abstract:开心*" -a 127.0.0.1:6379 -z chinese
Hasil Pengujian
Mesin | QPS | Latensi rata-rata (ms) | Latensi persentil ke-99 (ms) |
TairSearch | 41308.71 | 0.481 | 0.638 |
RediSearch | 27457.86 | 0.727 | 1.234 |
Menulis data dan menggunakan pernyataan term untuk mengkueri data
Perintah
TairSearch
taskset -c 10-30 ./TairSearchBench.linux -t readwrite -e tairsearch -f ./enwiki-latest-abstract.xml -c 20 -d 60 -q '{"query":{"term":{"abstract":"hello"}}}' -a 127.0.0.1:6379RediSearch
taskset -c 10-30 ./TairSearchBench.linux -t readwrite -e redisearch -f ./enwiki-latest-abstract.xml -c 20 -d 60 -q "@abstract:hello" -a 127.0.0.1:6379
Hasil Pengujian
Mesin | Rata-rata QPS penulisan | Rata-rata latensi penulisan (ms) | Rata-rata QPS | Rata-rata latensi kueri (ms) |
TairSearch | 14699.77 | 1.359 | 16224.03 | 1.232 |
RediSearch | 11386.75 | 1.755 | 11386.70 | 1.755 |
Menulis data dan menggunakan pernyataan bool untuk mengkueri data
Perintah
TairSearch
taskset -c 10-30 ./TairSearchBench.linux -t readwrite -e tairsearch -f ./enwiki-latest-abstract.xml -c 20 -d 60 -q '{"query":{"bool":{"must":[{"term":{"abstract":"war"}},{"term":{"abstract":"japanese"}},{"range":{"abstract_len":{"gt":500}}}],"must_not":{"term":{"abstract":"America"}},"should":[{"term":{"abstract":"chinese"}},{"term":{"abstract":"china"}}]}}}' -a 127.0.0.1:6379RediSearch
taskset -c 10-30 ./TairSearchBench.linux -t readwrite -e redisearch -f ./enwiki-latest-abstract.xml -c 20 -d 60 -q "@abstract:(war japanese -America (chinese|china)) @abstract_len:[500 +inf]" -a 127.0.0.1:6379
Hasil Pengujian
Mesin | Rata-rata QPS penulisan | Rata-rata latensi penulisan (ms) | Rata-rata QPS | Rata-rata latensi kueri (ms) |
TairSearch | 9589.18 | 2.085 | 10504.31 | 1.903 |
RediSearch | 5284.01 | 3.784 | 5283.96 | 3.784 |
Ringkasan
TairSearch menggunakan teknologi komputasi paralel multi-core dan indeks terbalik yang dioptimalkan untuk pencarian teks, memberikan throughput tinggi dan latensi rendah. Selain itu, TairSearch memanfaatkan struktur data khusus untuk kompresi dokumen guna mengurangi penggunaan memori dan menghemat biaya tanpa mengorbankan performa baca dan tulis.