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

2020-11-26 db tech showcase
SRA OSS, Inc. 日本支社 近藤雄太

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

1

自己紹介

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

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

2

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

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

3

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

RDBの心得があり、InfluxDBや時系列DBをこれから知りたい方Copyright © 2020 SRA OSS, Inc. Japan All rights reserved.

4

目次

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

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

5

時系列DBとは

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

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

6

時系列DBとは ー 定義

タイムスタンプ（時刻情報）で識別できるデータを扱うデータベース

RDBで言うところの主キーがタイムスタンプ

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

7

時系列DBとは ー 利用目的

• 時系列に沿ったデータを効率な操作・管理• 秒単位以下で読み書き可能なパフォーマンス
• リアルタイムデータ解析

利用例：
IoT センサーデータ、金融データ解析

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

8

InfluxDBとは

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

Copyright © 2020 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 © 2020 SRA OSS, Inc. Japan All rights reserved.

10InfluxDBを触ってみる

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

Copyright © 2020 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 © 2020 SRA OSS, Inc. Japan All rights reserved.

12

InfluxDBを触ってみる ー 接続

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

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

13

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

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

RDB

Table

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

FieldB

InfluxDBのデータはPointが単位

Row

Row
Row

InfluxDBTime

Measurement
TagA

TagB

FieldA

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

14

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

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

RDB

Table

ColumnColumn

ColumnColumnColumnRow

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

Row
Row

InfluxDBTime

Measurement
TagA

TagB

FieldA

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

Point
Point

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

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

15

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

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

RDB

Table

ColumnColumnColumnColumnColumnRow

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

Row
Row

InfluxDBTime

Measurement
TagA

TagB

FieldA

FieldB

Point
Point

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

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

16

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

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

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

17

InfluxDBの特徴

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

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

18

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

データの更新(Update)、削除(Delete)を制限することで、作成(Create)、読み取り(Read)のパフォーマンス確保• 更新は可能、しかしパフォーマンスが低い• 削除は広範囲の指定のみで単一のデータを指定できない

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

19

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 © 2020 SRA OSS, Inc. Japan All rights reserved.

20

InfluxDBの特徴 ー トランザクション

RDBにはトランザクションがあり、InfluxDBにはトランザクションがない
データ操作の原子性・一貫性・独立性を保証しないことでパフォーマンス確保※ACIDのうち、永続性(D)のみ先行書き込みログで保証→単一のデータが厳密に操作されることが前提のユースケースでは使えない

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

21

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

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

短時間に大量のデータが保存されるため以下の機能が標準搭載• データ圧縮• 古くなった素のデータの定期削除• ダウンサンプリング、サマライズ

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

22

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

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

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

23

InfluxDBの特徴 ー データ可視化

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

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

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

24InfluxDBの特徴 ー まとめ

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

25

InfluxDBの今後

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

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

26

InfluxDBの今後 ー InfluxDB 2.0

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

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

27

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

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

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

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

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

28

ご清聴ありがとうございました
残りの時間は頂いたご質問に回答いたします

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

29