14
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

InfluxDBの調査

Last updated at Posted at 2019-11-28

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

InfluxDB

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

基本情報

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

機能情報

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

セキュリティ

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

参照 : InfluxDB 1.7 documentation : Managing InfluxDB security

まとめ

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

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

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

14
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?