MySQL 5.6 で時系列データを整理する方法についてご意見をお聞かせください。さまざまなセンサーからのデータを保存する必要があるプロジェクトに取り組んでいます。明確にするために、私たちはいくつかの産業施設を監視しています。それぞれは、プロセスに最も関連する情報をローカルに保存する PLC デバイス (またはステーション) によって制御されます。各センサーは plc のタグにマッピングされ、plc は定期的にこの情報を CSV 形式で FTP サーバーに送信します。ストレージ エンジンとして innoDB を選択しました。次のテーブルが用意されています。
tbl_stations (id,name)
tbl_tags (station_id, tag_id, name ... ) with (station_id, name) being the PK
tbl_data (station_id, tag_id, time, value) with PK (stations_id, tag_id, time)
PK
inテーブルは、フォームのtbl_data
高速範囲クエリを可能にすることです
SELECT * FROM tbl_data WHERE station=x and tag_id=y and time BETWEEN date1 AND date2
また、一部のタグは非常に高速にサンプリングされるため、テーブルtbl_data
は非常に急速に大きくなります。より適切に管理するために、また、通常は最新の情報にアクセスしているため、列 (タイムスタンプ)tbl_data
の範囲でパーティション分割しました。"time"
特に、年間 4 つのパーティションを使用しています。パーティショニングが有効になっている場合でも、ステーションの数が増えると、1 つのパーティションが大きくなる可能性があります。そこで、各サブパーティションにいくつかのステーションのデータのみが含まれるように、station_id でサブパーティション化することにしました。特に、この目的のために HASH パーティショニングを使用しました。
今のところ、すべてうまくいっていますが、まだ改善の余地がある場合に備えて、ご連絡をお待ちしております. 時系列データを扱うのはこれが初めてなので、何か重要なものを見逃している可能性があります。
各ステーションから次の形式でデータを受信することを忘れていました。
TAG_ID1
TIME, VALUE
TIME, VALUE
.
.
TAG_ID2
TIME, VALUE
TIME, VALUE
.
.
.
等々。このようにして、挿入はどういうわけかPK
順番に行われます。これは、私の知る限り、挿入率を高速化するのに適しています。