2016-04-01 15 views
0

Ich plane einige Funktionen unserer Website in DynamoDB zu verschieben. Jeder Benutzer hat ein Nachrichtenboard, auf dem andere Benutzer Nachrichten an sie senden können.Migration von MySQL tun DynamoDB

Unsere MySQL Tabelle sieht so aus: ID | AUTORID | NACHRICHT | BENUTZERID | TIMESTAMP


Was wäre der beste Partition Schlüssel und Sortierschlüssel in diesem Fall? Ich habe dieses Konzept noch nicht verstanden.

Auf mysql ist der Primärschlüssel ID, und es gibt einen Index auf USERID, so dass wir alle Nachrichten eines bestimmten Benutzers abrufen und nach ID sortieren können.

Danke. Mit freundlichen Grüßen

+0

Was sind Ihre Fragen? Um Partitionsschlüssel und Sortierschlüssel zu definieren, müssen Sie alle Ihre Abfragen beschreiben. –

+0

Wenn wir über mysql sprechen würden, wäre es in etwa so: SELECT * FROM Nachrichten WHERE USERID = '41 '; – valter

Antwort

1

Abhängig davon, wie viele Nachrichten Sie pro Benutzer haben (dh wenn es relativ wenige Nachrichten pro Benutzer geben wird), können Sie die UserID als Hash (oder Partition) Schlüssel und die ID (oder gerade Timestamp) als Bereichsschlüssel. Die Hauptanforderung ist, dass die Kombination aus Benutzer-ID und ID oder Benutzer-ID und Zeitstempel eindeutig sein muss und dass die Verteilung der Elemente in jedem Hash-Schlüssel einheitlich sein muss (dh alle Benutzer sollten ungefähr die gleiche Anzahl an Nachrichten haben).

Dies funktioniert gut, solange Sie keine Abfragen für eine bestimmte Nachricht erstellen müssen, ohne zu wissen, dass es sich um einen zugeordneten Benutzer handelt. Dies kann in der Logik Ihrer Anwendung gemildert werden, indem Sie immer den Benutzerkontext verfolgen, oder Sie können die ID als zusammengesetzten Wert ändern, der aus der Benutzer-ID und dem numerischen Wert besteht: So würde eine Nachrichten-ID wie folgt aussehen: "123 , 34 ", wobei" 123 "die Benutzer-ID und" 34 "die Nachrichten-ID ist.

Eine weitere mögliche Option besteht darin, die Nachrichten-ID als Hash-Schlüssel zu verwenden und eine Global Secondary Index (GSI) mit einem Partitionsschlüssel unter Benutzer-ID zu erstellen.

Ich empfehle, dass Sie this document lesen, die guidelines for working with tables and specifically about working with partitions gibt.

Verwandte Themen