デバイスからイベントを収集する AWS Kinesis ストリームからのデータを処理する必要があります。最後の 10 秒間に受信したすべてのイベントで、処理関数を毎秒呼び出す必要があります。
たとえば、ストリームにイベントを書き込む 2 つのデバイス A と B があるとします。私のプロシージャの名前は MyFunction で、次のパラメーターを取ります。
- デバイスID
- 期間のデータの配列
10:00:00 に処理を開始した場合 (デバイス A と B の過去 10 秒間のイベントが既に蓄積されている場合)、次の 2 つの呼び出しを行う必要があります。
- MyFunction(А, {09:59:50 から 10:00:00 までのデバイス A のイベント})
- MyFunction(B, {09:59:50 から 10:00:00 までのデバイス B のイベント})
次の秒、10:00:01
- MyFunction(А, {09:59:51 から 10:00:01 までのデバイス A のイベント})
- MyFunction(B, {09:59:51 から 10:00:01 までのデバイス B のイベント})
等々。
デバイスから受信したすべてのデータを蓄積する最も簡単な方法は、メモリを一時バッファーに格納すること (もちろん、最後の 10 秒間のみ) のように見えるので、最初にこれを試してみたいと思います。
このようなメモリ ベースのバッファを保持する最も便利な方法は、Java Kinesis Client Library (KCL) ベースのアプリケーションを作成することです。
AWS Lambda ベースのソリューションも検討しましたが、ラムダのデータをメモリに保持することは不可能のようです。Lambda のもう 1 つのオプションは、2 つの関数を使用することです。最初の関数はすべてのデータを DynamoDB に書き込む必要があり、2 つ目の関数は毎秒呼び出されて、メモリからではなく db からフェッチされたデータを処理します。(したがって、このオプションははるかに複雑です)
私の質問は次のとおりです。そのような処理を実装するための他のオプションは何ですか?