Azure Cosmos DB ドライバーの比較
この記事のメトリクスは、2019年7月時点で入手可能な最新ドライバーに基づいています。
この記事では、CData ODBC Driver for Cosmos DB とネイティブドライバーのパフォーマンスを2つの観点から比較します。
まず、読み取りパフォーマンスを比較します。Azure Cosmos DB インスタンスからデータをクエリして結果セットを処理するまでの時間を測定しました。CData ドライバーはネイティブドライバーの少なくとも3倍高速であることがわかりました。
次に、読み取りクエリにおける各ドライバーのリソース使用状況を比較し、CPU とネットワーク使用率に着目しました。この結果から、CData ドライバーが高パフォーマンスを発揮する根本的な原因を説明します。さらに、Cosmos DB のサーバーリソース(Azure Cosmos DB 設定の Read Units(RU))を増加させた場合に、両ドライバーがどのようにスケールするかについてもテストを拡張しました。
ドライバーを並べて比較しているため、マシン自体のパフォーマンスは相対的に重要ではありません。重要なのは、ドライバー同士の相対的な比較結果です。
データについて
再現可能な比較を行うために、MongoDB, Inc が公開しているサンプル restaurants データセットをコピーし、1,000万件のレコードを持つデータベースを構築しました。クエリ対象テーブルの詳細は以下のとおりです:
| テーブル | 行数 |
|---|---|
| restaurants | 10,000,000 |
ODBC ドライバーの読み取りパフォーマンス
まず、各ドライバーで同じ2つのクエリを実行して、パフォーマンスをテストしました:
- SELECT * FROM restaurants LIMIT 25000
- SELECT * FROM restaurants
| ODBC クエリ時間(ミリ秒) | ||
|---|---|---|
| クエリ対象行数 | CData Software | ネイティブ |
| 25,000 | 1,441 (+382%) | 6,945 |
| 10,000,000 | 437,526 (+203%) | 1,325,441 |
結果からわかるように、CData ODBC ドライバーはネイティブドライバーよりも大幅に高速で大規模な結果セットを処理し、最大のデータセットを3倍高速に処理しました。
ODBC ドライバーのリソース使用状況
読み取りパフォーマンスのテスト後、ネットワークと CPU の使用状況に着目して、リソース使用状況を測定・比較する別のテストを実施しました。以下のグラフは、サンプル C プログラムを実行し、Windows リソースモニター(CPU 使用率とネットワーク使用率を同時にキャプチャするために2つのインスタンスを実行)を使用して取得しました。リソース使用状況テストでは、Azure Cosmos DB の Read Units(RU)の割り当てに基づいて、2つの異なるユースケースを調査しました。結果は250万行に制限しました。
1. 最小 RU での大量行クエリ
最初の比較では、Cosmos DB で最小 RU(400)を設定し、大量の行をクエリしました:SELECT * FROM restaurants LIMIT 2500000
* ネットワークグラフのスケールが異なる点にご注意ください。
上のグラフから、RU を最小値に設定した場合、両方のドライバーがデータを取得した後、割り当てられた RU に基づくレート制限により取得を一時停止することがわかります。しかし、CData ドライバーはデータを取得しながら同時に処理しているように見えるのに対し、ネイティブドライバーはデータを取得してから処理しているように見えます。さらに、最小 RU 設定では、CData ドライバーはデータ取得のピークが30〜40 Mbps であるのに対し、ネイティブドライバーのピークは6〜7 Mbps です(ネイティブドライバーのスケールの違いにご注意ください)。データ取得速度が高いことは、CData ドライバーがネットワーク帯域幅をより効率的に活用していることを示しており、その結果、CData ドライバーのクエリ処理時間が短縮されます。
2. 高 RU での大量行クエリ
2番目の比較では、Cosmos DB で高い RU を設定し、大量の行をクエリしました:SELECT * FROM restaurants LIMIT 25000000
* ネットワークグラフのスケールが異なる点にご注意ください。
RU を高い値(3500)に設定すると、CData ドライバーのパフォーマンスは劇的に向上し、各ドライバーが利用可能なリソースをどのように活用するかの違いがより顕著になります。グラフに基づくと、CData ドライバーはデータを取得しながら同時に処理するパターンを維持しながら、毎秒はるかに多くのデータ(約70 Mbps)を取得しており、割り当てられた RU を完全に活用しています。一方、ネイティブドライバーは高い RU でもほとんどパフォーマンスが向上せず、データを取得してから別途処理するパターンを継続しています。ネイティブドライバーは RU が最小値だったときと同じ速度(約7 Mbps)でデータを取得しており、割り当てられた RU を活用している様子は見られません。
まとめ
CData Software のドライバーは、特に大規模なデータセットや高い RU 割り当ての環境において、ネイティブドライバーよりも高速であることが一貫して証明されています。CData の開発者たちは、データのリクエストと Cosmos DB データベースから返される結果の処理におけるパフォーマンスの最適化に、数え切れないほどの時間を費やしてきました。これにより、システムに割り当てられた RU を最大限に活用できます。このエンジニアリングにより、割り当てられた RU に基づいて可能な限り最高のパフォーマンスを得ることができます。30日間の無料トライアルをダウンロードして、CData の違いをぜひ体験してみてください。
関連記事
- NoSQL ドライバー:機能比較 - さまざまなベンダーのドライバーが、NoSQL データソースからの複雑なクエリや複雑なデータセットをどのように処理するかを比較します。
- CData NoSQL 概要 - NoSQL を扱う際に、CData のドライバー技術が他と一線を画す機能について説明します。



