RDBエンジニアから見たInfluxDB― 時系列DBってRDBとはどう違うの？

SRA OSS, Inc. 日本支社 近藤雄太

Copyright © 2021 SRA OSS, Inc. Japan All rights reserved.

1

自己紹介

近藤雄太
SRA OSS, Inc. 日本支社に勤務
主な業務はPostgreSQL の技術コンサル、サポート
最近は昨今の需要に伴い別種DBの検討、調査も→InfluxDBの調査で得られた知見が本日のお話

Copyright © 2021 SRA OSS, Inc. Japan All rights reserved.

2

本セッションの目的• 時系列DBとRDBとの違いを理解• InfluxDBの概要を理解• InfluxDBの有利なユースケースを理解

Copyright © 2021 SRA OSS, Inc. Japan All rights reserved.

3

本セッションの主な対象者

RDBの心得があり、InfluxDBや時系列DBをこれから知りたい方

Copyright © 2021 SRA OSS, Inc. Japan All rights reserved.

4

目次

1.時系列DBとは
2.InfluxDBとは3.InfluxDBを触ってみる
4.InfluxDBの特徴
5.InfluxDBの今後

Copyright © 2021 SRA OSS, Inc. Japan All rights reserved.

5

時系列DBとは

1.時系列DBとは
2.InfluxDBとは3.InfluxDBを触ってみる
4.InfluxDBの特徴
5.InfluxDBの今後

Copyright © 2021 SRA OSS, Inc. Japan All rights reserved.

6

時系列DBとは ー 定義

時系列DBとは・・・時系列データを扱うデータベース
時系列データとは・・・

ある現象において、時間が経過するにつれて変化する一連の値
時系列データの例としては、気温、株価、交通量、各種センサー値
データベース的には、時刻情報を必ず伴うデータで、時刻から紐付いた値を取得できるものとして実装

Copyright © 2021 SRA OSS, Inc. Japan All rights reserved.

7

時系列DBとは ー 利用目的

時系列DBに求められる要素• 時系列に沿ったデータを効率な操作・管理• 秒単位以下で読み書き可能なパフォーマンス
• リアルタイムデータ解析
時系列DBが実際に利用されている例••

IoT センサーデータ管理
金融データ解析

Copyright © 2021 SRA OSS, Inc. Japan All rights reserved.

8

InfluxDBとは

1.時系列DBとは
2.InfluxDBとは3.InfluxDBを触ってみる
4.InfluxDBの特徴
5.InfluxDBの今後

Copyright © 2021 SRA OSS, Inc. Japan All rights reserved.

9

InfluxDBとは ー 概要

InfluxDB 基本情報
ライセンス

MIT (ただし、クラスタ機能は商用)

開発元

InfluxData主導,コントリビュータは400名程度

実装言語

Go

初版のリリース日

2016-09-08

バージョン

1系が主流、2系が最近リリース時系列DBで人気1位 (db-engines.com調べ)

Copyright © 2021 SRA OSS, Inc. Japan All rights reserved.

10InfluxDBを触ってみる

1.時系列DBとは
2.InfluxDBとは3.InfluxDBを触ってみる
4.InfluxDBの特徴
5.InfluxDBの今後

Copyright © 2021 SRA OSS, Inc. Japan All rights reserved.

11

InfluxDBを触ってみる ー 構築

簡単InfluxDB構築
Docker HubにInfluxDB公式イメージあり

Dockerコマンドで即利用可能# docker run --name=influxdb -d -p 8086:8086 influxdb
コマンドの意味は• influxdbイメージを起動• コンテナ名はinfluxdb (--name)• コンテナ内部のポート8086をホストのポート8086に転送 (-p)• デーモンとして起動 (-d)
Copyright © 2021 SRA OSS, Inc. Japan All rights reserved.

12

InfluxDBを触ってみる ー 接続

InfluxDBに接続• influxコマンドインタフェースを起動し、クエリを入力できる状態にする# docker exec -it influxdb influx>• データベースを作成し、以降使用することを宣言> CREATE DATABASE mydb
> USE mydb

