CData JDBC-ODBC ブリッジと Sun JDBC-ODBC ブリッジの比較
JDK 8 で JDBC-ODBC ブリッジが非推奨となったことにより、Java ベースのアプリケーションにおける ODBC 接続のサポートに空白が生じています。CData JDBC-ODBC ブリッジは、Sun JDBC-ODBC ブリッジのシームレスな代替製品です。CData JDBC-ODBC ブリッジをドロップインで配置するだけで、まったく同じ方法で ODBC データソースに接続できます。追加のアプリケーションやインストールは必要ありません。
準備
この記事では、Sun JDBC-ODBC ブリッジ(JDK 7 で利用可能)と CData JDBC-ODBC ブリッジ1を比較します。比較にあたっては、CData 独自の MySQL 用 ODBC ドライバーを使用することによるバイアスを避けるため、オープンソースの MySQL Connector/ODBC2 を採用しました。ベンチマークを設定するために、テストマシンに MySQL Server 5.7 をインストールし、比較的大規模なデータセットをデータベースに挿入しました。
テストマシンの仕様は以下のとおりです:
オペレーティングシステム:Windows 7 Ultimate, SP1
プロセッサ:Intel® CoreTM i3-2120 CPU @ 3.30GHz
搭載メモリ(RAM):8.00 GB
システムの種類:64 ビットオペレーティングシステム
ブリッジを並べて比較しているため、マシン自体のパフォーマンスは比較的重要ではありません。重要なのは、ブリッジ同士の相対的なパフォーマンスの違いです。
比較
比較を開始するにあたり、MySQL に新しいデータベースを作成し、以下に示す「restaurant」というテーブルを作成しました:
+-----------------+---------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------------+---------------+------+-----+---------+-------+ | _id | int(10) | NO | PRI | | | | grades | varchar(2000) | YES | | NULL | | | address_street | varchar(255) | YES | | NULL | | | address_zipcode | int(11) | YES | | NULL | | | address_coord | varchar(255) | YES | | NULL | | | building | varchar(127) | YES | | NULL | | | name | varchar(255) | YES | | NULL | | | restaurant_id | bigint(20) | NO | | NULL | | | borough | varchar(255) | YES | | NULL | | | cuisine | varchar(255) | YES | | NULL | | | avg_score | double | YES | | NULL | | +-----------------+---------------+------+-----+---------+-------+
データセットは、レストランに関する情報を含む 1,026,779 行のデータ(3.45 GB)で構成されています。
この調査の主な目的は、ブリッジの相対的なパフォーマンスを比較することでした。そのため、各ブリッジで同じ DSN に対して同じクエリを実行しました。実行したクエリは以下のとおりです:
- SELECT * FROM restaurant LIMIT 250000
- SELECT * FROM restaurant LIMIT 500000
- SELECT * FROM restaurant LIMIT 1000000
結果
シンプルな Java アプリケーションから、各 JDBC-ODBC ブリッジで同じ DSN を使用して MySQL データベースに接続し、上記のクエリを繰り返し実行しました。各ブリッジで使用した JDBC URL は以下のとおりです:
- CData JDBC-ODBC:jdbc:jdbcodbc:DSN='MySQL Source';
- Sun JDBC-ODBC:jdbc:odbc:MySQL Source
結果は読み込まれ、各行ごとに新しい文字列変数に格納されました。下記のチャートに示されている時間は、複数のクエリに基づく平均値であり、ネットワークトラフィックの急増などによる外れ値を平準化しています。
| ドライバー別クエリ時間(ミリ秒) | ||
|---|---|---|
| クエリ | CData ブリッジ | Sun ブリッジ |
| 1(250,000 行) | 4,446 (316% 高速) | 14,058 |
| 2(500,000 行) | 8,882 (316% 高速) | 28,036 |
| 3(1,000,000 行) | 17,726 (327% 高速) | 57,883 |
結果からわかるように、CData JDBC-ODBC ブリッジは Sun JDBC-ODBC ブリッジと比較して大幅なパフォーマンス向上を実現しており、一貫して3倍以上の速度で結果を取得・処理しています。特筆すべき点として、CData ブリッジはデータセットのサイズが大きくなるほど、そのパフォーマンス優位性が向上しています。
各クエリの平均実行時間の比較を以下のチャートに示します:
結果

結論
CData JDBC-ODBC ブリッジは、Sun JDBC-ODBC ブリッジをはるかに上回るパフォーマンスを提供します。CData の開発者は、結果処理のパフォーマンス最適化に数え切れないほどの時間を費やしており、ドライバーのボトルネックはウェブトラフィックとサーバー処理時間のみとなっています。このパフォーマンスは、大量のデータを処理する必要がある場合に特に顕著です。
参考文献
関連記事
- MySQL 用ドライバーの比較 - CData MySQL ドライバーとネイティブ MySQL コネクタのパフォーマンス比較