Tous les produits
Search
Centre de documentation

Tair (Redis® OSS-Compatible):Livre blanc sur les performances de TairSearch

Dernière mise à jour :Aug 08, 2026

TairSearch est la structure de données native de recherche en texte intégral de Tair. Elle utilise une syntaxe de requête compatible avec Elasticsearch et s'appuie sur le calcul parallèle multicœur ainsi que sur des index inversés optimisés pour la recherche textuelle. Ce livre blanc compare les performances de TairSearch et de RediSearch lors de charges de travail d'écriture, d'écrasement et d'interrogation, afin que vous puissiez évaluer les écarts de performance et reproduire ces résultats dans votre propre environnement. Toutes les commandes, configurations d'environnement et sources de données de test sont fournies pour permettre une vérification indépendante des résultats.

Pour consulter la documentation de l'API TairSearch, reportez-vous à la rubrique Recherche.

Environnement de test

Client

Élément Description
Hôte Instance Elastic Compute Service (ECS) de type ecs.g7.8xlarge. Pour plus d'informations, consultez la rubrique Présentation des familles d'instances.
Région et zone Zone K de la région Chine (Hangzhou)
Système d'exploitation CentOS 7.9 64 bits

Bases de données

Les deux bases de données s'exécutent sur la même instance ECS et utilisent 6 vCPU ainsi que 4 threads d'E/S.

Tableau 1. Base de données Tair autogérée

Élément Description
Version de Tair Instance basée sur la DRAM compatible Redis 5.0, version 5.0.30
Threads d'E/S 4
CPU 6 vCPU. Exemple de commande : taskset -c 1-6 ./src/redis-server redis.conf.

Tableau 2. Base de données Redis autogérée

Élément Description
Version de Redis 7.0.10
Version de RediSearch 2.6.6. Le paramètre CONCURRENT_WRITE_MODE est défini sur true.
Version de RedisJSON 2.4.6
Threads d'E/S 4
CPU 6 vCPU. Exemple de commande : taskset -c 1-6 ./src/redis-server redis.conf.

Données de test

Le jeu de données de test contient des résumés d'articles Wikipédia en chinois et en anglais issus de Wikimedia. Fichiers sources : Index of /zhwiki/latest/ et Index of /enwiki/latest/.

Chaque document comprend quatre champs : id, title, url et abstract. Exemples :

{
    "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": "哲学()是研究普遍的、基本问题的学科,包括存在、知识、价值、理智、心灵、语言等领域。哲学与其他学科不同之处在於哲学有独特之思考方式,例如批判的方式、通常是系统化的方法,并以理性论证为基础。"
}

Outil de test

Téléchargez le binaire TairSearchBench adapté à votre système d'exploitation :

Exécutez ./TairSearchBench.Linux --help pour afficher toutes les options disponibles.

Usage of ./TairSearchBench.linux:
  -a string
        The address(ip:port) of network to connect
        # The endpoint of the instance.
  -c int
        Benchmark concurrency (default 30)
        # The number of tests that can be run concurrently. Default value: 30.
  -d uint
        Specify the number of seconds for the benchmark (default 30)
        # The duration of the test. When the duration ends, the test is terminated. Default value: 30. Unit: seconds.
  -e string
        The engine backend to run [tairsearch/redisearch]
        # Specify TairSearch or RediSearch as the engine that the instance runs.
  -f string
        Input file to ingest data from (wikipedia abstracts)
        # The path of the execution data file.
  -h string
        Print usage (default "help")
        # Display the usage of the tool.
  -j string
        Specify the big json file to write
        # Specify the path of the JSON file to be written.
  -n uint
        Specify the number of times to benchmark (default 100000)
        # The total number of operations to perform for a test. Default value: 100000.
  -o int
        Overwrite the doc (We will write the document with the same document id)
        # Specify whether to overwrite the original document. Valid values: 1 (true) and 0 (false). Default value: 0.
  -p string
        The password of redis to connect
        # The password of the instance.
  -q string
        Search query string to benchmark
        # The query statement that is used to run tests.
  -s uint
        Specify the compress threshold for tairsearch (default 10000000000)
        # Specify the compression threshold for TairSearch. If the size of a document exceeds the threshold, the document is compressed. Unit: bytes. Default value: 10000000000 (10 KB).
  -t string
        Specify the type of benchmark [write/search/readwrite]
        # Set the test type to write, search, or readwrite.
  -z string
        Specify the analyzer to use for query (default "standard")
        # Specify the analyzer for the query. Default value: standard.

Allouez 20 vCPU au client avant d'exécuter les tests. Exemple de commande : taskset -c 10-30 ./TairSearchBench.linux.

Préparatifs

Créez un schéma (index) avant d'exécuter tout test.

  • 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

    Si les données de test sont des documents en chinois, ajoutez LANGUAGE CHINESE au schéma précédent.

Résultats des tests

Chaque test d'écriture indexe 1 000 000 de documents. Chaque test d'interrogation exécute 1 000 000 de requêtes sur un corpus de 1 000 000 de documents. Chaque test mixte (readwrite) dure 60 secondes.

Écriture de données en anglais

Commandes

  • 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

Résultats

Moteur QPS Latence moyenne (ms) Latence au 99e percentile (ms) Mémoire utilisée (Go)
TairSearch 22 615,15 0,874 1,735 1,39
RediSearch 18 295,10 1,092 2,352 1,67

