Forums: Discussion-Ouverte (Thread #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の作成・発行を行っているため時間がかかってしまっているのかと思われるのですが、このような処理を高速化するための方法をご存じの方がいらっしゃいましたらご教示お願いします。

Répondre à 76875×

You can not use Wiki syntax
Vous n'êtes pas connecté. Pour distinguer vos messages en provenance du reste, vous devez choisir un surnom. (L'unicité du surnom est pas réservé. Il est possible que quelqu'un d'autre pourrait utiliser exactement le même surnom. Si vous voulez l'assurance de votre identité, nous vous recommandons de vous connecter avant de poster.) Connexion