ちょっと話題の記事

時系列特化データベースの Amazon Timestream が一般公開(GA)しました!! 時系列データの保存・検索・分析にピッタリ!

時系列に特化したデータベースであるAmazon Timestreamが一般公開されました。 これを使うことで、時系列データの保存・検索・分析がより簡単になります。
2020.10.01

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

約2年を経て、ついに、ついに、ついに、Amazon Timestreamが一般公開になりました!!

Amazon Timestreamを使えば、IoT機器などから収集した時系列データの保存や分析が簡単にできるようになります。 一言で言えば、時系列データに特化したデータベースです!

Amazon Timestreamとは

Amazon Timestream は、IoT および運用アプリケーションに適した、高速でスケーラブルな完全マネージド型の時系列データベースサービスです。1 日あたり数兆規模のイベントを、リレーショナルデータベースの 1/10 のコストで簡単に保存および分析できます。IoT デバイスや IT システムの普及や、産業機器のスマート化により、時系列データ (時間の経過に伴うモノの変化を記録したデータ) は、急速に増加しているデータ型の 1 つです。

Timestream は、時系列専用データベースであるため、データを時間間隔で効率的に保存および処理できます。Timestream を使用すれば、DevOps のログデータ、IoT アプリケーションのセンサーデータ、設備保全の産業用テレメトリデータを簡単に保存および分析できます。

https://aws.amazon.com/jp/timestream/

Amazon Timestreamの特徴

サーバーレス

なんとサーバーの管理は不要です。Amazon Timestreamは自動的にスケーリングしてデータベース容量やパフォーマンスをチューニングします。

データライフサイクル管理

例えば下記のような管理ができます。

  • 最近のデータ:メモリストアに保存
  • 履歴データ:磁気ストアに保存

それぞれに指定できる最短・最長期間は下記となっています。

ストア種類 最短 最長
メモリストア 1時間 12ヶ月
磁気ストア 1日 200年

簡単なデータアクセス

「直近のデータはデータベース(たとえばDynamoDB)にあるが一定期間後にS3に移す」といった事はあると思います。 このような場合に全データを検索しようとすると、DynamoDBとS3に対する検索を行うため、異なる手段・仕組みが必要になります。 しかし、Amazon Timestreamでは、メモリストアと磁気ストアを意識することなく、データ検索が行えるのです。

時系列専用データベース

Amazon Timestreamは時系列専用データベースであるため、データ保存や検索などの最適化が行われています。 また、平準化・近似・補完といった組み込み分析関数をクエリで使うことができます。

たとえば、interpolate_linear(timeseries, array[timestamp])を使えば、線形補間を使用して欠落データを埋めることができます。

データの暗号化をサポート

すべてのデータはKMSによる暗号化をサポートしています。

Amazon Timestreamの料金

3種類に対して課金されます。 自前で仕組みを組むよりもお得になっていると思います。

下記はオハイオの金額です。

書き込みに対する課金

  • 1KBのサイズが100万件:0.50 USD

ストレージに対する課金

1GBあたりの格納時間で課金されます。

ストア種類 1GB/時あたりの料金
メモリストア 0.036 USD (1GB/日で約0.86 USD)
SSDストア 0.0004167 USD (1GB/日で約0.01 USD)
磁気ストア 0.0000411 USD(1GB/月で約0.03 USD)

※SSDストアは近日公開予定

クエリに対する課金

スキャンされたデータ量に対して課金されます。

  • 1GBあたりのスキャン量:0.01 USD

さっそく使ってみる

リージョン選択

GA時点では下記のリージョンがサポートされています。

  • 米国東部 (バージニア北部)
  • 米国東部 (オハイオ)
  • 欧州 (アイルランド)
  • 米国西部 (オレゴン)

データベースを作成する

データベースを作成します。

ここではSample Databaseを選択します。 また、サンプルデータセットにはIoTを選択しています。このサンプルデータには、トラックの速度・場所といった時系列データが含まれています。

さくっと作れました。

テーブルもできています。

クエリを実行して、テーブルに保存されているサンプルデータを眺めてみる

左側のメニューにあるQuery Editorを選択します。

データベースSampleDBIoTテーブルの定義は下記のようです。

Preview dataを選択すると、サンプルクエリが現れました。

実行すると下記データが現れました。

さまざまなサンプルクエリがある

Sample Queriesを選択すると、さまざまなサンプルクエリがありました。

過去24時間のフリート内の各トラックの最新の燃料測定値を取得する

上から2つ目のサンプルクエリを実行してみます。

Get the most recent fuel reading of each truck in the fleet in the past 24 hours.

クエリ自体は下記になっています。

-- Get the most recent fuel reading of each truck in the fleet in the past 24 hours.
WITH latest_recorded_time AS (
    SELECT
        truck_id,
        max(time) as latest_time
    FROM "sampleDB".IoT
    WHERE measure_name = 'fuel-reading'
    AND time >= ago(24h)
    GROUP BY truck_id
)
SELECT
    b.truck_id,
    b.fleet,
    b.make,
    b.model,
    b.time,
    b.measure_value::double as last_reported_fuel_reading
FROM
    latest_recorded_time a INNER JOIN "sampleDB".IoT b
        ON a.truck_id = b.truck_id AND b.time = a.latest_time
WHERE
    b.measure_name = 'fuel-reading'
AND
    b.time > ago(24h)
ORDER BY
    b.truck_id

実行結果は下記です。

さいごに

時系列データを溜めて、可視化・分析したい要件にピッタリのデータベースですね。ぜひ使っていきたいです!

参考