バッチ処理とは
バッチ処理は大量の反復的なデータジョブを定期的に完了するためのコンピューターが使用する方法です。
バックアップ、フィルタリング、ソートなどの特定のデータ処理タスクは、個々のデータトランザクションで実行するには計算負荷が高く、非効率的となる場合があるので、そのようなタスクをバッチで処理します
まあ簡単に言えば、バッチ処理とは“一定量の(あるいは一定期間の)データを集め、一括処理するための処理方法です。
バッチ処理の歴史
バッチ処理の歴史は汎用コンピューター(※1)時代まで遡ります。
今でこそ業務で使用するコンピューターは複雑なネットワークによって繋がっていますが、汎用コンピューター時代ではネットワークで共有するのではなく端末を共有するのが当たり前でした。
当時は端末自体かなり高価かつ貴重なものだったので、「計算機センター」といった特別な施設にのみ配備されていたのです。
汎用コンピューターにて業務データを処理する際は、都度データを運んでいては非効率的であるため、ある程度データ量が集まった段階で処理を依頼していました。
故にバッチ処理は“一括処理”とも呼ばれることがあります。
なるほどー
そんな歴史があったんですね
なぜバッチ処理を使うのか?
効率的にするため
処理の流れ
1.処理の呼び出し
2.メモリの準備
3.データの読み込み
4.処理の実行
5.エラーハンドリング
6.メモリの解放
バッチ処理
一括して処理するために一度で大量のデータをメモリに読み込みます。
そのため、メモリの使用量が増加し、システムのリソース(メモリ、CPU、ディスク容量など)に影響を与えます。
また、一括して処理が行われるため、処理時間も一定の時間がかかる場合もあります。
個別処理
個別のデータごとにメモリを確保し、処理を行うため、一度に処理するデータの量に応じてメモリ使用量が変動します。そのため、バッチ処理よりも柔軟にメモリを使用できる場合もあります。ただし、個別のデータ処理には処理単位ごとにメモリの割り当てや解放のオーバーヘッドが発生するため、処理速度が若干遅くなる可能性もあります。
例えば、人気記事の月次ランキング機能は、アクセスごとに集計するのは非効率です。このような場合は、毎月決まったタイミングでバッチ処理を起動し、上位10件のリストを作成することによって高速なレスポンスを実現します。
メールを一斉送信する場合は、Webの画面で受け付けて送信後にレスポンスを返す実装にすると、リクエストしたユーザを長い時間待たせてしまいます。このような場合は、リクエストによってバッチ処理を開始し、ユーザにレスポンスを返します。裏側のバッチ処理でメールを送信すれば、ユーザを待たせずにレスポンスを返すことができます。
読み出す際の処理をできる限り抑えるために、事前に表示するデータを用意したり、時間のかかる処理を裏側で実行するために、バッチ処理を書く必要が出てきます。
なるほど
上記のようにメモリの確保や解放などが一回で済むなどで素早いレスポンスを返したりできるのか
バッチ処理の基本
以下が分かりやすいです
特に勉強になったのは以下ですね
バッチ処理の抽象化
起動
パラメータの解釈
データの読み込み
データの処理
処理結果の書き出し
成功・失敗の通知
バッチ処理とトランザクション
トランザクションとは「全てが成功するか、全てが失敗するか」の原子性を持ちます。
一方、バッチ処理は一括して処理を行うことが特徴であり、複数のデータやタスクをまとめた処理を行いますが、個々のデータやタスクごとに完全なトランザクションの原子性を持つわけではありません。バッチ処理の中で一部のデータやタスクが成功し、一部が失敗することもあります。
なので理解を一緒にしてはいけないです。