Bigtable für DynamoDB-Nutzer

Dieses Dokument richtet sich an DynamoDB-Entwickler und -Datenbanken. Administratoren, die Daten migrieren oder Anwendungen zur Verwendung mit Bigtable als Datenspeicher. Vor dem Lesen lesen Sie die Bigtable-Übersicht.

Bigtable und DynamoDB sind verteilte Speicher für Schlüssel/Wert-Paare, die Abfragen pro Sekunde (Queries per Second, QPS), stellen Sie Speicher bereit, der bis zu Petabyte an Daten und tolerieren Knotenausfälle.

Die Funktionen dieser Datenbankdienste sind zwar ähnlich, wie sich ihre zugrunde liegenden Architekturen und Interaktionsdetails so unterscheiden, die Sie kennen sollten, bevor Sie mit der Migration beginnen. In diesem Dokument werden Highlights die Ähnlichkeiten und Unterschiede zwischen den beiden Datenbanksystemen.

Steuerungsebene

In DynamoDB und Bigtable können Sie mit der Steuerungsebene und Ressourcen einrichten und verwalten. DynamoDB ist ein serverloses Produkt, und die höchste Interaktionsebene mit DynamoDB ist die Tabellenebene. In Modus „Bereitgestellte Kapazität“. Hier stellen Sie Lese- und Anfrageeinheiten anfordern, Regionen und Replikation auswählen und Sicherungen verwalten. Bigtable ist kein serverloses Produkt. müssen Sie eine Instanz erstellen mit einem oder mehreren Clustern, deren Kapazität durch die Anzahl der Knoten bestimmt wird die sie haben. Weitere Informationen zu diesen Ressourcen finden Sie unter Instanzen, Cluster und Knoten.

In der folgenden Tabelle werden die Ressourcen der Steuerungsebene für DynamoDB und Bigtable.

DynamoDB Bigtable
Tabelle : Eine Sammlung von Elementen mit einer definierten primären Tabelle. . Tabellen haben Einstellungen für Sicherungen. Replikation und Kapazität. Instanz:Eine Gruppe von Bigtable-Clustern in verschiedenen Google Cloud-Zonen oder -Regionen, zwischen denen Replikationen und Verbindungsrouting. Replikationsrichtlinien werden festgelegt an der Instanzebene.

Cluster:Eine Gruppe von Knoten in derselben geografischen Region. Google Cloud-Zone, idealerweise zusammen mit Ihrer Anwendung für Latenz- und Replikationszwecke. Die Kapazität wird verwaltet von und die Anzahl der Knoten in jedem Cluster anpassen.

Tabelle: Eine logische Organisation von Werten, die nach Zeilenschlüssel indexiert.

Sicherungen werden auf Tabellenebene gesteuert.
Lesekapazitätseinheit (RCU) und Schreibkapazitätseinheit (WCU): Einheiten, die Lese- oder Schreibvorgänge pro Sekunde mit festen Payload-Größe. Ihnen werden Lese- oder Schreibeinheiten pro mit größeren Nutzlasten.

UpdateItem-Vorgänge verbrauchen die Schreibkapazität, die für den größte Größe eines aktualisierten Artikels – entweder vor oder nach dem Update – auch wenn die Aktualisierung nur eine Teilmenge der Attribute des Artikels umfasst.
Knoten:Eine virtuelle Rechenressource, die für das Lesen und Schreiben von Daten. Die Anzahl der Knoten in einem Cluster zu Durchsatzlimits für Lese-, Schreib- und Scanvorgänge. Sie können die Anzahl der Knoten abhängig von der Kombination Ihrer Latenzziele, Anzahl der Anfragen und Nutzlastgröße.

SSD-Knoten bieten im Gegensatz zu anderen den deutlichen Unterschied zwischen RCU und WCU. Weitere Informationen Siehe Leistung bei typischer Arbeitslast
Partition : Ein Block von zusammenhängenden Zeilen, unterstützt durch Solid State Drives (SSDs), die zusammen mit Knoten platziert sind.

