web-dev-qa-db-ja.com

ODBC vsJDBCパフォーマンス

JavaおよびCをMySQLデータベースで使用し、結果を比較して、そのような結果の理由を説明する割り当てがあります。

番号。 of Records実行時間(ms)
 Records Java C 
 100 586 76 
 500 628 216 
 2000 733 697 
 5000 963 1056 
 10000 1469 2178 

ご覧のとおり、データベースからフェッチされるレコードの数が少ないほど、C(ODBC)のパフォーマンスは向上しましたが、レコードの数が増えると、Java(JDBC)が勝者となりました。 。

私が考えた理由は、ODBCドライバーはJDBCよりもはるかに高速にロードされますが、JDBCのアクセス速度はODBCよりも優れているため、そのような結果になります。しかし、私はできません。どこでもそのような推論を見つけてください。

何か提案がありますか?

8
user3213918

mathworks ウェブサイトによって提示されたステートメント。これらは一般的に適用できるようです。

ODBCとJDBCドライバーのどちらかを決定する

ネイティブODBC for:

  • データのインポートとエクスポートで最速のパフォーマンス
  • メモリを大量に消費するデータのインポートとエクスポート

JDBCを次の目的で使用します。

  • プラットフォームに依存しないため、任意のオペレーティングシステム(MacおよびLinux®を含む)、ドライバーバージョン、またはビットネス(32ビットまたは64ビット)で作業できます。
  • ネイティブODBCインターフェイス(runstoredprocedureなど)でサポートされていないDatabaseToolbox関数の使用
  • 複雑または長いデータ型(LONG、BLOB、テキストなど)の操作

ヒント:

  • ODBCとJDBCドライバーの両方をサポートするWindowsシステムでは、純粋なJDBCドライバーとネイティブODBCインターフェースは、JDBC/ODBCブリッジよりも優れた接続性とパフォーマンスを提供します。
9

次の点が役立つ場合があります。

マルチスレッド:-JDBCはマルチスレッドです-ODBCはマルチスレッドではありません(少なくともスレッドセーフではありません)

柔軟性:-ODBCはWindows固有のテクノロジーです-JDBCはJavaに固有であるため、JavaをサポートするOSでサポートされます

Power:どのプラットフォームでも、ODBCで実行できるすべてのことをJDBCで実行できます。

言語:-ODBCは手続き型で言語に依存しません-JDBCはオブジェクト指向で言語に依存します(Javaに固有)。

高負荷:-JDBCは高速です-ODBCは低速です

ODBCの制限:これはリレーショナルAPIであり、長方形または2次元形式で表現できるデータ型でのみ機能します。 (Oracleの空間データ型などのデータ型では機能しません)

[〜#〜] api [〜#〜]:JDBCAPIは自然なJavaインターフェイスであり、ODBC上に構築されているため、JDBCは基本機能の一部を保持していますODBCの

3

環境全体ではなく、ドライバーを比較していますか?

ODBC Cプログラムを使用していることがわかります。JDBCのテストに使用しているのと同じプログラムでODBCドライバーを試してください。ただし、JDBC-ODBCブリッジを使用することがよくあります。もちろん、ブリッジはさらに時間を追加します。また、JMBはJITを使用することを忘れないでください。アプリケーションの動作時間が長いほど、パフォーマンスが向上します。

パフォーマンスは重要ですが、私にとってはるかに重要なのはドライバーの安定性です。さまざまなODBCドライバーで問題が発生し、現在はJDBCドライバーを好みます。しかし、ODBCドライバーでさえ、高負荷のマルチスレッドサーバーで何ヶ月も動作できます。 。

2
Michał Niklas

ODBC vs JDBC パフォーマンスについてのこれらのタイプの議論は、 JPA vs Hibernate に関する議論とは異なり、常に少し外れています。

Cで記述されたODBCドライバーを使用するC++アプリは、データベースとのやり取りのごく一部で非常に高速になる可能性があります。同様に、特定のデータベース用に最適化されたベンダーのドライバーを使用してデータベースに接続するJavaプログラムも、非常に高速です。

ただし、データベースを使用した要求と応答のサイクルを見ると、要求の作成に伴うネットワーク遅延はAPIのオーバーヘッドよりも大幅に大きくなっています。同様に、データベースの検索、レコードの更新、またはトランザクションの存続にかかる時間は、 [〜#〜]よりもODBCを選択することで得られる効率よりも桁違いに重要になります。 ] jdbc [〜#〜]

開発中の 言語 を前提として、ベンダーが推奨する ドライバー を使用してください。また、パフォーマンスの問題はデータベース管理者とSQL開発者に解決を任せてください。これは、データベースのボトルネックを解決する場所ではありません。

0