All Products
Search
Document Center

Tair (Redis® OSS-Compatible):Dokumen putih kinerja TairSearch

Last Updated:Mar 29, 2026

TairSearch adalah struktur data pencarian teks lengkap yang dikembangkan oleh Tair. TairSearch menggunakan sintaksis kueri yang kompatibel dengan Elasticsearch dan dibangun di atas komputasi paralel multi-core serta indeks terbalik yang dioptimalkan untuk pencarian teks. Dokumen putih ini membandingkan kinerja TairSearch dengan RediSearch dalam beban kerja penulisan, penimpaan, dan kueri sehingga Anda dapat mengevaluasi perbedaan kinerja dan mereproduksi hasilnya di lingkungan Anda sendiri. Semua perintah, konfigurasi lingkungan, dan sumber data uji disediakan agar hasilnya dapat diverifikasi secara independen.

Untuk dokumentasi API TairSearch, lihat Search.

Lingkungan pengujian

Klien

ItemDeskripsi
HostElastic Compute Service (ECS) instans tipe ecs.g7.8xlarge. Untuk informasi lebih lanjut, lihat Ikhtisar keluarga instans.
Wilayah dan zonaZona K di wilayah China (Hangzhou)
Sistem operasiCentOS 7.9 64-bit

Database

Kedua database berjalan pada instans ECS yang sama dan menggunakan 6 vCPU serta 4 thread I/O.

Tabel 1. Database Tair yang dikelola sendiri

ItemDeskripsi
Versi TairInstans berbasis DRAM yang kompatibel dengan Redis 5.0 versi 5.0.30
Thread I/O4
CPU6 vCPU. Contoh perintah: taskset -c 1-6 ./src/redis-server redis.conf.

Tabel 2. Database Redis yang dikelola sendiri

ItemDeskripsi
Versi Redis7.0.10
Versi RediSearch2.6.6. Parameter CONCURRENT_WRITE_MODE diatur ke true.
Versi RedisJSON2.4.6
Thread I/O4
CPU6 vCPU. Contoh perintah: taskset -c 1-6 ./src/redis-server redis.conf.

Data uji

Set data uji berisi ringkasan artikel Wikipedia dalam bahasa Tiongkok dan Inggris dari Wikimedia. File sumber: Index of /zhwiki/latest/ dan Index of /enwiki/latest/.

Setiap dokumen berisi empat bidang: id, title, url, dan abstract. 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 1947..."
}
{
    "id": "Wikipedia:哲学",
    "title": "Wikipedia:哲学",
    "url": "https://zh.wikipedia.org/wiki/%E5%93%B2%E5%AD%A6",
    "abstract": "哲学()是研究普遍的、基本问题的学科,包括存在、知识、价值、理智、心灵、语言等领域。哲学与其他学科不同之处在於哲学有独特之思考方式,例如批判的方式、通常是系统化的方法,并以理性论证为基础。"
}

Tool pengujian

Unduh biner TairSearchBench untuk sistem operasi Anda:

Jalankan ./TairSearchBench.Linux --help untuk melihat semua opsi yang tersedia.

