なぜバッチ処理が必要なのか?
先ほどの例によって、バッチ処理の必要性は理解していただけたと思いますが、それ以外にもバッチ処理が必要とされる場面がありますので、先ほどのATMシステムの例を使いながら、以下4つにまとめます。
【1】処理性能の向上
データをまとめて処理することは、実は性能向上に非常に有効です。大量のデータを処理する場合に、バッチ処理が行われます。
ATMシステムの例では、ほかの銀行との振り込みデータのやりとりにおいて、データをまとめてやりとりすると、通信のオーバヘッドが小さくなり効率的です。1件ごとに通信を行うと、それぞれの通信ごとに伝送遅延などが発生してしまいます。
処理本来にかかる時間はまとめてやっても個別にやっても変わりませんが、待ち時間(通信、I/O(入出力処理)など)やオーバヘッド(初期化処理など)はデータをまとめて処理することでかなり削減できます。
【2】応答性能の確保
オンライン処理の応答性を確保するために、オンライン処理で行う必要がない部分をバッチ処理にすることがあります。
ATMシステムの例からすると、仮に振り込み先口座に即時に反映することが求められていない場合には、オンライン処理で実際の振り込み処理まで行う必要がありません。オンライン処理では、振り込み依頼の受け付けだけを行えれば十分です。
【3】業務とシステムの考え方の一致
企業の業務にはしばしば「締め」という概念が登場します。この締め処理を素直にシステム化するのがバッチ処理です。
ATMシステムの例において、ファイルとして外部から渡されてくる振り込み依頼データを考えてみます。これらの振り込み依頼データは、例えば1カ月間の電気料金の集計結果であったり、あるいは1カ月間のクレジットカード使用金額の集計結果であったりします。このような振り込み用の「集計作業」という業務は、月末に集計処理を行うというバッチ処理が素直なシステム化といえるでしょう。
【4】外部システムとの連携上の制約
ファイルなど外部システムとのインターフェイスが制約となって、バッチ処理が利用されることもあります。
ATMシステムの例で考えると、外部システムから送付されてきたファイルは、振り込み依頼データのまとまりです。このようなデータのまとまりを処理する場合には、オンライン処理よりもバッチ処理の方が処理の考え方が合っています。
主に上記の4つ理由によりバッチ処理はシステムを構築するうえで重要な位置を占めています。
バッチ処理は従来さまざまな方法で実装されてきましたが、最近新たに、Javaによるバッチ処理が注目されてきています。その理由を考えてみましょう。
注目されるJavaによるバッチ処理
従来のバッチ処理は、COBOL、C、PL/SQL、シェルスクリプトなどが利用されていましたが、最近、Javaによるバッチ処理が注目されています。注目の背景としては、以下の3点が挙げられると思います。
【1】Javaの普及
書店やWebを少し見てみれば分かるとおり、プログラミング言語としてのJavaは非常に普及しました。それに伴って、開発者にとっては技術情報が得やすくなったり、プロジェクトマネージャにとっては技術者を確保しやすくなったりと、良い循環が回っているといえるでしょう。
バッチ処理においても使い慣れた開発言語、技術者が確保しやすい開発言語を採用したいという要求が高まってきました。
【2】システム全体での開発言語の統一化ニーズの高まり
業務アプリケーションにおいても、オンラインWebの処理はJavaで開発されることが非常に多くなってきました。
それに伴って、バッチ処理においてもオンライン処理と開発言語を統一し、一部の処理を共有したり、あるいは同じ管理指標を使ったりということで生産性、品質、保守性の向上を目指すことができます。
【3】Java VMの性能向上とハードウェアの性能向上
インタプリタで動作していた時代の評価を引きずってしまい、Java VMは「速度が遅くバッチ処理には耐えられない」といわれてきました。しかし、Hotspotなどの技術の進化によって、性能面でもある程度の規模のシステムであれば、十分実用に耐えられるようになってきました。ハードウェアの性能向上も追い風になっています。
Javaバッチにはどんなものがあるのか?
こういったニーズの高まりを受けて、Javaにおけるバッチ処理の開発をサポートするJavaバッチフレームワークが各ベンダ製品やオープンソースとして世の中に出始めてきました。
どんなものがあるかについては、@ITの記事「バッチ処理はJavaでバッチリ?その現状とこれから」がよくまとまっています。
Javaによるバッチ処理の事例
また、実際にJavaによる大規模なバッチ処理を実現した例としては、以下のようなものが一般公開されています。このような事例からも、Javaによるバッチ処理がますます現実味を帯びてきています。
- 1日当たり1100万件の巨大バッチ(口座振替システム)をJavaで実現(日経コンピュータ 2005年1月10日号より)(日経コンピュータ 2005年1月10日号より)
- オンライン系にJavaを使っているので、管理面からバッチ・プログラムもJavaで統一した(日経システムインテグレーション 2005年7月号より)
Javaによるバッチ処理はどう作ればいいの?
このように、「バッチ処理とは何か」についてや、Javaでのバッチ処理の現状などを取り上げましたが、いかがでしたでしょうか。バッチ処理の重要性やJavaでのバッチ処理の期待感の高まりが少しは理解できたかと思います。
とはいいつつも、いくら文面でJavaバッチを取り上げたところで「そもそもバッチの処理をどうやって実装したらいいか分からないし、Javaバッチフレームワークなんてよく分からないし情報もないよ……」と思われるかもしれません。
そこで、次回からオープンソースでかつ無料で利用できる「TERASOLUNA Batch Framework for Java」を例にJavaによるバッチ処理を実際に実装してみましょう。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 20世紀のJavaの歴史と21世紀への5つの提案
[コラム]米持幸久のJava Issue(2) - 開発存続の危機で分かったSEに必要なスキル
開発現場で学べること(6) - Webと企業システムをつなぐアーキテクチャ
[連載]Webと企業システム結ぶ実践的アーキテクチャ(1)