時系列データを保存していくと、いつかはストレージがいっぱいになってしまいます。
InfluxDBでは、一定期間が過ぎたときにデータの解像度を落として(ダウンサンプリング)保持することができます。
このエントリでは、ダウンサンプリングしてデータを保持するための2つの機能「Continuous Query(CQ)」と「Retention Policy(RP)」の設定方法を説明します。
Continuous Query(CQ)は定期的に自動実行するクエリです。
Retention Policy(RP)は保持期間を持つデータ構造です。
使い方は次のようなイメージです。
- 短期用RP、長期用RPのように保持期間ごとにRPを作成しておく
- 最初に短期用RPにデータを保存する
- 短期用RPで期限が来たデータに対し、CQを使ってダウンサンプリングし長期用RPに保存する
それでは実際に公式ドキュメントを参考に試してみましょう。
まずDBを作成します。
CREATE DATABASE "food_data"
次に、DBに対してデフォルトのRPを保持期間1時間で作成します。
> CREATE RETENTION POLICY "one_hour" ON "food_data" DURATION 1h REPLICATION 1 DEFAULT
RPにはDEFAULT
を設定することができます。
DB内に存在する全てのmeasurementsのデータ保持期間はデフォルトのRPになります。
明示的にデフォルトRPを設定しない場合は、自動生成された無期限のRPになっています (autogen
という名前のRP)。
REPLICATION 1
はシングルノードインスタンスのとき必須のパラメータになります。
サンプルデータとしてfood_data
に適当なorders
を作成しておきます。
orders
にはデフォルトのRPであるone_hour
が適用されます。
> INSERT orders,phone=10 website=30
> INSERT orders,phone=12 website=39
> INSERT orders,phone=11 website=56
> SELECT * FROM orders
name: orders
time phone website
---- ----- -------
1557546012214138700 10 30
1557546027823595200 12 39
1557546035939292400 11 56
さらに、ダウンサンプリング後のデータを保存する保持期間1年(52週)のRPも作成しておきましょう。
> CREATE RETENTION POLICY "a_year" ON "food_data" DURATION 52w REPLICATION 1
food_data.orders
を30分ごとにまとめ、RP a_year
のdown_sampled_orders
に保存するCQを作成します。
現行のCLIツールではクエリ内の改行がサポートされていないので注意が必要です。
> CREATE CONTINUOUS QUERY "cq_30m" ON "food_data" BEGIN
SELECT mean("website") AS "mean_website",mean("phone") AS "mean_phone"
INTO "a_year"."downsampled_orders"
FROM "orders"
GROUP BY time(30m)
END
30分以上待ってからa_year.downsampled_orders
を見ると、データがダウンサンプリングされていることがわかります。
ここではタイムスタンプのフォーマットを見やすくするためにprecision rfc3339
としています。
> precision rfc3339
> select * from a_year.downsampled_orders
name: downsampled_orders
time mean_website
---- ------------
2019-05-11T03:30:00Z 41.666666666666664
2019-05-11T04:00:00Z 60
2019-05-11T04:30:00Z 53
さらに、期限を過ぎたデータが削除されていることも確認しておきましょう。
期限の切れたデータは1時間ちょうどで削除されるわけではなく、チェックのタイミングで削除されます。
> SELECT * FROM one_hour.orders
name: orders
time phone website
---- ----- -------
2019-05-11T04:18:35.2291329Z 13 60
2019-05-11T04:57:23.267411Z 14 53
設定したRPとCQは下記のようにして確認します。
> SHOW RETENTION POLICIES ON "food_data"
> SHOW CONTINUOUS QUERIES
以上です。
このエントリでは、ダウンサンプリングしてデータを保持するための2つの機能「Continuous Query(CQ)」と「Retention Policy(RP)」の設定方法を説明しました。
InfluxDBの紹介を見たい方には下記の記事が参考になると思います。
コメントを送る
コメントはブログオーナーのみ閲覧できます