0

私は、毎分約10kレコードの割合でデータを送信するkinesisのfirehoseストリームに基づいてs3 put操作をトリガーするpythonベースのラムダ関数を持っています。現在、ラムダ関数はデータの小さなフィックスアップを実行し、100のバッチでlogstashインスタンスに配信します。ラムダの実行時間は5〜12秒で、1分ごとに実行されるので問題ありません。AWSラムダ関数の高速データアクセス

ストリーミングされたデータをより多くの情報で充実させ、logstashに送信することを検討しています。入って来る各メッセージには「id」フィールドがあり、そのIDをある種のデータベースに対して検索し、データベースからいくつかの追加情報を取得し、それを渡す前にオブジェクトに挿入したいと考えています。

問題は、私はそれが十分に速く進むことはできません。 すべてのデータ(600kレコード)をDynamoDBに読み込み、ラムダ関数の各レコードループでルックアップを実行しようとしました。これは実行方法をあまりにも遅くします。それで私は、同じIDを2回も参照する必要がないと考えていたので、リストobjを使用して、すでに "ルックアップ"データを保持しています - これは実行時間を幾分落としましたが、 dが好きです。

次に、私はDBデータセット全体をプリロードすることを考えました。私はこれをテストしました。つまり、s3オブジェクトから各レコードをループし始める前にdynamodbから600レコードすべてを "キャッシュリスト"オブジェクトにダンプするだけです。データは約1分でダンプされますが、キャッシュリストが非常に大きくなり、各ルックアップが5秒かかる(dbを打つよりも遅くなります)。

私はここで何をするのか迷っています - ラムダがこれに適したプラットフォームではないかもしれないことを完全に理解しています。もしうまくいかないと他の製品に移行するかもしれませんが、私は、コミュニティがこのことをどのようにスピードアップするかについてのいくつかの指針を持っているかどうかを知ることができると思った。

答えて

1

データをRedisサーバーに事前ロードします。これはまさにレディスがうまくいくものです。

+0

うん、それはその場に出ました。私たちのラムダ関数をvpcの中に移動し、マイクロ・リダイス・キャッシュをスパンアップします。それは約8秒間のレコードと、約12秒で赤字の670kのレコードに対するルックアップをかき混ぜた。私に正しい方向を指してくれてありがとう! – Trondh

+0

うれしい私は助けることができます。 –