すべてのプロダクト
Search
ドキュメントセンター

Tair (Redis® OSS-Compatible):TairSearch パフォーマンスホワイトペーパー

最終更新日:Mar 28, 2026

TairSearch は、Tair が自社開発した全文検索用データ構造です。Elasticsearch 互換のクエリ構文を採用し、テキスト検索に最適化された転置インデックスとマルチコア並列計算に基づいて構築されています。本ホワイトペーパーでは、書き込み、上書き、クエリという各ワークロードにおいて TairSearch と RediSearch のパフォーマンスをベンチマーク比較し、お客様が自環境で結果を評価・再現できるよう支援します。すべてのコマンド、環境構成、テストデータソースを提供しているため、結果は独立して検証可能です。

TairSearch の API ドキュメントについては、「検索」をご参照ください。

テスト環境

クライアント

項目説明
ホストElastic Compute Service (ECS) の ecs.g7.8xlarge インスタンスタイプ。詳細については、「インスタンスファミリーの概要」をご参照ください。
リージョンおよびゾーン中国 (杭州) リージョンのゾーン K
オペレーティングシステムCentOS 7.9 64 ビット

データベース

両データベースは同一の ECS インスタンス上で実行され、6 vCPU および 4 I/O スレッドを使用します。

表 1. 自己管理型 Tair データベース

項目説明
Tair バージョンRedis 5.0 互換の DRAM ベースインスタンス(バージョン 5.0.30)
I/O スレッド4
CPU6 vCPU。サンプルコマンド:taskset -c 1-6 ./src/redis-server redis.conf

表 2. 自己管理型 Redis データベース

項目説明
Redis バージョン7.0.10
RediSearch バージョン2.6.6。CONCURRENT_WRITE_MODE パラメーターは true に設定済み。
RedisJSON バージョン2.4.6
I/O スレッド4
CPU6 vCPU。サンプルコマンド:taskset -c 1-6 ./src/redis-server redis.conf

テストデータ

テストデータセットには、Wikimedia から取得した中国語および英語の Wikipedia 記事の概要が含まれます。ソースファイル:「Index of /zhwiki/latest/」および「Index of /enwiki/latest/」。

各ドキュメントには、idtitleurlabstract の 4 つのフィールドがあります。例:

{
    "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": "哲学()は研究普遍的、基本問題の学科であり、存在、知識、価値、理智、心、言語などの領域を含む。哲学は他の学問と異なる点として、批判的な思考方法や体系的な手法、そして理性による論証を基礎とする独自の思考様式を持つ。"
}

テストツール

ご利用のオペレーティングシステムに対応する TairSearchBench バイナリをダウンロードしてください:

./TairSearchBench.Linux --help を実行すると、利用可能なすべてのオプションを確認できます。

./TairSearchBench.linux の使用方法:
  -a 文字列
        接続先ネットワークのアドレス(IP:ポート)
        # インスタンスのエンドポイント。
  -c 整数
        ベンチマークの同時実行数(デフォルト:30)
        # 同時に実行可能なテストの数。デフォルト値:30。
  -d 符号なし整数
        ベンチマークの実行時間(秒単位、デフォルト:30)
        # テストの持続時間。指定時間が経過するとテストは終了します。デフォルト値:30(単位:秒)。
  -e 文字列
        実行するエンジンバックエンド[tairsearch/redisearch]
        # インスタンスで実行するエンジンとして、TairSearch または RediSearch を指定します。
  -f 文字列
        データ取り込み元の入力ファイル(Wikipedia 概要)
        # 実行データファイルのパス。
  -h 文字列
        使用方法を表示(デフォルト:"help")
        # このツールの使用方法を表示します。
  -j 文字列
        書き込む大規模 JSON ファイルを指定
        # 書き込む JSON ファイルのパスを指定します。
  -n 符号なし整数
        ベンチマーク実行回数(デフォルト:100000)
        # テストで実行する操作の総数。デフォルト値:100000。
  -o 整数
        ドキュメントの上書き(同じドキュメント ID のドキュメントを上書きします)
        # 元のドキュメントを上書きするかどうかを指定します。有効な値:1(true)、0(false)。デフォルト値:0。
  -p 文字列
        Redis への接続パスワード
        # インスタンスのパスワード。
  -q 文字列
        ベンチマーク用の検索クエリ文字列
        # テスト実行に使用するクエリ文。
  -s 符号なし整数
        TairSearch の圧縮しきい値(デフォルト:10000000000)
        # TairSearch の圧縮しきい値を指定します。ドキュメントサイズがこのしきい値を超える場合、ドキュメントは圧縮されます。(単位:バイト)デフォルト値:10000000000(10 KB)。
  -t 文字列
        ベンチマークのタイプを指定[write/search/readwrite]
        # テストタイプを write、search、readwrite のいずれかに設定します。
  -z 文字列
        クエリで使用するアナライザを指定(デフォルト:"standard")
        # クエリで使用するアナライザを指定します。デフォルト値:standard。

テスト実行前に、クライアントに 20 vCPU を割り当ててください。サンプルコマンド:taskset -c 10-30 ./TairSearchBench.linux

事前準備

