コンテンツにスキップ

バッチ処理

出典: フリー百科事典『ウィキペディア(Wikipedia)』

バッチ処理(バッチしょり、: batch processing)はバッチ単位で行なわれる処理である。特に以下の2つの意味で用いられる。

  1. コンピュータでひとまとまりのデータを一括して処理する方式。本項で詳述する。
  2. ひとつの設備である程度まとまった時間、または単位操作ごとに処理を区切り、原材料をこの区切りごとにまとめて投入する処理のこと。回分処理(かいぶんしょり)も同義。発酵工程やバッチ殺菌などは典型的なバッチ処理である。反対語は逐次処理または連続処理

コンピュータのバッチ処理

[編集]

コンピュータのデータ処理におけるバッチ処理は、ひとまとまりのデータを一括して処理する方式である[1]。逐次生み出されるデータを一定期間・一定量集めたものをバッチといい、このバッチ単位で処理を行なう方式がバッチ処理である。

バックアップ、フィルタリング、ソートなどの特定のデータ処理タスクは、個々のデータトランザクションで実行するには計算負荷が高く、非効率的となる場合がある。代わりに、データシステムはそのようなタスクをバッチで(まとめて)処理する。大量の反復的なデータジョブを定期的に完了するためにコンピュータが使用する方法である[2]

比較される方式として、逐次生み出されるデータをストリームとして捉え、到着したデータを順次扱うストリーム処理がある[3]。データをキューイングせず即時処理するリアルタイム処理とも比較される。

バッチ処理を直列につなぎパイプライン処理とする(パイプラインを構築する)ことがしばしば行なわれる。

MS-DOSおよびMicrosoft Windowsバッチファイルは複数のコマンド行を連続で自動実行できるようにまとめて記述したテキストファイルであり、プログラムの一種である[4]Unix系オペレーティングシステムシェルスクリプトほどの柔軟性はないものの、コマンド群を定期的に繰り返し実行する際に使われ、いずれもバッチ処理に応用される。例えば複数のソースファイルからなるプログラムをコンパイルしてリンクし、実行ファイルを生成(ビルド)するとき、プログラムを修正するたびに毎回コマンドラインシェル(コマンドラインインタプリタ)上でコンパイラに渡す複雑なオプションを指定するためのコマンドを手入力するのは骨が折れるし、途中で入力ミスをしてしまうと最初からやり直しになってしまうこともある。バッチファイルやスクリプトファイルにあらかじめコマンド群を記述しておけば、次回からはそのファイルを使って実行するだけで済み、作業を自動化することができる[注釈 1]。定期的なデータのバックアップや集計作業などにも同じことが言える。ただし、狭義のバッチ処理は単なる自動化にとどまらず、一定期間または一定量蓄積されたデータをまとめて効率的に処理することを指す。

OpenGLやバージョン11までのDirect3Dは、GPUに描画準備をさせるためのレンダーステート(合成方式などの描画設定)の変更や、描画命令を発行するためのドローコールのオーバーヘッドが大きい。スプライトフォント(文字)の画面描画(レンダリング)をする際、1つのスプライトや1つの文字を描画するたびに設定変更メソッドや描画メソッドを呼び出してしまうと、大量に描画する際のオーバーヘッドが無視できないものとなって低速化してしまう。そのため、複数のスプライトの描画リクエストを一定量キューイングしておき、同じレンダーステートや同じテクスチャを使って描画できるものはまとめてドローコールを発行するバッチ処理で効率化を図るのが一般的である。Direct3D 9/10では公式の拡張ライブラリD3DXにスプライトバッチ機能が用意されていた[5][6]。Direct3D 11上に構築されたDirect2D 1.3にも、スプライトバッチ機能が用意されている[7]

「バッチ (batch)」はプログラミングをする際、紙テープパンチカードを利用していた時代より使用され始めた言葉である。カードまたは紙テープはシステムオペレーターに渡され、オペレーターはタスクスケジューリングをし、コンピュータにカードまたは紙テープを投入していった。スケジューリングされたタスクは直ちにシステムに入れられたのではなく、一緒にまとめて投入されたので(バッチとは、複数の似ているものを1つのグループとして生産、処理すること、または一緒に集めて1つのユニットとして扱うこと。en:Batch processingより)、これらのタスクの集まりを「バッチジョブ」と呼ぶようになった[要出典]

バッチジョブは一度設定されると人間の手を煩わせることなく動作する非対話型処理である。そのため入力データもスクリプトやコマンド行パラメータを通してあらかじめ用意される。この点でユーザーの入力を必要とする対話型プログラムとは対極にある。

バッチジョブは相互対話式の思想に基づく処理の仕組みではないが、IBMCICS のようなトランザクション処理システムもテクニカルな視点から見ればバッチジョブとして動いている。もっとも、その部分はユーザーから隠れて見えない部分である。

様々な計算ジョブを制御された順番に行なう強力なユーティリティがUNIXやWindows向けに存在する。このようなユーティリティをジョブ管理システムという。基本的なジョブ管理システムはモダンなデスクトップOSやサーバーOSであれば標準ツールとして搭載されているほか、各種OS用の強力な商用パッケージも市販されている。

NECの情報管理ソフトウェアの中にInfoFrame DataBoosterという製品がある。これは通常夜間行われる日次月次のバッチ処理を高速化しようというもので、数十GB単位の大量のメモリと専用の処理アルゴリズムによって、時間のかかる中間ファイルの生成を行なわないところに特徴がある。

システム利用者が少ない・あるいはサービス提供時間外でシステム負荷が低い夜間に実行されるバッチ処理は「夜間バッチ」と呼ばれる。何らかの事情で夜間バッチが事前の想定時刻までに処理を完了できなかった場合は「突き抜け」と呼ばれることがある[8]

利点

[編集]

バッチ処理には以下のような利点がある。

  • 多くのユーザーがコンピュータのリソースを共有できる。
  • 処理をコンピュータのリソースがあまり忙しくない時間帯(多くは夜間、休日)にシフトできる。
  • 人間がついていなくてもコンピュータのリソースが暇にならないように最大限有効活用できる。
  • 高価なコンピュータをフルに活用することで費用対効果の効率向上に寄与する。
  • サービスを停止して行なうバッチ処理の場合、データの整合性を保つことが容易となる。

欠点

[編集]
  • 即時性が必要な処理には向かない。
  • 夜間バッチを使用して「突き抜け」が発生した場合、本来のサービスと合わせて負荷がかかり大規模なシステム障害を引き起こす可能性がある。

バッチ管理システム

[編集]

脚注

[編集]

注釈

[編集]
  1. ^ もっとも、ビルド作業の自動化にはMakefileMSBuild用のソリューション/プロジェクトファイルのような専用形式が使われることのほうが多い。

出典

[編集]

関連項目

[編集]