Usage of ./TairSearchBench.linux:
  -a string
        The address(ip:port) of network to connect
        # Titik akhir instans.
  -c int
        Benchmark concurrency (default 30)
        # Jumlah pengujian yang dapat dijalankan secara konkuren. Nilai default: 30.
  -d uint
        Specify the number of seconds for the benchmark (default 30)
        # Durasi pengujian. Ketika durasi berakhir, pengujian dihentikan. Nilai default: 30. Satuan: detik.
  -e string
        The engine backend to run [tairsearch/redisearch]
        # Tentukan TairSearch atau RediSearch sebagai engine yang dijalankan oleh instans.
  -f string
        Input file to ingest data from (wikipedia abstracts)
        # Jalur file data eksekusi.
  -h string
        Print usage (default "help")
        # Menampilkan penggunaan tool.
  -j string
        Specify the big json file to write
        # Tentukan jalur file JSON yang akan ditulis.
  -n uint
        Specify the number of times to benchmark (default 100000)
        # Total jumlah operasi yang dilakukan untuk satu pengujian. 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
        # Password instans.
  -q string
        Search query string to benchmark
        # Pernyataan kueri yang digunakan untuk menjalankan pengujian.
  -s uint
        Specify the compress threshold for tairsearch (default 10000000000)
        # Tentukan ambang batas kompresi untuk TairSearch. Jika ukuran dokumen melebihi ambang batas, dokumen tersebut dikompresi. Satuan: byte. Nilai default: 10000000000 (10 KB).
  -t string
        Specify the type of benchmark [write/search/readwrite]
        # Atur jenis pengujian menjadi write, search, atau readwrite.
  -z string
        Specify the analyzer to use for query (default "standard")
        # Tentukan alat analisis untuk kueri. Nilai default: standard.

Alokasikan 20 vCPU ke klien sebelum menjalankan pengujian. Contoh perintah: taskset -c 10-30 ./TairSearchBench.Linux.

Persiapan

Buat skema (indeks) sebelum menjalankan pengujian apa pun.

  • 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 berupa dokumen dalam bahasa Tiongkok, tambahkan LANGUAGE CHINESE ke skema di atas.

Hasil pengujian

Setiap pengujian penulisan mengindeks 1.000.000 dokumen. Setiap pengujian kueri menjalankan 1.000.000 kueri terhadap korpus berisi 1.000.000 dokumen. Setiap pengujian campuran (readwrite) 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:6379
  • RediSearch

      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

EngineQPSLatensi rata-rata (ms)Latensi persentil ke-99 (ms)Penggunaan memori (GB)
TairSearch22.615,150,8741,7351,39
RediSearch18.295,101,0922,3521,67

Menulis data dalam bahasa Tiongkok

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 jieba
  • RediSearch

      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

EngineQPSLatensi rata-rata (ms)Latensi persentil ke-99 (ms)Penggunaan memori (GB)
TairSearch13.980,411,4273,2751,87
RediSearch10.924,401,8303,8571,83
TairSearch menggunakan lebih banyak memori daripada RediSearch dalam pengujian ini karena alat analisis jieba menghasilkan token yang lebih detail halus dibandingkan alat analisis Chinese yang digunakan oleh RediSearch.

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:6379
  • RediSearch

      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

EngineQPSLatensi rata-rata (ms)Latensi persentil ke-99 (ms)Penggunaan memori (GB)
TairSearch9.775,032,0413,9740,0002
RediSearch22.239,670,8981,380,165
Saat melakukan operasi penimpaan, RediSearch menandai dokumen asli untuk dihapus nanti. Hal ini menyebabkan penggunaan memori tambahan. Sebaliknya, TairSearch menghapus dokumen asli secara real time.

Menimpa data dalam bahasa Tiongkok

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 jieba
  • RediSearch

      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

EngineQPSLatensi rata-rata (ms)Latensi persentil ke-99 (ms)Penggunaan memori (GB)
TairSearch6.194,153,2066,4560,025 (termasuk memori yang digunakan oleh kamus alat analisis jieba)
RediSearch25.096,180,7961,3380,671
Saat melakukan operasi penimpaan, RediSearch menandai dokumen asli untuk dihapus nanti. Hal ini menyebabkan penggunaan memori tambahan. Sebaliknya, TairSearch menghapus dokumen asli secara real time.

Kueri tepat — 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:6379
  • RediSearch

      taskset -c 10-30 ./TairSearchBench.linux -t search -e redisearch -c 20 -n 1000000 -q "@abstract:hello" -a 127.0.0.1:6379

Hasil

EngineQPSLatensi rata-rata (ms)Latensi persentil ke-99 (ms)
TairSearch45.501,130,4370,563
RediSearch28.513,870,7000,833

