今まで RDBMS しか使ったことがないので、InfluxDB の基本的な概念についてメモしておきます。
公式のドキュメントは以下です。
また、他には以下のページが体系的にまとめられていて分かりやすかったです。
これらをベースにまとめていますが、間違ったことを書いているかもしれないので、その場合は指摘していただけると助かります。
現在勉強中なので、適宜更新していくと思います。
時系列データベース
InfluxDB は時系列データベースの1つです。
時系列データベース (Time Series Database : TSDB) とはその名の通り、時系列データを扱うのに特化した DB で、NoSQL の一種だそうです。
具体的には以下のように時系列で変化していくようなデータを扱う場合に使われることが多いそうです。
- イベントログ
- センサー情報
RDBMS と比較した場合の TSDB の特徴は、例えば以下のようなものがあるらしいです。
- スキーマレスなため、データの増減に柔軟に対応できる
- 古いデータを自動で削除することができる
- 時間ごとの処理を定義できる
用語
公式にも説明があります。
Database
RDBMS では Database はテーブルの集まりであり、Database 自体が1つのインスタンスのことを指します。
InfluxDB でも基本的な概念は同じですが、以下の点が異なるようです。
- 1つの InfluxDB インスタンスで複数の Database をホストできる
- Database は複数の Measurement をホストする
うーん、いまいちピンとこない・・・。
Tags と Fields
値が格納される場所で、RDBMS でいえばカラムに相当します。
この2つの一番の違いは、Tags にはインデックスが付加され、Fields にはインデックスが付加されないことです。
Tags は、Measurement におけるデータを定義する付加情報と見なすことができます。
Tags はデータに関する追加情報を提供しますが、データそのものは提供しません。
一方、Fields はただのデータです。
Tags と Fields の使い分けは以下のような感じらしいです。
- RDBMS でインデックスされるようなデータは
Tags
- Measurement に対する付加的な情報は
Tags
- それ以外は
Fields
Tags と Fields はどちらもキー・バリュー (key=value
) で定義され、それぞれ Tags Key
Tags Value
Fields Key
Fields Value
と呼ばれます。
また複数のキー・バリューをまとめてセットと呼び、それぞれ Tags Set
Fields Set
と呼ばれます。
つまり、以下です。
Tags Set
はTags Key
Tags Value
のコレクションFields Set
はFields Key
Fields Value
のコレクション
Timestamp
日時です。
時系列データベースでは全ての情報に Timestamp が存在します。
Point
ある時刻におけるデータの集まりで、以下のデータから構成されます。
- Timestamp
- 所属する Measurement
- Tags Set (必須ではない)
- Fields Set
Point は RDBMS でいえばレコードに相当します。
InfluxDB ではこの Point でデータを格納していくようです。
Measurement
Tags, Fields, TimeStamp のコンテナであり、RDBMS でいえばテーブルに相当します。
(しかし、後述の Series も RDBMS のテーブルだと説明しているサイトもあり、いまいちよくわかりません。)
Measurement の名前はそこに含まれる Fields を説明したものにするようです。
Retention policy
データの保存期間のことです。
デフォルトは autogen
で、永続的に保存されるようになっているそうです。
Series
Tags, Measurement, Retention policy の組み合わせで定義されるデータ系列のことです。
例えば、特定の Tags で複数の Measurement からデータ系列を抽出するというような使い方をするようです。
実際に使っていくにあたり
Measurement と Tags の使い分け
例えばリソースモニターのようなものを考えたとき、以下のようにするのが望ましいようです。
CPU
メモリー
ネットワーク
などの区別は Measurement で行うCPU1
CPU2
のような区別は Tags で行う
参考 URL
- https://docs.influxdata.com/influxdb/v1.7/concepts/
- https://blog.web-apps.tech/play_influxdb/
- http://devconnected.com/the-definitive-guide-to-influxdb-in-2019/
- https://blue1st-tech.hateblo.jp/entry/2016/10/18/232018
- https://kakakakakku.hatenablog.com/entry/2018/03/11/224442
- https://yakst.com/ja/posts/4931
- https://kapibara-sos.net/archives/705
- https://qiita.com/dedepi92/items/eaf9f012cc79f784f2d5
- https://yakst.com/ja/posts/4931