このページでは「バッチ処理」と聞いて何のことかよく分からない!という方のために、バッチ処理を1から分かりやすく解説します。
バッチ処理とは特定の処理を一気にまとめて実行する処理のこと。なぜ、そんな処理が必要なのか?バッチ処理をするメリットって?具体的にはどんなバッチ処理があるの?という疑問にお答えします。
IT系の仕事に就いている方であれば知らないと恥ずかしい超・基本知識です。是非最後までご覧ください。
バッチ処理とは?
バッチ処理とは、特定の処理を一気にまとめて実行する処理のことを指します。
「バッチ処理」「バッチ」と聞いたら、とりあえず大量のデータを一気に処理する何かなんだなあと思い浮かべてください。
バッチ処理の具体例
具体的にバッチ処理とは何かを考えていきます。
ここでは、あなたがシステムを開発する側にたって「給与計算システム」を作る場合を考えます。社員が毎日勤務時間を入力、勤務時間から給料を計算するシステムです。
まず、最初に作らないといけないのは社員のみんなが毎日勤務時間を入力する仕組みです。ここでは、毎日出勤時間と退勤時間、さらには休憩時間を入力できるような画面を設けます。
社員が入力した勤務時間はリアルタイムにデータベースに登録されるように設計します。
これにより、社長さんは社員がどれぐらい働いているか?を毎日確認することができます。まずは、超・簡単な勤務時間集計機能の完成です。
このようにリアルタイムに処理が行われる(社員が入力した時間がすぐにデータベースに登録される)仕組みをオンライン処理、またはそのままリアルタイム処理と呼びます。
さて、続いて月末に向けて各社員の勤務時間をもとにその月の給料を計算する必要があります。以下のような仕組みです。勤務時間データベースの値をもとに、残業代や欠勤を考慮しながら、給与額を計算。計算結果を給料データベースに登録する流れ。給料を計算するために、給与計算プログラムを開発しました。
プログラム開発後に考えておきたいのは、この給与計算プログラムをいつ動かすべきか?という点。
社員さんは毎日勤務時間を入力していますが、給料は月1回しか支払われません。ずっとプログラムを動かし続ける必要はないはずです。給料が支払われるのは月に1回なのであれば、月に1回だけこのプログラムを動かせば良い。そのために、毎月の給料日前日に1か月分の勤務時間を集計して一気に給料を計算するように設計しました。
はい。実はこれこそがバッチ処理の正体です。この給料計算プログラムは、特定の処理を一気にまとめて実行しています。その意味において、給与計算プログラムはバッチ処理と言えます。
もう一度本文冒頭の一文を再掲します。
勤務時間データベースのデータに基づいて、一気に給与額を計算する―。まさに、バッチ処理の定義と合致していますね。
郵便配達もある意味でバッチ処理の側面を持っていると言えます。
ポストへの投函はリアルタイム処理。ポストからの集荷はバッチ処理と言えます。
ポストに配達物が投函されるたびに郵便局員が集荷しにいくのは非効率ですよね。なので、 決まった時間に配達物を一気に集荷(特定の処理を一気にまとめて実行する処理=バッチ処理)を採用しています。
これで、なんとなくバッチ処理とは何か?のイメージを掴むことができたのではないでしょうか。
次の章では、バッチ処理のメリットとデメリットを説明します。さらに一歩深く理解をしておきましょう。
バッチ処理のメリット
給料計算プログラムのようにバッチ処理には、システムのリソースが空いている時間(システムが忙しくない時間)を有効活用できるというメリットがあります。
日中はたくさんの社員さんが常に勤務時間を入力し続けているので、給与計算システムは高稼働な状態です。そのため、システム全体の動き/速さは使う人の数に応じて低下していきます。
システムが処理しきれない量のデータが投入されると、最悪の場合システムがシャットダウン(サーバーが落ちる)といった事態にもなります。
一方で夜の間はほとんどの人がシステムを利用していないためシステムの処理は向上します。バッチ処理を夜間に実行するようにしておけば、処理を効率的に行うことができる(システムのリソースを効果的に活用できる)ようになるのです。これがバッチ処理の最大のメリットです。
バッチ処理は夜間に実行されることが多いのですが、夜間に実行されるバッチ処理を一般的に「夜間バッチ」と呼んだりします。
勤務時間が入力された瞬間にリアルタイムで給与額を計算(バッチ処理ではなくオンライン処理)してももちろん良いのですが、その分他の人に影響を与えてしまう(システムの速度が遅くなる)ことになります。
また、そもそも給料は月に1度しか支払われないのですから、リアルタイムで計算する必要もありません。その辺も頭に入れながらバッチ処理の仕組みを考える必要があります。
バッチ処理のデメリット
バッチ処理のデメリットは2つ。
バッチ処理のデメリット1:最新のデータが分からない
バッチ処理のデメリットはリアルタイムに結果が見えない点にあります。
もし社長さんが「今月はどれぐらい給料を払わなければいけないのだろう?」と思っても、バッチ処理が動くまではその結果が分かりません。
リアルタイム性が求められる機能にはバッチ処理は不向きです。
バッチ処理のデメリット2:プログラムの実装が難しい
バッチ処理の性質上、大量のデータを一定時間内に処理する必要があるのでその点を考慮したプログラミングが必要になります。
一般的に大量データを扱う際には、サーバー側の負荷(メモリ不足などに陥る)や実行時間の制限などを考慮しなければなりません。プログラムのコードだけでなく、サーバーやネットワークなどシステム全体への理解が重要となるため、実装のハードルが高くなるのです。
朝までに処理が終わらない(突き抜け)や、サーバーダウンを起こした場合、データは大量に存在するため被害は増大、復旧作業も凄まじいものとなります。
バッチ処理のメリットとデメリットを理解し、適切なシステム運用を行いましょう。
ITを1から学びたい方は
システムエンジニアを目指す方や、IT知識を1から身につけたい方は以下のページをご覧ください。
正直どこから学び始めればよいかわからない。どのように勉強していけば、エンジニアとしてのスキルが磨けるか?が分からない・・・という方は必見です。
システムエンジニア向けに「できるエンジニア」になる方法を1から解説しておりますので、是非ご覧ください。
#無料で読めるようにしてあります。累計12万人が参考にしていただきました!