MySQLに格納している時系列データをTimestreamにインポートして検証を行ったときの情報です。
おことわり
先に書いておくと、Timestreamは結局使用していません。
スナップショットが取れず、PITR (Point In Time Recovery) 機能もない事が発覚したため。
折角使ってみたので参考として記しておきます。まぁそのうち機能追加されるかも知れないし?
Amazon Timestreamとは
時系列データに特化したデータベースです。
クラスメソッドさんの記事を読めば何となく分かるかと。
ちょっと補足すると、データの書き込みはAPIで行いますが
クエリはSQLで書く事ができます。なのでRDBライクに集計を行う事ができます。
仕様
- データ構造
Cloud Watchメトリクスのようなものです。
https://docs.aws.amazon.com/timestream/latest/developerguide/concepts.html - データ型
https://docs.aws.amazon.com/timestream/latest/developerguide/writes.html
TimestampはUnix Timeです。
インポートのコード
GitHubのサンプルコードを元に実装しました。
ちなみにドキュメントにもサンプルがありますが、部分的にしか書かれて無く、この通り書いても動きません(いやいや…)
作ったコードはGitHubに上げました。(かなりテキトウですが…)
https://github.com/sakojun/Timestream-from-MySQL
抜粋してちょっと補足
|
|
クエリの検証
こんな感じのクエリがMySQLで遅かったので検証しました。
|
|
MySQLで14秒掛かっていたのが、4秒程度になりました。
ただこれは後に、MySQLのインデックスの貼り方が悪かった事が判明し、適切にインデックスを貼った場合はMySQLの方が高速でした。
まぁ、インデックスを気にしなくていいというのは利点でしょうかね。
残念仕様の発覚
上の検証は全データがメモリストアに格納されている場合であったので
マグネティックストアの場合も検証しよう、その前にスナップショットを取ろう、とした所で前述の仕様が発覚しました。
複製して検証したい場合はどうしたら良いのでしょうか?
サポートに確認してみましたが、同様のデータをロードするしかないとの事。
これにはいくつかの問題があります。
- RDBとは違い、読み込みはSQLで書き込みはAPIであるため、単純にコピーできない。
- 一度に100件しか書き込めないので何時間も掛かってしまう。(分散処理するコードを書けば改善はできるが…)
- これらを乗り越えたとしても、1年以上前はそもそも書き込む事ができない。
Amazon Timestream であらゆる規模の時系列データを保存してアクセス – 一般提供が開始されましたTimestream にデータを書き込む場合、メモリストアの保持期間よりも古いデータを挿入することはできません。
またPITRもないので、リストアができません。
delete_recordsがないのでデータは消せないのでしょうが、もし誤って古いタイムスタンプのデータが書き込まれてしまったら、元に戻せないじゃないですか?
一応新しいデータをTimestreamに格納する方針にして、S3にも同時に書き込んどくという使い方はできそうです。(複製やリストアに時間がかかる問題は解消しないけど)
が、データのライフサイクル管理をデータベース側でやってくれる利点はどこ行ったとなりますね。。
どういう使い方を想定したサービスなのか、良く分からなくなりました。
いつかスナップショット機能が追加されないと使わなそうです。