Jede Partition unterliegt einem festen Limit von 1.000 WCUs, 3.000 RCUs, und 10 GB Daten.
Tablet: Ein Block von zusammenhängenden Zeilen mit dem Speichermedium Ihrer Wahl (SSD oder HDD)

Tabellen sind in Tablets fragmentiert, um die Arbeitslast zu verteilen. Tablets sind nicht auf Knoten in Bigtable gespeichert, sondern auf den verteilten Dateisystem, das eine schnelle Umverteilung von Daten ermöglicht bei der Skalierung und erhöhen die Langlebigkeit, da in mehreren Kopien.
Globale Tabellen : Eine Möglichkeit, die Verfügbarkeit und Langlebigkeit Ihrer Daten durch die automatische Weitergabe von Datenänderungen in mehreren Regionen. Replikation : Eine Möglichkeit, die Verfügbarkeit und Langlebigkeit Ihrer Daten durch die automatische Weitergabe von Datenänderungen in mehreren Regionen oder Zonen innerhalb eines Region
Nicht zutreffend (N/A) Anwendungsprofil : Einstellungen, die wie ein Client-API-Aufruf an die entsprechenden Cluster in der Instanz. Sie können auch ein App-Profil verwenden, als Tag, um Messwerte für die Attribution zu segmentieren.

Geografische Replikation

Replikation wird verwendet, um Kundenanforderungen in folgenden Bereichen zu erfüllen:

  • Hochverfügbarkeit für die Geschäftskontinuität bei zonalen oder regionalen Ausfall.
  • Ihre Dienstdaten in unmittelbarer Nähe zu Endnutzern für Bereitstellung mit niedriger Latenz überall auf der Welt.
  • Arbeitslastisolierung, wenn Sie eine Batcharbeitslast auf einem Gerät implementieren müssen und auf die Replikation auf Bereitstellungscluster angewiesen sind.

Bigtable unterstützt replizierte Cluster in so vielen Zonen die in bis zu acht Google Cloud-Regionen verfügbar sind, Bigtable ist verfügbar. Die meisten Regionen haben drei Zonen. Bigtable repliziert Daten automatisch clusterübergreifend in einem Multi-primäre Topologie, d. h., Sie können in jedem Cluster lesen und schreiben. Die Bigtable-Replikation ist Eventual Consistency. Weitere Informationen finden Sie unter die Replikation – Übersicht

DynamoDB bietet globale Tabellen um die Tabellenreplikation über mehrere Regionen hinweg zu unterstützen. Globale Tabellen sind mehrere primäre Instanzen erstellen und automatisch regionsübergreifend replizieren. Replikation ist Eventual Consistency.

In der folgenden Tabelle sind Replikationskonzepte und ihre Verfügbarkeit aufgeführt in DynamoDB und Bigtable.

Attribut DynamoDB Bigtable
Multi-primäre Replikation Ja.

Sie können in jeder globalen Tabelle lesen und schreiben.
Ja.

Sie können in jedem Bigtable-Cluster lesen und schreiben.
Konsistenzmodell Schließlich konsistent.

Read-Your-Writes-Konsistenz auf regionaler Ebene für globale Tabellen.
Schließlich konsistent.

Read-Your-Writes-Konsistenz auf Clusterebene für alle vorausgesetzt, dass Sie Lese- und Schreibvorgänge an denselben Cluster senden.
Replikationslatenz Kein Service Level Agreement (SLA).

Sekunden
Kein SLA.

Sekunden
Detaillierungsgrad der Konfiguration Tabellenebene. Instanzebene.

Eine Instanz kann mehrere Tabellen enthalten.
Implementierung Globale Tabelle mit einem Tabellenreplikat in jeder ausgewählten Tabelle erstellen Region

Regionale Ebene.

Automatische Replikation über Replikate hinweg durch Konvertierung einer Tabelle in einen globalen Tabelle.

Für die Tabellen müssen DynamoDB-Streams aktiviert sein, mit dem Stream das sowohl das neue als auch das alte Bild des Artikels enthält.

Löschen Sie eine Region, um die globale Tabelle in dieser Region zu entfernen.
Instanz mit mehr als einem Cluster erstellen
Die Replikation erfolgt automatisch clusterübergreifend in dieser Instanz.

