DynamoDb-Tabelle Gestaltung: Einzelne Tabelle oder mehrere Tabellen

Ich bin ganz neu auf dem NoSQL-und DynamoDB und ich verwendet, um zu RDBMS. Ich bin der Gestaltung Datenbank für ein Spiel und wir sind mit DynamoDB und AWS Lambda für unsere backend. Ich erstellte eine Tabelle namens "Benutzer" für den Spieler-Profil enthält die Informationen für den Benutzer und Ressourcen. Weil das Spiel hat ein Inventar-system, die ich auch erstellt eine Tabelle namens "UserItems".

Es ist alles gut, bis ich gemerkt habe DynamoDB nicht Transaktion und jede operation, die ausgeführt wird, auf beiden Tabelle (z.B. mit einem Gegenstand, der Steigerung der Ressourcen) eine chance hat, Fehler an einem Tisch, während der Erfolg auf andere und bewirkt, dass Daten fehlen, die Auswirkungen auf unsere Kunden.

So, ich war vielleicht denken meine mehrere Tabellen-design ist nicht gut, da es eine Gewohnheit von mir zu entwerfen mehrere Tisch, wenn ich arbeiten bin mit RDBMS. Die lassen mir zu denken, da der gesamte "UserItems" als hash in "Benutzer" aber ich bin nicht sicher, dies ist eine gute Praxis, weil die Größe einer einzelnen Zeile in der Users-Tabelle wird sehr groß werden (vielleicht haben wir 500 einzigartige Gegenstände pro Benutzer) und jedes mal, wenn ich ziehen oder setzen von Daten von/zu "Benutzer" (die meisten der Zeit, müssen nicht "UserItems" Daten) die lese - /schreib-Durchsatz werden auch wirklich groß.

Was soll ich tun, halten Sie die mehrere Tabellen entwerfen und verarbeiten die Transaktion manuell oder wechseln Sie in den single-table-design? Oder gibt es vielleicht eine 3. option?

Aktualisiert: weitere Informationen über meine

Derzeit habe ich 2 Tabellen

  • Benutzer: Benutzer-id (key), Benutzername, Gold
  • UserItems: UserId (partition key) ItemId (sort key), Name, GoldValue

Szenarien:

  1. Benutzer einen Artikel kaufen: - Benutzer.Gold abgeleitet, neue UserItem werden hinzufügen UserItems Tabelle.
  2. Benutzer ein Element zu verkaufen: - Benutzer.Gold wird erhöht werden, wird der Artikel gelöscht UserItems Tabelle.

In beiden Szenarien oben, ich werde zu tun haben, 2 update-Vorgang für 2 Tabellen, die ohne Transaktion gibt es eine chance, einer von Ihnen ist fehlgeschlagen.

Lösen, dass ich in Erwägung ziehen, Einzel-Tisch-Lösung, die einem einzelnen Benutzer-Tabelle mit 4 Spalten, die Benutzer-id(key), Benutzername, Gold, UserItems. Allerdings gibt es zwei Dinge, die ich mache mir sorgen über:

  1. Daten in UserItems sein könnte, kommen zu groß für eine einzige Zelle, weil ein Nutzer bis zu 500 Artikel.
  2. Hinzufügen/löschen von Elementen ich habe das ziehen der UserItems von dynamodb, hinzufügen/löschen von item und setze es dann wieder in die Nutzer. Also muss ich tun, 1 Lesen und 1 schreiben Vorgang für 1 Aktion. Und wegen der Frage (1) Lesen/schreiben von Daten die Größe könnte wirklich groß.

InformationsquelleAutor Binh Luong | 2016-12-28

Schreibe einen Kommentar