次はデータを入力、とその前にCopyright © 2021 SRA OSS, Inc. Japan All rights reserved.

13

InfluxDBを触ってみる ー データ構造

InfluxDBの扱うデータはRDBと以下の対応付けが可能

RDB

Table

ColumnColumnColumnColumnColumn

Row

Row
Row

InfluxDBTime

Measurement
TagA

TagB

FieldA

FieldB

Point
Point
Point
Copyright © 2021 SRA OSS, Inc. Japan All rights reserved.

14InfluxDBを触ってみる ー データ構造(データ単位)

InfluxDBの扱うデータはRDBと以下の対応付けが可能

RDB

Table

ColumnColumnColumnColumnColumnRDBのデータは行(row)が単位

FieldB

InfluxDBのデータはPointが単位

Row

Row
Row

InfluxDBTime

Measurement
TagA

TagB

FieldA

Point
Point
Point
Copyright © 2021 SRA OSS, Inc. Japan All rights reserved.

15

InfluxDBを触ってみる ー データ構造(データ属性)

InfluxDBの扱うデータはRDBと以下の対応付けが可能

RDB

Table

ColumnColumnColumnColumnColumnRow

RDBのデータの属性は列(column)

Row
Row

InfluxDBTime

Measurement
TagA

TagB

FieldA

InfluxDBのデータの属性は3種類
FieldB

Point
PointTime:タイムスタンプ情報
Tag:インデックス用データ
Field:実際のデータ

Point
Copyright © 2021 SRA OSS, Inc. Japan All rights reserved.

16

InfluxDBを触ってみる ー データ構造(データのグループ)

InfluxDBの扱うデータはRDBと以下の対応付けが可能

RDB

Table

ColumnColumnColumnColumnColumnRow

RDBのデータのグループはテーブル(table)

Row
Row

InfluxDBTime

Measurement
TagA

TagB

FieldA

FieldB

Point
Point

InfluxDBのデータのグループはMeasurement※ただし、実際はMeasurementはPointに含まれる要素です

Point
Copyright © 2021 SRA OSS, Inc. Japan All rights reserved.

17

InfluxDBを触ってみる ー データ入力・参照

SQLと似た書式のクエリ
データの入力にはINSERT, 参照にはSELECT• データを入力> INSERT cpu,host=serverA,region=Japan value=0.64

Measurement, Tag, Fieldの順に記載• データを参照> SELECT * FROM cpu
name: cpu
timehost region value------- ------ ----2020-06-20T13:12:54.391399679Z serverA Japan 0.64
Copyright © 2021 SRA OSS, Inc. Japan All rights reserved.

18

InfluxDBの特徴

1.時系列DBとは
2.InfluxDBとは3.InfluxDBを触ってみる
4.InfluxDBの特徴
5.InfluxDBの今後

Copyright © 2021 SRA OSS, Inc. Japan All rights reserved.

19

InfluxDBの特徴 ー CRUDRDBはCRUD、InfluxDBはCR-ud

時系列データは一度書き込まれたデータを更新することが稀

データの更新(Update)、削除(Delete)を意図的に制限し、作成(Create)、読み取り(Read)のパフォーマンスを優先する
設計

Copyright © 2021 SRA OSS, Inc. Japan All rights reserved.

20

InfluxDBの特徴 ー CRUD ー Update(更新)
データの更新について
UPDATE文は用意されていない
同一のタイムスタンプとタグを持ったデータをINSERTすることで更新される
タイムスタンプ、タグの更新は不可能> SELECT * FROM cpu2
name: cpu2
time
host region value------- ------ ----1614763935044132135 serverA Japan 0.64
> INSERT cpu2,host=serverA,region=Japan value=0.75
1614763935044132135> SELECT * FROM cpu2
name: cpu2
time
host region value------- ------ ----1614763935044132135 serverA Japan 0.75
Copyright © 2021 SRA OSS, Inc. Japan All rights reserved.

21