Zonale Ebene.

Cluster zu Bigtable hinzufügen und daraus entfernen Instanz.
Replikationsoptionen Pro Tabelle. Pro Instanz.
Traffic-Routing und -Verfügbarkeit Traffic, der an das nächstgelegene geografische Replikat weitergeleitet wird.

Im Falle eines Fehlers wenden Sie benutzerdefinierte Geschäftslogik an, wann Anfragen in andere Regionen weitergeleitet werden sollen.
Mit Anwendungsprofilen konfigurieren Routingrichtlinien für Clustertraffic.

Verwenden Sie Multi-Cluster-Routing, um Traffic automatisch an den nächsten fehlerfreien Cluster.

Im Falle eines Fehlers unterstützt Bigtable automatische Failover zwischen Clustern für Hochverfügbarkeit.
Skalierung Die Schreibkapazität in replizierten Schreibanfrageeinheiten (R-WRU) beträgt Replikaten synchronisiert.

Die Lesekapazität in replizierten Lesekapazitätseinheiten (R-RCU) beträgt pro Replikat.
Sie können Cluster unabhängig skalieren, indem Sie Knoten in jeden replizierten Cluster nach Bedarf.
Cost R-WRUs kosten 50% mehr als normale WRUs. Die Knoten und der Speicher jedes Clusters werden Ihnen in Rechnung gestellt.
Für die regionale Replikation fallen keine Kosten für die Netzwerkreplikation an zonenübergreifend.
Wenn die Replikation über Regionen oder Kontinente hinweg stattfindet, fallen Kosten an.
SLA 99,999 % 99,999 %

Datenebene

In der folgenden Tabelle werden Datenmodellkonzepte für DynamoDB verglichen und Bigtable. Jede Zeile in der Tabelle beschreibt entsprechende Merkmale. Ein Element in DynamoDB ähnelt beispielsweise einer Zeile in Bigtable.

DynamoDB Bigtable
Item (Artikel): Eine Gruppe von Attributen, die eindeutig ist. unter allen anderen Elementen anhand ihres Primärschlüssels identifiziert werden kann. Maximal Die zulässige Größe beträgt 400 KB. Zeile : Eine einzelne Entität, die durch den Zeilenschlüssel identifiziert wird. Die maximal zulässige Größe beträgt 256 MB.
Spaltenfamilie: Ein benutzerdefinierter Namespace, der gruppiert.
Attribut : Eine Gruppierung aus einem Namen und einem Wert. Eine Attributwert kann ein skalarer Wert, ein Satz oder ein Dokumenttyp sein. Es gibt keine explizite Begrenzung für die Attributgröße selbst. Da jedes Element jedoch auf 400 KB begrenzt ist, gilt für einen Artikel mit nur einem Attribut das Attribut bis zu 400 KB abzüglich der vom Attributnamen. Spaltenqualifizierer : Die eindeutige Kennung innerhalb einer Spaltenfamilie für eine Spalte. Die vollständige Kennzeichnung einer Spalte Spaltenfamilie:Spaltenqualifizierer. Spaltenqualifizierer sind lexikografisch innerhalb der Spaltenfamilie sortiert.

Die maximal zulässige Größe für einen Spaltenqualifizierer beträgt 16 KB.


Zelle: Eine Zelle enthält die Daten für eine bestimmte Zeile, Spalte, und Zeitstempel. Eine Zelle enthält einen Wert, der bis zu 100 MB groß sein kann.
Primärschlüssel : Eine eindeutige Kennung für ein Element in einem . Dies kann ein Partitionierungsschlüssel oder ein zusammengesetzter Schlüssel sein.

Partitionierungsschlüssel: Ein einfacher Primärschlüssel, der aus einem Schlüssel . Damit wird die physische Partition festgelegt, in der sich das Element befindet befindet. Die maximal zulässige Größe beträgt 2 KB.

Sortierschlüssel: ein Schlüssel, der die Reihenfolge der Zeilen bestimmt innerhalb einer Partition. Die maximal zulässige Größe beträgt 1 KB.

