(57)【要約】【課題】実行時間を短くすることのできるバッチ処理装置、方法、プログラムを提供する。【解決手段】バッチ処理装置は、入力データから、指定されたデータサイズのデータを切り出し、キャッシュ利用効率を計測し、指標値を算出し、前記データサイズにおける当該指標値が所定条件を満たす場合には当該データサイズを最適データサイズとして決定し、満たさない場合には指標値が所定条件を満たすまで他のデータサイズを指定し、入力データから切り出された前記最適データサイズのデータに対して所定処理を行う。【選択図】      図１
2013125338.tif 000002
【特許請求の範囲】
【請求項１】
入力データから、指定されたデータサイズのデータを切り出す切り出し処理手段と、
前記データサイズのデータに対し、キャッシュを用いて所定処理を行うプログラム処理手段と、
前記データサイズにおける前記キャッシュのキャッシュ利用効率を計測する性能計測手段と、
前記データサイズにおける前記キャッシュ利用効率の良否を示す指標値を算出して、当該良否を判断するデータサイズ判断手段と、
前記キャッシュ利用効率が良い場合には当該データサイズを最適データサイズとして決定し、前記キャッシュ利用効率が良くない場合には、前記キャッシュ利用効率が良くなるまで他のデータサイズを指定して前記切り出し手段に出力するデータサイズ決定手段と、
を備え、前記プログラム処理手段は、前記入力データから切り出された前記最適データサイズのデータに対して前記所定処理を行うバッチ処理装置。
【請求項２】
前記データサイズ判断手段は、指定された前記データサイズにおけるキャッシュ利用効率と、その近傍のデータサイズにおけるキャッシュ利用効率との差分を前記所定のデータサイズにおける前記キャッシュ利用効率で除した値（当該値の逆数）を前記指標値として算出する請求項１に記載のバッチ処理装置。
【請求項３】
前記データサイズ決定手段は、データサイズに対するキャッシュ利用効率が極大となるデータサイズを探索するアルゴリズムを実行して前記他のデータサイズを指定する請求項１乃至２のいずれかに記載のバッチ処理装置。
【請求項４】
入力データから、指定されたデータサイズのデータを切り出す切り出し処理ステップと、
前記データサイズのデータに対し、キャッシュを用いて所定処理を行うプログラム処理ステップと、
前記データサイズにおける前記キャッシュのキャッシュ利用効率を計測する性能計測ステップと、
前記データサイズにおける前記キャッシュ利用効率の良否を示す指標値を算出して、当該良否を判断するデータサイズ判断ステップと、
前記キャッシュ利用効率が良くない場合には、前記キャッシュ利用効率が良くなるまで他のデータサイズを指定して前記切り出し処理ステップを実行し、
前記キャッシュ利用効率が良い場合には当該データサイズを最適データサイズとして決定して出力するデータサイズ決定ステップと、
前記入力データから切り出された前記最適データサイズのデータに対して前記所定処理を行う前記プログラム処理ステップと、
をコンピュータに実行させるバッチ処理プログラム。
【請求項５】
指定された前記データサイズにおけるキャッシュ利用効率と、その近傍のデータサイズにおけるキャッシュ利用効率との差分を前記所定のデータサイズにおける前記キャッシュ利用効で除した値（当該値の逆数）を前記指標値として算出する前記データサイズ判断ステップを前記コンピュータに実行させる請求項４に記載のバッチ処理プログラム。
【請求項６】
データサイズに対するキャッシュ利用効率が極大となるデータサイズを探索するアルゴリズムを実行して前記他のデータサイズを指定する前記データサイズ決定ステップを前記コンピュータに実行させる請求項４乃至５のいずれかに記載のバッチ処理プログラム。
【請求項７】
入力データから、指定されたデータサイズのデータを切り出し、
前記データサイズのデータに対し、キャッシュを用いて所定処理を行い、
前記データサイズにおける前記キャッシュのキャッシュ利用効率を計測し、
前記データサイズにおける前記キャッシュ利用効率の良否を示す指標値を算出して、当該指標値を基に当該良否を判断し、
前記キャッシュ利用効率が良くない場合には、前記キャッシュ利用効率が良くなるまで他のデータサイズを指定して前記データを切り出し、
前記キャッシュ利用効率が良い場合には当該データサイズを最適データサイズとして決定して出力し、
前記入力データから切り出された前記最適データサイズのデータに対して前記所定処理を行うバッチ処理方法。
【請求項８】
指定された前記データサイズにおけるキャッシュ利用効率と、その近傍のデータサイズにおけるキャッシュ利用効率との差分を前記所定のデータサイズにおける前記キャッシュ利用効で除した値（当該値の逆数）を前記指標値として算出する請求項７に記載のバッチ処理方法。
【請求項９】
データサイズに対するキャッシュ利用効率が極大となるデータサイズを探索するアルゴリズムを実行して前記他のデータサイズを指定する請求項７乃至８のいずれかに記載のバッチ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はバッチ処理装置、方法、及び、プログラムに関する。
【背景技術】
【０００２】
あらかじめ指定された処理を一度に行うバッチ処理は銀行などで利用されている。バッチ処理の実行時間をできる限り短縮したいという要求がある。これは、銀行などで行なわれるような夜間バッチ処理では、翌朝までに処理を完了しなければならないというような時間制限等が存在するためである。
【０００３】
引用文献１には、リソースの競合を回避してオンライン処理の遅延を抑制する並行処理システムが記載されている。引用文献２には、パイプライン処理を効率化する技術について記載されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１０−２１８２６８号公報
【特許文献２】特開２００７−２７９８２９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、バッチ処理においては、処理するデータサイズがキャッシュサイズより大きく、キャッシュ上のデータが追い出されてしまうため、キャッシュ利用効率が悪く、実行時間が長くなってしまうことがあるという課題がある。上述の技術ではこの課題を解決できない。
【０００６】
そこで、本発明は、実行時間を短くすることのできるバッチ処理装置、方法、プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
かかる目的を達成するため、本発明の一形態は、バッチ処理装置であって、入力データから、指定されたデータサイズのデータを切り出す切り出し処理手段と、前記データサイズのデータに対し、キャッシュを用いて所定処理を行うプログラム処理手段と、前記データサイズにおける前記キャッシュのキャッシュ利用効率を計測する性能計測手段と、前記データサイズにおける前記キャッシュ利用効率の良否を示す指標値を算出して、当該指標値を基に当該良否を判断するデータサイズ判断手段と、前記キャッシュ利用効率が良い場合には当該データサイズを最適データサイズとして決定し、前記キャッシュ利用効率が良くない場合には、前記キャッシュ利用効率が良くなるまで他のデータサイズを指定して前記切り出し手段に出力するデータサイズ決定手段と、を備え、前記プログラム処理手段は、前記入力データから切り出された前記最適データサイズのデータに対して前記所定処理を行う。
【０００８】
また、本発明は、入力データから、指定されたデータサイズのデータを切り出す切り出し処理ステップと、前記データサイズのデータに対し、キャッシュを用いて所定処理を行うプログラム処理ステップと、前記データサイズにおける前記キャッシュのキャッシュ利用効率を計測する性能計測ステップと、前記データサイズにおける前記キャッシュ利用効率の良否を示す指標値を算出して、当該指標値を基に当該良否を判断するデータサイズ判断ステップと、前記キャッシュ利用効率が良くない場合には、前記キャッシュ利用効率が良くなるまで他のデータサイズを指定して前記切り出し処理ステップを実行し、前記キャッシュ利用効率が良い場合には当該データサイズを最適データサイズとして決定して出力するデータサイズ決定ステップと、前記入力データから切り出された前記最適データサイズのデータに対して前記所定処理を行う前記プログラム処理ステップと、をコンピュータに実行させるバッチ処理プログラムを提供する。
【０００９】
また、本発明は、入力データから、指定されたデータサイズのデータを切り出し、前記データサイズのデータに対し、キャッシュを用いて所定処理を行い、前記データサイズにおける前記キャッシュのキャッシュ利用効率を計測し、前記データサイズにおける前記キャッシュ利用効率の良否を示す指標値を算出して、当該指標値を基に当該良否を判断し、前記キャッシュ利用効率が良くない場合には、前記キャッシュ利用効率が良くなるまで他のデータサイズを指定して前記データを切り出し、前記キャッシュ利用効率が良い場合には当該データサイズを最適データサイズとして決定して出力し、前記入力データから切り出された前記最適データサイズのデータに対して前記所定処理を行うバッチ処理方法を提供する。
【発明の効果】
【００１０】
本発明は、実行時間を短くすることのできるバッチ処理装置、方法、プログラムを提供する。
【図面の簡単な説明】
【００１１】
【図１】本発明の概要を説明する図である。
【図２】本発明の第１の実施の形態の構成の一例を示す図である。
【図３】本発明の第１の実施の形態の動作の一例を示す図である。
【図４】本発明の第１の実施の形態の動作の一例を示す図である。
【図５】本発明の第１の実施の形態の構成の一例を示す図である。
【図６】設定ファイルの一例を示す図である。
【図７】入力ファイルの一例を示す図である。
【図８】データ用のクラスのJavaプログラムの一例を示す図である。
【図９】データ読み込みクラスの一例を示す図である。
【図１０】データ処理クラスの一例を示す図である。
【図１１】バッファ出力クラスの一例を示す図である。
【図１２】本発明の第１の実施の形態の動作の一例を示す図である。
【図１３】本発明の第１の実施の形態の動作の一例を示す図である。
【図１４】本発明の第１の実施の形態の動作の一例を示す図である。
【図１５】本発明の第１の実施の形態の動作の一例を示す図である。
【図１６】データサイズと１データ当たりの実行時間の関係の一例を示す図である。
【図１７】キャッシュ効率が良いデータサイズの探索を説明する図である。
【図１８】イテレーション毎の実行時間の一例を示した図である。
【図１９】各処理のデータ処理順序と処理間のデータ転送の順序の一例を示す図である。
【図２０】第２の実施の形態の構成の一例を示す図である。
【発明を実施するための形態】
【００１２】
以下、本発明の実施の形態について、図面を用いて説明する。すべての図面において、同様な構成要素には同様の符号を付し、適宜説明を省略する。
【００１３】
なお、各実施形態の装置等を構成する各部は、制御部、メモリ、メモリにロードされたプログラム、プログラムを格納するハードディスク等の記憶ユニット、ネットワーク接続用インターフェースなどからなり、ハードウェアとソフトウェアの任意の組合せによって実現される。そして特に断りのない限り、その実現方法、装置は限定されない。
【００１４】
また、制御部はＣＰＵ（Central Processing Unit）などからなり、オペレーティングシステムを動作させて装置等の全体を制御するとともに、例えばドライブ装置などに装着された記録媒体からメモリにプログラムやデータを読み出し、これに従って各種の処理を実行する。
【００１５】
記録媒体は、例えば光ディスク、フレキシブルディスク、磁気光ディスク、外付けハードディスク、半導体メモリ等であって、コンピュータプログラムをコンピュータが読み取り可能に記録する。また、コンピュータプログラムは、通信網に接続されている図示しない外部コンピュータからダウンロードされても良い。
【００１６】
また、各実施形態の説明において利用するブロック図は、ハードウェア単位の構成ではなく、機能単位の構成を示している。これらの機能ブロックはハードウェア、ソフトウェアの任意の組み合わせによって実現される。また、これらの図においては、各実施形態の構成部は物理的に結合した一つの装置により実現されるよう記載されている場合もあるが、その実現手段はこれに限定されない。すなわち、装置等は、二つ以上の物理的に分離した装置を有線または無線で接続した複数の装置により実現されても良い。また、各構成部が物理的に分離した２つ以上の装置等として記載されている場合もあるが、その実現手段はこれに限定されない。すなわち、装置等は、ハードウェア、ソフトウェアを任意に組み合わせて物理的に結合した一つの装置により実現されても良い。
【００１７】
＜実施形態１＞
まず、バッチ処理装置の基本的な構成について説明する。図１に示すように、バッチ処理装置１００は、切り出し部１０１と、指定プログラム処理部１０２と、出力部１０３と、実行制御部１０４とから構成されている。このような構成を有するバッチ処理装置１００は概略つぎのように動作する。
【００１８】
切り出し部１０１は、巨大な入力データを所定サイズ（コミット間隔）ごとに切りだして指定プログラム処理部１０２に転送する。
【００１９】
指定プログラム処理部１０２は、切り出されたデータに対してシステム開発者が記述した指定プログラムの処理を行い、結果を出力部１０３に転送する。
【００２０】
出力部１０３は、指定プログラム処理部１０２の結果をファイルなどに出力する。
【００２１】
実行制御部１０４は、切り出し部１０１で切り出す入力データが終端に達したかを判断し、終端に達していなければ再度切り出し部１０１と指定プログラム処理部１０２と出力部１０３とを実行するように制御する。
【００２２】
上述のコミット間隔は、システム開発者等がシステム要件を考慮して決定する。例えば、コミット間隔は、バッチ処理装置１００等の障害頻度と、障害からの回復時間とのトレードオフに基づいて決定される。コミット間隔は出力部１０３において順守される値である。
【００２３】
以上を踏まえ、本発明の第１の実施形態の概要について図面を参照して説明する。
【００２４】
［概要］
図２を参照すると、本発明の第１の実施の形態におけるバッチ処理装置１００は、切り出し部１０１と、指定プログラム処理部１０２と、出力部１０３と、実行制御部１０４と、データサイズ決定部１０５と、データサイズ判断部１０７と、性能計測部１０６とを含む。
【００２５】
切り出し部１０１は、入力されたデータから、実行制御部１０４によって通知されるデータサイズ（指定データサイズ）のデータを切り出す。このデータサイズは、データサイズ決定部１０５が決定する。
【００２６】
指定プログラム処理部１０２は、切り出し部１０１が切り出したデータを入力として、実行制御部１０４から通知されるプログラムを処理する。
【００２７】
出力部１０３は、指定プログラム処理部１０２が処理したデータを入力として、実行制御部１０４から通知されるプログラム開始時に指示されたデータサイズ（コミット間隔）のデータを出力する。
【００２８】
実行制御部１０４は、切り出し部１０１と指定プログラム処理部１０２と出力部１０３の実行順序を制御する。また、実行制御部１０４は、切り出し部１０１に指定データサイズを通知する。また、実行制御部１０４は、指定プログラム処理部１０２に、処理させるプログラムを通知する。また、実行制御部１０４は、出力部１０３にコミット間隔を通知する。
【００２９】
データサイズ決定部１０５は、データサイズ判断部１０７から指示を受けて、後述するデータサイズ決定アルゴリズムに従って指定データサイズを決定し、実行制御部１０４とデータサイズ判断部１０７に、指定データサイズを通知する。
【００３０】
データサイズ判断部１０７は、指定データサイズが、キャッシュ効率の良いデータサイズであるか否かを判断する。データサイズ判断部１０７は、例えば、後述するデータサイズ判断アルゴリズムに従って、データサイズ決定部１０５から通知された指定データサイズと、性能計測部１０６から通知された性能値と、からなる複数の組に基づいて、指定データサイズにおけるキャッシュ効率の良否を判断する。
【００３１】
性能計測部１０６は、指定データサイズのデータに対し、プログラム中で指定された処理部分の性能を計測する。また、性能計測部１０６は、計測した結果である性能値をデータサイズ判断部１０７に通知する。
【００３２】
次に、図３および図４のフローチャートを参照して本実施の形態の全体の動作について詳細に説明する。
【００３３】
まず、バッチ処理装置１００は、キャッシュ効率の良いデータサイズを探索する（図３のステップ３０１）。具体的には、バッチ処理装置１００は、図３のステップ３０１において、図４のフローチャートに示す処理を行ない、キャッシュ効率の良いデータサイズを探索する。
【００３４】
図４では、まず、データサイズ判断部１０７が、現在のデータサイズのキャッシュの効率が良いか否かを既存の方法で判断する（図４のステップ４０１）。なお、データサイズ判断部１０７がキャッシュ効率を判断する一つの方法であるデータサイズ判断アルゴリズムについては後述する。データサイズ判断部１０７がキャッシュ効率が良いと判断した場合（ステップ４０１、Ｎｏ）は、処理は図３のステップ３０２へ遷移し、キャッシュ効率が良いと判断しない場合（ステップ４０１、Ｙｅｓ）は、処理は図４のステップ４０２へ遷移する。
【００３５】
次に、データサイズ決定部１０５は、入力データから切り出すデータサイズを決定する（図４のステップ４０２）。ここで、データサイズ決定部１０５は、後述するデータサイズ決定アルゴリズムに従ってデータサイズを決定する。決定されたデータサイズ（指定データサイズ）は実行制御部１０４とデータサイズ判断部１０７に通知される。
【００３６】
次に、性能計測部１０６は、以下の処理における指定データサイズのキャッシュ効率（例えば、実行時間、キャッシュミス回数、キャッシュミス率、キャッシュヒット回数、キャッシュヒット率等）の計測を開始する（図４のステップ４０３）。
【００３７】
切り出し部１０１は、入力データから、図４のステップ４０２で決定された指定データサイズのデータの切り出しを行う（図４のステップ４０４）。
【００３８】
次に、指定プログラム処理部１０２は、切り出し部１０１によって切り出されたデータに対して、実行制御部１０４から指定されたプログラムによる処理を行う（図４のステップ４０５）。
【００３９】
次に、性能計測部１０６は、性能の計測を終了する（図４のステップ４０６）。性能計測部１０６は、計測された性能値をデータサイズ判断部１０７に通知する。
【００４０】
次に、実行制御部１０４は、これまでに切り出されたデータのデータサイズがコミット間隔に達しているかを判断する（図４のステップ４０７）。データサイズがコミット間隔に達していなければ、処理は図４のステップ４０１へ遷移する。
【００４１】
データサイズがコミット間隔に達している場合、出力部１０３は、コミット間隔分のデータサイズの出力を行う（図４のステップ４０８）。その後、処理は図４のステップ４０１へ遷移する。
【００４２】
バッチ処理装置１００は、図４のステップ４０１からステップ４０８によって、プログラムを動作させながらデータサイズと性能値の複数の組み合わせを取得し、これらの複数の組み合わせを基にキャッシュ効率の良いデータサイズを探索し、キャッシュ効率の良いデータサイズ（最適データサイズ）を決定することができる。そして、バッチ処理装置１００は、最適データサイズを探索した以降は、図３のフローを順次行なう。これにより、バッチ処理装置１００は、入力データから最適データサイズを切り出してコミット間隔に達するまで順次処理を行い、コミット間隔に達した後にまとめて出力部１０３がデータ出力を行なう。
【００４３】
すなわち、まず、キャッシュ効率の良い最適データサイズの探索後（ステップ４０１、Ｙｅｓ）、処理は図３のステップ３０２へ遷移する。
【００４４】
次に、切り出し部１０１は、入力データから、図３のステップ３０１で決定された最適データサイズのデータ切り出しを行う（図３のステップ３０２）。
【００４５】
次に、指定プログラム処理部１０２は、切り出し部１０１によって切り出されたデータに対して、実行制御部１０４から指定されたプログラムによる処理を行う（図３のステップ３０３）。
【００４６】
次に、実行制御部１０４は、これまでに切り出されたデータのデータサイズがコミット間隔に達しているかを判断する（図３のステップ３０４）。データサイズがコミット間隔に達していれば、処理は図３のステップ３０５に遷移する。データサイズがコミット間隔に達していなければ、処理は図３のステップ３０２へ遷移する。
【００４７】
コミット間隔に達している場合には、出力部１０３は、コミット間隔分のデータサイズの出力を行う（図３のステップ３０５）。
【００４８】
次に、実行制御部１０４は、切り出し部１０１が切り出したデータサイズが入力データの終端まで達したかを判断する（図３のステップ３０６）。入力データの終端に達していれば、処理は終了する。入力データの終端に達していなければ、処理は図３のステップ３０２へ遷移する。
【００４９】
バッチ処理装置１００は、図３のステップ３０１からステップ３０６によって、キャッシュ効率良くプログラムの実行を行なうことができる。これは、バッチ処理装置１００が、キャッシュ効率の良いデータサイズである最適データサイズを図４のフローで決定した以降、切り出し部１０１が最適データサイズでデータを切り出し、最適データサイズで切り出されたデータに対して指定プログラム処理部１０２が処理することでキャッシュ効率を高めることができるためである。
【００５０】
また、指定プログラム処理部１０２の結果がコミット間隔に達した時に出力部１０３が出力することで、出力部１０３ではシステム要件で決められたコミット間隔分のデータの出力をすることができる。
【００５１】
［具体例］
次に、具体例を用いて本発明の構成および動作の一例を説明する。
【００５２】
図５は上述のバッチ処理装置１００の詳細な構成図であるバッチ処理システムの一例である。本例では、一般的なサーバ上でＪａｖａ（登録商標）バッチ処理フレームワークＳｐｒｉｎｇＢａｔｃｈを用いた場合の例を説明する。
【００５３】
バッチ処理システムは、バッチ処理装置６００と、フレームワークを利用するシステム開発者によって作られたシステム開発者管理データ格納部６２０とから構成される。本例では、バッチ処理フレームワークはＪａｖａ言語で作られたＳｐｒｉｎｇＢａｔｃｈであり、キャッシュ効率の良いデータサイズを探索するための機能が追加されているものとする。
【００５４】
バッチ処理装置６００は、初期化部６０１、実行制御部６０２、データ読み込み部６０３、データ処理部６０４、バッファ出力部６０５、データ出力部６０６、データサイズ決定部６０８、データサイズ判断部６０９、性能計測部６１０を含む。
【００５５】
上述のバッチ処理装置１００の構成と比較すると、データ読み込み部６０３が切り出し部１０１に対応し、データ処理部６０４が指定プログラム処理部１０２に対応し、出力部１０３がデータ出力部６０６に対応する。また、実行制御部１０４と、データサイズ決定部１０５と、データサイズ判断部１０７と、性能計測部１０６は、それぞれ実行制御部６０２と、データサイズ決定部６０８と、データサイズ判断部６０９と、性能計測部６１０に対応する。
【００５６】
システム開発者管理データ格納部６２０は、設定ファイル６２１、入力データ６２２、データ読み込みクラス６２３、データ処理クラス６２４、バッファ出力クラス６２６、データ出力クラス６２５、データクラス６２７を格納する。本例では、データ読み込みクラス６２３、データ処理クラス６２４、バッファ出力クラス６２６、データ出力クラス６２５、データクラス６２７は、Ｊａｖａ言語で作られたクラスファイルである。
【００５７】
バッチ処理装置６００の初期化部６０１は、システム開発者管理データ格納部６２０の設定ファイル６２１を読み込む。初期化部６０１は、設定ファイル６２１からコミット間隔、入力ファイル６２２、データ読み込み部６０３で処理するデータ読み込みクラス６２３、データ処理部６０４で処理するデータ処理クラス６２４、バッファ出力部６０５で処理するバッファ出力クラス６２５、プログラムで扱うデータクラス６２７を読み込む。
【００５８】
また、初期化部６０１は、コミット間隔を実行制御部６０２、データサイズ決定部６０８に指示する。
【００５９】
また、初期化部６０１は、入力ファイル６２２をデータ読み込み部６０３で読み込むデータとして設定する。
【００６０】
また、初期化部６０１は、データ読み込みクラス６２３を、読み込み部６０３で処理するクラスとして設定する。
【００６１】
また、初期化部６０１は、データ処理クラス６２４を、データ処理手段６０４で処理するクラスとして設定する。
【００６２】
また、初期化部６０１は、バッファ出力クラス６２６を、バッファ出力手段６０５で処理するクラスとして設定する。
【００６３】
また、初期化部６０１は、データ出力クラス６２５を、データ出力手段６０６で処理するクラスとして設定する。
【００６４】
実行制御部６０２は、データ読み込み部６０３、データ処理部６０４、バッファ出力部６０５、データ出力部６０６に対して処理の繰り返し回数の制御や処理順序の制御を行なう。
【００６５】
例えば、実行制御部６０２は、コミット間隔またはデータサイズ決定部６０８から指示された繰り返し回数だけデータ読み込み部６０３、データ処理部６０４、バッファ出力部６０５を実行させることで処理の繰り返し回数の制御を行なう。
【００６６】
また、実効制御部６０２は、データ読み込み部６０３が入力データの終端まで読み込んだ場合はデータ出力部６０６の実行後にプログラムを終了させる。また、実効制御部６０２は、データサイズ決定部６０８等がキャッシュ効率の良いデータサイズを探索する場合に、データ読み込み部６０３、データ処理部６０４、バッファ出力部６０５の実行を制御し、バッファ出力したデータサイズの和がコミット間隔に達した時はデータ出力部６０６を実行させ、コミット間隔に達していない場合はデータ読み込み部６０３に戻って実行を行わせる。このように、実効制御部６０２は、処理順序の制御等を行なう。
【００６７】
データ読み込み部６０３は、上述の切り出し部１０３に相当し、実行制御部６０２から指示されたサイズのデータを入力ファイル６２２から読み込む。データ読み込み部６０３は、読み込んだそれぞれのデータをデータクラス６２７のインスタンスとして生成する。データ読み込み部６０３は、データ読み込み部６０３の結果をデータ処理部６０４へ転送する。
【００６８】
データ処理部６０４は、データ読み込み部６０３の処理結果に対してデータ処理クラス６２４の処理を行う。データ処理部６０４は、データ処理部６０４の処理結果をバッファ出力部６０５へ転送する。
【００６９】
バッファ出力部６０５は、データ処理部６０４の処理結果に対してバッファへの出力を行う。また、バッファ出力部６０５は、バッファ出力部６０５の処理結果をデータ出力部６０６へ転送する。
【００７０】
データ出力部６０６は、バッファ出力部６０５の処理結果をファイル等へまとめて出力する。データ出力部６０６は、コミット間隔分のデータをまとめて出力する。データ出力部６０６は、その後、バッファを空にする。
【００７１】
データサイズ決定部６０８は、データサイズを、例えば後述のデータサイズ決定アルゴリズムで決定し、決定したデータサイズを実行制御部６０２とデータサイズ判断部６０９へ指示する。
【００７２】
データサイズ判断部６０９は、例えば後述のデータサイズ判断アルゴリズムでデータサイズを判断する。データサイズ判断アルゴリズムは、データサイズ決定部６０８で決められたデータサイズと性能計測部６１０が得た性能値との複数の組から、キャッシュ効率が良いデータサイズを判断する。
【００７３】
データサイズ判断部６０９は、キャッシュ効率が良いと判断しない場合には、データサイズを更新するようにデータサイズ決定部６０８へ指示する。
【００７４】
性能計測部６１０は、指定データサイズのデータに対し、プログラム中の指定された部分の性能を計測する。性能計測部６１０は、本例では、性能計測部６１０は、データ読み込み部６０３、データ処理部６０４、バッファ出力部６０５の一連の処理の実行時間を計測する。性能計測部６１０は、計測した結果の性能値を、データサイズ判断部６０９へ通知する。
【００７５】
設定ファイル６２１は、本例ではＸＭＬ（Extensible Markup Language）フォーマットのテキストデータである。図６は、設定ファイル６２１の一部を示す図である。
【００７６】
図６では、コミット間隔（commit-interval）が10000に設定されている。また、ファイル読み込みクラス（itemReaderParent）として、org.springframework.batch.item.file. FlatFileItemReaderが指定されている。また、内部の一行のデータの読み込み方法としてlineMapperが指定されている。また、一行のデータのトークンへの分割方法と変数への入れ込み方法（DefaultLineMapper）が指定されている。また、トークンへの分割用のクラスとして、org.springframework.batch.item.file.transform. DelimitedLineTokenizerが指定されている。更に、区切り文字としてカンマが指示され、トークンへ分割された一要素目を設定するための変数名としてname、二要素目を設定するための変数名としてcreditが指定されている。トークンへ分割された各要素をインスタンスの変数へ設定するクラスとしてorg.springframework.batch.item.file.mapping. BeanWrapperFieldSetMapperが指定されている。また、入力データを設定するクラスとして、org.springframework.batch. sample.domain.trade.CustomerCreditが指定されている。データ処理クラス６２４として、org.springframework.batch.sample.domain.trade.internal. CustomerCreditIncreaseProcessorが指定されている。データ出力クラス６２５として、org.springframework.batch.item.file. FlatFileItemWriterが指定されている。区切り文字としてカンマが用いられ、変数nameと変数creditのデータが一行のデータとして出力されるように指定されている。
【００７７】
入力データ６２２は、本実施例ではＣＳＶ（Comma Separated Values）形式のテキストデータである。図７は、本実施例における図５の入力ファイル６２２の一部を示す図である。一行のデータは、カンマ区切りで２つのトークンに分けられた文字列となっている。本例では、入力ファイルは１億行あると仮定する。
【００７８】
データクラス６２７は、データが保持する変数と処理内容を保持するクラスである。図８は、本例でのプログラム中で扱うデータ用のクラス（CustomerCredit）のJavaプログラムを示す。データクラス６２７は、インスタンス変数として、int型の変数id、String型の変数name、BigDecimal型の変数creditを持つ。メソッドincreaseCreditByは、BigDecimal型の変数sumを引数として、新しくCustomerCreditインスタンスを返す。メソッドincreaseCreditByは、新しくCusotmerCreditインスタンスを生成し、元のインスタンス変数creditの値にsumを加算した値を新しいインスタンスの変数creditとし、変数nameと変数idは元のインスタンス変数と同一の値とした新しいインスタンスを返す。
【００７９】
データ読み込みクラス６２３はデータ読み込みを行うクラスである。図９は、本例でのデータ読み込みクラス６２３の一部を示す図である。クラスFlatFileItemReaderには、データ読み込みのためのメソッドdoReadとメソッドreadLineとがある。メソッドdoReadは、メソッドreadLineによってデータを読み込み、メソッドlineMapper.mapLineによって、読み込まれたデータを、指定されたクラスのインスタンスで初期化して返す。本例では、図７の入力ファイルから、一行のデータが読み出され、カンマで区切られた一つ目のトークンが図８で示すクラスCustomerCreditのインスタンス変数nameに代入され、二つ目のトークンが変数creditに代入される。
【００８０】
データ処理クラス６２４は、指定された処理を行うクラスである。図１０は、本例でのデータ処理クラス６２４の一部を示す図である。本例では、クラスCustomerCreditIncreaseProcessorのメソッドprocess内でCustomerCreditインスタンスのメソッドincreaseCreditByを呼び出す。
【００８１】
バッファ出力クラス６２６は、指定されたバッファ出力を行うクラスである。図１１は、本例でのバッファ出力クラス６２６の一部を示す図である。本例では、クラスFlatFileWriterのメソッドwrite内でバッファ出力が行われる。バッファ出力クラス６２６は、データ処理部６０４の処理結果を１つずつ改行付きの文字列へ変換し、バッファへ追加する。
【００８２】
データ出力クラス６２５は、バッファに存在するデータをファイルに出力するクラスである。
【００８３】
図１２と図１３は、図６〜１１の設定ファイル６２１等を入力としたときのバッチ処理装置６００の実行フローの一例を示す図である。
【００８４】
図１６は本例でのデータ読み込み部６０３、データ処理部６０４、バッファ出力部６０５の一連の処理におけるデータサイズと１データ当たりの実行時間の関係を示す図である。図１６は、横軸にデータサイズ、縦軸に１データ当たりの実行時間を示している。本例では、データサイズと１データあたりの実行時間が図１６のような結果となる場合を例として実行フローを説明する。
【００８５】
図１２の実行フローでは、まず、初期化部６０１による初期化が行われる（ステップ７０１）。初期化部６０１は設定ファイル６２１を読み込む。図６の設定ファイル６２１に記述された内容から、データ読み込みクラス６２３、データ処理クラス６２５、バッファ出力クラス６２６、データ出力クラス６２４、データクラス６２７、入力ファイル６２２（図７のＣＳＶファイル）が設定され、コミット間隔として10000が設定される。
【００８６】
次に、バッチ処理装置６００が、キャッシュ効率の良いデータサイズの探索を行う（ステップ７０２）。図１３は、本例でのキャッシュ効率の良いデータサイズの探索（ステップ７０２）の詳細なフローを示す図である。
【００８７】
まず、データサイズ判断部６０９は、現在のデータサイズのキャッシュ効率が良いか否かの判断を行う（図１３のステップ７１１）。ここで、データサイズ判断部６０９は、データサイズ判断アルゴリズム（図１４参照）等によって、現在のデータサイズのキャッシュ効率が良いか否かを判断する。データサイズ判断部６０９が、現在のデータサイズのキャッシュ効率が良いと判断しない場合（ステップ７１１、Ｎｏ）には、処理はステップ７１２へ遷移し、キャッシュ効率が良いと判断した場合（ステップ７１１、Ｙｅｓ）には処理は図１２のステップ７０３へ遷移する。
【００８８】
ここで、データサイズ判断部６０９がステップ７１１で行なうデータサイズ判断アルゴリズムについて図１４を用いて説明する。
【００８９】
データサイズ判断アルゴリズムは、あるデータサイズにおけるキャッシュ効率が極大値あるいは極大値に近い値であるか否かを判断するアルゴリズムである。なお、性能計測部１０６が性能値としてキャッシュヒット率等を測定する場合には、性能値が高い方がキャッシュ効率が良いことになる。これに対し、図１６の例では、性能値として、１データ当たりの実行時間が測定されているため、性能値が小さい方がキャッシュ効率が良いことになる。すなわち本例では、データサイズ判断アルゴリズムは、現在のデータサイズが、図１６に示すグラフにおいて極小値あるいは極小値に近い性能値（この例では１データ当たりの実行時間）に対応するデータサイズであるか否かを判断するアルゴリズムである。
【００９０】
まず、データサイズ判断部６０９は、これまでに得ているデータサイズと性能値との組を用いて、後述する性能指標の算出が可能（ステップ８０１、Ｙｅｓ）である場合には、ステップ８０２の処理を行い、算出が可能でない場合には現在のデータサイズはキャッシュ効率が良いデータサイズでは無いと判定する（ステップ８０１、Ｎｏ）。データサイズ判断部６０９は、例えば、最小の性能値を持つデータサイズが存在し、かつ、最小の性能値を持つデータサイズより小さいデータサイズのデータが存在し、かつ、最小の性能値を持つデータサイズより大きいデータサイズのデータが存在する場合には、性能指標が算出可能であると判断する。
【００９１】
ステップ８０２において、データサイズ判断部６０９は、これまでのデータから性能指標を算出する（ステップ８０２）。具体的には、まず、データサイズ判断部６０９は、最小の性能値を持つデータサイズの大小近傍の２つのデータサイズとその性能値との組を取得する。この時の最小の性能値を持つ組のデータサイズをDmin、性能値をPminとする。データサイズ判断部６０９は、Dminより大きく、最も近いデータサイズをDbig、Dbigにおける性能値をPbigとする。データサイズ判断部６０９は、Dminより小さく、最も近いデータサイズDsmall、Dsmallにおける性能値をPsmallとする。
【００９２】
次に、データサイズ判断部６０９は、PbigとPsmallの小さい値を取得し、Pnearとする。最後に、データサイズ判断部６０９は、PnearとPminの差の絶対値をPminで除算した結果（あるいはその逆数）を性能指標とする。性能指標は、最小性能値Pminとその近傍のデータサイズにおけるPnearとの差が、Pminに対してどれほど差があるのかを表し、当該値が小さければ（性能指標が上述の逆数である場合には大きければ）、Pminは極小値に近い値である。
【００９３】
次に、データサイズ判断部６０９は、前ステップで算出した性能指標が閾値未満（性能指標が上述の逆数である場合には閾値以上）であれば（ステップ８０３、Ｙｅｓ）、Dminをキャッシュ効率の良いデータサイズと判断し、閾値以上（性能指標が上述の逆数である場合には閾値未満）であれば（ステップ８０３、Ｎｏ）、データサイズ判断部６０９は、Dminをキャッシュ効率が良いデータサイズとは判断しない。
【００９４】
これらにより、データサイズ判断部６０９は、データサイズDminが、キャッシュ効率の良いデータサイズであるか否かを判断することができる。データサイズ判断部６０９によって、キャッシュ効率が良いと判断されたデータサイズを最適データサイズと呼ぶ。
【００９５】
なお、データサイズ判断部６０９は、性能指標が閾値未満である場合（ステップ８０３、Ｙｅｓ）には、次のステップ８０４の処理を行っても良い。すなわち、データサイズ判断部６０９は、コミット間隔を、最適データサイズで割ったときに割り切れるか（商が自然数となり余りが生じないか）否かを判断する（ステップ８０４）。もし、割り切れれば、データサイズ判断部６０９は、データサイズを現在の最適データサイズに決定する。割り切れなければ処理はステップ８０５へ遷移する。
【００９６】
ステップ８０５において、データサイズ判断部６０９は、最適データサイズ近傍でコミット間隔を割り切れるデータサイズを探索し、当該データサイズをキャッシュ効率が良い新たな最適データサイズとして最終的に決定する（ステップ８０５）。なお、データサイズ判断部６０９が最適データサイズ近傍でコミット間隔を割り切れるデータサイズを探索した後、バッチ処理装置６００は、当該データサイズにおけるキャッシュ効率が良いか否かを再検証するために、当該データサイズに対してステップ７１２〜７１７の処理を行って、再度最適データサイズの探索を行なっても良い。
【００９７】
次に、データサイズ判断部６０９によって、現在のデータサイズがキャッシュ効率の良いデータサイズではないと判断された場合（図１３のステップ７１１、Ｎｏ）、データサイズ決定部６０８がデータサイズを決定する方法について説明する。
【００９８】
データサイズ決定部６０８は、データサイズ決定アルゴリズム（図１５参照）に従って切り出すデータサイズを決定する（図１３のステップ７１２）。データサイズ決定アルゴリズムは、図１５のステップ９０１から９０７で実行される。本例におけるデータサイズ決定アルゴリズムは、データサイズに対する性能値が極小値となるようなデータサイズを探索するアルゴリズムである。以下の方法はその１例であり、これに限定されない。
【００９９】
データサイズ決定部６０８は、これまでに得ているデータサイズと性能値との組（データサイズと、当該データサイズのデータに対して性能計測部６１０が性能を測定したときの性能値との組）＝（データサイズ、性能値）の数が２つ以上あればステップ９０３の処理を行い、１つ以下であればステップ９０２の処理を行う（ステップ９０１）。
【０１００】
ステップ９０２において、データサイズ決定部６０８は、組の数が０ならデータサイズをコミット間隔の１／２と決定し、組の数が１つならデータサイズをコミット間隔の１／４と決定して、当該データサイズを出力してステップ７１３に進む（ステップ９０２）。データサイズ決定部６０８は、ここで決定したデータサイズDmを図示しない記憶部に格納する。
【０１０１】
一方、ステップ９０３において、データサイズ決定部６０８は、これまで取得したデータサイズと性能値の組の中で最小の性能値（最小性能値）をもつ組を取得する（ステップ９０３）。
【０１０２】
次に、データサイズ決定部６０８は、ステップ９０３で取得した組のデータサイズの近傍に、当該データサイズよりも大きいデータサイズと当該データサイズよりも小さいデータサイズが存在するかを判定する（ステップ９０４）。存在しない場合、処理はステップ９０５へ遷移する。存在する場合、処理はステップ９０６へ遷移する。
【０１０３】
ステップ９０５において、データサイズ決定部６０８は、最小性能値との組であるデータサイズ（D2とする）と、その近傍に存在する大小どちらかのデータサイズ（D1とする）との差D2−D1を求め、当該差の値が正である場合にはデータサイズの増加方向に、負である場合にはデータサイズの減少方向に、新たなデータサイズを設定する（ステップ９０５）。例えば、データサイズ決定部６０８は、D2＞D1の場合は、次のデータサイズをD2＋（D2−D1）とし、D2＜D1の場合は、次のデータサイズをD2／２と設定する。データサイズ決定部６０８は、設定されたデータサイズDmを図示しない記憶部に格納する。その後、処理はステップ９０７に遷移する。
【０１０４】
一方、ステップ９０６において、データサイズ決定部６０８は、ステップ９０３で取得した最小性能値と組のデータサイズに対して、当該データサイズの大小それぞれ最近傍に存在する各々のデータサイズとそれらの性能値とからなる組を取得する。この時の最小の性能値を持つ組のデータサイズをDmin、性能値をPminとする。Dminより大きく、最も値の近いデータサイズの組のデータサイズをDbig、性能値をPbigとする。Dminより小さく、最も近いデータサイズの組のデータサイズをDsmall、性能値をPsmallとする。データサイズ決定部６０８は、PbigとPsmallのうち、Pminに近い値との組であるデータサイズを選択し、選択したデータサイズをDnearとする。データサイズ決定部６０８は、データサイズをDminとDnearの中間の値として設定する（ステップ９０６）。データサイズ決定部６０８は、設定されたデータサイズDmを図示しない記憶部に格納する。その後処理はステップ９０７に遷移する。
【０１０５】
データサイズ決定部６０８は、これまでのDmの総和と今回設定されたデータサイズDmとの和がコミット間隔を超えている場合には、これまでのDmの総和と今回決定されたデータサイズDmとの和がコミット間隔と等しい値となるように今回のデータサイズDmを決定する。例えば、コミット間隔が10000で、これまでのDmの総和が8000、今回設定されたデータサイズDmが3000である場合には、和が11000となりコミット間隔10000を越えているため、和がコミット間隔と等しい値になるようにDmを2000と決定する。一方、データサイズ決定部６０８は、これまでのDmの総和と今回のデータサイズDmとの和がコミット間隔を超えていない場合には、今回のデータサイズDmをデータサイズとして決定する（ステップ９０７）。データサイズ決定部６０８は、決定したデータサイズを指定データサイズとして実行制御部６０２に出力する。
【０１０６】
以上のステップにより、データサイズ決定部６０８がデータサイズを決定する。
【０１０７】
次に、性能計測部６１０は、決定されたデータサイズにおけるデータの性能値の計測を開始する（図１３のステップ７１３）。
【０１０８】
次に、データ読み込み部６０３は、入力データから、指定データサイズのデータの読み込みを行う（ステップ７１４）。次に、データ処理部６０４は、指定データサイズのデータの処理を行う（ステップ７１５）。次に、バッファ出力部６０５は、処理されたデータのバッファ出力を行う（ステップ７１６）。次に、性能計測部６１０は、性能の計測を終了する（ステップ７１７）。
【０１０９】
次に、実行制御部６０２は、バッファ出力までが行われたデータのデータサイズがコミット間隔に達しているか否かを判断する（ステップ７１８）。コミット間隔に達していない場合、処理はステップ７１１へ戻り、コミット間隔に達している場合、処理はステップ７１９へ遷移する。
【０１１０】
次に、データ出力部６０６は、コミット間隔のデータの出力を行う（ステップ７１９）。データサイズ決定部６０８は、これまでに記憶されたDmの総和をゼロにする。処理はステップ７１１へ戻る。
【０１１１】
以上のステップ７１１からステップ７１９を繰り返すことにより、バッチ処理装置６００は、キャッシュ効率の良いデータサイズである最適データサイズを発見することができる。
【０１１２】
以下に、図１２〜図１７を用いて具体的な動作例を説明する。
【０１１３】
図１７は、以下で説明する具体例においてバッチ処理装置６００がキャッシュ効率の良いデータサイズの探索を行った時のデータサイズと性能値の関係図である。本例ではコミット間隔が10000に設定されたとする（図１２のステップ７０１）。
【０１１４】
まず、バッチ処理装置６００は、図１２のステップ７０２においてキャッシュ効率の良いデータサイズの探索を行なう。ステップ７０２において、データサイズ判断部６０９は、現在のデータサイズのキャッシュ効率が良いか否かの判断を行う（図１３のステップ７１１）。具体的には、図１４のフローを参照すると、まず、データサイズ判断部６０９は、これまでに得たデータサイズと性能値との組から性能指標の算出が可能か否かを判断する（ステップ８０１）。データサイズ判断部６０９が性能指標を算出するためにはデータサイズとその性能値との３つの組が必要であるが、現在は組の数が０であるから、図１４のステップ８０１はＮｏとなり、処理は図１３のステップ７１２に遷移する。
【０１１５】
次に、データサイズ決定部６０８は、図１５のフローによってデータサイズを決定する。現段階ではデータサイズと性能値の組数は０であり、２つ以上存在しないからステップ９０１はＮｏとなる。そして、現段階ではデータと性能値の組数は０であるから、ステップ９０２において、データサイズ決定部６０８は、コミット間隔（10000）の半分の値のデータサイズであるD1（5000）をデータサイズとして決定する。
【０１１６】
次に、ステップ７１３〜ステップ７１７のステップにおいてD1における性能値（この例では１データ当たりの実行時間）が計測される。D1における性能値をP1（80）とする（図１７参照）。
【０１１７】
データサイズはコミット間隔に達していないため（ステップ７１８、Ｎｏ）、処理は、再びステップ７１１に戻る。
【０１１８】
これまでにバッチ処理装置６００が取得したデータサイズと性能値の組は１組（D1、P1）のみのため、データサイズ判断部６０９は性能指標を算出することはできず（図１４ステップ８０１、Ｎｏ）、先程と同様に図１５のステップ９０１はＮｏとなる。データサイズ決定部９０２は、組の数が１つであるため、コミット間隔（10000）の１／４のデータサイズであるD2（2500）をデータサイズとして決定する（ステップ９０２）。次に、ステップ７１３〜ステップ７１７のステップにおいてD2における性能値が計測される。D2における性能値をP2（65）とする（図１７参照）。
【０１１９】
データサイズはコミット間隔に達していないため（ステップ７１８、Ｎｏ）、処理は、再びステップ７１１に戻る。
【０１２０】
これまでにバッチ処理装置６００が得たデータサイズと性能値の組は２組（D1、P1）（D2、P2）のみのため、データサイズ判断部６０９は性能指標を算出することはできない（図１４ステップ８０１、Ｎｏ）。しかし、データと性能値の組の数は２つ以上となっているため、図１５のステップ９０１はＹｅｓとなり、処理はステップ９０３に遷移する。
【０１２１】
データサイズ決定部６０８は、これまでに取得したデータサイズと性能値の組の中で最小の性能値（最小性能値）をもつ組を取得する（ステップ９０３）。ここでは、P1（80）＞P2（65）であるため、最小性能値はP2（65）である。
【０１２２】
次に、データサイズ決定部６０８は、ステップ９０３で取得した組のデータサイズの近傍に、当該データサイズよりも大きいデータサイズと当該データサイズよりも小さいデータサイズがそれぞれ存在する否かを判定する（ステップ９０４）。本例では、最小性能値をもつ組（D2、Ｐ2）のデータサイズD2の近傍には、D2（2500）よりも大きいデータサイズであるD1（5000）しか存在しないため、処理はステップ９０５へ遷移する（ステップ９０４、Ｎｏ）。
【０１２３】
ステップ９０５において、データサイズ決定部６０８は、最小性能値との組であるデータサイズ（D2）と、その近傍に存在するデータサイズ（D1）との差D2−D1を求め、当該差の値が正である場合にはデータサイズの増加方向に、負である場合にはデータサイズの減少方向に、新たなデータサイズを設定する（ステップ９０５）。本例では、D2−D1＝2500-5000＜０であるため、データサイズ決定部６０８は、データサイズの減少方向に新たなデータサイズを設定する。データサイズ決定部６０８は、次のデータサイズD3を、例えばD2／２（1250）と設定する。その後、処理はステップ９０７へ遷移する。
【０１２４】
データサイズ決定部６０８は、これまでのDm（D1とD2）の総和と今回のデータサイズDm（D3）との和がコミット間隔を超えていない（D1＋D2＋D3＝5000＋2500＋1250＝8750＜10000）ため、今回のデータサイズD3（1250）をデータサイズとして決定する（ステップ９０７）。
【０１２５】
次に、ステップ７１３〜ステップ７１７のステップにおいてD3における性能値が計測される。D3における性能値をP3（68）とする（図１７参照）。
【０１２６】
データサイズはコミット間隔に達していないため（ステップ７１８、Ｎｏ）、処理は、再びステップ７１１に戻る。
【０１２７】
これまでにバッチ処理装置６００が取得したデータサイズと性能値の組が（D1、P1）（D2、P2）（D3、P3）の３つであるため、データサイズ判断部６０９は以下のように性能指標を算出することができる（図１４ステップ８０１、Ｙｅｓ）。
【０１２８】
データサイズD1、D2、D3の結果は、P1（80）、P3（68）、P2（65）の順で実行時間が大きい（すなわち、D2がDmin、D1がDbig、D3がDsmallであり、P2がPmin、P1がPbig、P3がPsmallである。また、P3はPnearである。）。そこで、データサイズ判断部６０９は、性能指標として（Pnear−Pmin）／Pmin＝（P3−P2）／P2＝（68−65）／65＝3／65を計算する（ステップ８０２）。
【０１２９】
データサイズ判断部６０９は、この値が閾値よりも小さいか否かを判定し、閾値よりも小さい値である場合には、データサイズD2はキャッシュ効率が良いデータサイズであると判断する（ステップ８０３）。例えば、閾値を5／100（５％）とすれば、3／65＜5／100であるから、ステップ８０３はＹｅｓとなる。すなわち、データサイズ判断部６０９は、P2に対応するデータサイズD2をキャッシュ効率の良いデータサイズであると判断し、D2を最適データサイズと決定する。
【０１３０】
なお、データサイズ判断部６０９は、コミット間隔（10000）を、キャッシュ効率が良いと判断されたデータサイズD2（2500）で割ったときに割り切れるか（商が自然数となり余りが生じないか）否かを判断しても良い（ステップ８０４）。本例では、10000／2500＝４となり、余りが生じないため、最適データサイズを2500と決定して、データサイズ探索のステップが終了する。
【０１３１】
次に、処理はステップ７０３へ遷移する（図１３のステップ７１１、Ｙｅｓ）。
【０１３２】
データ読み込み部６０３は、キャッシュ効率が良いと判断された最適データサイズ分（2500）のデータの読み込みを行う（ステップ７０３）。
【０１３３】
次に、データ処理部６０４は、読み込んだデータに対してデータ処理を行う（ステップ７０４）。次に、バッファ出力部６０５は、データ処理結果に対してバッファ出力を行う（ステップ７０５）。
【０１３４】
次に、データ出力部６０６は、バッファ出力までを行ったデータサイズがコミット間隔に達しているかを判断する（ステップ７０６）。コミット間隔に達していない場合、処理はステップ７０３へ戻る。コミット間隔に達している場合、データ出力部６０６はコミット間隔のデータ出力を行う（ステップ７０７）。次に、実行制御部６０２は、入力データの終端に達したか否かの判断を行う（ステップ７０８）。入力データの終端に達していない場合、処理はステップ７０３へ戻る。終端に達している場合、実行制御部６０２は処理を終了する。
【０１３５】
図１９は、本発明の適用前後での、各処理のデータ処理順序と処理間のデータ転送の順序を示す図である。図中の縦方向の細い矢印は各処理部でのデータ処理を表し、横方向の太い矢印は各処理部間のデータ転送ないしデータ出力を表し、数値は実行順序を表す。
【０１３６】
本発明の適用前には、データ読み込み部６０３からデータ出力部６０６までの各処理部はコミット間隔（例えば10000）を処理し、次の処理部へデータを転送している。一方、本発明の適用後では、データ読み込み部６０３からバッファ出力部６０５までの各処理部は、コミット間隔よりも小さいデータサイズ（例えば2500）を処理し、次の処理部へデータを転送する。また、データ出力部６０６は、コミット間隔分（10000）のデータが溜まった時にまとめて出力処理を行う。本発明では、このようにデータの処理順序が変わることで、各処理部間で転送されるデータサイズが小さくなる。
【０１３７】
図１８は、本発明の適用前後のプログラム開始から終了までのイテレーション毎の実行時間の様子を示した図である。本実施の形態によれば、例えば、プログラム開始からの１イテレーションでキャッシュ効率の良いデータサイズが発見される。バッチ処理装置６００がキャッシュ効率の良いデータサイズを探索する際には、探索のオーバヘッドによって、コミット間隔での処理を行った場合の実行時間よりも実行時間が増加しうる。しかし、残りのイテレーションが元のコミット間隔での処理を行った場合の実行時間の、例えば約６５％の実行時間で実行されるため、プログラム全体でキャッシュ効率良く処理を行うことができ、結果として全ての処理を元のコミット間隔で実行した場合に対して約６５％の実行時間で実行できる。
【０１３８】
本実施の形態によれば、このような処理によって、キャッシュ効率の良いデータサイズを探索して決定し、以後はキャッシュ効率の良いデータサイズで処理を行うことで、実行時間を短くすることのできるバッチ処理装置、方法、プログラムを提供することができる。
【０１３９】
＜実施形態２＞
次に、本発明の第２の実施の形態について図面を用いて説明する。図２０は本実施の形態のバッチ処理装置１００の構成図である。
【０１４０】
バッチ処理装置１００は、切り出し処理部１０１と、性能計測部１０６と、データサイズ判断部１０７と、データサイズ決定部１０５と、指定プログラム処理部１０２を備える。
【０１４１】
切り出し処理部１０３は、入力データから、データサイズ決定部１０５によって指定されたデータサイズのデータを切り出す。
【０１４２】
性能計測部１０６は、前記データサイズにおけるキャッシュの利用効率を計測する。
【０１４３】
データサイズ判断部１０７は、前記データサイズにおけるキャッシュの利用効率が大きいほど小さくなる指標値を算出し、当該データサイズにおける当該指標値が所定値以下であるか否かを判断する。なお、指標値は、キャッシュの利用効率が大きいほど大きくなる指標値であっても良い。
【０１４４】
データサイズ決定部１０５は、前記指標値が所定値以下である場合には当該データサイズを最適データサイズとして決定し、所定値以上である場合には前記指標値が所定値以下となるまで他のデータサイズを指定して切り出し部１０３に出力する。なお、指標値がキャッシュの利用効率が大きいほど大きく指標値である場合には、所定値以下と所定値以上とが逆になる。
【０１４５】
指定プログラム処理部１０２は、切り出し部１０３によって入力データから切り出された最適データサイズのデータに対して、システム開発者が記述した指定プログラムの処理を行う。
【０１４６】
本実施の形態によれば、このような処理によって、キャッシュ効率の良いデータサイズを探索して決定し、以後はキャッシュ効率の良いデータサイズで処理を行うことで、実行時間を短くすることのできるバッチ処理装置、方法、プログラムを提供することができる。
【０１４７】
以上、実施形態を参照して本願発明を説明したが、本願発明は上記実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解しうる様々な変更をすることができる。
【符号の説明】
【０１４８】
１００    バッチ処理装置
１０１    切り出し部
１０２    指定プログラム処理部
１０３    出力部
１０４    実行制御部
１０５    データサイズ決定部
１０６    性能計測部
１０７    データサイズ判断部
６００    バッチ処理装置
６０１    初期化部
６０２    実行制御部
６０３    データ読み込み部
６０４    データ処理部
６０５    バッファ出力部
６０６    データ出力部
６０８    データサイズ決定部
６０９    データサイズ判断部
６１０    性能計測部
【図１】
2013125338.tif 000003
【図２】
2013125338.tif 000004
【図３】
2013125338.tif 000005
【図４】
2013125338.tif 000006
【図５】
2013125338.tif 000007
【図６】
2013125338.tif 000008
【図７】
2013125338.tif 000009
【図８】
2013125338.tif 000010
【図９】
2013125338.tif 000011
【図１０】
2013125338.tif 000012
【図１１】
2013125338.tif 000013
【図１２】
2013125338.tif 000014
【図１３】
2013125338.tif 000015
【図１４】
2013125338.tif 000016
【図１５】
2013125338.tif 000017
【図１６】
2013125338.tif 000018
【図１７】
2013125338.tif 000019
【図１８】
2013125338.tif 000020
【図１９】
2013125338.tif 000021
【図２０】
2013125338.tif 000022