Todos os produtos
Search
Central de documentação

Tair (Redis® OSS-Compatible):Whitepaper de desempenho do TairSearch

Última atualização: Jun 26, 2026

O TairSearch é a estrutura de dados de pesquisa de texto completo desenvolvida internamente pelo Tair. Ele usa sintaxe de consulta compatível com o Elasticsearch e baseia-se em computação paralela multinúcleo e índices invertidos otimizados para pesquisa de texto. Este whitepaper compara o desempenho do TairSearch com o RediSearch em cargas de trabalho de gravação, sobrescrita e consulta, permitindo que você avalie as diferenças de desempenho e reproduza os resultados em seu próprio ambiente. Fornecemos todos os comandos, configurações de ambiente e fontes de dados de teste para que você possa verificar os resultados de forma independente.

Para a documentação da API do TairSearch, consulte Search.

Ambiente de teste

Cliente

Item

Descrição

Host

Instância do Elastic Compute Service (ECS) do tipo ecs.g7.8xlarge. Para obter mais informações, consulte Visão geral das famílias de instâncias.

Região e zona

Zona K na região China (Hangzhou)

Sistema operacional

CentOS 7.9 64 bits

Bancos de dados

Ambos os bancos de dados operam na mesma instância ECS e utilizam 6 vCPUs e 4 threads de E/S.

Tabela 1. Banco de dados Tair autogerenciado

Item

Descrição

Versão do Tair

Instância baseada em DRAM compatível com Redis 5.0, versão 5.0.30

Threads de E/S

4

CPU

6 vCPUs. Comando de exemplo: taskset -c 1-6 ./src/redis-server redis.conf.

Tabela 2. Banco de dados Redis autogerenciado

Item

Descrição

Versão do Redis

7.0.10

Versão do RediSearch

2.6.6. O parâmetro CONCURRENT_WRITE_MODE está definido como true.

Versão do RedisJSON

2.4.6

Threads de E/S

4

CPU

6 vCPUs. Comando de exemplo: taskset -c 1-6 ./src/redis-server redis.conf.

Dados de teste

O conjunto de dados de teste contém resumos de artigos da Wikipédia em chinês e inglês da Wikimedia. Arquivos de origem: Index of /zhwiki/latest/ e Index of /enwiki/latest/.

Cada documento contém quatro campos: id, title, url e abstract. Exemplos:

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

Ferramenta de teste

Baixe o binário do TairSearchBench para o seu sistema operacional:

Execute ./TairSearchBench.Linux --help para ver todas as opções disponíveis.

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.

Aloque 20 vCPUs para o cliente antes de executar os testes. Comando de exemplo: taskset -c 10-30 ./TairSearchBench.linux.

Preparativos

Crie um schema (índice) antes de executar qualquer teste.

  • 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

    Se os dados de teste forem documentos em chinês, adicione LANGUAGE CHINESE ao schema anterior.

Resultados dos testes

Cada teste de gravação indexa 1.000.000 de documentos. Cada teste de consulta executa 1.000.000 de consultas em um corpus de 1.000.000 de documentos. Cada teste misto (readwrite) tem duração de 60 segundos.

Gravação de dados em inglês

Comandos

  • 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

Resultados

Motor

QPS

Latência média (ms)

Latência no percentil 99 (ms)

Memória utilizada (GB)

TairSearch

22.615,15

0,874

1,735

1,39

RediSearch

18.295,10

1,092

2,352

1,67

Gravação de dados em chinês

Comandos

  • 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

Resultados

Motor

QPS

Latência média (ms)

Latência no percentil 99 (ms)

Memória utilizada (GB)

TairSearch

13.980,41

1,427

3,275

1,87

RediSearch

10.924,40

1,830

3,857

1,83

O TairSearch usa mais memória que o RediSearch neste teste porque o analisador jieba produz tokens mais granulares do que o analisador de chinês usado pelo RediSearch.

Sobrescrita de dados em inglês

Comandos

  • 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

Resultados

Motor

QPS

Latência média (ms)

Latência no percentil 99 (ms)

Memória utilizada (GB)

TairSearch

9.775,03

2,041

3,974

0,0002

RediSearch

22.239,67

0,898

1,38

0,165

Durante a sobrescrita, o RediSearch marca o documento original para exclusão posterior, o que causa uso adicional de memória. Em comparação, o TairSearch exclui o documento original em tempo real.