InfluxDBの特徴 ー CRUD ー Delete(削除)
データの削除についてSQLと同様にDELETE文で削除可能
ただし、WHERE句にフィールド値を指定不可能
他に、リテンションポリシーにより一括削除がある（後述）> SELECT * FROM cpu2
name: cpu2
time
host region value------- ------ ----1614763935044132135 serverA Japan 0.75
> DELETE FROM cpu2 where value = 0.75;
ERR: shard 3: fields not supported in WHERE clause during deletion> DELETE FROM cpu2 where host = 'serverA';> SELECT * FROM cpu2;>
Copyright © 2021 SRA OSS, Inc. Japan All rights reserved.

22

InfluxDBの特徴 ー クエリ言語
RDBはSQL、InfluxDBは独自のクエリ言語
SQLの構文に似せた「InfluxQL」
SELECT * FROM “cpu" WHERE time > now() - 1h

関数型言語パターンの「Flux」
from(bucket: “…”)|> range(start:-1h)|> filter(fn: (r) => r._measurement == “cpu”
Fluxの機能的メリット•
Tagを用いた並び替えのサポート•
結合（JOIN）操作のサポートなど
Copyright © 2021 SRA OSS, Inc. Japan All rights reserved.

23

InfluxDBの特徴 ー トランザクション（ACID特性）

RDBにはトランザクションがあり、InfluxDBにはトランザクションがない
トランザクションによるオーバヘッドを避けることでパフォーマンス向上↑
しかし、ACID特性を保証されることが前提のユースケースでは使えない
ACID特性RDB

InfluxDB

特性の説明

原子性
Atomicity○☓

処理は完全に実行されるか全く実行されないのどちらかとなる一貫性
Consistency○☓

処理結果に依らず、データベースの整合性が保たれる

独立性
Isolation○☓

複数の処理を実行しても単独に実行した場合と同じ処理結果

耐久性
Durability○○(WALにより実現)障害が発生してもデータが失われない

Copyright © 2021 SRA OSS, Inc. Japan All rights reserved.

24InfluxDBの特徴 ー 時系列データ管理

RDBのデータ管理は汎用的、InfluxDBのデータ管理は時系列データ特有

短時間に大量のデータが保存される特性に合わせて以下の機能が標準搭載• データ圧縮• 古くなった生データの定期削除• 生データの要約

Copyright © 2021 SRA OSS, Inc. Japan All rights reserved.

25

InfluxDBの特徴 ー 時系列データ管理（データ定期削除）

リテンションポリシー（Retention Policy）
データの保持期間設定をデータベース内に作成
メジャーメントはいずれかのリテンションポリシーに属する
デフォルトでは、保持期間が無限の”autogen”という名前のポリシーに所属するデータを12時間分（１時間毎に１時間分削除）保持するポリシー> CREATE RETENTION POLICY policy1 ON mydb DURATION 12h SHARD
DUPLICATION 1h REPLICATION 1> INSERT INTO policy1 measurement1 tag1=123, field1=456

データベース作成時にデフォルトのポリシーを設定することも可能> CREATE DATABASE mydb WITH DURATION 12h SHARD DUPLICATION
1h REPLICATION 1 NAME policy_1Copyright © 2021 SRA OSS, Inc. Japan All rights reserved.

26

InfluxDBの特徴 ー 時系列データ管理（データの要約）

コンティニュアスクエリ(Continuous Query)
定期的にクエリを実行（クエリ結果をメジャーメントに格納）するもので、生データを要約してデータ量を減らすことを目的に利用
GROUP BY time()で設定した時間ごとに実施される30分間の平均値を残すためのコンティニュアスクエリ
CREATE CONTINUOUS QUERY continuous_query_1
ON mydb
BEGIN
SELECT mean(value) INTO average_cpu FROM cpu
GROUP BY time(30m), region
END

Copyright © 2021 SRA OSS, Inc. Japan All rights reserved.

27

InfluxDBの特徴 ー データ可視化

Chronograf
InfluxDB 1.xプラットフォームで用意されたユーザインタフェース

Grafana
InfluxDBを含む16種のデータソースを公式サポート(v7.3現在)

Copyright © 2021 SRA OSS, Inc. Japan All rights reserved.

28

InfluxDBの特徴 ー データ可視化(Chronograf)

簡単Chronograf構築
Docker HubにChronograf公式イメージありinfluxDBイメージと連携してすぐにChronografを利用可能
コンテナ間ネットワーク作成# docker network create influxdb
influxdbコンテナ起動（先に起動したinfluxdbコンテナは削除しておく）# docker run --name=influxdb -d -p 8086:8086 --net=influxdb influxdb
chronografコンテナ起動# docker run -p 8888:8888 --influxdb-url=http://influxdb:8086 chronograf

Copyright © 2021 SRA OSS, Inc. Japan All rights reserved.

29

InfluxDBの特徴 ー データ可視化(Chronograf)
docker コンテナを起動したホスト（ポート:8888）にWebブラウザでアクセスすると、

Copyright © 2021 SRA OSS, Inc. Japan All rights reserved.

30

InfluxDBの特徴 ー データ可視化(Chronograf)
データを入力すると、> INSERT cpu,host=serverA,region=Japan value=0.64> INSERT cpu,host=serverA,region=Japan value=0.98> INSERT cpu,host=serverA,region=Japan value=0.21

Copyright © 2021 SRA OSS, Inc. Japan All rights reserved.

31

InfluxDBの特徴 ー 時系列データ解析

RDBは汎用的な数学関数のみサポート
InfluxDBはさらに時系列データ解析用関数をサポート
InfluxDBのサポートする解析用関数の一部• 累積合計• ヒストグラム• 各種移動平均• パーセンタイル• サンプル抽出• 時空間データ用計算

Copyright © 2021 SRA OSS, Inc. Japan All rights reserved.

32

InfluxDBの特徴 ー 時系列データ解析（累積合計）

累積合計 cumulative_sum()

SELECT value FROM mydb.autogen.cum→ 1, 5, 3
SELECT cumulative_sum(value) FROM mydb.autogen.cum→ 1, 6(=1+5), 9(=1+5+3)
Copyright © 2021 SRA OSS, Inc. Japan All rights reserved.

33

InfluxDBの特徴 ー 時系列データ解析（移動平均）
移動平均 moving_average()

SELECT value FROM mydb.autogen.mov→ 1, 10, 5, 1, 20, 18, ..
SELECT moving_average(value, 5) FROM mydb.autogen.mov→ 7.4 (= (1+10+5+1+20)/5), 10.8 (= (10+5+1+20+18)/5) , ..
Copyright © 2021 SRA OSS, Inc. Japan All rights reserved.

34

InfluxDBの特徴 ー まとめ
InfluxDBは汎用的なRDBに比べて、時系列データを用いるユースケースに特化することで強力なパフォーマンスを発揮
特に本セッションの対象者の方へ一般的なRDBの常識が通じない点が多く、InfluxDBを使用する
際は「利用目的の理解」と「InfluxDBの十分な学習」が必須→別RDBを覚えるよりも学習コスト大Copyright © 2021 SRA OSS, Inc. Japan All rights reserved.

35

InfluxDBの今後

1.時系列DBとは
2.InfluxDBとは3.InfluxDBを触ってみる
4.InfluxDBの特徴
5.InfluxDBの今後

Copyright © 2021 SRA OSS, Inc. Japan All rights reserved.

36

InfluxDBの今後 ー InfluxDB 2.0

InfluxDB 2.0 GAが2020-11-10にリリースされました• クエリ言語がInfluxQLからFluxがメインに• データ解析・可視化構成をテンプレートとして作成可能に• 設定項目はデータソース、解析操作、ダッシュボード、アラートなど• 様々なユースケースにおける構成を共通化することでセットアップ
時間の短縮に• 1.xからのデータ移行は容易

Copyright © 2021 SRA OSS, Inc. Japan All rights reserved.

37

InfluxDBの今後 ー InfluxDB IOx（アイオックス）

新コアエンジンを開発中•

Tag値の種類が多いデータにおけるパフォーマンス劣化を解消• SQLをサポート••

2021年後半リリース予定
後方互換性を維持

Copyright © 2021 SRA OSS, Inc. Japan All rights reserved.

38

ご清聴ありがとうございました

Copyright © 2021 SRA OSS, Inc. Japan All rights reserved.

39