Zusammengesetzter Schlüssel: ein Primärschlüssel, der aus zwei Schlüssel besteht den Partitionsschlüssel und einen Sortierschlüssel oder ein Bereichsattribut.
Zeilenschlüssel : Eine eindeutige Kennung für ein Element in einer Tabelle. Wird normalerweise durch eine Verkettung von Werten und Trennzeichen dargestellt. Die maximal zulässige Größe beträgt 4 KB.

Spaltenqualifizierer können für das Auslieferungsverhalten verwendet werden. entspricht dem Sortierschlüssel von DynamoDB.

Zusammengesetzte Schlüssel können mit verketteten Zeilen erstellt werden. Schlüssel und Spaltenqualifizierer.

Weitere Informationen finden Sie im Beispiel zur Schemaübersetzung unter „Schema“ Design dieses Dokuments.

Gültigkeitsdauer : Zeitstempel pro Element bestimmen, wann ein wird nicht mehr benötigt. Nach dem Datum und der Uhrzeit der angegebenen wird das Element aus der Tabelle gelöscht, ohne Durchsatz für Schreibvorgänge. Garbage Collection : Mit Zeitstempeln pro Zelle wird bestimmt, wenn ein Artikel nicht mehr benötigt wird. Löschungen der automatischen Speicherbereinigung abgelaufen während eines Hintergrundprozesses, der als Verdichtung bezeichnet wird. Müll Sammlungsrichtlinien werden auf Spaltenfamilienebene festgelegt und können nicht nur auf Basis ihres Alters, sondern auch aufgrund der Anzahl Versionen verwalten, die Nutzende verwalten möchten. Sie müssen keine Kapazität für die Verdichtung beim Anpassen der Clustergröße.

Operations-Suite

Mit Vorgängen auf der Datenebene können Sie Erstellen, Lesen, Aktualisieren und Löschen (CRUD) ausführen Aktionen für Daten in einer Tabelle. In der folgenden Tabelle werden ähnliche Datenebenen verglichen. Operationen für DynamoDB und Bigtable.

DynamoDB Bigtable
CreateTable CreateTable
PutItem
BatchWriteItem
MutateRow
MutateRows
Bigtable behandelt Schreibvorgänge als Upserts.
UpdateItem
  • Bedingtes Schreiben
  • Erhöhen und verringern

Bigtable behandelt Schreibvorgänge als Upserts.
GetItem
BatchGetItem, Query, Scan
`ReadRow`
ReadRows“ (Bereich, Präfix, Umgekehrter Scan)
Bigtable ermöglicht effizientes Scannen nach Zeilenschlüsselpräfix, Muster für reguläre Ausdrücke oder Zeilenschlüsselbereich vor oder zurück.

Datentypen

Sowohl Bigtable als auch DynamoDB sind schemalos. Spalten können definiert werden beim Schreiben ohne tabellenweite Erzwingung für das Vorhandensein von Spalten oder Daten Typen. Ebenso kann sich eine bestimmte Spalte oder ein bestimmter Attributdatentyp von einer Zeile unterscheiden. oder Element zu einem anderen Element. Die DynamoDB- und Bigtable-APIs haben jedoch mit Datentypen auf unterschiedliche Weise.

Jede DynamoDB-Schreibanfrage enthält eine Typdefinition für jedes Attribut, die mit der Antwort für Leseanfragen zurückgegeben wird.

Bigtable behandelt alles als Byte und erwartet den Clientcode um Typ und Codierung zu erfahren, damit der Client die Antworten korrekt parsen kann. Hiervon ausgenommen sind inkrementieren Operationen, die die Werte als vorzeichenbehaftete 64-Bit-Big-Endian-Ganzzahlen interpretieren.

In der folgenden Tabelle werden die Unterschiede bei den Datentypen zwischen DynamoDB und Bigtable.

DynamoDB Bigtable
Skalare Typen : Wird als Datentyp zurückgegeben. deskriptor-Token in der Serverantwort. Byte : Byte werden in die gewünschten Typen im Client umgewandelt. .

