InfluxDBの調査

IoT(Internet of Things) システムでは、各種センサーから、秒以下の周期で取得された、大量の時系列データを取り扱います。このようなデータを保持するシステムとして、時系列データベースは求められています。そこで、時系列データベースの InfluxDB について、まとめました。
[OSSデータベース調査 NoSQLデータベース編](https://qiita.com/kanegoon/items/5ade64336d389feea4bc)の中で、InfluxDB を扱っていますが、可用性、拡張性、セキュリティなど掘り下げて、以下のようにまとめました。

# InfluxDB 

InfluxDBは、時系列データのための高機能データ・ストアです。高スループット格納、データ圧縮、リアルタイム・クエリが可能です。InfluxDBは、Go言語だけで開発されていて、外部依存性がなく、高い書き込み/問い合わせ性能をコマンドインターフェース、HTTP API、クライアントライブラリ(Go, Java, JavaScriptなど)を提供します。<br>参照 : [InfluxDB 1.X: Open Source Time Series Platform](https://www.influxdata.com/time-series-platform/)

# 基本情報

|項目&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|内容|
|-----|--------|
|URL|https://www.influxdata.com/products/influxdb-overview/|
|データモデル|InfluxDBのデータベースはポイント(points)を保存します。ポイントはメジャメント(measurement)、タグセット(tagset)、フィールドセット(fieldset)、そしてタイムスタンプ(timestamp)の4つの要素から構成されます。メジャメント(measurement)は、タグセットあるいはフィールドセットが異なる関連するポイントを関連付けるために利用することができます。タグセットはポイントともに保存するキーバリューのディクショナリです。フィールドセットは型付きのスカラー値の集合、すなわちポイントで保存されるデータです。<br>参照 : [InfluxDB Internals](https://www.influxdata.com/blog/influxdb-internals-101-part-one/)|
|動作環境|**CPU**： 2-4コア以上<br>**メモリ**： 4GB 以上<br>**ストレージ**： 500 IOPS 以上のデバイス<br>**OS**： Linux (Ubuntu、Debian、RedHat、CentOS、SLES、openSUSE)、MacOS、FreeBSD<br>参照 : [Hardware sizing guidelines](https://docs.influxdata.com/influxdb/v1.7/guides/hardware_sizing/), [Installing InfluxDB OSS](https://docs.influxdata.com/influxdb/v1.7/introduction/installation/)
|実装言語|Go|
|ライセンス|シングル構成は MITライセンス。クラスタ構成、クラウド版は製品ライセンス<br>https://github.com/influxdata/influxdb/blob/master/LICENSE<br>ソフトウェア・ライセンス・サブスクリプション契約があります。|
|主なバージョン|v1.7.0 (2018-11-07) : <br>・GoクライアントV2にチャンククエリを追加<br>・Time Series Index (TSI)のクエリ性能とスループットを改善<br>・Fluxスクリプト言語をサポート<br>v1.6.0 (2018-07-07) :<br>・プロメーテウスとの連携<br>v1.5.0 (2018-03-06) : <br>・デフォルト・ロギングフォーマットの変更<br>参照 : [InfluxDB 1.7 release notes](https://docs.influxdata.com/influxdb/v1.7/about_the_project/releasenotes-changelog/)|
|開発元|InfluxData, Inc.|
|開発体制|InfluxDataを中心にContributorは293名<br>Contributorは [Contributor License Agreement](https://www.influxdata.com/legal/cla/) を締結する必要があります。|
|活動状況|GitHubでIssues月間約 50件、ソースコード・コミット月間約180件<br>https://github.com/influxdata/influxdb/commits/master|
|国内サポート体制|現時点で国内での保守サポートサービスを行っている企業、団体はありません。|
|その他|[InfluxDB 1.7 documentation](https://docs.influxdata.com/influxdb/v1.7/)<br>[InfluxDB Enterprise 1.7 documentation](https://docs.influxdata.com/enterprise_influxdb/v1.7/)

# 機能情報

|項目&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|内容|
|-----|--------|
|対応プログラム言語|.Net、C/C++、Clojure、Erlang、Go、Haskell、Java、JavaScript、JavaScript (Node.js)、Lisp、Perl、PHP、Python、R、Ruby、Rust、Scala|
|クエリ言語|InfluxDBでは、インタラクティブにデータを操作するためにSQLライクなクエリ言語として InfluxQLが動作します。<br>InfluxQLはSQLライクな表現以外に正規表現、演算式およびデータ処理をスピードアップさせる時系列に特有の機能をサポートします。<br>|
|データ圧縮|InfluxDBは、永続化するために、snappyアルゴリズムで圧縮したWALを書き込みます。キャッシュを定期的にTSMファイルに書き込まれますが、TSMファイルが蓄積されるとこれらを統合・圧縮してTSMファイルを作成します。TSMストレージエンジンは、デフォルトで圧縮が有効です。<br>参照 : [In-memory indexing and the Time-Structured Merge Tree (TSM)](https://docs.influxdata.com/influxdb/v1.7/concepts/storage_engine/)|
|データ自動集計|Continuous Queryでデータの自動集計を行うことが可能です。<br>参照 : [InfluxQL Continuous Queries](https://docs.influxdata.com/influxdb/v1.7/query_language/continuous_queries)|
|期限解放機能|RETENTION POLICYというデータ保持期間を設定する機能があります。データベース単位でどれだけの期間までデータを保持するか設定が可能です。<br>参照 : [InfluxDB 1.7 documentation : retention policy(RP)](https://docs.influxdata.com/influxdb/v1.7/concepts/glossary/#retention-policy-rp)|
|時系列分析関数|**集計演算関数**(COUNT、DISTINCT、INTEGRAL、MEAN、MEDIAN、MODE、SPREAD、STDDEV、SUM)<br>**選択関数**(BOTTOM、FIRST、LAST、MAX、MIN、PERCENTILE、SAMPLE、TOP)<br>**予測関数関数**(HOLT_WINTERS)<br>**テクニカル分析関数**(CHANDE_MOMENTUM_OSCILLATOR、EXPONENTIAL_MOVING_AVERAGE、DOUBLE_EXPONENTIAL_MOVING_AVERAGE、KAUFMANS_EFFICIENCY_RATIO、KAUFMANS_ADAPTIVE_MOVING_AVERAGE、TRIPLE_EXPONENTIAL_MOVING_AVERAGE、TRIPLE_EXPONENTIAL_DERIVATIVE、RELATIVE_STRENGTH_INDEX)<br>参照 : [InfluxDB 1.7 documentation : InfluxQL functions](https://docs.influxdata.com/influxdb/v1.7/query_language/functions/)|
|インデックス|Time Series Index(TSI)と Time-Structured Merge Tree(TSM)<br>参照 : [InfluxDB 1.7 documentation : Time Series Index (TSI) overview](https://docs.influxdata.com/influxdb/v1.7/concepts/time-series-index/)|
|トランザクション|未サポート|
|ストアドプロシジャ|未サポート|
|トリガー|未サポート。ただし、Continuous Queryで限定的なトリガー機能を実現可能です。|
|dockerコンテナ|Docker Official ImagesとしてdockerhubでInfluxDBのDocker Containerイメージが公開されている。<br>https://hub.docker.com/_/influxdb|
|性能拡張|OSS版は未サポート<br>エンタープライズ版はクラスタ構成をサポートしています。Sharedingでデータ分散を行っています。<br>参照 : [InfluxDB 1.7 documentation : Clustering with InfluxDB Enterprise](https://docs.influxdata.com/influxdb/v1.7/high_availability/clusters)|
|高可用性|OSS版は未サポート<br>エンタープライズ版はクラスタ構成でのレプリケーションをサポートしています。<br>参照 : [InfluxDB 1.7 documentation : High availability with InfluxDB Enterprise](https://docs.influxdata.com/influxdb/v1.7/high_availability)|
|運用|オンライン・バックアップ/リストアのツールを提供。これらはフルバックアップでありまして、インクリメンタル・バックアップはサポートしていません。<br>参照 : [InfluxDB 1.7 documentation : Backing up and restoring in InfluxDB OSS](https://docs.influxdata.com/influxdb/v1.7/administration/backup_and_restore/)|
|出来ないこと|UPDATEコマンドがありません。DELETEは存在しますが特定の１レコードを削除といった形ではなくて、期限が切れたデータを一度に大量に削除するといった定量的な使い方になります。<br>参照 : [InfluxDB最新情報](https://openstandia.jp/oss_info/influxdb/index.html)|

# セキュリティ

|項目&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|内容|
|-----|--------|
|通信暗号化|TSLで通信暗号化|
|DB格納領域の暗号化|なし|
|認証機能|ユーザ認証を有効にして、ユーザを登録すると認証機能が使用できます(デフォルト設定でユーザ認証は無効になっている)。ユーザはAdmin usersとNon-admin usersの2種類があり、利用できる機能に違いがあります。|
|権限管理|管理ユーザがデータベース単位で一般ユーザに付与します(GRANTコマンドを使用)。|
|DB監査|なし|

参照 : [InfluxDB 1.7 documentation : Managing InfluxDB security](https://docs.influxdata.com/influxdb/v1.7/administration/security/)

# まとめ
InfluxDBは、時系列データに特化した、解析するための関数や期限解放機能などが豊富です。しかし、時系列以外のデータ管理、セキュリティが弱いと考えられます。

掲載内容は、(株)東芝 デジタルイノベーションテクノロジーセンター及びソフトウェア技術センターの見解です。コメント等は広くご意見を頂ければ幸いです。

また、記述について誤りがあったり、気になることがあれば、編集リクエストやコメントでフィードバックしていただけると助かります。