6

ずっと前に、bcp は sybase クライアント API の特別なビットを呼び出して大量のデータをデータベースに移動する小さな C プログラムであることに気付きました。それは、速度の名の下に、チート、盗み、およびチェック制約のスキップです。よし、大賛成だ。sybase 12 では、API は C クライアント ライブラリで公開されていましたが、Java では公開されていませんでした。

私は探していましたが、sybase 15 Java クライアント ライブラリにまだ実装していると言うものは見つかりませんでした。これがsybase 15で利用可能かどうか知っている人はいますか?

4

4 に答える 4

3

BCP API を使用した Java に関するあなたのコメントには同意しません。Java と ODBC/JDBC の制限については同意しますが、Java BCP API を使用するメリットがないわけではありません。多くのJavaを使用するシステムがあり、JavaからシェルアウトしてBCPコマンドラインユーティリティを実行するのは実用的ではないか、あまり効果的ではありません.

コマンド ライン ユーティリティを実行しても、エラー レポートとデッドロックの再試行はあまり適切ではありません。また、ファイルにデータを書き込む必要があるため、操作の数が増え、プロセス全体が遅くなります。ファイル システムを持たず、tmp が小さすぎるグリッド上では、ファイルをそのように書き込めないこともあります。

速度に関しては、JBCP はネイティブ api よりも遅いですが、許容範囲内であり、挿入コマンドを繰り返し呼び出すよりも確実に高速です。

Mwillett (JBCP の著者)

于 2011-03-24T12:06:11.110 に答える
1

私はそうは思わないが、その操作をJDBC仕様に適合させることにはもっと問題があるかもしれない。

私はSourceForgeでJBCPプロジェクトを見ていますが、それについての経験はありません。

于 2010-10-05T18:16:41.603 に答える
1

答えはノーだ。

しかし、いったいなぜ大量のデータを Java からサーバーに移動したいのでしょうか? (1) Java はそのように設計されていないため、非常に遅くなります (2) ネイティブの bcp または C+bcp または perl+bcp または任意のシェル コマンド + bcp は、その周りに円を叫び、とにかくそれを置き換えます。ODBC や JDBC 経由で bcp を実行したいようなものです。

私たちはマズローのハンマーから離れ、仕事に適したツールを使用する必要があります.


詳細、コメントへの対応:

  1. ASE サーバー (クライアント サーバー スタイル) に接続する通常のプログラムは、提供されている Open Client Library を使用します。これはネイティブで、TDS パケットを効率的に移動します。接続は、一般的に入手可能な 1 インチのガーデン ホースです。C、C++、COBOL、Perl、および PowerBuilder で記述されたプログラムは、このトランスポートを使用します。

  2. ODBC (および ODBC の上に構築されているため JDBC) は、1 ミリのホースを使用してサーバーに接続する簡単な方法です。これは、Excel を使用して ASE テーブルから直接チャートを描画するなど、データ転送速度が関係ないタスクには十分に適しています。かなりの量のデータを移動する場合や、データ サーバーへの通常のアプリ アクセスにはまったく不十分です ([1] が利用可能であるという事実を「プログラマー」が知らない場合を除く)。
    .
    Java には [1] がなく、この [2] トランスポートに限定されます。

  3. bcp は、ベンダーが提供する (独自に存在する) ユーティリティ PROGRAM であり、サーバーにより緊密に接続します。これは「クライアント API の特別なビット」ではありません。「嘘やごまかし」は関係ありません。すべての制約は、タスクを実行する DBA によって指示されます。接続は 2.5 インチの消防用ホースで、一般には公開されていません。大量のデータを高速で移動できるように設計されています。サーバーと同じホストで使用すると、ホースがネットワークを介して網状にならないため、データがさらに高速に移動します。

  4. かなり後になって、ベンダーは bcp 機能をライブラリ (用語で言えば API) として利用できるようにしたため、合理的に設計されたコンパイラから呼び出すことができます。C、C++、COBOL、および Perl はそのようなものであり、PROGRAMS を生成するため、コードから直接このライブラリにアクセスできます。接続は同じ 2.5 インチの消防ホースですが、層が追加されているため、最大速度は 2 インチの消防ホースです。

(これが完全なリストであることを期待する読者への注意: ここでは詳しく説明していないオプションが他に 2 つあります。それらはサーバー間であり、このスレッドには関係がないためです)。

Java PROGRAMS は現在、ASE サーバーへの接続が 1 ミリメートルに制限されているため、bcp API を Java に提供しても意味がありません (2.5 インチの消火ホースがネットワークを介して網状になり、FLOW が 1 になるだけです)。ミリ)、それはばかげた企業です。多くの組織が何百万もの資金を Java に注ぎ込んだにも関わらず、Java のかなり長い進歩の過程で、ドリップ アンド ドロップを動かす消防署を提供するためにお金を費やした組織が一つもなかったのには理由があります。

ダックスフンドからグレイハウンドのスピードを得ることはできません。競馬場で訓練しても意味がありません。耳元で約束をささやくのをやめることができます。

第二に、Java は大きな (ソース) データセットを効率的に処理できません。そのように設計されていません。したがって、たとえJDBC の絞殺が解除されたとしても (たとえば、ネイティブの Open Client Library が実装された場合)、C、C++、COBOL、Perl、PB ほど高速にデータを移動することはできません。1 インチのホースで細流 (1/4 インチ?) でデータを移動します。したがって、その場合でも、bcp 機能を Java ライブラリに提供するのはばかげています。Java (他の優先順位を念頭に置いて設計された) に大規模なデータ転送機能が付与されている場合、これは価値があります。

Java、Java、および Java の考え方から抜け出し、ジョブに適切なツール (プログラム) を使用することが役立つ場合があります。あなたが Java の「プログラマー」である場合、少なくとも、プログラミング言語の機能と制限、および利用可能なライブラリについて理解する必要があります。元の質問はそれを完全に無視していることを示しているため、修正した投稿でそれを提供する必要がありました。

Java に限定されていないプログラマーは、大規模なデータ ソースがどこにあるかを考えます。ネットワーク間のデータ転送を最小限に抑えます。どのようなプログラムがすでに作成されていて、それを使用できるかを考えてください (地球の他の部分から隔離して独自に作成するのではなく)。そしてそれらを使用します。

最後に、理解のために、いくつかのライブラリで bcp 機能を取得して実装したとしても、「プログラム」を現実の世界に配置すると、合理的な DBA はそのトリクル速度のデータ転送のためにそれを却下し、bcp を使用します。代わりに消火ホースを使用してください。

于 2010-10-23T12:29:28.697 に答える
1

Java プログラムがもはや移植可能でなくても構わない場合は、JNI を介して任意の C ライブラリにリンクできます。これは、アプリケーションを書き直したり、別のタスクを呼び出してデータを BCP したりするよりも望ましい方法です。

アプリケーション全体を C++ で書き直したくないと思います ;-)

于 2011-04-29T20:42:31.300 に答える