こんにちは。アプリケーションサービス部の兼安です。
今回は、時系列データ専用のデータベース、Amazon Timestreamのお話です。
Amazon Timestreamは、メモリストアとマグネティックストアという特徴的なデータ領域があります。
これらについて、どのような挙動をするのかを書きたいと思います。
時系列データとAmazon Timestreamとは
時系列データとは
時系列データベースとは、グラフで言うと横軸が時間のデータを扱うデータベースです。
このブログをご覧の方に身近なものとしては、CloudWatchのメトリクスがあります。
横軸に時間があり、縦軸にCPU使用率があるようなデータが時系列データにあたります。
Amazon Timestreamとは
この時系列データを扱うのに特化したデータベースがAmazon Timestreamです。
時系列データを扱うこと自体は、一般的なRDBMSでも可能です。
しかし、IoTデバイスからのデータやセンサーデータなどの大量のデータを扱うとなると、それに耐えうる環境をRDBMSで構築するのはかなりの労力がかかるでしょう。
Amazon Timestreamは、時系列データを扱うことに特化しているので、そのような労力をかけることなく、大量の時系列データを扱うことができるのが特徴です。
Amazon Timestreamのデータ領域
では、実際にAmazon Timestreamを使って、本記事のテーマであるメモリストアとマグネティックストアの挙動を確認していきます。
Amazon Timestreamも、RDBMSと同様にデータベースとテーブルを作ります。
データベースの作成
マネジメントコンソールで作成します。
名前と暗号化の設定を入力します。
この時、設定で「サンプルデータベース」を選択すると、サンプルデータの入ったテーブルまで作ってくれます。
テーブルの作成
データベースを作成したら、テーブルを作成します。
テーブルの作成画面には、「データ保持」と「マグネティックストレージの書き込み」という項目があります。
これらが、メモリストアとマグネティックストアを司る設定です。
なお、Amazon Timestreamのテーブルはスキーマレスなので、テーブル作成時にカラムを定義する必要はありません。
レコードの挿入時に、レコードを特定するための列=ディメンションと、レコードの値=メジャーを指定すれば、自動的にカラムが作成されます。
メモリストアとマグネティックストアは役割が違う
メモリストアとマグネティックストアの特徴は以下の通りです。
- メモリストア
- 高スループットのデータ書き込み
- 高速なポイントインタイムクエリ用に最適化
- マグネティックストア
- 低スループットの後発データ書き込み
- 長期データ保存
- 高速分析クエリ
データがAmazon Timestreamに送られてくると、まずメモリストアが受け止めそれを書き込み、一定時間後にマグネティックストアに移動します。
メモリストアは、新しいデータを扱う領域で、マグネティックストアは、履歴データを扱う領域と言えます。
メモリとマグネティックと聞くと、EBSなどの知識に引っ張られると、マグネティックの方が遅いように思えますが、単独クライアントからの数万件の読み取り・書き込みぐらいでは、両者の速度に違いは感じませんでした。
メモリストアとマグネティックストアは単純な速度云々ではなく、役割が違うということを理解しておく必要があります。
メモリストアとマグネティックストアの挙動
例としてテーブルの設定を以下のようにします。
メモリストの保持期間
を1時間マグネティックストアの保持期間
を1日マグネティックストレージの書き込み
を無効
現在時刻がAM07:00だとすると、以下の挙動になります。
- タイムスタンプがAM06:00から07:00のデータは、メモリストアに書き込まれる
- メモリストアに書き込まれたデータは、1時間後にマグネティックストアに移動
- 1日後にマグネティックストアから削除
- タイムスタンプがAM05:59以前のデータは書き込み不可
AM05:59以前のデータが書き込めないのは、メモリストアのデータ保持期間が1時間であるため、それより前のデータは新しいデータとみなされないからです。
ここで、マグネティックストレージの書き込み
を有効にすると、AM05:59以前のデータが書き込みが可能になります。
この挙動は、AM05:59以前のデータが新しいデータとみなされないのはそのままですが、マグネティックストレージの書き込み
を有効にしたことにより、マグネティックストレージ=履歴データを扱う領域への直接書き込みがOKになるからです。
まとめ
以上、Amazon Timestreamのメモリストアとマグネティックストアの挙動についてでした。
ちょっとわかりにくい挙動なので、本記事がAmazon Timestreamの理解に役立てば幸いです。
[補足]検証用のソースコード
メモリストアとマグネティックストアの挙動を確認するために、以下のようなソースコードを書きました。
このコードの二時間前のタイムスタンプを取得
とコメントしている部分を調整しながら、この時刻なら登録できる、この時刻ならできないを確認しています。