Increment interpretiert den Wert als Big-Endian-Ganzzahl mit Vorzeichen (64 Bit)
Set : Eine unsortierte Sammlung eindeutiger Elemente. Spaltenfamilie : Sie können Spaltenqualifizierer wie festgelegt verwenden. Mitgliedsnamen und geben Sie für jedes Mitglied ein einzelnes 0-Byte als Zelle Wert. Satzmitglieder werden innerhalb ihrer Spalte lexikografisch sortiert. Familie.
Zuordnung: Eine unsortierte Sammlung von Schlüssel/Wert-Paaren mit eindeutigen Schlüsseln. Spaltenfamilie
Verwenden Sie einen Spaltenqualifizierer als Zuordnungsschlüssel und Zellenwert für den Wert. Zuordnungsschlüssel lexikografisch sortiert werden.
Liste : Eine sortierte Sammlung von Elementen. Spaltenqualifizierer
Verwenden Sie den Einfügen-Zeitstempel, um das Äquivalent von list_append zu erhalten. Umgekehrt zum Einfügen des Zeitstempels für das Präfix.

Schemadesign

Eine wichtige Überlegung beim Schemadesign ist die Speicherung der Daten. Unter den Die Hauptunterschiede zwischen Bigtable und DynamoDB bestehen darin, Folgendes:

  • Aktualisierung einzelner Werte
  • Datensortierung
  • Datenversionsverwaltung
  • Speicherung großer Werte

Aktualisierung einzelner Werte

UpdateItem-Vorgänge in DynamoDB verbrauchen die Schreibkapazität für den größeren der das „Vorher“ und „nachher“ auch wenn die Aktualisierung nur eine Teilmenge der die Attribute des Artikels. Das bedeutet, dass Sie in DynamoDB häufig aktualisierte Spalten in separaten Zeilen, auch wenn sie logisch in dieselbe Zeile gehören, anderen Spalten.

Bigtable kann eine Zelle genauso effizient aktualisieren, unabhängig davon, ob es sich um die nur eine Spalte in einer bestimmten Zeile oder eine aus vielen Tausend. Weitere Informationen finden Sie unter Einfache Schreibvorgänge:

Datensortierung

DynamoDB-Hashes und zufällig verteilte Partitionsschlüssel, während Bigtable speichert Zeilen in lexikografischer Reihenfolge nach Zeilenschlüssel und jegliche Hash-Technologie bleibt dem Nutzer überlassen.

Die Zufallsschlüsselverteilung ist nicht für alle Zugriffsmuster optimal. Sie reduziert die das Risiko von heißen Zeilenbereichen, aber werden Zugriffsmuster mit Scans erstellt, über Partitionsgrenzen hinweg, kostenintensiv und ineffizient. Diese unbegrenzten Scans sind insbesondere bei Anwendungsfällen mit einer Zeitdimension.

Umgang mit dieser Art von Zugriffsmuster – Scans, die bereichsübergreifend arbeiten Grenzen – erfordert einen sekundären Index in DynamoDB, aber Bigtable verarbeitet sie, ohne dass ein sekundärer Index erforderlich ist. Ebenso sind in DynamoDB Abfrage- und Scanvorgänge auf 1 MB Daten beschränkt. und eine Paginierung ist über diesen Grenzwert hinaus erforderlich. Bigtable enthält keine zu erreichen.

Trotz der zufällig verteilten Partitionsschlüssel kann DynamoDB heiße Partitionen Ein ausgewählter Partitionierungsschlüssel verteilt Traffic nicht einheitlich, sich negativ auf den Durchsatz auswirkt. Um dieses Problem zu beheben, empfiehlt DynamoDB, Schreibfragmentierung, bei der Schreibvorgänge zufällig auf mehrere logische Partitionen aufgeteilt werden Schlüsselwerten.

Um dieses Designmuster anzuwenden, müssen Sie eine Zufallszahl aus (z. B. 1 bis 10) und diese Zahl dann als logische Partition . Da Sie den Partitionsschlüssel randomisieren, werden die Schreibvorgänge in die Tabelle gleichmäßig auf alle Partitionsschlüsselwerte verteilt.

