これがこの問題を解決する最善の方法であるかどうかを確認するだけです。低分布のDynamoDBインデックスのクエリ
シナリオ
我々は、オンラインスポーツマネージャーのゲームを構築しています。試合にはチームがあり、チームは「フィクスチャ」と呼ばれるものでお互いにプレイします。
各シーズンの開始時に、シーズン用のフィクスチャが作成され、テーブルに登録されます。フィクスチャアイテムは、チーム1対チーム2、12月1日午後7時を指定することができます。
チームのオーナーがその時点までに行った変更を考慮に入れて、各フィクスチャのゲームプレイがフィクスチャの開始時刻に作成されます。
私たちは、1)実行していない、2)開始日が<=
のフィクスチャをテーブルでチェックする必要があるスケジューラを持っています。システムの問題やダウンタイムが発生した場合でも、実行待ちの可能性のある一致を追い抜くことができるように、「より小さい」が含まれています。
問題
どのように我々はまだ実行していない備品のための大規模なDynamoDBのテーブルを検索し、その開始日になりましたか早いん。
現在のソリューション
現在の計画では、Date
フィールドと一緒に、最初はtrue
に設定HasNotRun
と呼ばれるブール型フィールドを作成することです。次に、HasNotRun
フィールドをパーティションキーとして使用して、すべてのフィクスチャをまだ実行しないようにし、Date
をソートされた範囲キーとして使用し、それをフィルタリングするスパースなグローバルセカンダリインデックスを作成します。一致が実行されると、HasNotRun
フィールドがアイテムから削除され、アイテムがスパースインデックスから削除されます。
フィールドは常にtrue
の単一の値になるため、このインデックスのすべての項目は常にDynamoDBを使用する最良の方法のようには見えない単一のパーティションになります。
良い方法はありますか?
この問題を解決するには、より良い方法がある場合は、それを聞いてみたいです。私たちはそれがそこにあることを知っている!