Elasticsearch ドライバーの比較
この記事の計測結果は、2019年7月時点で利用可能な最新のドライバーに基づいています。
この記事では、CData JDBC Driver for Elasticsearch とネイティブドライバーのパフォーマンスを2つの観点から比較します。
まず、読み取りパフォーマンスを比較します。Elasticsearch インスタンスにデータをクエリし、結果セットを処理するのにかかる時間を計測しました。CData Driver はネイティブドライバーより2.5倍高速という結果が得られました。
次に、読み取りクエリにおける各ドライバーのリソース使用量を比較し、CPU とネットワークの使用状況に着目します。これにより、CData Driver がより高いパフォーマンスを発揮する根本的な理由を説明します。
ドライバーを横並びで比較しているため、マシン自体のパフォーマンスは比較的重要ではありません。重要なのは、ドライバー同士がどのように比較されるかです。
データ
再現可能な比較を提供するため、Google の公開データセット trips_2015 をコピーしました。クエリ対象のテーブルの詳細は以下の通りです:
| テーブル | 行数 |
|---|---|
| trips_2015 | 9,896,012 |
JDBC ドライバーの読み取りパフォーマンス
まず、各ドライバーで同じ2つのクエリを実行し、関連するパフォーマンスをテストしました:
- SELECT * FROM trips_2015 LIMIT 25000
- SELECT * FROM trips_2015
| JDBC クエリ時間(ミリ秒) | ||
|---|---|---|
| クエリ対象行数 | CData Software | ネイティブ |
| 25,000 | 1,016.9 (+35%) | 1,375.4 |
| 約10,000,000 | 199,577 (+155%) | 508,338 |
結果からわかるように、CData JDBC Driver はネイティブドライバーよりも大規模な結果セットを大幅に高速に処理し、最大のデータセットを2.5倍高速に処理しました。
JDBC ドライバーのリソース使用量
読み取りパフォーマンスのテスト中、クライアント側のリソース使用量も計測し、特にメモリと CPU の使用状況に着目しました。以下のグラフは、サンプル Java プログラムを実行し、Java VisualVM を使用して CPU とメモリの使用量をキャプチャして作成しました。Java バージョン 8 update 211 を使用し、最大ヒープサイズは 4.27 GB に設定しました。
この比較では、テスト用の Elasticsearch インスタンスに対して大量の行を取得するクエリを実行しました: SELECT * FROM trips_2015
グラフに基づくと、CData Driver は CPU とメモリの使用率を高く維持し、CPU の約40%を使用し、ヒープ使用量は平均で約700MB でした。対照的に、ネイティブドライバーは CPU を5%未満しか使用せず、メモリ使用量も不安定でした。クエリの最初の3分の1では、ドライバーはヒープの約400MB を使用していましたが、その後使用量を100MB 未満に大幅に削減しました。CData Driver はクライアント側のリソースをより有効に活用することで、ネイティブドライバーの2倍以上の速度でデータをリクエストし処理します。読み取りプロセスを高速に完了することは、時間の節約だけでなく、Elasticsearch サーバーのリソースも最大限に活用していることを意味します。
まとめ
CData ドライバーは、特に大規模なデータセットを扱う場合に、ネイティブドライバーよりも一貫して高速であることが証明されています。CData の開発者は、Elasticsearch インスタンスから返されるデータのリクエストと結果の処理のパフォーマンス最適化に膨大な時間を費やし、システムに割り当てられた RU を最大限に活用しています。このエンジニアリングにより、割り当てられた RU に基づいて最高のパフォーマンスを得ることができます。CData Elasticsearch ドライバーの30日間無料トライアルをダウンロードして、CData の違いをぜひ体験してみてください。
関連記事
- Elasticsearch ドライバーの機能と差別化要因 - CData Elasticsearch ドライバーとネイティブドライバーの機能を比較します。