Bigtable bezeichnet dieses Verfahren Key Salting und kann eine effektive Methode sein, um heiße Tabletten zu vermeiden.

Datenversionsverwaltung

Jede Bigtable-Zelle hat einen Zeitstempel und den neuesten Zeitstempel ist immer der Standardwert für eine gegebene Spalte. Ein häufiger Anwendungsfall für ist die Versionsverwaltung, also das Schreiben einer neuen Zelle in eine Spalte, die von vorherigen Versionen der Daten für diese Zeile und Spalte durch ihre Zeitstempel.

DynamoDB hat kein solches Konzept und erfordert komplexe Schemadesigns um die Versionsverwaltung zu unterstützen. Bei diesem Ansatz werden zwei Kopien jedes Elements erstellt: eine Kopie mit dem Präfix Null, z. B. v0_, am Anfang des Sortierschlüssels und eine weitere Kopie mit dem Versionsnummernpräfix 1, z. B. v1_. Jedes Mal, wenn das Element aktualisiert wird, verwenden Sie das nächsthöhere Versionspräfix in den Sortierschlüssel der aktualisierten Version und kopieren Sie den aktualisierten Inhalt in das Element mit dem Versionspräfix Null. Dadurch wird sichergestellt, dass die neueste Version mit dem Präfix Null gefunden werden. Diese Strategie erfordert nicht nur Anwendungsseitige Logik zu verwalten, macht aber auch Datenschreibvorgänge sehr kostspielig und langsam, da jeder Schreibvorgang einen Lesevorgang des vorherigen Werts plus zwei erfordert. schreibt.

Mehrzeilige Transaktionen im Vergleich zu großen Zeilenkapazität

Bigtable unterstützt keine mehrzeiligen Transaktionen. Das liegt jedoch nicht daran, Sie können damit Zeilen speichern, die viel größer sind, als Elemente enthalten können. DynamoDB können Sie die beabsichtigte Transaktionalität oft ermitteln, indem Sie Ihre Schemas so entwerfen, dass relevante Elemente unter einem gemeinsamen Zeilenschlüssel gruppiert werden. Für eine Ein Beispiel für diesen Ansatz finden Sie unter Design einer einzelnen Tabelle. Muster.

Große Werte speichern

Da ein DynamoDB-Element, das einer Bigtable-Zeile entspricht, auf 400 KB begrenzt ist, muss der Wert entweder geteilt werden, oder die Speicherung in anderen Medien, S3: Beide diese Ansätze erhöhen die Komplexität Ihrer Anwendung. Im Gegensatz dazu Bigtable-Zelle kann bis zu 100 MB speichern und eine Bigtable- kann bis zu 256 MB unterstützen.

Beispiele für die Schemaübersetzung

Die Beispiele in diesem Abschnitt übersetzen Schemas von DynamoDB in Bigtable unter Berücksichtigung der wichtigsten Unterschiede im Schemadesign.

Grundlegende Schemas migrieren

Produktkataloge sind ein gutes Beispiel zur Veranschaulichung des grundlegenden Schlüssel/Wert-Musters. Im Folgenden sehen Sie, wie ein solches Schema in DynamoDB aussehen könnte.

Primärschlüssel Attribute
Partitionierungsschlüssel Sortierschlüssel Beschreibung Preis Miniaturansicht
Hüte Filzhut#brandA Hergestellt aus hochwertiger Wolle... 30 https://storage…
Hüte Filzhut#brandB Strapazierfähiges wasserabweisendes Canvas mit... 28 https://storage…
Hüte zeitungsjunge#markeB Verleihen Sie Ihrem Alltag einen Hauch von Vintage-Charme. 25 https://storage…
Schuhe sneakers#markeA Stilvoll und bequem durch den Tag... 40 https://storage…
Schuhe sneakers#markeB Klassische Ausstattung mit modernen Materialien... 50 https://storage…

