このドキュメントでは、OpenSearch Benchmark を使用した PolarSearch バージョン 1.0 の性能テスト結果を、HTTP ログ、NYC タクシー、Geonames の 3 つの標準ワークロードに基づいて紹介します。
詳細なテスト手順については、「PolarSearch ベンチマークテスト方法」をご参照ください。
書き込み性能テスト結果
書き込みテストでは、append-no-conflicts-index-only プロシージャを使用して、完全なコーパスをクラスターに一括書き込みします。これらのテストでは、同時書き込みクライアント数(bulk_indexing_clients)を変化させながら、書き込みスループット(docs/s)を評価します。各テストは空のインデックスから開始されます。
HTTP ログ
このデータセットは、1998 年 FIFA ワールドカップの実際の Web サーバーアクセスログに基づいており、約 2 億 4,700 万件のログレコードを含みます。
テストシナリオ 1:6 シャード、1 レプリカ
スループット (docs/s)
クライアント 1
クライアント 2
クライアント 4
クライアント 8 (デフォルト)
クライアント 16
クライアント 32
PolarSearch 1.0
127860
197938
324857
454070
466709
469483
テストシナリオ 2:6 シャード、0 レプリカ
スループット (docs/s)
クライアント 1
クライアント 2
クライアント 4
クライアント 8 (デフォルト)
クライアント 16
クライアント 32
PolarSearch 1.0
172384
288195
512037
741541
783537
785893
NYC タクシー
このデータセットは、2015 年の NYC タクシー乗車データに基づいており、約 1 億 6,500 万件のレコードを含みます。
テストシナリオ 1:6 シャード、1 レプリカ
スループット (docs/s)
クライアント 1
クライアント 2
クライアント 4
クライアント 8 (デフォルト)
クライアント 16
クライアント 32
PolarSearch 1.0
77098
113670
183412
259955
271045
272685
テストシナリオ 2:6 シャード、0 レプリカ
スループット (docs/s)
クライアント 1
クライアント 2
クライアント 4
クライアント 8 (デフォルト)
クライアント 16
クライアント 32
PolarSearch 1.0
126167
187151
311023
451135
482505
488001
検索性能
検索テストは書き込み操作完了後に実行され、replica=1 および target_throughput=0(フルスピードストレステストモード)の設定で、CPU 負荷が最大時の最大検索スループット(ops/s)を評価します。
HTTP ログ
term:完全一致検索
logs-* に対して固定ヒット数 10,000 件の完全一致検索を実行し、デフォルトの上位 10 件を返します。このテストでは、PolarSearch 1.0 の転置インデックスの検索効率、シャード間ファンアウトおよびマージ操作のオーバーヘッド、ネットワーク調整レイヤーの処理能力を評価します。
term (ops/s) | クライアント 1 | クライアント 2 | クライアント 4 | クライアント 8 | クライアント 16 | クライアント 32 |
PolarSearch 1.0 | 148 | 312 | 591 | 829 | 1147 | 1475 |
asc_sort_timestamp:doc values によるソート
すべてのドキュメントに対して match_all クエリを実行し、タイムスタンプの昇順で上位 10 件を返します。@timestamp フィールドは date 型であり、doc values のカラム型ストレージを使用してソートされます。この操作では、doc values の読み取り効率、トップ N ヒープソート、および PolarSearch 1.0 のコーディネーターノードのマージ能力を評価します。
asc_sort_timestamp (ops/s) | クライアント 1 | クライアント 2 | クライアント 4 | クライアント 8 | クライアント 16 | クライアント 32 |
PolarSearch 1.0 | 133 | 262 | 443 | 579 | 732 | 931 |
range:タイムウィンドウ範囲スキャン
@timestamp フィールドに対して動的タイムウィンドウの範囲クエリを実行します。ログプロダクトのクエリの 90 % には時間フィルターが含まれるため、このタスクでは日付範囲スキャンの効率を評価し、term クエリと補完することでポイントクエリと範囲クエリの比較を行います。
range (ops/s) | クライアント 1 | クライアント 2 | クライアント 4 | クライアント 8 | クライアント 16 | クライアント 32 |
PolarSearch 1.0 | 106 | 269 | 431 | 573 | 707 | 815 |
hourly_agg:時系列集約
すべてのドキュメントに対して date_histogram 集約(1 時間単位のバケット化)を実行します。これは、ログモニタリングおよび統計分析シナリオにおける日付型の集約スループットを評価するコア操作です。
hourly_agg (ops/s) | クライアント 1 | クライアント 2 | クライアント 4 | クライアント 8 | クライアント 16 | クライアント 32 |
PolarSearch 1.0 | 1.48 | 2.97 | 4.3 | 4.76 | 4.8 | 4.8 |
NYC タクシー
match-all:ベースラインスケジューリング
約 1 億 6,500 万件の全データセットに対して match_all クエリを実行し、ソートや集約なしでデフォルトの上位 10 件のみを返します。このプロセスでは、エンジンのリクエスト解析、シャードスケジューリング、結果シリアル化の基本パスの効率をテストします。
match-all (ops/s) | クライアント 1 | クライアント 2 | クライアント 4 | クライアント 8 | クライアント 16 | クライアント 32 |
PolarSearch 1.0 | 281 | 564 | 1115 | 2022 | 3167 | 4508 |
range:数値範囲スキャン
total_amount フィールド(運賃金額、scaled_float 型)に対して固定数値範囲フィルターを適用し、5 ~ 15 ドルの運賃を持つ乗車記録をクエリし、デフォルトで 10 件を返します。この操作では、数値フィールドの範囲スキャン効率をテストします。
range (ops/s) | クライアント 1 | クライアント 2 | クライアント 4 | クライアント 8 | クライアント 16 | クライアント 32 |
PolarSearch 1.0 | 10.63 | 21.07 | 39 | 43 | 43 | 43 |
autohisto_agg:適応型時系列集約
20 日間のタイムウィンドウ内のデータに対して auto_date_histogram 集約(自動バケット化、buckets=20)を実行し、エンジンの適応型集約機能を評価します。これは range(range は数値範囲クエリ用、auto_date_histogram は時系列集約用)と補完関係にあります。
autohisto_agg (ops/s) | クライアント 1 | クライアント 2 | クライアント 4 | クライアント 8 | クライアント 16 | クライアント 32 |
PolarSearch 1.0 | 17.55 | 37.64 | 64.55 | 73.38 | 74 | 75.84 |
Geonames
Geonames データセットは、世界中のポイント・オブ・インタレスト(POI)データに基づいており、地名、国別コード、人口、地理座標などのフィールドを含む約 1,140 万件のレコードで構成されています。主にさまざまなクエリタイプのパフォーマンス評価に使用されます。Geonames データセットは HTTP ログおよび NYC タクシーデータセットと比べてはるかに小さいため、書き込み時間が短く、PolarSearch 1.0 の書き込み性能差は有意な比較を行うほど顕著ではありません。そのため、Geonames テストでは検索シナリオに焦点を当て、完全一致検索、全文検索、集約、ジオ空間クエリ、スクリプトスコアリングをカバーし、プロダクトのクエリ処理能力を評価します。
term:完全一致検索
term (ops/s) | クライアント 1 | クライアント 2 | クライアント 4 | クライアント 8 | クライアント 16 | クライアント 32 |
PolarSearch 1.0 | 434 | 866 | 1615 | 2887 | 4433 | 5755 |
phrase:全文フレーズ一致
このテストでは、全文検索におけるフレーズ一致のパフォーマンスを評価します。フレーズ一致では、転置インデックス内の語位置情報を検証する必要があるため、標準的な term クエリよりも計算負荷が高くなります。
phrase (ops/s) | クライアント 1 | クライアント 2 | クライアント 4 | クライアント 8 | クライアント 16 | クライアント 32 |
PolarSearch 1.0 | 408 | 782 | 1341 | 2523 | 3737 | 4925 |
country_agg_uncached:ネストされた terms 集約
このテストでは、すべてのドキュメントに対して国別コードによる terms 集約を行い、さらにネストされた sum 集約を実行します。集約キャッシュは無効にして、実際の計算オーバーヘッドを反映させます。このテストでは、重い集約負荷下でのエンジンの CPU 利用効率を評価し、コンピューティング集約型の集約シナリオを代表します。
country_agg_uncached (ops/s) | クライアント 1 | クライアント 2 | クライアント 4 | クライアント 8 | クライアント 16 | クライアント 32 |
PolarSearch 1.0 | 12 | 24.62 | 45 | 50.55 | 51 | 51 |
decay_geo_gauss_function_score:ジオ空間距離減衰スコアリング
geo_point フィールドに対してジオ距離減衰関数(ガウス減衰)付きスコアリングクエリを実行し、GeoSpatial インデックスのクエリ効率およびスコア計算能力を評価します。
decay_geo_gauss (ops/s) | クライアント 1 | クライアント 2 | クライアント 4 | クライアント 8 | クライアント 16 | クライアント 32 |
PolarSearch 1.0 | 5 | 9.73 | 17 | 18.62 | 19 | 19 |
painless_static:Painless スクリプトスコアリング
このテストでは、Painless スクリプトを使用して各ドキュメントのカスタムスコアを計算します。スクリプトは事前にコンパイルされ、静的バインドで実行されます。このテストでは、JIT コンパイルを含むスクリプトエンジンの計算スループットを評価し、高度にカスタマイズされたスクリプトスコアリングシナリオを代表します。
painless_static (ops/s) | クライアント 1 | クライアント 2 | クライアント 4 | クライアント 8 | クライアント 16 | クライアント 32 |
PolarSearch 1.0 | 5.52 | 10.85 | 19 | 20.89 | 21 | 21 |
desc_sort_population:doc values による数値ソート
population フィールド(整数型)で全ドキュメントを降順にソートし、上位 10 件を返します。ソートは doc values のカラム型ストレージを使用して実行されます。この操作では、カラム型ストレージからの数値フィールド読み取り効率およびトップ N ソートのパフォーマンスをテストします。
desc_sort_population (ops/s) | クライアント 1 | クライアント 2 | クライアント 4 | クライアント 8 | クライアント 16 | クライアント 32 |
PolarSearch 1.0 | 250 | 464 | 864 | 1451 | 1960 | 2469 |