InfluxDB

オープンソースの時系列データベース

InfluxDBの概要

InfluxDBはオープンソースの時系列データベース(Time series database)である。時系列データベースとは、ログなどの時間を軸にした連続データの蓄積と検索に特化したデータベースである。IoT分野で発生する大量のセンサーデータや、DevOpsでクラスタリングされたサーバー群が出力する各種メトリクスやログを蓄積する用途において、従来のデータベースより高いパフォーマンスを発揮する。

以前のInfluxDBは、他の多くの時系列データベースと同様に、既存製品をストレージエンジンとして使用していた(InfluxDBの場合はLevelDB、RocksDB、BoltDBなど)。
しかし、2015年10月にInfluxDBの開発元であるInfluxDataによって独自のストレージエンジンTime-Structured Merge Tree(TSM)が開発され、それ以降はTSMがInfluxDBに採用されている。

TSMはApache HBaseなどで使用されているLSM Tree(Log-structured merge-tree)の構造と似ているが、より時系列データの蓄積に適応したストレージエンジンになっている。時系列データ特有の性質を扱うように最適化されており、このストレージエンジンを利用することでInfluxDBの性能が向上した。

また、InfluxDB Cloud、InfluxDB Open Source、InfluxDB Enterpriseの違いは、以下のURLで確認できる。
https://www.influxdata.com/products/editions/

InfluxDBの主な特徴

  • 高い書き込みスループット
  • 高い読み取りスループット
  • 大量データの削除(期限切れデータなど)
  • データの更新および削除よりも、登録と参照の性能を優先する。

パフォーマンス

InfluxData社は自社ブログで、Elasticsearch、Cassandra、MongoDBなど時系列データベース以外の製品との性能比較において、InfluxDBが書き込み、読み取り、データ圧縮などの項目で、時系列データを扱ううえでどの製品よりも高いパフォーマンスを発揮しているとしている。

同じ時系列データベースであるOpenTSDBとの性能比較でも高い性能を発揮しているとしている。

クライアントインターフェース

InfluxDBを操作するために2つのインターフェースが用意されている。1つはCLI(コマンドラインインターフェース)で、シェルからinfluxコマンドで呼び出す。

CLIのアクセス例(時間表示がRFC3339に準拠する場合):

$ influx -precision rfc3339
Connected to http://localhost:8086 version 1.7.x
InfluxDB shell 1.7.x
>

もう1つのインターフェースは、HTTPでアクセスするREST APIである。InfluxDBはデフォルトで8086ポートを開き、HTTPリクエストを受け付ける。また、リクエストのクエリ結果はJSON形式、CSV形式で取得できる。

REST APIのアクセス例:

curl -i -XPOST http://localhost:8086/query --data-urlencode "q=CREATE DATABASE mydb"

クエリはどちらのインターフェースでも、InfluxQLというSQLに似たクエリ言語を使用して実行される。InfluxQLの文法はSQLとほぼ同じであるため、既存のSQL知識があれば操作できる。

以下のURLにInfluxQLに存在するコマンド一覧がある。
https://docs.influxdata.com/influxdb/v1.7/query_language/spec/#queries

上記URLのとおり、SELECT、INSERT、DELETEはあるがUPDATEコマンドはない。InfluxDBのドキュメントでもCRUDはCR-udであり、udについては存在しない。Deleteは存在するが、特定の1レコードを削除する形ではなく、期限切れデータを一度に大量削除するような使い方になることが多い。

GROUP BYやCOUNTのような関数も使用できる。
使用できる関数一覧は以下のURLのとおりである。
https://docs.influxdata.com/influxdb/v1.7/query_language/functions#sidebar

Clustering(Enterprise版専用)

InfluxDBのバージョン1.1までは、クラスタリング機能をアルファ版として提供していた。これは、クラスタリング機能が本番環境で使用できるほど成熟していなかったためである。
1.2からは、このクラスタリング機能が安定したレベルに達し、本番環境で使用可能な位置づけになったが、クラスタリング機能はEnterprise(有料)でのみ提供される機能になった。
InfluxData社(InfluxDBの開発元)は、オープンソースビジネスを存続させるため、クラスタリング機能を必要とする大規模システムを運用する企業から収益を得られる選択肢を提供している。Ver1.2では、スタンドアロン版のみ無料で使用できる。

InfluxDBの類似ソフトウェア

InfluxDBのような時系列データベースには、次のような製品がある。

  • OpenTSDB
    • Hadoop/HBase上で実行
  • KairosDB
    • OpenTSDBのフォークで、ストレージエンジンにCassandraを使用
  • Prometheus
    • システムメトリクスを集めて監視するための専用ツール
  • DalmatinerDB
    • ストレージエンジンにRiakを使用

InfluxDBのライセンス

InfluxDBはMITライセンスのオープンソースソフトウェアである。MITライセンスのソフトウェアは、無償での再配布や商用利用などが可能であり、他のオープンソースライセンスに比べて制限が非常に緩いライセンスである。

InfluxDBの動作環境

InfluxDBはGo言語で書かれている。Go言語のコンパイラーが存在するOSでコンパイルできる。

コンパイル済みのバイナリは、以下のようなOS環境別に提供されている。

  • さまざまなLinux
  • MacOSX
  • Windows

InfluxDBドキュメント

InfluxDBのドキュメントは以下のURLを参照する。

InfluxDBダウンロード

各種OS向けのInfluxDBパッケージは、以下のURLからダウンロードできる。
https://portal.influxdata.com/downloads

GitHubでもソースファイルを確認できる。
https://github.com/influxdata/influxdb