Sobrescrita de dados em chinês

Comandos

  • 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

Resultados

Motor

QPS

Latência média (ms)

Latência no percentil 99 (ms)

Memória utilizada (GB)

TairSearch

6.194,15

3,206

6,456

0,025 (incluindo a memória utilizada pelo dicionário do analisador jieba)

RediSearch

25.096,18

0,796

1,338

0,671

Durante a sobrescrita, o RediSearch marca o documento original para exclusão posterior, o que causa uso adicional de memória. Em comparação, o TairSearch exclui o documento original em tempo real.

Consulta term — inglês

Comandos

  • 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

Resultados

Motor

QPS

Latência média (ms)

Latência no percentil 99 (ms)

TairSearch

45.501,13

0,437

0,563

RediSearch

28.513,87

0,700

0,833

Consulta term — chinês

Comandos

  • 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

Resultados

Motor

QPS

Latência média (ms)

Latência no percentil 99 (ms)

TairSearch

40.670,47

0,489

0,635

RediSearch

24.437,48

0,817

1,331

Consulta match — inglês

Comandos

  • 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

Resultados

Motor

QPS

Latência média (ms)

Latência no percentil 99 (ms)

TairSearch

24.548,94

0,812

0,971

RediSearch

2.420,66

8,261

8,523

Consulta match — chinês

Comandos

  • 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

Resultados

Motor

QPS

Latência média (ms)

Latência no percentil 99 (ms)

TairSearch

6.601,05

3,027

3,669

RediSearch

889,37

22,486

22,985

Consulta bool — inglês

Comandos

  • 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

Resultados

Motor

QPS

Latência média (ms)

Latência no percentil 99 (ms)

TairSearch

4.554,22

4,388

5,702

RediSearch

1.124,08

17,791

18,444

Consulta bool — chinês

Comandos

  • 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

Resultados

Motor

QPS

Latência média (ms)

Latência no percentil 99 (ms)

TairSearch

2.619,00

7,623

18,42

RediSearch

1.199,76

16,669

17,064

Consulta range — inglês

Comandos

  • 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

Resultados

Motor

QPS

Latência média (ms)

Latência no percentil 99 (ms)

TairSearch

2.840,02

7,038

8,599

RediSearch

1.307,02

15,300

16,817

Consulta prefix — inglês

Comandos

  • 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

Resultados

Motor

QPS

Latência média (ms)

Latência no percentil 99 (ms)

TairSearch

36.491,10

0,545

0,688

RediSearch

25.558,92

0,781

0,930

Consulta prefix — chinês

Comandos

  • 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

Resultados

Motor

QPS

Latência média (ms)

Latência no percentil 99 (ms)

TairSearch

41.308,71

0,481

0,638

RediSearch

27.457,86

0,727

1,234

Misto: gravação + consulta term

Comandos

  • 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

Resultados

Motor

QPS médio de gravação

Latência média de gravação (ms)

QPS médio de consulta

Latência média de consulta (ms)

TairSearch

14.699,77

1,359

16.224,03

1,232

RediSearch

11.386,75

1,755

11.386,70

1,755

Misto: gravação + consulta bool

Comandos

  • 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

Resultados

Motor

QPS médio de gravação

Latência média de gravação (ms)

QPS médio de consulta

Latência média de consulta (ms)

TairSearch

9.589,18

2,085

10.504,31

1,903

RediSearch

5.284,01

3,784

5.283,96

3,784

Resumo

O TairSearch oferece maior throughput e menor latência que o RediSearch na maioria dos tipos de consulta devido a duas escolhas principais de design:

  • Computação paralela multinúcleo: o TairSearch distribui a interseção de índices e a avaliação de consultas entre múltiplos núcleos de CPU. Isso é particularmente eficaz para consultas complexas como match, bool e range, pois essas consultas precisam intersectar várias listas de postagem.

  • Índices invertidos otimizados para pesquisa de texto: a estrutura do índice é projetada especificamente para cargas de trabalho de texto completo, o que permite buscas rápidas de termos únicos e operações AND eficientes com múltiplos termos.

O TairSearch também usa uma estrutura de dados dedicada para compressão de documentos, o que reduz o uso de memória sem degradar o throughput de leitura ou gravação.