フォーラム: 公開討議 (スレッド #37135)

iBatisを使用したselect文発行について (2015-09-15 17:27 by バッチFW初心者 #76875)

iBatisを使用した可変パラメータによる、selectの処理速度向上についてご相談させて下さい。

terasoluna batchを使用して以下のようなシステムの構築を行っております。

1.fileChunkCollectorを使用して、会員情報入力ファイルを1件ずつ取得する。
2.blogicにて1で取得した会員情報ファイルの会員IDを元に、会員の過去購入履歴を取得する。
3.過去購入履歴から取得した購入金額を会員IDごとに集計し、会員情報出力ファイルにCSVFileLineWriterを使用して1件ずつ出力を行う。

上記の処理を実装し、動作の確認を行ったところ10Mのファイルの入出力処理に30分以上かかってしまいました。(ファイル件数は200000件ほどです)
どの処理がボトルネックになっているのか確認したところ、上記2の処理でiBatisを使用して会員情報をselectしてくる箇所で時間がかかってしまっていました。

具体的なselect手順以下となっております。

sqlMapにて以下のような定義を行う。
<select id="getNyukinData" parameterClass="java.lang.Integer"
resultClass="jp.terasoluna.batch.sample.uc0003.JB0003nyukinData">
SELECT NYUKIN FROM NYUKINTABLE WHERE ID = #value#
</select>

BLogicにて以下のように取得しています。
NyukinData nyukinData = queryDAO.executeForObject("UC0003.getNyukinData",Integer.valueOf(data.getId()) , JB0003nyukinData.class);

動作の検証を行うために、パラメータ無しで同テーブルに対してselectを発行するようにし処理速度を計測したところ処理時間が10分の1ほどに短縮されました。

使用しているDBはHSQLDBとなります。

想像でしかないのですが、パラメータ有りの場合、毎回SQLの作成・発行を行っているため時間がかかってしまっているのかと思われるのですが、このような処理を高速化するための方法をご存じの方がいらっしゃいましたらご教示お願いします。

メッセージ #76875 への返信×

Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。 ログインする