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

はじめに

ソケット通信などの直接通信を使わず、データベースのテーブルを介してプロセス間の連携を行う設計の備忘録です。

高速なリアルタイム処理はできませんが、データベースが整合性を保証し、状態確認も容易なため、プロセス側がシンプルな実装で済み、楽です。

本文

1. 設計概要

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

2. 処理フロー

処理フローは以下になります。

  1. 上位システム連携プロセス、または生産管理アプリが生産予定テーブルに登録。
  2. 生産実行プロセスが開始条件を満たしたレコードを生産実行テーブルへ移動 (DELETE → INSERT)。
  3. 装置制御プロセスが生産実行レコードの生産実行ステータスを処理中に更新して生産開始。生産中は現在生産数量を更新。生産完了時、生産実行ステータスを処理完了に更新。
  4. 生産実行プロセスが完了条件を満たした生産実行レコードを生産実績テーブルへ移動 (DELETE → INSERT)。
  5. 上位システム連携プロセスが生産実績レコードを上位システムへ送信。上位送信ステータスを送信済に更新。

3. テーブル定義の例

予定開始日時カラムは優先順位と実質同じになります。要件次第では優先度カラムでも良いと思います。インデックスは予定開始日時やステータスに付与します。

① 生産予定テーブル

列名 説明
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 備考

② 生産実行テーブル

列名 説明
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 備考

生産実行ステータス (production_status) 定義

説明
0 未処理
1 処理中
2 処理完了
9 異常

③ 生産実績テーブル

列名 説明
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 備考

上位送信ステータス (upload_status) 定義

説明
0 未送信
1 送信完了
9 異常

おわりに

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

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?