AWSのデータベース系サービスの中で、時系列データを扱うために存在しているAmazon Timestream。リリースから1年以上経ちましたが、幾つかのデメリットの存在によって、実サービスでの運用や移行に踏み切れないと叫ばれ続けてきました。
ところが昨年末のAWS re:Invent 2021で発表されたアップデート内容の検証をしていた際、最たるデメリットの一つがしれっと解消されていたことが判明しました。
1年以上前の過去データを書き込めなかった
過去の時間に設定したレコードを書き込もうとすると、ある期間を超えたときにエラーになってしまいます。
この"ある期間"というのは、エントリーストレージであるメモリストアにデータを保持しておくための期間のことです。本来は、この期間を過ぎると低速ながらも安価な磁気ストアにデータを自動で移動するためのAmazon Timestream特有の機能です。
ではこの期間を、過去データを書き込むときだけ長くしてしてしまえば書き込めるかと考えましたが、「1時間以上、12ヶ月以下」という制約が存在するため、古くても1年前までの過去データしか書き込めないということになってしまっていました。(図の一番上の設定)
An error occurred (RejectedRecordsException) when calling the WriteRecords operation: One or more records have been rejected. See RejectedRecords for details.
仮に1年前までの過去データまでしか使わない、むしろリアルタイムデータしか投入しない運用だとしても、手動でのバックアップやレプリケーション機能のないAmazon Timestreamにとっては、作り直したり迂闊に触ることの適わない厄介なデータストアの評価は免れないでしょう。
一度は構築できたデータソースがあるのに、作り直そうと思ったら過去データが投入できないという縛りを妥協するしかありませんでした。
磁気ストアに直接書き込めるようになったことで…!
AWS re:Invent 2021にて、高速で高価なメモリストアを介さずに、最初から低速で安価な磁気ストアに書き込める設定が追加されるという発表がありました。
それまでは、最低でも1時間はメモリストアに保持しておかなければいけなかったため、この設定を有効にすればコスト削減にはなるだろうと思って検証していましたが、
エントリストレージが磁気ストアになる → 投入できる期間が磁気ストアにデータを保持しておく期間になる
という事実が判明しました。
磁気ストアに保持しておく期間の設定範囲はというと、「1日以上、200年以下」です。(図の真ん中の設定)
試しに、50年前ぐらい(UNIXタイムで1000 = 1970/01/01)の過去データにして書き込んでみたら、問題なく書き込めました。
$ aws timestream-write write-records --database-name Samples --table-name Weather --records "Dimensions=[{Name=area,Value=Osaka}],MeasureName=temperature, MeasureValue=21,MeasureValueType=DOUBLE,Time=1000"
{
"RecordsIngested": {
"Total": 1,
"MemoryStore": 0,
"MagneticStore": 1
}
}
1970年より前はどうするのかという疑問は残りましたが、少なくとも50年以上前の過去データも書き込めるようになったのは、採用の幅が広がった印象です。