Amazon Timestreamについていろいろ調べてみた

記事タイトルとURLをコピーする

こんにちは

さて、前回SORACOM GPSマルチユニットからAmazon TImestreamへデータを送信してみたわけですが、そもそもTimestreamのことをよくわかっていなかったので今回はドキュメントやQ&Aを読んでいろいろ調べてみました。

blog.serverworks.co.jp

Amazon Timestreamとは??

Amazon Timestreamとはフルマネージドな時系列データベースです、しかもスケーラブルでサーバーレスなサービス。いままでAWSでInflxDBのような時系列データベースを利用しようと思うとEC2でたてる、もしくはAuroraやDyanamoDBで代用するしかありませんでした。

そもそも時系列データとは??

時系列データとは、その名の通りある時間間隔で記録される一連のデータです。わかりやすいものだと気温や株価です。時系列データベースであるAmazon Timestreamはこのようなデータを保存しておくことができます。

Amazon Timestreamのストレージ

Amazon Timestreamのストレージにはいくつか種類があります(下記の2種類以外にもSSDストアというのがあるようですがまだ利用できません)。

  • メモリストア
  • マグネティックストア

テーブル作成時にそれぞれの retension の期間を設定します。データはまずメモリストアへ保存され、 retension 期間を過ぎるとマグネティックストアへ移行します。マグネティックストアの retension 期間を過ぎるとデータは削除されます。

f:id:swx-mine:20201126171427p:plain
こんな感じ

では、それぞれのストアの違いは何でしょうか?

メモリストア

Amazon Timestreamへデータが送信された時、メモリストアがそれを受け取ります。デバイスやアプリによっては、Amazon Timestreamが現在時刻よりも前の時刻のデータを受け取ることがあるとおもいます。メモリストアではそれらのデータを並び替えてくれます。また、比較的少量のデータに対する高速なクエリに最適化されています(Q&Aによると 数十ギガバイトの時系列データをミリ秒以内 )。つまり、どれくらい遅れて送信されるか、どれくらい前までのどれくらいのデータを高速にクエリをするかを考慮して、 retension 期間を設定する必要があります。

マグネティックストア

メモリストアの retension 期間を過ぎたデータはマグネティックストアへ移ります。マグネティックストアは読み取りに最適化されています。メモリストアよりも大きなデータに対してクエリを投げ高速に分析することができます(Q&Aによると テラバイトの時系列データを数秒以内 )。

Amazon Timestreamのデータ

Amazon Timestreamへ保存されるデータは タイムディメンションmeasure_name, measure_value からなっています。

time id measure_name measure_value::double
2020-11-10 06:35:11.929000000 hogehoge 25.1 temperature

タイム

読んで字のごとくタイムです。時刻です。

ディメンション

送信されたデータのメタデータのようなものです。例えばIoTであればデバイスの識別するIDを入れておくことが考えられるでしょう。

measure_name

measure_namemeasure_value がなんの値であるかを指しています。

measure_value

データです。実際に計測された温湿度のような値が入ります。1レコードにつき measure_value は1つのようで、温度と湿度があると別々のレコードで保存されます。

Amazon Timestreamのクエリ

SQLライクにクエリを投げられます。リファレンスが用意されているのでこれを参考にしましょう。マネコンの Query editor からもクエリが試せます。

docs.aws.amazon.com

クエリのデータモデルはフラットモデルと時系列モデルの2種類あります。『Amazon Timestreamのデータ』で前述したモデルがフラットモデルと呼ばれています。これがAmazon Timestreamのデフォルトとなっています。Amazon Timestreamはデータを補間するような関数をサポートしているそうで、このような関数を使用するためには時系列モデルに変換する必要があるようです。

時系列モデルの例

id temperature
hogehoge [{time:2020-11-10 06:27:33.446000000, value: 24.8}, {time:2020-11-10 06:33:15.925000000, value: 24.9}, {time:2020-11-10 06:35:11.929000000, value: 25.1}]

他のサービスとの連携

Amazon Timestreamはあくまでも時系列データベースなのでデータを保管しておくだけです。収集や分析は別のサービスから実行する必要があります。やさしいことにドキュメントに収集と分析を行うそれぞのAWSサービスとツールのことが記載されています。こちらを参考にしましょう。

docs.aws.amazon.com

料金

さて、料金です。Amazon Timestreamの料金はデータの書き込み、保管されているデータの量、クエリでスキャンされたバイト数によって計算されます。保管されているデータに対する課金額はメモリストアとマグネティックストアによって違うので注意しましょう。

参考

docs.aws.amazon.com

aws.amazon.com

aws.amazon.com

Yusuke Mine(書いた記事を見る)

I get drunk but it's not enough 'Cause the morning comes and you're not my baby.