Für diese Tabelle ist die Zuordnung von DynamoDB zu Bigtable Einfach: Sie konvertieren den zusammengesetzten Primärschlüssel von DynamoDB in einen Bigtable-Zeilenschlüssel. Sie erstellen eine Spaltenfamilie (SKU), die Folgendes enthält: dieselben Spalten haben.

SKU
Zeilenschlüssel Beschreibung Preis Miniaturansicht
hüte#fedoras#markeA Hergestellt aus hochwertiger Wolle... 30 https://storage…
hüte#fedoras#markeB Strapazierfähiges wasserabweisendes Canvas mit... 28 https://storage…
hüte#newsboy#markeB Verleihen Sie Ihrem Alltag einen Hauch von Vintage-Charme. 25 https://storage…
schuhe#sneaker#markeA Stilvoll und bequem durch den Tag... 40 https://storage…
Schuhe#Sneaker#MarkeB Klassische Ausstattung mit modernen Materialien... 50 https://storage…

Designmuster für eine einzelne Tabelle

Ein einzelnes Tabellendesignmuster führt aus mehreren Tabellen eine relationale Datenbank in eine einzige Tabelle in DynamoDB. Sie können den Ansatz verfolgen, im vorherigen Beispiel und duplizieren Sie das Schema unverändert in Bigtable. Es ist jedoch besser, die Probleme des Schemas zu verstehen.

In diesem Schema enthält der Partitionierungsschlüssel die eindeutige ID für ein Video, die werden alle Attribute im Zusammenhang mit diesem Video gruppiert, um einen schnelleren Zugriff zu ermöglichen. Angegeben Aufgrund der Größenbeschränkungen von DynamoDB ist es nicht möglich, in einer einzelnen Zeile. Ein Sortierschlüssel mit dem Muster Mit VideoComment#reverse-timestamp wird jeder Kommentar in einer separaten Zeile dargestellt in umgekehrter chronologischer Reihenfolge sortiert werden.

Angenommen, dieses Video hat 500 Kommentare und der Rechteinhaber möchte das Video entfernen. Das bedeutet, dass auch alle Kommentare und Videoattribute gelöscht werden müssen. Dazu müssen Sie in DynamoDB alle Schlüssel in dieser Partition scannen senden Sie anschließend mehrere Löschanfragen, die nacheinander durchgehen. DynamoDB unterstützt Transaktionen für mehrere Zeilen. Die Löschanfrage ist jedoch zu groß für eine einzige Transaktion.

Primärschlüssel Attribute
Partitionierungsschlüssel Sortierschlüssel UploadDate Formate
0123 Video 2023-09-10T15:21:48 {"480": "https://storage…", "720": "https://storage…", "1080p": "https://storage..."}
Videokommentar#98765481 Inhalt
Das gefällt mir sehr. Spezialeffekte sind toll.
Videokommentar#86751345 Inhalt
Bei 1:05 Uhr ist ein Audiofehler aufgetreten.
VideoStatsLikes Anzahl
3
VideoStatsViews Anzahl
156
0124 Video 2023-09-10T17:03:21 {"480": "https://storage…", "720": "https://storage…"}
Videokommentar#97531849 Inhalt
Ich habe das mit allen meinen Freunden geteilt.
Videokommentar#87616471 Inhalt
Der Stil erinnert mich an einen Regisseur, aber ich kann nicht .
VideoStats ViewCount
45

Ändern Sie dieses Schema während der Migration, damit Sie Ihren Code vereinfachen und Datenanfragen schneller und kostengünstiger. Bigtable-Zeilen eine viel größere als DynamoDB-Elemente und kann eine große Anzahl von Kommentaren verarbeiten. Bis wenn ein Video Millionen von Kommentaren erhält, kannst du eine automatische Datenerhebungsrichtlinie, um nur einen festen Anzahl der neuesten Kommentare

Da Zähler ohne den Aufwand für die Aktualisierung des gesamten müssen Sie sie auch nicht teilen. Sie müssen kein UploadDate oder einen umgekehrten Zeitstempel berechnen und diesen als Sortierschlüssel festlegen, weil Bigtable-Zeitstempel die umgekehrte chronologische automatisch sortierte Kommentare. Dies vereinfacht das Schema erheblich und ein Video entfernt wird, können Sie die Zeile des Videos alle Kommentare in einer einzigen Anforderung.

