Webサービスがあると想像してください。
- サーバーのクラスター(nginx / node.js)で実行されます
- すべてのデータはリモートに保存されます
- 20ミリ秒以内に応答する必要があります
応答のために読み取る必要のあるデータは、このように分割されます。
BatchA
- AWSDynamoDBに保存されている何百万もの小さなオブジェクト
- ランダムにランダムに更新
- 一貫性のある読み取りのみ、キャッチできません
BatchB
- SQLで最大2,000レコード
- まれに更新され、最大1KBのレコード
- 60〜90年代まで捕まえることができます
BatchAから読み取るまで、BatchBからフェッチするレコードがわからないため、一度にすべてを読み取ることはできません。
DynamoDBからの読み取りには最大10ミリ秒かかります。離れた場所からBatchBを読み取ると、計算する時間がなくなるか、すでにタイムアウトになっている可能性があります。
私の現在の考えは、すべてのBatchBレコードを各ノードのメモリにロードすることです(これはわずか2MBです)。起動時に、システムはSQLサーバーに接続してすべてのレコードをフェッチし、60秒または90秒ごとに更新します。問題は、これを行うための最良の方法は何ですか?
それらをすべてnode.jsの変数(配列)に読み込んでから、SetTimeoutを使用して60〜90秒後に配列を更新するだけです。しかし、最善の解決策はありますか?