Écriture de données en chinois

Commandes

  • 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

Résultats

Moteur QPS Latence moyenne (ms) Latence au 99e percentile (ms) Mémoire utilisée (Go)
TairSearch 13 980,41 1,427 3,275 1,87
RediSearch 10 924,40 1,830 3,857 1,83
Dans ce test, TairSearch consomme plus de mémoire que RediSearch, car l'analyseur jieba génère des jetons plus fins que l'analyseur chinois utilisé par RediSearch.

Écrasement de données en anglais

Commandes

  • 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

Résultats

Moteur QPS Latence moyenne (ms) Latence au 99e percentile (ms) Mémoire utilisée (Go)
TairSearch 9 775,03 2,041 3,974 0,0002
RediSearch 22 239,67 0,898 1,38 0,165
Lors d'une opération d'écrasement, RediSearch marque le document original pour une suppression ultérieure, ce qui entraîne une consommation supplémentaire de mémoire. En comparaison, TairSearch supprime le document original en temps réel.

Écrasement de données en chinois

Commandes

  • 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

Résultats

Moteur QPS Latence moyenne (ms) Latence au 99e percentile (ms) Mémoire utilisée (Go)
TairSearch 6 194,15 3,206 6,456 0,025 (y compris la mémoire utilisée par le dictionnaire de l'analyseur jieba)
RediSearch 25 096,18 0,796 1,338 0,671
Lors d'une opération d'écrasement, RediSearch marque le document original pour une suppression ultérieure, ce qui entraîne une consommation supplémentaire de mémoire. En comparaison, TairSearch supprime le document original en temps réel.

Requête term — Anglais

Commandes

  • 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

Résultats

Moteur QPS Latence moyenne (ms) Latence au 99e percentile (ms)
TairSearch 45 501,13 0,437 0,563
RediSearch 28 513,87 0,700 0,833

Requête term — Chinois

Commandes

  • 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

Résultats

Moteur QPS Latence moyenne (ms) Latence au 99e percentile (ms)
TairSearch 40 670,47 0,489 0,635
RediSearch 24 437,48 0,817 1,331

Requête match — Anglais

Commandes

  • 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

Résultats

Moteur QPS Latence moyenne (ms) Latence au 99e percentile (ms)
TairSearch 24 548,94 0,812 0,971
RediSearch 2 420,66 8,261 8,523

Requête match — Chinois

Commandes

  • 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

Résultats

Moteur QPS Latence moyenne (ms) Latence au 99e percentile (ms)
TairSearch 6 601,05 3,027 3,669
RediSearch 889,37 22,486 22,985

Requête bool — Anglais

Commandes

  • 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

Résultats

Moteur QPS Latence moyenne (ms) Latence au 99e percentile (ms)
TairSearch 4 554,22 4,388 5,702
RediSearch 1 124,08 17,791 18,444

Requête bool — Chinois

Commandes

  • 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

Résultats

Moteur QPS Latence moyenne (ms) Latence au 99e percentile (ms)
TairSearch 2 619,00 7,623 18,42
RediSearch 1 199,76 16,669 17,064

Requête range — Anglais

Commandes

  • 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

Résultats

Moteur QPS Latence moyenne (ms) Latence au 99e percentile (ms)
TairSearch 2 840,02 7,038 8,599
RediSearch 1 307,02 15,300 16,817

Requête prefix — Anglais

Commandes

  • 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

Résultats

Moteur QPS Latence moyenne (ms) Latence au 99e percentile (ms)
TairSearch 36 491,10 0,545 0,688
RediSearch 25 558,92 0,781 0,930

Requête prefix — Chinois

Commandes

  • 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

Résultats

Moteur QPS Latence moyenne (ms) Latence au 99e percentile (ms)
TairSearch 41 308,71 0,481 0,638
RediSearch 27 457,86 0,727 1,234

Mixte : écriture + requête term

Commandes

  • 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

Résultats

Moteur QPS d'écriture moyen Latence d'écriture moyenne (ms) QPS de requête moyen Latence de requête moyenne (ms)
TairSearch 14 699,77 1,359 16 224,03 1,232
RediSearch 11 386,75 1,755 11 386,70 1,755

Mixte : écriture + requête bool

Commandes

  • 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

Résultats

Moteur QPS d'écriture moyen Latence d'écriture moyenne (ms) QPS de requête moyen Latence de requête moyenne (ms)
TairSearch 9 589,18 2,085 10 504,31 1,903
RediSearch 5 284,01 3,784 5 283,96 3,784

Résumé

TairSearch offre un débit supérieur et une latence réduite par rapport à RediSearch pour la plupart des types de requêtes, grâce à deux choix de conception fondamentaux :

  • Calcul parallèle multicœur : TairSearch répartit l'intersection des index et l'évaluation des requêtes sur plusieurs cœurs CPU, ce qui s'avère particulièrement efficace pour les requêtes complexes telles que match, bool et range, qui nécessitent l'intersection de multiples listes de posting.

  • Index inversés optimisés pour la recherche textuelle : La structure d'index est conçue spécifiquement pour les charges de travail en texte intégral, permettant des recherches rapides par terme unique et des opérations AND multi-termes efficaces.

TairSearch utilise également une structure de données dédiée pour la compression des documents, réduisant ainsi l'utilisation de la mémoire sans dégrader le débit en lecture ou en écriture.