Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

DB テーブル経由でプロセス間の連携を行う設計

0
Posted at

はじめに

ソケット通信などの直接通信を使わず、データベースのテーブルを介してプロセス間の連携を行う設計の備忘録です。高速なリアルタイム処理はできませんが、データベースが整合性を保証し、状態確認も容易なため、プロセス側がシンプルな実装で済み、楽です。

改訂履歴

  • 2026/04/15 : 初版公開。

本文

1. 概要

お題は生産ラインの管理システムです。レコードの状態遷移をトリガーに各プロセスが動作する設計になります。DB のテーブルがメッセージキューやステートマシンの役割を持つイメージです。

2. 処理ステップ

処理ステップは以下になります。

ステップ 処理主体 対象 トリガー 処理内容
1 上位システム連携プロセス / 生産管理アプリ 生産予定 生産予定の登録要求 生産予定テーブルにレコードを登録する
2 生産実行プロセス 生産予定 開始条件成立 対象レコードを生産実行テーブルに移行する
3 装置制御プロセス 生産実行 production_status = 0 生産を開始し production_status = 1 に更新する
4 装置制御プロセス 生産実行 生産中 current_quantity を更新する
5 装置制御プロセス 生産実行 生産完了 production_status = 2 に更新する
6 生産実行プロセス 生産実行 production_status = 2 対象レコードを生産実績テーブルに移行する
7 上位システム連携プロセス 生産実績 upload_status = 0 上位システムに送信する
8 上位システム連携プロセス 生産実績 送信成功 upload_status = 1 に更新する

3. テーブル定義の例

この例では予定開始日時を実質的な優先順位として考えています。要件によっては優先度カラムを別途持たせてもよいと思います。インデックスは予定開始日時やステータスに付与します。

3-1. 生産予定テーブル

列名 型 説明
order_id INT 主キー(シーケンス番号)
product_type_id VARCHAR 生産品種 ID
scheduled_start_at DATETIME 予定開始日時
scheduled_quantity INT 予定生産数量
created_at DATETIME 作成日時
created_by VARCHAR 作成者
updated_at DATETIME 更新日時
updated_by VARCHAR 更新者
remarks VARCHAR 備考

3-2. 生産実行テーブル

列名 型 説明
order_id INT 主キー(シーケンス番号)
product_type_id VARCHAR 生産品種 ID
scheduled_start_at DATETIME 予定開始日時
production_start_at DATETIME 生産開始日時
scheduled_quantity INT 予定生産数量
current_quantity INT 現在生産数量
production_status INT 生産実行ステータス
created_at DATETIME 作成日時
created_by VARCHAR 作成者
updated_at DATETIME 更新日時
updated_by VARCHAR 更新者
remarks VARCHAR 備考
3-2-1. 生産実行ステータス (production_status) 定義
値 説明
0 未処理
1 処理中
2 処理完了
9 異常

3-3. 生産実績テーブル

列名 型 説明
order_id INT 主キー(シーケンス番号)
product_type_id VARCHAR 生産品種 ID
scheduled_start_at DATETIME 予定開始日時
production_start_at DATETIME 生産開始日時
production_end_at DATETIME 生産完了日時
scheduled_quantity INT 予定生産数量
actual_quantity INT 最終生産数量
upload_status INT 上位送信ステータス
created_at DATETIME 作成日時
created_by VARCHAR 作成者
updated_at DATETIME 更新日時
updated_by VARCHAR 更新者
remarks VARCHAR 備考
3-3-1. 上位送信ステータス (upload_status) 定義
値 説明
0 未送信
1 送信完了
9 異常

4. メリット

この設計の一番のメリットは、プロセス間の直接的な依存関係を減らせることです。例えば、装置制御プロセスが再起動したとしても、生産実行テーブルを確認すれば、現在どの生産を処理しているのかを判断できます。また各プロセスが DB 上の状態を共有するため、プロセス間で独自の通信プロトコルを実装する必要がありません。さらに処理状態が DB に残るため、障害発生時の調査や運用監視も比較的容易です。

5. デメリット

この設計のデメリットは、リアルタイム性に限界があることです。DB のポーリングが基本となるため、監視間隔による遅延が発生します。またプロセス間の連携を DB に集約するため DB がボトルネックになる可能性があります。プロセス数や処理量が増えるほど DB への負荷も増加します。

おわりに

だいたいいつもこんな感じの古典的な設計に落ち着きます。

0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?