DynamoDB Bereichsschlüssel-Spalte ändern

9

Ist es möglich, nach der Tabellenerstellung die Spalte Rankey zu ändern? Dazu gehört das Hinzufügen einer neuen Spalte / eines neuen Attributs und die Zuweisung als RangeKey für die Tabelle. Ich habe versucht, zu suchen, kann aber keine Artikel finden, in denen der Range- oder Hash-Schlüssel geändert wird.

    
arvindwill 23.06.2014, 04:30
quelle

2 Antworten

13

Nein, leider ist es nicht möglich, den Hash-Schlüssel, den Bereichsschlüssel oder die Indizes zu ändern, nachdem eine Tabelle in DynamoDB erstellt wurde. Die UpdateItem API-Dokumentation von DynamoDB macht deutlich, dass Indizes nicht geändert werden können. Ich kann keinen Verweis auf eine Stelle in der Dokumentation finden, die explizit angibt, dass die Tabellenschlüssel nicht geändert werden können, aber derzeit nicht geändert werden können.

Beachten Sie, dass DynamoDB außer dem Hash- und Bereichsschlüssel schemalos ist. Sie können anderen Elementen problemlos neue Attribute hinzufügen. Wenn Sie Ihren Hash- oder Bereichsschlüssel ändern müssen, müssen Sie leider eine neue Tabelle erstellen und die Daten migrieren.

Bearbeiten (Januar 2014) : DynamoDB unterstützt jetzt globale Sekundärindizes im laufenden Betrieb

    
rpmartz 23.06.2014, 10:25
quelle
2

Um einen zusätzlichen Sortierschlüssel zu ändern oder zu erstellen, müssen Sie eine neue Tabelle erstellen und dorthin migrieren, da beide Aktionen nicht für vorhandene Tabellen ausgeführt werden können.

Mit DynamoDB-Streams können Tabellen ohne Ausfallzeiten migriert werden. Ich habe das sehr effektiv gemacht, und die Schritte, denen ich gefolgt bin, sind:

  1. Erstellen Sie eine neue Tabelle (nennen wir sie NewTable) mit der gewünschten Schlüsselstruktur, LSIs, GSIs.
  2. Aktivieren Sie DynamoDB-Streams für die ursprüngliche Tabelle
  3. Ordnen Sie dem Stream ein Lambda zu, das den Datensatz in NewTable verschiebt. (Dieses Lambda sollte das Migrationsflag in Schritt 5 abschneiden)
  4. [ Optional ] Erstellen Sie eine GSI auf der Originaltabelle, um die Scan-Objekte zu beschleunigen. Stellen Sie sicher, dass diese GSI nur Attribute hat: Primärschlüssel und migriert (siehe Schritt 5).
  5. Scannen Sie das im vorherigen Schritt erstellte GSI (oder die gesamte Tabelle) und verwenden Sie den folgenden Filter:

    FilterExpression="attribut_not_exists (migriert)"

Aktualisieren Sie jedes Element in der Tabelle mit einem Migrationsflag (z. B. "migriert": {"S": "0"), das es an die DynamoDB-Streams sendet (mithilfe der UpdateItem-API, um sicherzustellen, dass kein Datenverlust auftritt).

HINWEIS : Möglicherweise möchten Sie während der Aktualisierungen die Schreibkapazitätseinheiten in der Tabelle erhöhen.

  1. Das Lambda wird alle Gegenstände aufnehmen, das Migrierte Flag abschneiden und es in NewTable schieben.
  2. Nachdem alle Elemente migriert wurden, verweisen Sie den Code erneut auf die neue Tabelle
  3. Entfernen Sie die ursprüngliche Tabelle und Lambda-Funktion, sobald alles gut ist.

Die folgenden Schritte sollten sicherstellen, dass Sie keinen Datenverlust und keine Ausfallzeiten haben.

Ich habe dies in meinem Blog dokumentiert, mit Code zur Unterstützung: Ссылка

    
Abhaya Chauhan 01.01.2018 23:40
quelle

Tags und Links