私が取り組んでいるシッククライアントプロジェクトの場合、データベース(IBM iシリーズ)にリモートで接続し、SQL関連のいくつかのタスクを実行する必要があります。
Download/Update a set of local/offline 'control' data
-このデータは、気付かれずに実行間で変更された可能性があります。On command, download data from multiple (15-20) tables and store separately into a single Java object.
テーブルの名前はわかっていますが、スキーマ名は実行ごとに変更され、実行間で変更される可能性があります(私が知る限りPreparedStatements
、スキーマを動的に挿入することはできません)。結合/結合などを使用してこれらすべてのクエリを1つとして実行することを検討しましたが、プロジェクトでは、(1つの大きな結合された塊ではなく)テーブルデータをメモリ内で分離する必要があります。Perform between 2 and 100+ repetitions of (2)
最後の要因は、これを可能な限り最も古いコンピューターでJava 1.5を使用する高遅延(ダイヤルアップの可能性がある)ネットワーク接続で実行する必要があることです。
現在、動的に構築された15〜20を実行PreparedStatements
していますが、これはかなり非効率的であることがわかっています(クヌースの時期尚早な最適化を回避するために、測定しました)。
これらのタスクを実行するための最も効率的でエラー耐性のある方法は何でしょうか?
私の考え:
- に関して
(1)
は、テーブル全体を新しいテーブルと照合する以外にまったくわかりません。その時点で、新しい(場合によっては変更されていない)テーブルをダウンロードして古いテーブルを置き換えるだけでよいと思いますが、これには時間がかかります。 - For
(2)
:理想的には、ステートメントの配列に似たものを作成し、それらをすべて一度に送信して、データベースに内部クエリごとSELECT
に1つを返すようにすることができます。ResultSet
しかし、私が理解していることから、複数のオブジェクト を返すStatement
こともサポートしていません。PreparedStatement
ResultSet
- 最後に、私が考えることができる最善の方法は、いくつかの操作
(3)
をバッチ処理することです。(2)