Kueri tepat — Bahasa Tiongkok

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:6379
  • RediSearch

      taskset -c 10-30 ./TairSearchBench.linux -t search -e redisearch -c 20 -n 1000000 -q "@abstract:你好" -a 127.0.0.1:6379

Hasil

EngineQPSLatensi rata-rata (ms)Latensi persentil ke-99 (ms)
TairSearch40.670,470,4890,635
RediSearch24.437,480,8171,331

Kueri match — 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:6379
  • RediSearch

      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

EngineQPSLatensi rata-rata (ms)Latensi persentil ke-99 (ms)
TairSearch24.548,940,8120,971
RediSearch2.420,668,2618,523

Kueri match — Bahasa Tiongkok

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:6379
  • RediSearch

      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

EngineQPSLatensi rata-rata (ms)Latensi persentil ke-99 (ms)
TairSearch6.601,053,0273,669
RediSearch889,3722,48622,985

Kueri bool — 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:6379
  • RediSearch

      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

EngineQPSLatensi rata-rata (ms)Latensi persentil ke-99 (ms)
TairSearch4.554,224,3885,702
RediSearch1.124,0817,79118,444

Kueri bool — Bahasa Tiongkok

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:6379
  • RediSearch

      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

EngineQPSLatensi rata-rata (ms)Latensi persentil ke-99 (ms)
TairSearch2.619,007,62318,42
RediSearch1.199,7616,66917,064

Kueri range — 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:6379
  • RediSearch

      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

EngineQPSLatensi rata-rata (ms)Latensi persentil ke-99 (ms)
TairSearch2.840,027,0388,599
RediSearch1.307,0215,30016,817

Kueri prefix — 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:6379
  • RediSearch

      taskset -c 10-30 ./TairSearchBench.linux -t search -e redisearch -c 20 -n 1000000 -q "@abstract:happiness*" -a 127.0.0.1:6379

Hasil

EngineQPSLatensi rata-rata (ms)Latensi persentil ke-99 (ms)
TairSearch36.491,100,5450,688
RediSearch25.558,920,7810,930

Kueri prefix — Bahasa Tiongkok

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:6379
  • RediSearch

      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

EngineQPSLatensi rata-rata (ms)Latensi persentil ke-99 (ms)
TairSearch41.308,710,4810,638
RediSearch27.457,860,7271,234

Campuran: write + kueri tepat

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:6379
  • RediSearch

      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

EngineRata-rata write QPSRata-rata latensi write (ms)Rata-rata query QPSRata-rata latensi query (ms)
TairSearch14.699,771,35916.224,031,232
RediSearch11.386,751,75511.386,701,755

Campuran: write + kueri bool

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:6379
  • RediSearch

      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

EngineRata-rata Write QPSRata-rata latensi write (ms)Rata-rata query QPSRata-rata latensi query (ms)
TairSearch9.589,182,08510.504,311,903
RediSearch5.284,013,7845.283,963,784

Ringkasan

TairSearch memberikan throughput lebih tinggi dan latensi lebih rendah dibandingkan RediSearch pada sebagian besar jenis kueri berkat dua pilihan desain inti:

  • Komputasi paralel multi-core: TairSearch mendistribusikan interseksi indeks dan evaluasi kueri di beberapa core CPU, yang sangat efektif untuk kueri kompleks seperti match, bool, dan range yang perlu menginterseksi beberapa daftar posting.

  • Indeks terbalik yang dioptimalkan untuk pencarian teks: Struktur indeks dirancang khusus untuk beban kerja teks lengkap, memungkinkan pencarian istilah tunggal yang cepat dan operasi AND multi-istilah yang efisien.

TairSearch juga menggunakan struktur data khusus untuk kompresi dokumen, mengurangi penggunaan memori tanpa menurunkan throughput baca atau tulis.