本トピックでは、HTTP ログ、NYC タクシー、Geonames の 3 種類の標準ワークロードを使用した PolarSearch 3.0 の OpenSearch Benchmark 結果を紹介します。
詳細なテスト手順については、「PolarSearch ベンチマークパフォーマンステスト方法」をご参照ください。
書き込みパフォーマンス
書き込みテストでは、append-no-conflicts-index-only テストプロシージャを使用して、クラスターに全コーパスを一括書き込みし、同時書き込みクライアント数(bulk_indexing_clients)を変化させた際の書き込みスループット(docs/s)を評価します。各テストは空のインデックスから開始されます。
HTTP ログの書き込みパフォーマンス
このデータセットは、1998 年 FIFA ワールドカップの実際の Web サーバーアクセスログに基づいており、約 2 億 4,700 万件のログレコードを含みます。
テストシナリオ 1:6 シャード、1 レプリカ
スループット (docs/s)
Client 1
Client 2
Client 4
Client 8 (デフォルト)
Client 16
Client 32
PolarSearch 3.0
129830
216656
345442
528321
552017
551569
テストシナリオ 2:6 シャード、0 レプリカ
スループット (docs/s)
Client 1
Client 2
Client 4
Client 8 (デフォルト)
Client 16
Client 32
PolarSearch 3.0
189685
326329
577366
880890
957399
951244
NYC タクシーの書き込みパフォーマンス
このデータセットには、2015 年のニューヨーク市タクシー乗車記録から抽出された約 1 億 6,500 万件のレコードが含まれます。
テストシナリオ 1:6 シャード、1 レプリカ
スループット (docs/s)
Client 1
Client 2
Client 4
Client 8 (デフォルト)
Client 16
Client 32
PolarSearch 3.0
92773
134968
222221
321173
335255
336760
テストシナリオ 2:6 シャード、0 レプリカ
スループット (docs/s)
Client 1
Client 2
Client 4
Client 8 (デフォルト)
Client 16
Client 32
PolarSearch 3.0
139770
222312
370978
555390
601674
598330
検索パフォーマンス
検索テストは書き込み操作完了後に実行され、replica=1 および target_throughput=0(フルスピードストレステストモード)で実施されます。これにより、CPU 負荷が最大になった状態での検索スループット(ops/s)の上限値を評価します。
HTTP ログの検索パフォーマンス
term - 完全一致検索
このテストでは、logs-* インデックスに対して完全一致検索を実行します。各クエリは固定で 10,000 ドキュメントにヒットし、デフォルトの 10 ドキュメントを返します。このテストでは、転置インデックスの検索効率、シャード間のファンアウトおよびマージ処理のオーバーヘッド、および PolarSearch 3.0 のコーディネートノードの処理能力を評価します。
HTTP ログ term (ops/s) | Client 1 | Client 2 | Client 4 | Client 8 | Client 16 | Client 32 |
PolarSearch 3.0 | 256 | 519 | 868 | 1361 | 1914 | 2592 |
asc_sort_timestamp - Doc value ソート
このテストでは、すべてのドキュメントに対して match_all クエリを実行し、タイムスタンプの昇順でソートして上位 10 件を返します。@timestamp フィールド(日付型)は、カラムナーストレージに基づく doc values を使用してソートされます。このテストでは、doc values の読み取り効率、トップ N ヒープソートの実行効率、および PolarSearch 3.0 のコーディネートノードにおける結果マージ性能を評価します。
HTTP ログ asc_sort_timestamp (ops/s) | Client 1 | Client 2 | Client 4 | Client 8 | Client 16 | Client 32 |
PolarSearch 3.0 | 193 | 432 | 779 | 1020 | 1514 | 2073 |
range - タイムレンジクエリ
このテストでは、@timestamp フィールドに対して動的なタイムウィンドウ範囲クエリを実行します。ログ分析プロダクトのクエリの 90 % は時間フィルターを含むため、このタスクでは日付範囲クエリの効率を測定します。これは term テストと対比され、範囲クエリとポイントクエリのパフォーマンスを比較するものです。
HTTP ログ range (ops/s) | Client 1 | Client 2 | Client 4 | Client 8 | Client 16 | Client 32 |
PolarSearch 3.0 | 219 | 494 | 893 | 1338 | 2005 | 2646 |
hourly_agg - 時系列集約
このテストでは、すべてのドキュメントを対象に 1 時間単位でバケット化する date_histogram 集約を実行します。これは日付型フィールドに対する集約スループットを測定するものであり、ログモニタリングや統計分析シナリオにおけるコア操作です。
HTTP ログ hourly_agg (ops/s) | Client 1 | Client 2 | Client 4 | Client 8 | Client 16 | Client 32 |
PolarSearch 3.0 | 48 | 145 | 251 | 315 | 339 | 346 |
NYC タクシーの検索パフォーマンス
match-all - ベースラインディスパッチ
このテストでは、約 1 億 6,500 万件のレコードに対して match_all クエリを実行し、ソートや集約を行わずにデフォルトの 10 件の結果のみを返します。これにより、エンジンのリクエスト解析、シャードへのディスパッチ、および結果のシリアル化のベースライン効率を測定します。
NYC タクシー match-all (ops/s) | Client 1 | Client 2 | Client 4 | Client 8 | Client 16 | Client 32 |
PolarSearch 3.0 | 271 | 612 | 1292 | 2326 | 3668 | 5531 |
range - 数値範囲クエリ
このテストでは、total_amount フィールド(運賃金額を表す scaled_float 型)に対して固定の数値範囲フィルターを適用します。具体的には、5~15 ドルの運賃を持つ乗車記録を検索し、デフォルトの 10 件の結果を返します。このテストでは、数値フィールドに対する範囲クエリの効率を評価します。
NYC タクシー range (ops/s) | Client 1 | Client 2 | Client 4 | Client 8 | Client 16 | Client 32 |
PolarSearch 3.0 | 161 | 441 | 906 | 1335 | 1723 | 1958 |
autohisto_agg - 適応型時間集約
20 日間のタイムウィンドウ内のデータに対して auto_date_histogram(自動バケット化、buckets=20)を実行し、エンジンの適応的集約機能をテストします。この操作は range と補完関係にあります(range は数値範囲クエリ用、auto_date_histogram は時系列範囲集約用)。
NYC タクシー autohisto_agg (ops/s) | Client 1 | Client 2 | Client 4 | Client 8 | Client 16 | Client 32 |
PolarSearch 3.0 | 170 | 444 | 733 | 966 | 1117 | 1142 |
Geonames の検索パフォーマンス
Geonames データセットには、世界中のポイント・オブ・インタレスト(POI)に関する約 1,140 万件のレコードが含まれており、地名、国別コード、人口、地理座標などのフィールドがあります。このデータセットを使用して、さまざまなクエリタイプのパフォーマンスを評価します。Geonames データセットは HTTP ログおよび NYC タクシーデータセットと比べてはるかに小さいため、書き込み時間が短く安定しており、書き込みパフォーマンスの比較は実用的ではありません。そのため、Geonames テストでは検索シナリオに焦点を当てています。これらのテストでは、完全一致検索、全文検索、集約、ジオ空間クエリ、スクリプトスコアリングを網羅することで、クエリ処理能力を包括的に評価します。
term - 完全一致検索
Geonames term (ops/s) | Client 1 | Client 2 | Client 4 | Client 8 | Client 16 | Client 32 |
PolarSearch 3.0 | 594 | 1118 | 2004 | 3871 | 5851 | 8186 |
phrase - フレーズクエリ
このテストでは、全文検索におけるフレーズクエリ機能を評価します。転置インデックス内の語位置情報を検証する必要があるため、完全一致検索よりも計算量が多くなります。
Geonames phrase (ops/s) | Client 1 | Client 2 | Client 4 | Client 8 | Client 16 | Client 32 |
PolarSearch 3.0 | 481 | 1153 | 1686 | 3014 | 4719 | 6803 |
country_agg_uncached - Terms およびネスト集約
このテストでは、すべてのドキュメントに対して国別コードでバケット化する terms 集約を行い、さらにその中に sum 集約をネストします。集約キャッシュは無効にして、実際の計算オーバーヘッドを反映させます。このタスクはコンピューティング集約型の集約シナリオを表しており、重い集約負荷下でのエンジンの CPU 効率を測定します。
Geonames country_agg_uncached (ops/s) | Client 1 | Client 2 | Client 4 | Client 8 | Client 16 | Client 32 |
PolarSearch 3.0 | 17 | 32.56 | 40.95 | 43.56 | 45 | 45 |
decay_geo_gauss_function_score - ジオ空間距離減衰スコアリング
このテストでは、geo_point フィールドに対してガウス距離減衰を使用した function score クエリを実行します。これにより、ジオ空間インデックスのクエリ効率とスコアリング性能の両方を評価します。
Geonames decay_geo_gauss (ops/s) | Client 1 | Client 2 | Client 4 | Client 8 | Client 16 | Client 32 |
PolarSearch 3.0 | 5.78 | 11.32 | 19 | 21 | 21.38 | 21.34 |
painless_static - Painless カスタムスコアリング
このテストでは、Painless スクリプトを使用して各ドキュメントに対してカスタムスコア計算を実行します。スクリプトは事前にコンパイルされ、静的バインドを使用して実行されます。このタスクでは、スクリプトエンジン(JIT コンパイル)の計算スループットを測定し、高度にカスタマイズされたスクリプトスコアリングの典型的なシナリオを表します。
Geonames painless_static (ops/s) | Client 1 | Client 2 | Client 4 | Client 8 | Client 16 | Client 32 |
PolarSearch 3.0 | 12 | 14 | 21 | 23.51 | 23.71 | 23.74 |
desc_sort_population - 数値 doc value ソート
このテストでは、population フィールド(整数型)で全ドキュメントを降順にソートし、上位 10 件の結果を返します。ソートはカラムナーストレージに基づく doc values を使用して実行されます。このテストでは、カラムナー数値フィールドの読み取り効率およびトップ N ソートのパフォーマンスを評価します。
Geonames desc_sort_population (ops/s) | Client 1 | Client 2 | Client 4 | Client 8 | Client 16 | Client 32 |
PolarSearch 3.0 | 316 | 463 | 1047 | 1894 | 2577 | 3593 |