長文の質問ですいません。
最大20台程度のPLC(シーケンサ)のデバイスログを格納するテーブル設計について質問です。
●デバイス
ビットデバイス X, Y, M など ON/OFF値を16点単位で保存
ワードデバイス D, W など 0000h~FFFFh値
取得するデバイスの種類や点数はPLCによって異なり、途中で変更もあります
※1PLC最大で、ビット値:160点(10ワード)、ワード値:20点程度
例:Y0010~Y002F, M0016~M0063, D0100~D0109,D0201,D0209
●サンプリング
周期ごとに対象デバイスの値をまとめて保存します
周期は1分単位でPLCによって異なります
収録期間は5年以上
●参照用途
任意の期間のPLCデバイスログのグラフ表示/CSV出力
※ビットデバイスは1点単位で選択
※複数PLCのログを同時に参照する必要はなし
素人ながら以下のようなテーブル構成を考えていますが、いまいちスッキリしません。
■PLC一覧 plc_list ( plc_id smallint interval_sec int // 収録周期秒 title varchar(64) // PLC名称 ) ■デバイス種別 plc_device ( device_id smallint device_type varchar(8) // X, Y, M など名称 data_type smallint // 0=BIT, 1=WORD ※ビット値を16点のワードで持つ場合の判定用 ) ■ログ(親) plc_log ( log_id int plc_id smallint log_date datetime // 収録時刻 ) ■ログ(子) plc_log_data ( id int // 不要? log_id int device_id smallint // デバイス種別 device_no smallint // デバイス番号 value smallint // ログ値 )
期間が数年となると件数もかなりになり
・例:10件×1分×20PLC 1日:28万件、1年:1億件
検索絞り込み時の負荷が気になります。
どのようなテーブル構成にすべきかご意見下さい。
例えば
- ビットデバイスの定義をどうするか(1点単位または16点の16ビット値など)
- ログテーブルは1つにするか、PLC個別にするか
などです
また、INDEXはどう設定するのが良いでしょう。
よろしくお願いします。