テストを実行する前に、スキーマ(インデックス)を作成します。

  • TairSearch

      {
          "settings": {
              "compress_doc": {
                  "size": "ユーザー定義の圧縮しきい値",
                  "enable": true
              }
          },
          "mappings": {
              "properties": {
                  "id":           {"type": "keyword"},
                  "url":          {"type": "keyword", "index": false},
                  "title":        {"type": "text", "analyzer": "ユーザー定義のアナライザ"},
                  "abstract":     {"type": "text", "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

    テストデータが中国語のドキュメントである場合は、上記スキーマに LANGUAGE CHINESE を追加します。

テスト結果

各書き込みテストでは 1,000,000 ドキュメントをインデックス化します。各クエリテストでは、1,000,000 ドキュメントから構成されるコーパスに対して 1,000,000 回のクエリを実行します。各混合(readwrite)テストは 60 秒間実行されます。

英語データの書き込み

コマンド

  • 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

結果

エンジンQPS平均レイテンシ(ms)99 パーセンタイルレイテンシ(ms)使用メモリ(GB)
TairSearch22,615.150.8741.7351.39
RediSearch18,295.101.0922.3521.67

中国語データの書き込み

コマンド

  • 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

結果

エンジンQPS平均レイテンシ(ms)99 パーセンタイルレイテンシ(ms)使用メモリ(GB)
TairSearch13,980.411.4273.2751.87
RediSearch10,924.401.8303.8571.83
本テストでは、TairSearch が RediSearch よりも多くのメモリを使用しています。これは、jieba アナライザが RediSearch で使用される中国語アナライザよりも細かいトークンを生成するためです。

英語データの上書き

コマンド

  • 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

結果

エンジンQPS平均レイテンシ(ms)99 パーセンタイルレイテンシ(ms)使用メモリ(GB)
TairSearch9,775.032.0413.9740.0002
RediSearch22,239.670.8981.380.165
上書き操作を実行すると、RediSearch は元のドキュメントを後続の削除対象としてマークします。これにより、追加のメモリ使用量が発生します。一方、TairSearch は元のドキュメントをリアルタイムで削除します。

中国語データの上書き

コマンド

  • 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

結果

エンジンQPS平均レイテンシ(ms)99 パーセンタイルレイテンシ(ms)使用メモリ(GB)
TairSearch6,194.153.2066.4560.025(jieba アナライザ辞書のメモリ使用量を含む)
RediSearch25,096.180.7961.3380.671
上書き操作を実行すると、RediSearch は元のドキュメントを後続の削除対象としてマークします。これにより、追加のメモリ使用量が発生します。一方、TairSearch は元のドキュメントをリアルタイムで削除します。

完全一致検索 — 英語

コマンド

  • 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

結果

エンジンQPS平均レイテンシ(ms)99 パーセンタイルレイテンシ(ms)
TairSearch45,501.130.4370.563
RediSearch28,513.870.7000.833

完全一致検索 — 中国語

コマンド

  • 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

結果

エンジンQPS平均レイテンシ(ms)99 パーセンタイルレイテンシ(ms)
TairSearch40,670.470.4890.635
RediSearch24,437.480.8171.331

部分一致検索 — 英語

コマンド

  • 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

結果

エンジンQPS平均レイテンシ(ms)99 パーセンタイルレイテンシ(ms)
TairSearch24,548.940.8120.971
RediSearch2,420.668.2618.523

マッチクエリ — 中国語

コマンド

  • 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

結果

エンジンQPS平均レイテンシ(ms)99 パーセンタイルレイテンシ(ms)
TairSearch6,601.053.0273.669
RediSearch889.3722.48622.985

ブール検索 — 英語

コマンド

  • 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

結果

エンジンQPS平均レイテンシ(ms)99 パーセンタイルレイテンシ(ms)
TairSearch4,554.224.3885.702
RediSearch1,124.0817.79118.444

ブール検索 — 中国語

コマンド

  • 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

結果

エンジンQPS平均レイテンシ(ms)99 パーセンタイルレイテンシ(ms)
TairSearch2,619.007.62318.42
RediSearch1,199.7616.66917.064

範囲検索 — 英語

コマンド

  • 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

結果

エンジンQPS平均レイテンシ(ms)99 パーセンタイルレイテンシ(ms)
TairSearch2,840.027.0388.599
RediSearch1,307.0215.30016.817

プレフィックス検索 — 英語

コマンド

  • 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

結果

エンジンQPS平均レイテンシ(ms)99 パーセンタイルレイテンシ(ms)
TairSearch36,491.100.5450.688
RediSearch25,558.920.7810.930

プレフィックス検索 — 中国語

コマンド

  • 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

結果

エンジンQPS平均レイテンシ(ms)99 パーセンタイルレイテンシ(ms)
TairSearch41,308.710.4810.638
RediSearch27,457.860.7271.234

混合: 書き込み + 完全一致検索

コマンド

  • 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

結果

エンジン平均書き込み QPS平均書き込みレイテンシ(ms)平均クエリ QPS平均クエリレイテンシ(ms)
TairSearch14,699.771.35916,224.031.232
RediSearch11,386.751.75511,386.701.755

混合ワークロード:書き込み + ブール検索

コマンド

  • 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

結果

エンジン平均書き込み QPS平均書き込みレイテンシ(ms)平均クエリ QPS平均クエリレイテンシ(ms)
TairSearch9,589.182.08510,504.311.903
RediSearch5,284.013.7845,283.963.784

まとめ

TairSearch は、ほとんどのクエリタイプにおいて RediSearch よりも高いスループットと低いレイテンシを実現します。これは、以下の 2 つのコア設計方針によるものです:

  • マルチコア並列計算:TairSearch は、インデックスのインターセクションおよびクエリ評価処理を複数の CPU コアに分散させます。この設計は、マッチ、ブール、範囲など、複数の投稿リストをインターセクトする必要がある複雑なクエリにおいて特に効果的です。

  • テキスト検索に最適化された転置インデックス:インデックス構造は、全文検索ワークロードを目的として専門的に設計されており、単一タームの高速検索および効率的なマルチターム AND 操作を可能にします。

さらに、TairSearch はドキュメント圧縮専用のデータ構造を採用しており、読み取りおよび書き込みスループットを劣化させることなくメモリ使用量を削減します。