Ich möchte nur sehen, ob dies der beste Weg zur Lösung dieses Problems ist.DynamoDB-Index mit niedriger Verteilung abfragen
Szenario
Wir bauen ein Online-Managerspiel Sport. In unserem Spiel gibt es Teams, und die Mannschaften spielen sich gegenseitig in sogenannten "Fixtures".
Zu Beginn jeder Saison werden die Spielpläne für die Saison erstellt und in eine Tabelle eingegeben, z. Ein Fixture Item kann Team 1 gegen Team 2, 1. Dezember, 19 Uhr angeben.
Das Gameplay für jedes Gerät wird zum Startzeitpunkt des Geräts erstellt, um Änderungen zu berücksichtigen, die die Teambesitzer bis zu diesem Zeitpunkt gemacht haben.
Wir haben einen Scheduler, der die Tabelle für Fixtures überprüfen muss, die: 1) nicht ausgeführt wurden und 2) deren Startdatum jetzt <=
ist. Wir fügen "weniger als" hinzu, so dass wir im Falle von Systemproblemen oder Ausfallzeiten alle Übereinstimmungen nachholen können, die möglicherweise noch auf die Ausführung warten.
Problem
Wie wir eine große DynamoDB Tabelle für die Lampen suchen haben, die noch nicht ausgeführt haben, und das Datum, dessen Start ist jetzt oder früher.
Aktuelle Lösung
Der aktuelle Plan ist ein boolean Feld HasNotRun
anfänglich auf true
, zusammen mit dem Date
Feld mit dem Namen zu erstellen. Wir erstellen dann einen spärlichen globalen sekundären Index mit dem Feld HasNotRun
als Partitionsschlüssel, um alle Fixtures noch nicht auszuführen, und verwenden Date
als sortierten Bereichsschlüssel und filtern danach. Sobald die Übereinstimmung ausgeführt wird, wird das Feld HasNotRun
aus dem Element entfernt, und somit wird das Element aus dem Sparse-Index entfernt.
Da jedoch das Feld HasNotRun
immer ein einzelner Wert von true
ist, befinden sich alle Elemente in diesem Index immer in einer einzigen Partition, was nicht die beste Methode zur Verwendung von DynamoDB zu sein scheint.
Ein besserer Weg?
Wenn es einen besseren Weg gibt, dieses Problem zu lösen, würden wir es gerne hören. Wir wissen, dass es da draußen ist!