jConnect と iAnywhere (現SQL Anywhere) JDBC ドライバーの違い
この記事のオリジナルは、Glenn Paulley が sybase.com に 2009 年 10 月に掲載したもので、この中で Glenn は jConnect と SQL Anywhere JDBC ドライバーの違いについて述べています。
パート 1 のブログ記事でも追記しましたが、versions 12 と 16 の SQL Anywhere JDBC ドライバーでは、 JDBC 4.0 をサポートしています。
また、最新の jConnect のバージョンは 7.07 で、こちらも JDBC 4.0 をサポートしています。
パート1 のブログ記事では、SQL Anywhere で使用する場合の jConnect JDBC ドライバーと iAnywhere (現SQL Anywhere) JDBC ドライバーの違いを簡単に述べました。
また、ホワイトペーパーでは、この 2 つのドライバーのアーキテクチャー的な違いについてまとめています。
jConnect も、iAnywhere (現SQL Anywhere) JDBC ドライバーも JDBC 3.0 をサポートしています。
jConnect は、「pure Java」のソリューション (Type 4 JDBC ドライバー)で、iAnywhere (現SQL Anywhere) JDBC ドライバーは、Type 1 ドライバーです。
これは、iAnywhere (現SQL Anywhere) JDBC ドライバーが SQL Anywhere ODBC ドライバーに依存しているからで、SQL Anywhere ODBC ドライバーが適切にインストールされている必要があります。
「pure Java」のソリューションの方が、良い/速い/より堅牢であると言われることもあることから、 jConnect の方が iAnywhere (現SQL Anywhere) Type 1 ドライバーよりも良いように思われますが、深く知るにつれて、2つのソリューションの間に (1) メモリーの管理、(2) TDS ワイヤプロトコルの使用、(3) セマンティクスが違う、という大きな違いがあることを認識されると思います。
ここでは、それらについて説明します。
メモリー管理
pure Java ソリューションでは、
- 全てのオブジェクトは、Java 仮想マシンが管理します。
- Java ガベージコレクションは、自動的にクリーニングを実施するので、アプリケーションプログラマーは、不明瞭なオブジェクト、メモリーリーク、使用中のオブジェクトの消失、などについて悩む必要はありません。
残念ながら、pure Java のソリューションの弱点は、結局同じで、メモリー管理です。
アプリケーションプログラマーは、オブジェクトのライフスパンに対して、ほとんど、あるいは全くコントロールすることができません。
さらに、プログラマーは、ガーベージコレクションも、効果的にコントロールすることができません。ガーベージコレクションは、重要な時でも Kick inすることができてしまうため、再現不可能なパフォーマンス問題がランダムに発生してしまいます。
そのため、iAnywhere (現SQL Anywhere) JDBC ドライバーのようなハイブリッドのソリューションにおける最も重要な利点は、メモリー管理です。
- プログラマーは、non-Java のオブジェクトに対してフルにコントロールを維持できます。
- ガーベージコレクションは、Java オブジェクトへの non-Java リファレンスによって妨げるあるいは延期することが可能です。
しかしながら、pure Java であるがゆえ、ハイブリッドのソリューションで最も不利な点は、ご想像のとおり、これもまた、メモリー管理です。ハイブリッドのソリューションでは、non-Java オブジェクトは、明示的に管理する必要があります。
プログラムエラーは、良くてもメモリーリーク、メモリー破損、最悪の場合には、GPF になります。
もし Java オブジェクトリファレンスが、あまりにも長く保持される場合には、Java ガーベージコレクションは Kick in しません。
続きはこちら:jConnect と iAnywhere (現SQL Anywhere) JDBC ドライバーの違い – パート2
SAPの SAP SQLAnywhere製品ページはこちら