Skip to content

OTR_BatchProcessing

nishi_74322014 edited this page Oct 27, 2026 · 1 revision

バッチ処理方式

概要

Open 棟梁でのバッチ処理(コンソール EXE)の実装方式。

  • バッチの「P 層」はコンソール・アプリの Main である。専用の基底クラスは無い。
  • B 層・D 層・引数/戻り値クラスは、オンラインと同じように使う。
  • サンプル:Samples/Bat_sample(SimpleBatch_sample、RerunnableBatch_sample など)。

詳細

基本形

static void Main(string[] args)
{
    // net10.0 では構成の初期化が必要(.NET版の初期化処理)
    GetConfigParameter.InitConfiguration("appsettings.json");

    // コマンドラインの解析(/DAP /MODE1 … 形式のヘルパがある)
    StringVariableOperator.GetCommandArgs('/', out argsDic, out valsLst);

    // 引数クラス(画面名は実行ファイルの場所、コントロール名は "-")
    var pv = new BatchParameterValue(asmLocation, "-", "UpdateAll", actionType, new MyUserInfo(...));

    // B 層を呼ぶ
    var rv = (BatchReturnValue)new LayerB().DoBusinessLogic(pv, DbEnum.IsolationLevelEnum.ReadCommitted);
    if (rv.ErrorFlag) { /* 業務例外 */ }
}

大量データのバッチの落とし穴

落とし穴 対策
全件をメモリに載せる 主キーだけを先に取得し(SELECT PK … ORDER BY PK)、本体は分割して読む
ロング・トランザクション コミット・インターバル:N 件ごとに 1 トランザクションにする
リランできない 再開位置(何件目まで済んだか)をファイルに出力し、再実行時にそこから再開する
多重化できない EXE を多重起動し、主キーの範囲などをコマンドライン引数で変える
フェッチでメモリを食う DataReader(ExecSelect_DR)、フェッチ・サイズの調整
DB との往復が多い 配列バインド(ODP.NET)、バッチ SQL、クエリ・キャッシュ(自動生成 Dao)

リラン可能なバッチの流れ

  1. 主キーの一覧を全件取得する(データ本体は持たない)。
  2. 一定件数(例:100 件)ごとに B 層を 1 回呼び、その範囲を「読む → 処理 → 書く → コミット」する。
  3. 再実行時は、処理開始位置を再開位置に差し替えて続きから実行する。

オンラインからの起動

  • 同期なら Process を起動して WaitForExit()、非同期なら起動するだけ。
  • 多重度・リトライ・結果通知が要るなら、非同期処理サービス(AsynchronousProcessingService)を使う。
  • 多重起動の排他は Semaphore / Mutex で行う。

コーディング・エージェントに任せる場合

  • スキル opentouryo-app-design(references/batch-processing.md)、opentouryo-layer-b、opentouryo-layer-d を使わせる。
  • エージェントは全件を一度に読んで 1 トランザクションで処理しがちなので、件数の見積もりとコミット・インターバルをレビューで見る。

参考


Tags: 再構築

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki
開発基盤部会 Wiki

移行管理: DONE / TODO

Clone this wiki locally