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
|
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
- Erfahren Sie mehr über das Bigtable-Schemadesign.
- Erfahren Sie mehr über den Bigtable-Emulator.
- Referenzarchitekturen, Diagramme und Best Practices zu Google Cloud kennenlernen. Weitere Informationen zu Cloud Architecture Center