アルパカログ

Webエンジニア兼マネージャーがプログラミングやマネジメント、読んだ本のまとめを中心に書いてます。

時系列データベース「InfluxDB」とは?

f:id:otoyo0122:20200803154128p:plain:w300

最近、InfluxDBを使う機会があったので、このエントリではInfluxDBについて簡単に紹介します。

なお、他の時系列データベースとの比較は行なっていないのでご了承ください。

InfluxDBの特徴

InfluxDBは時系列データベース(Time Series Database/TSDB)の1つで、HTTP APIを備えているという特徴があります。

時系列データベースはRDBと違って、時系列データに特化したDBです。

時系列データとは、サーバのメトリクスやユーザーの行動ログなどのように、1つ1つの情報自体よりも「情報の変遷」が意味を持つようなデータです。

InfluxDBにも時系列データベース特有の、データに保持期限を設けたり、データを間引いたり(ダウンサンプリング)する機能が備わっています。

InfluxDBのクエリはMySQLなどのRDBとよく似ています。

学習コストは低いものの、例えばRDBのtableにあたるものをInfluxDBでは「measurement」というように、用語に差異があります。

HTTP APIが便利

PostgreSQLやMySQLなどのRDBMSでは、mysqlコマンドなど、RDBMSそれぞれのクライアントツールを使用することが一般的です。

InfluxDBには最初からHTTP APIが用意されており、デフォルトで8086版ポートにHTTPリクエストするだけでCRUD+αの操作ができます。

便利ですね。

HTTPのエンドポイントについては下記の公式ドキュメントをご覧ください。

docs.influxdata.com

curlコマンドでHTTP APIからクエリするときは、データベースを指定するdbパラメータと、クエリのqパラメータが最低限必要です。

試しにSELECTしてみましょう。

APIパラメータがシンプルなこと、レスポンスがJSONであることがわかると思います。

$ curl -G 'http://localhost:8086/query?db=mydb' --data-urlencode 'q=SELECT * FROM "mymeas"'

{"results":[{"statement_id":0,"series":[{"name":"mymeas","columns":["time","myfield","mytag1","mytag2"],"values":[["2017-03-01T00:16:18Z",33.1,null,null],["2017-03-01T00:17:18Z",12.4,"12","14"]]}]}]}

また、pretty=true を付けるとJSONを読みやすいように整形してくれます。

$ curl -G 'http://localhost:8086/query?db=mydb&pretty=true' --data-urlencode 'q=SELECT * FROM "mymeas"'

{
    "results": [
        {
            "statement_id": 0,
            "series": [
                {
                    "name": "mymeas",
                    "columns": [
                        "time",
                        "myfield",
                        "mytag1",
                        "mytag2"
                    ],
                    "values": [
                        [
                            "2017-03-01T00:16:18Z",
                            33.1,
                            null,
                            null
                        ],
                        [
                            "2017-03-01T00:17:18Z",
                            12.4,
                            "12",
                            "14"
                        ]
                    ]
                }
            ]
        }
    ]
}

以上です。このエントリではInfluxDBについて簡単に紹介しました。

InfluxDBの詳しい使い方を知る

InfluxDBのデータのダウンサンプリングについて知りたい方は下記の記事をご覧ください。

alpacat.hatenablog.com