Da Spalten in Bigtable geordnet sind, lexikografisch können Sie die Spalten zur Optimierung so umbenennen, ermöglicht einen schnellen Bereichsscan – von Videoeigenschaften bis zu den N in einer einzigen Leseanforderung zusammenfassen. Video wird geladen. Später kannst du dann durch die restlichen Kommentare blättern wenn der Betrachter scrollt.

Attribute
Zeilenschlüssel Formate „Mag ich“-Bewertungen Aufrufe UserComments
0123 {"480": "https://storage…", "720": "https://storage…", "1080p": "https://storage…"} @2023-09-10T15:21:48 3 156 Das gefällt mir sehr. Spezialeffekte sind toll. @ 2023-09-10T19:01:15
Bei 1:05 Uhr ist ein Audiofehler aufgetreten. @ 10.09.2023T16:30:42
0124 {"480": "https://storage…", "720":"https://storage…"} @2023-09-10T17:03:21 45 Der Stil erinnert mich an einen Regisseur, aber ich kann nicht . @2023-10-12T07:08:51

Designmuster der Adjacency-Liste

Betrachten Sie eine etwas andere Version dieses Designs, die DynamoDB häufig wird auch als das Benachbarungslisten-Designmuster bezeichnet.

Primärschlüssel Attribute
Partitionierungsschlüssel Sortierschlüssel DateCreated Details
Invoice-0123 Invoice-0123 2023-09-10T15:21:48 {"discount": 0,10,
"sales_tax_usd":"8",
"due_date":"2023-10-03.."}
Payment-0680 2023-09-10T15:21:40 {"amount_usd": 120, "bill_to":"John…",
"address":"123 Abc St ..."}
Payment-0789 2023-09-10T15:21:31 {"amount_usd": 120, "bill_to":"Jane…",
"address":"Xyz St. 13 ..."}
Invoice-0124 Invoice-0124 2023-09-09T10:11:28 {"discount": 0.20,
"sales_tax_usd":"11",
"due_date":"2023-10-03.."}
Payment-0327 2023-09-09T10:11:10 {"amount_usd": 180, "bill_to":"Bob…",
"address":"321 Cba St..."}
Payment-0275 2023-09-09T10:11:03 {"amount_usd": 70, "bill_to":"Kate…",
"address":"21 Zyx St ..."}

In dieser Tabelle basieren die Sortierschlüssel nicht auf der Zeit, sondern auf den Zahlungs-IDs. Sie können also ein anderes spaltenorientiertes Muster verwenden und diese IDs voneinander trennen Spalten in Bigtable mit ähnlichen Vorteilen Beispiel.

Rechnung Zahlung
Zeilenschlüssel Details 0680 0789
0123 {"discount": 0,10,
"sales_tax_usd":"8",
"due_date":"2023-10-03.."}
@ 2023-09-10T15:21:48
{"amount_usd": 120, "bill_to":"John…",
"address":"123 Abc St..."} @ 2023-09-10T15:21:40
{"amount_usd": 120, "bill_to":"Jane…",
"address":"Xyz St. 13..."}
@ 10.09.2023T15:21:31
Zeilenschlüssel Details 0275 0327
0124 {"discount": 0.20,
"sales_tax_usd":"11",
"due_date":"2023-10-03.."}
@ 2023-09-09T10:11:28
{"amount_usd": 70, "bill_to":"Kate…",
"address":"21 Zyx St..."}
@ 2023-09-09T10:11:03
{"amount_usd": 180, "bill_to":"Bob…",
"address":"321 Cba St..."}
@ 2023-09-09T10:11:10

Wie Sie in den vorherigen Beispielen sehen können, Das spaltenorientierte Modell von Bigtable kann sehr leistungsstark sein Viele Anwendungsfälle erfordern teure mehrzeilige Transaktionen, sekundäre die Indexierung oder das On-Delete-Ablaufverhalten in anderen Datenbanken.

Nächste Schritte