時系列DB InfluxDBを試す

#背景

JINS MEMEにより、ボコボコ 生データが取れるようになったので、あまり手を付けていなかった時系列DBを試してみる。


#情報ソース

最新は2.0系でこちら。

https://docs.influxdata.com/influxdb/v2.0/

WSLでインストールすると1.6が入ったので、情報としてはおそらくこちら。

https://docs.influxdata.com/influxdb/v1.6/

#WSLへのインストール

2021/10/17 私の環境のWSL。古いバージョンを使用してる場合などは以下に表示されるように'wsl --update'で更新しておいたほうが良いでしょう。

```console:WSL環境
# wsl --status
既定の配布: Ubuntu2
既定のバージョン: 2

Linux 用 Windows サブシステムの最終更新日: 2021/10/08
Windows Subsystem for Linux カーネルは、'wsl --update' を使用して手動で更新できますが、システム設定が原因で自動更新が発生することはありません。
カーネルの自動更新を受け取るには、 Windows Update の設定を有効にしてください:' Windowsの更新に、その他のMicrosoftの製品の更新情報を受け取る'。
詳細については、 https://aka.ms/wsl2kernel.
 を参照してください
カーネル バージョン: 5.10.60.1

```

InfluxDBをインストールする。

```console:インストール
> sudo apt install influxdb influxdb-client -y

Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
  influxdb influxdb-client
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 8049 kB of archives.
After this operation, 28.7 MB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu groovy/universe amd64 influxdb amd64 1.6.4-2ubuntu1 [5476 kB]
Get:2 http://archive.ubuntu.com/ubuntu groovy/universe amd64 influxdb-client amd64 1.6.4-2ubuntu1 [2573 kB]
Fetched 8049 kB in 3s (3116 kB/s)
Selecting previously unselected package influxdb.
(Reading database ... 47169 files and directories currently installed.)
Preparing to unpack .../influxdb_1.6.4-2ubuntu1_amd64.deb ...
Unpacking influxdb (1.6.4-2ubuntu1) ...
Selecting previously unselected package influxdb-client.
Preparing to unpack .../influxdb-client_1.6.4-2ubuntu1_amd64.deb ...
Unpacking influxdb-client (1.6.4-2ubuntu1) ...
Setting up influxdb-client (1.6.4-2ubuntu1) ...
Setting up influxdb (1.6.4-2ubuntu1) ...
Adding system user `influxdb' (UID 112) ...
Adding new user `influxdb' (UID 112) with group `nogroup' ...
Not creating home directory `/var/lib/influxdb'.
Adding group `influxdb' (GID 119) ...
Done.
Adding user `influxdb' to group `influxdb' ...
Adding user influxdb to group influxdb
Done.
Created symlink /etc/systemd/system/influxd.service → /lib/systemd/system/influxdb.service.
Created symlink /etc/systemd/system/multi-user.target.wants/influxdb.service → /lib/systemd/system/influxdb.service.
invoke-rc.d: could not determine current runlevel
Processing triggers for systemd (246.6-1ubuntu1.7) ...
Processing triggers for man-db (2.9.3-2) ...
```

最後のほうに書いてくれていますが、systemdの設定もしてくれているようです。
サービス状態を確認して、起動していなければ（していないと思うが）起動しましょう。

```console:起動
# service influxdb status
 * influxd is not running
root@DESKTOP-UIMJQCQ:~# service influxdb start
 * Starting database influxd                                                                                                                                     [ OK ]
root@DESKTOP-UIMJQCQ:~# service influxdb status
 * influxd is running
```

#動作確認

この辺に従って、最初の確認などをします。(めちゃくちゃ丁寧な記載だ。みならいたい）
このprecisionオプションはタイムスタンプのフォーマットをrfc3339（YYYY-MM-DDTHH:MM:SS.nnnnnnnnnZ）にするということらしい。

https://docs.influxdata.com/influxdb/v1.6/introduction/getting-started/

```shell:クライアント起動
$ influx -precision rfc3339
```

つづいてDatabase作成

```shell:Database作成
> CREATE DATABASE mydb
>
> show databases
name: databases
name
----
_internal
mydb
> USE mydb
Using database mydb
```

通常のデータベースでいうところのTableがmeasurementとなるようです。
で、レコード作成は最初にmeasurementを指定して、あとは<field-key>=<field-value>でfield-keyと値を指定すると。

```text:
<measurement>[,<tag-key>=<tag-value>...] <field-key>=<field-value>[,<field2-key>=<field2-value>...] [unix-nano-timestamp]
```

こんな感じ。確かに作成されていることが確認できます。

```shell:レコード作成
> INSERT cpu,host=serverA,region=us_west value=0.64
> SELECT "host", "region", "value" FROM "cpu"
name: cpu
time                           host    region  value
----                           ----    ------  -----
2021-10-17T05:55:04.498741763Z serverA us_west 0.64
```

#データ投入

NiFiの詳細は飛ばしますが、NiFiにはfluxdbのデータ入出力機能があり簡単にデータ投入が可能です。


![SnapCrab_NoName_2021-10-17_15-24-5_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121950/130aa4a0-4438-1aab-c56c-6bc00e6e2d53.png)

全体としては、以下のような形で5分間で約6000件、遅延なくデータを突っ込むことができています。
![SnapCrab_NoName_2021-10-17_15-25-54_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121950/60024afb-611d-d3f9-db5c-16619d779795.png)