質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

1回答

450閲覧

シーケンサーのログをMySQLで保存する場合のテーブル構成

akitomo3131

総合スコア0

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

0クリップ

投稿2023/01/06 01:52

編集2023/01/06 06:13

長文の質問ですいません。
最大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はどう設定するのが良いでしょう。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuma.inaura

2023/01/06 01:59

ログテーブルが2個あるのって何故でしょう?
akitomo3131

2023/01/06 02:05

説明が不足していました。 1度の処理で1周期分の保存を行うので、時刻やplc_idを全てのログ値に持たせるのは効率が良くないかと
guest

回答1

0

その構成で良いんじゃないでしょうか。
集計が重くなってきたらまた別に集計済みテーブル的なものを定期作成する手段もあります。

インデックスの貼り方はクエリによりますが絞り込み対象の条件となるカラムに設定してはいかがでしょう。

あとデータ量が膨大になる場合のプライマリーキーはbigintで持っておくと良いかとしれません。

投稿2023/01/06 03:13

yuma.inaura

総合スコア1453

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

akitomo3131

2023/01/06 03:55

回答、ありがとうございます。 このケースのように保存件数や種別が異なる場合、 一般的に拠点(PLC)毎にログデータを分けますか。 それとも1つの巨大なログデータから拠点(PLC)IDで絞り込みますか。 あまり個別に分けるのはデータベースとしてどうなのか その辺りの経験がないので。
yuma.inaura

2023/01/06 03:59

PLCに関しては存じないのですが 一般的には同種のデータを扱うのであれば同じテーブルにすると思います
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問