僕は社内SEなのですが、今メインで取り掛かっている仕事で、バッチの開発をやっています。
社内で動いている各システムから、また一部は手でデータを作成してこれらを元データにバッチを回すのですが、パフォーマンスが出ないことが発覚したのが約1ヶ月前。このままでは一日以上バッチを回しても終わらない試算だったので対応案を考えました。
バッチ自体は考え方はシンプルで、SQLを順々に実行して結果を中間テーブルに突っ込んで、中間テーブルを元データに次のSQLを実行して…を繰り返す設計にしていました。ところがSQLそのものの数が多いことがわざわいして前述の課題が。
SQLの数は減らせないのでデータベースであるOracleのテンポラリテーブルとマルチスレッドの処理を組み合わせてやれば「できる」ことが調査で分かったので、あとは開発者を信じお任せしました。
テンポラリテーブルはトランザクションを終了(コミットまたはロールバック)するとデータが消える、またはセッションを切るとデータが消える性格があります。どちらのモードとするかをテーブル作成時に指定します。
決して新しい技術ではなくこれまで必要にならなかったから使用しなかっただけで、使いようによっては有効だということが分かりました。
プロジェクトは大詰めに入っています。
稼働までに準備があるのでまだ安心できませんが、やるだけのことはやると年明けに誓ったのでがんばる所存です。
成功して美味しい酒を飲むために…。
社内で動いている各システムから、また一部は手でデータを作成してこれらを元データにバッチを回すのですが、パフォーマンスが出ないことが発覚したのが約1ヶ月前。このままでは一日以上バッチを回しても終わらない試算だったので対応案を考えました。
バッチ自体は考え方はシンプルで、SQLを順々に実行して結果を中間テーブルに突っ込んで、中間テーブルを元データに次のSQLを実行して…を繰り返す設計にしていました。ところがSQLそのものの数が多いことがわざわいして前述の課題が。
SQLの数は減らせないのでデータベースであるOracleのテンポラリテーブルとマルチスレッドの処理を組み合わせてやれば「できる」ことが調査で分かったので、あとは開発者を信じお任せしました。
テンポラリテーブルはトランザクションを終了(コミットまたはロールバック)するとデータが消える、またはセッションを切るとデータが消える性格があります。どちらのモードとするかをテーブル作成時に指定します。
決して新しい技術ではなくこれまで必要にならなかったから使用しなかっただけで、使いようによっては有効だということが分かりました。
プロジェクトは大詰めに入っています。
稼働までに準備があるのでまだ安心できませんが、やるだけのことはやると年明けに誓ったのでがんばる所存です。
成功して美味しい酒を飲むために…。
※コメント投稿者のブログIDはブログ作成者のみに通知されます