時系列データの保存
時系列データを一時的に保存することで、長期間の保存コストを気にすることなくデータを可視化できる。IoTセンサーのような時系列データの一般的なユースケースについて考えてみよう。確かに、最近のデータがどのようなものかを見るのは便利ですが、各センサーの値を無期限に保存する必要があるでしょうか?多数のセンサーがデータベースにメトリクスを送信すると、ストレージ・コストが急上昇します。その代わりにMomentoにデータを保存すれば、Momentoが最も得意とする、スケーリングや長期的なストレージ・コストを心配することなく大量のデータを保存することができます。
lists、sets、dictionariesなどのMomentoのコレクションデータ型に関連するデータ要素を格納でき ます。アプリケーションのアクセスパターンとデータスキーマに適したデータ型を選ぶべきです。時系列データの場合は、MomentoのSortedSetデータ型を使用します。SortedSets
についてはこのブログで詳しく説明されています。
なぜSortedSetsを使うのか?
- 時系列データをタイムスタンプでソートすることで、クライアントアプリケーションはデータを簡単に取得し、ソートされた順序で表示することができます。
- Momento SDKのSortedSetFetchByRankおよびSortedSetFetchByScoreを使用して、クエリ応答を特定の値数または特定のタイムスパン内の値に制限します。
時系列データをSortedSetに格納する
SortedSet にアイテムを挿入するには、Momento SDK の SortedSetPutElement メソッドを使用します。
IoTセンサーのデータをMomento Cacheに格納するワークロードを考えてみましょう。
- 各センサーは独自のSortedSetを持っています。
- センサーのSortedSet内の各sensor_valueは、値とタイムスタンプを含むJSON文字列です。
すなわち、
JSON.stringify("value":1, "timestamp": 1686583076)
となります。 - SortedSet の各項目のスコアは、データポイントのタイムスタンプである。SortedSet は、スコアを使ってセット内のデータをソートします。
SortedSetをキャッシュに書き込むコードスニペット
const item_value = JSON.stringify({"sensor_value": sensor_value, "timestamp": timestamp})
const response = await cacheClient.sortedSetPutElement("sensor_data", `${sensor_id}-sensor-data`, item_value, timestamp)