Ich möchte ein Spiel erstellen, das Azure Table Storage für die Bestenliste verwendet.Verwenden von Score + GUID Als RowKey für ein Spiel mit Azure-Tabellenspeicher
Es wurde empfohlen, dass ich, wenn ich möchte, dass Azure Table Storage mir eine sortierte/seitenweise Liste präsentiert, den Score als RowKey für meine Tabellenentität verwenden muss. (Ich werde einen Spieler GUID anzuhängen, um sicherzustellen, dass jede erzeugte RowKey einzigartig ist.)
Hier sind meine Bedenken mit dieser Empfehlung:
Andere Spieler können einen Spieler-Score (wie es abnehmend) , so dass Nebenläufigkeitsfragen in Betracht gezogen werden können. Wenn ein Spielclient versucht, die Punktzahl eines Spielers zu aktualisieren, und ich die vorherige Punktzahl verwende, um nach der Tabellenentität zu suchen, kann ich diese Zeile möglicherweise nicht finden, wenn ein anderer Client sie bereits aktualisiert hat.
Wenn Sie ein anderes Feld verwenden, um nach der Tabellenentität (Partition + Attribut) zu suchen, z. B. nach dem Spielernamen, wird die Abfrage nicht optimal sein.
Welches ist ein besserer Ansatz für Zeilenaktualisierungen? Soll ich Sperrtechniken verwenden und nach RowKey suchen? Oder suche ich mit dem Benutzernamen?
Oder sollte ich die Idee, Score als RowKey zu verwenden und die Sortierung im Speicher nach dem Abrufen einer vollständigen Tabelle, um eine Seite in der Bestenliste anzuzeigen, aufgeben?
Nehmen wir einmal an, dass die Punktzahl Updates und Leaderboard Viewing gleich häufig sind.
Ich endete mit Partition + Attribut Abfrage als erste Sache in einem Wiederholungszyklus zu tun, dann die Updates innerhalb dieses Blocks. Wenn es aus irgendeinem Grund fehlschlägt, versucht es, die Entität mit derselben Abfrage erneut abzurufen. Es tritt nach einer Anzahl von Wiederholungen aus. Es ist nicht effizient, aber es ist die einzige Möglichkeit, die ich mir vorstellen kann, ohne auf Singleton-Lösungen wie Azure Queue + einen einzigen fortlaufenden Web-Job zurückgreifen zu müssen, der mindestens eine Basic-Instanz benötigt. –