【ばっちしょり】

バッチ処理 とは?

最終更新:
💡 対象をまとめて、ジョブとして処理する

対象のデータや仕事をひとまとまりのジョブとして処理する方式。夜間や大量データに限らない実行方法、分割処理、失敗後の再開と重複防止を解説します。

📌 このページのポイント
バッチ処理:まとめた仕事を進める売上3件を集計する仮想例① 対象を決める3件の売上日付・未処理② 読込み・計算金額を合計順次・小分けも③ 出力・記録日次レポート処理状況を残す再開時は処理済みの範囲と重複を確認
対象をひとまとまりのジョブとして扱う例。開始は手動・定時・イベントなどで、全件を同時にメモリへ載せる必要はありません。出力と完了記録の整合も考えます。
ひよこ ひよこ
バッチ処理は、夜中に大量のデータを処理すること?
ペンギン先生 ペンギン先生
それも一例だけれど、夜間や大量とは限らない。たとえば対象日の売上データを集計し、日次レポートを作る仕事を一つのジョブとして扱う。処理の一件ごとに人が操作する方式とは分けて考えるよ。
ひよこ ひよこ
決まった時刻にしか開始できない?
ペンギン先生 ペンギン先生
手動、スケジュール、ファイル到着などのイベントで開始できる。ジョブをいつ始めるかを決める仕組みと、実際の読込み・計算・出力をする処理は別だ。Spring Batchも、それ自体はスケジューラではないよ。
ひよこ ひよこ
全データを一気にメモリへ載せる?
ペンギン先生 ペンギン先生
一件ずつ読んだり、まとまった単位に分割して処理したりできる。Spring Batchのチャンク処理なら、指定したまとまりごとに読込み・必要な加工・書込みを行い、トランザクションをコミットする。対象が大きくても、全件を同時に保持するとは限らない。
ひよこ ひよこ
失敗したら、最初からもう一度実行すればいい?
ペンギン先生 ペンギン先生
どこまで完了したか、出力やメール送信などが実行済みかを確認しよう。完了記録や再開位置を管理し、同じ対象を再処理しても重複した結果にならないようにする。外部への送信は、データベースのロールバックだけでは取り消せない場合もあるよ。
ひよこ ひよこ
UPSERTなら、必ず重複しない?
ペンギン先生 ペンギン先生
それだけでは保証できない。同じ値で置き換えるのか、既存の値へ加算するのかで違う。加算なら再実行で二重に増える場合がある。対象を識別するキー、更新内容、トランザクションの範囲、外部への副作用も含めて考えよう。
もっと詳しく知りたい人へ

オンライン処理は必ずリアルタイム?

利用者の要求に応答するオンライン処理と、一定の時間条件を満たすリアルタイム処理は、同じ区分ではありません。処理を開始する契機、データのまとまり、応答や完了の時間条件を分けて整理します。バッチでも締切や短い実行間隔が必要な場合があります。

.batファイルなら、全部バッチ処理?

Windowsの.batや.cmdはコマンドを記述するスクリプトファイルです。アプリを一つ起動するだけの場合も、データを集計する場合もあります。逆にPythonやJavaなどでもバッチ処理を作れます。ファイルの拡張子だけで処理方式は決まりません。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「バッチ処理」って出てきたら「対象をひとまとまりの仕事として処理する方式」と思えばだいたいOK!
📖 おまけ:英語の意味
「Batch Processing」 = まとまりを処理すること
💬 Batchはひとまとまりを意味します。ここではデータや仕事をジョブとして処理する方式を指し、Windowsのコマンドを記述した.batファイルそのものとは区別します。

参考資料

← 用語集にもどる