Migrer de DynamoDB vers Bigtable

Bigtable et DynamoDB sont des magasins de paires clé-valeur distribués capables de prendre en charge des millions de requêtes par seconde (RPS), de fournir un espace de stockage avec scaling à la hausse jusqu'à plusieurs pétaoctets de données, ainsi que de tolérer les défaillances de nœud.

Ce document est destiné aux développeurs DynamoDB et aux administrateurs de bases de données qui souhaitent migrer vers Bigtable. Il est également utile lorsque vous souhaitez concevoir des applications à utiliser avec Bigtable en tant que datastore.

Pour commencer, utilisez un outil de migration fourni par Google qui vous aide à migrer de DynamoDB vers Bigtable. Cette page décrit l'outil de migration, compare les deux systèmes de base de données et décrit l'architecture sous-jacente et les détails d'interaction qui diffèrent et qu'il est important de comprendre avant la migration.

Premiers pas avec l'outil de migration DynamoDB vers Bigtable

Les services professionnels Google Cloud fournissent un outil de migration Open Source pour simplifier la migration des données de DynamoDB vers Bigtable. Cet outil automatise le processus d'importation de vos données dans Google Cloud , puis leur chargement dans Bigtable.

À l'aide de cet outil, vous exportez votre table DynamoDB, puis vous la transférez vers Cloud Storage. L'outil lit les fichiers exportés depuis votre bucket Cloud Storage et utilise un modèle Dataflow pour transformer les données afin qu'elles soient compatibles avec Bigtable. Cette transformation inclut le mappage des attributs DynamoDB aux lignes Bigtable. La tâche Dataflow écrit ensuite les données transformées dans votre table Bigtable.

Pour en savoir plus ou vous lancer, consultez Utilitaire de migration de DynamoDB vers Bigtable.

Chemin de migration de DynamoDB vers Bigtable.

Comparaison entre DynamoDB et Bigtable

Cette section examine les similitudes et les différences entre DynamoDB et Bigtable.

Plan de contrôle

Dans DynamoDB et Bigtable, le plan de contrôle vous permet de configurer votre capacité, et de configurer et gérer les ressources. DynamoDB est un produit sans serveur. Le niveau d'interaction le plus élevé avec DynamoDB est celui des tables. En mode de capacité provisionnée, vous pouvez provisionner vos unités de requête de lecture et d'écriture, sélectionner vos régions et la réplication, et gérer les sauvegardes. Bigtable n'est pas un produit sans serveur. Vous devez créer une instance avec un ou plusieurs clusters, dont la capacité est déterminée par le nombre de nœuds qu'ils contiennent. Pour en savoir plus sur ces ressources, consultez Instances, clusters et nœuds.

Le tableau suivant compare les ressources du plan de contrôle pour DynamoDB et Bigtable.

DynamoDB Bigtable
Table  : ensemble d'éléments avec une clé primaire définie. Les tables comportent des paramètres pour les sauvegardes, la réplication et la capacité. Instance : groupe de clusters Bigtable dans différentes zones ou régions Google Cloud , entre lesquelles la réplication et le routage de connexion se produisent. Les règles de réplication sont définies au niveau de l'instance.

Cluster : groupe de nœuds dans la même zoneGoogle Cloud géographique, idéalement colocalisés avec votre serveur d'application pour des raisons de latence et de réplication. La capacité est gérée en ajustant le nombre de nœuds dans chaque cluster.

Table : organisation logique de valeurs indexée par clé de ligne.

Les sauvegardes sont contrôlées au niveau de la table.
Unité de capacité de lecture (RCU) et unité de capacité d'écriture (WCU)  : unités permettant d'effectuer des lectures ou des écritures par seconde avec une taille de charge utile fixe. Vous êtes facturé en unités de lecture ou d'écriture pour chaque opération avec des tailles de charge utile plus importantes.Les opérations

UpdateItem consomment la capacité d'écriture utilisée pour la taille la plus grande d'un élément mis à jour (avant ou après la mise à jour), même si la mise à jour concerne un sous-ensemble des attributs de l'élément.
Nœud : ressource de calcul virtuel chargée de lire et d'écrire des données. Le nombre de nœuds d'un cluster se traduit par des limites de débit pour les lectures, les écritures et les analyses. Vous pouvez ajuster le nombre de nœuds en fonction de la combinaison de vos objectifs de latence, du nombre de requêtes et de la taille de la charge utile.

Les nœuds SSD offrent le même débit pour les lectures et les écritures, contrairement à la différence significative entre les unités de capacité de lecture et d'écriture. Pour en savoir plus, consultez Performances pour des charges de travail types.
Partition  : bloc de lignes contiguës, soutenu par des disques SSD (Solid State Drives) colocalisés avec les nœuds.

Chaque partition est soumise à une limite stricte de 1 000 UCW, 3 000 UCR et 10 Go de données.
Tablette  : bloc de lignes contiguës soutenu par le support de stockage de votre choix (SSD ou HDD).

Les tables sont segmentées en tablets pour équilibrer la charge de travail. Les tablets ne sont pas stockés sur les nœuds dans Bigtable, mais plutôt sur le système de fichiers distribué de Google, qui permet une redistribution rapide des données lors de la mise à l'échelle et qui offre une durabilité supplémentaire en conservant plusieurs copies.
Tables mondiales  : elles permettent d'améliorer la disponibilité et la durabilité de vos données en propageant automatiquement les modifications de données dans plusieurs régions. Réplication  : méthode permettant d'améliorer la disponibilité et la durabilité de vos données en propageant automatiquement les modifications apportées aux données dans plusieurs régions ou plusieurs zones d'une même région.
Non applicable (N/A) Profil d'application  : paramètres indiquant à Bigtable comment router un appel d'API cliente vers le cluster approprié dans l'instance. Vous pouvez également utiliser un profil d'application en tant que tag pour segmenter les métriques d'attribution.

Réplication géographique

La réplication est utilisée pour répondre aux exigences des clients concernant les éléments suivants :

  • Haute disponibilité pour la continuité de l'activité en cas de défaillance de zone ou régionale.
  • Placer les données de votre service à proximité des utilisateurs finaux pour une diffusion à faible latence, où qu'ils se trouvent dans le monde.
  • Isolation des charges de travail lorsque vous devez implémenter une charge de travail par lot sur un cluster et vous appuyer sur la réplication pour les clusters de diffusion.

Bigtable est compatible avec les clusters répliqués dans autant de zones que possible, dans un maximum de huit régions Google Cloud où Bigtable est disponible. La plupart des régions comportent trois zones. Pour en savoir plus, consultez Régions et zones.

Bigtable réplique automatiquement les données entre les clusters dans une topologie multimaître, ce qui signifie que vous pouvez lire et écrire dans n'importe quel cluster. La réplication de Bigtable est cohérente à terme. Pour en savoir plus, consultez Présentation de la réplication.

DynamoDB fournit des tables mondiales pour prendre en charge la réplication de tables dans plusieurs régions. Les tables globales sont multiprimaires et se répliquent automatiquement dans les régions. La réplication est cohérente à terme.

Le tableau suivant liste les concepts de réplication et décrit leur disponibilité dans DynamoDB et Bigtable.

Propriété DynamoDB Bigtable
Réplication multiprimaire Oui.

Vous pouvez lire et écrire dans n'importe quelle table globale.
Oui.

Vous pouvez lire et écrire dans n'importe quel cluster Bigtable.
Modèle de cohérence Cohérence à terme

Cohérence écriture-lecture au niveau régional pour les tables globales.
Cohérence à terme

Cohérence écriture-lecture au niveau du cluster pour toutes les tables, à condition d'envoyer les lectures et les écritures au même cluster.
Latence de réplication Aucun contrat de niveau de service (SLA)

secondes
Aucun contrat de niveau de service.

secondes
Précision de la configuration Au niveau de la table. Au niveau de l'instance.

Une instance peut contenir plusieurs tables.
Mise en œuvre Créez une table globale avec une réplique de table dans chaque région sélectionnée.

Niveau régional.

Réplication automatique sur les réplicas en convertissant une table en table globale.

Les tables doivent avoir DynamoDB Streams activé, avec le flux contenant les nouvelles et les anciennes images de l'élément.

Supprimez une région pour supprimer le tableau global dans cette région.
Créez une instance avec plusieurs clusters.
La réplication est automatique entre les clusters de cette instance.

Au niveau zonal.

Ajoutez et supprimez des clusters d'une instance Bigtable.
Options de réplication Par table. Par instance.
Routage et disponibilité du trafic Le trafic est acheminé vers le réplica géographique le plus proche.

En cas d'échec, vous appliquez une logique métier personnalisée pour déterminer quand rediriger les requêtes vers d'autres régions.
Utilisez des profils d'application pour configurer les règles de routage du trafic de cluster.

Utilisez le routage multicluster pour acheminer automatiquement le trafic vers le cluster sain le plus proche.

En cas d'échec, Bigtable permet le basculement automatique entre les clusters pour la haute disponibilité.
Mise à l'échelle La capacité d'écriture en unités de requête d'écriture répliquées (R-WRU) est synchronisée entre les réplicas.

La capacité de lecture en unités de capacité de lecture répliquées (R-RCU) est par réplica.
Vous pouvez mettre à l'échelle les clusters de manière indépendante en ajoutant ou en supprimant des nœuds de chaque cluster répliqué selon les besoins.
Coût Les UAR avec remise coûtent 50 % de plus que les UAR standards. Vous êtes facturé pour les nœuds et le stockage de chaque cluster.
Aucuns frais de réplication réseau ne s'appliquent pour la réplication régionale entre les zones.
Des coûts sont générés lorsque la réplication s'effectue entre régions ou continents.
Contrat de niveau de service 99,999 % 99,999 %

Plan de données

Le tableau suivant compare les concepts de modèle de données pour DynamoDB et Bigtable. Chaque ligne du tableau décrit des fonctionnalités analogues. Par exemple, un élément dans DynamoDB est semblable à une ligne dans Bigtable.

DynamoDB Bigtable
Élément  : groupe d'attributs qui est identifiable de manière unique parmi tous les autres éléments par sa clé primaire. La taille maximale autorisée est de 400 Ko. Ligne  : une seule entité identifiée par la clé de ligne. La taille maximale autorisée est de 256 Mo.
N/A Famille de colonnes : espace de noms spécifié par l'utilisateur qui regroupe les colonnes.
Attribut  : regroupement d'un nom et d'une valeur. Une valeur d'attribut peut être de type scalaire, ensemble ou document. Il n'existe pas de limite explicite sur la taille des attributs eux-mêmes. Toutefois, comme chaque élément est limité à 400 Ko, pour un élément qui ne comporte qu'un seul attribut, celui-ci peut atteindre 400 Ko moins la taille occupée par le nom de l'attribut. Qualificatif de colonne  : identifiant unique d'une colonne au sein d'une famille de colonnes. L'identifiant complet d'une colonne est exprimé sous la forme famille-de-colonnes:qualificatif-de-colonne. Les qualificatifs de colonne sont triés par ordre lexicographique au sein de la famille de colonnes.

La taille maximale autorisée pour un qualificatif de colonne est de 16 Ko.


Cellule : une cellule contient les données d'une ligne, d'une colonne et d'un code temporel donnés. Une cellule contient une valeur qui peut atteindre 100 Mo.
Clé primaire  : identifiant unique d'un élément dans un tableau. Il peut s'agir d'une clé de partition ou d'une clé composite.

Clé de partitionnement : clé primaire simple, composée d'un attribut. Cela détermine la partition physique dans laquelle se trouve l'article. La taille maximale autorisée est de 2 Ko.

Clé de tri : clé qui détermine l'ordre des lignes dans une partition. La taille maximale autorisée est de 1 ko.

Clé composite : clé primaire composée de deux propriétés, la clé de partition et une clé de tri ou un attribut de plage.
Clé de ligne  : identifiant unique d'un élément dans un tableau. Généralement représenté par une concaténation de valeurs et de délimiteurs. La taille maximale autorisée est de 4 Ko.

Les qualificatifs de colonne peuvent être utilisés pour fournir un comportement équivalent à celui de la clé de tri de DynamoDB.

Les clés composites peuvent être créées à l'aide de clés de lignes et de qualificatifs de colonnes concaténés.

Pour en savoir plus, consultez l'exemple de traduction de schéma dans la section "Conception du schéma" de ce document.

Durée de vie  : les codes temporels par élément déterminent quand un élément n'est plus nécessaire. Après la date et l'heure de l'horodatage spécifié, l'élément est supprimé de votre tableau sans consommer de débit d'écriture. Récupération de mémoire  : les codes temporels par cellule déterminent quand un élément n'est plus nécessaire. La récupération de mémoire supprime les éléments expirés lors d'un processus en arrière-plan appelé "compactage". Les règles de récupération de mémoire sont définies au niveau de la famille de colonnes. Elles peuvent supprimer des éléments en fonction de leur ancienneté, mais aussi en fonction du nombre de versions que l'utilisateur souhaite conserver. Vous n'avez pas besoin de prévoir de la capacité pour la compaction lorsque vous dimensionnez vos clusters.
Index secondaire global  : table contenant des attributs sélectionnés de la table de base, organisés par une clé primaire différente de celle de la table. La clé d'index n'a pas besoin d'inclure d'attributs clés de la table. Il n'a même pas besoin d'avoir le même schéma de clé que la table. Index secondaire asynchrone  : pour interroger les mêmes données à l'aide de différents attributs ou schémas de recherche, vous pouvez utiliser des vues matérialisées continues comme index secondaires asynchrones pour les tables. Pour en savoir plus, consultez Créer un index secondaire asynchrone.

Opérations

Les opérations du plan de données vous permettent d'effectuer des actions de création, de lecture, de mise à jour et de suppression (CRUD) sur les données d'une table. Le tableau suivant compare les opérations de plan de données similaires pour DynamoDB et Bigtable.

DynamoDB Bigtable
CreateTable CreateTable
PutItem
BatchWriteItem
MutateRow
MutateRows
Bigtable traite les opérations d'écriture comme des opérations d'upsert.
UpdateItem
  • Écriture conditionnelle
  • Incrémentation et décrémentation

Bigtable traite les opérations d'écriture comme des upserts.
GetItem
BatchGetItem, Query, Scan
`ReadRow`
`ReadRows` (range, prefix, reverse scan)
Bigtable permet d'analyser efficacement les données par préfixe de clé de ligne, par modèle d'expression régulière ou par plage de clés de ligne (vers l'avant ou vers l'arrière).

Types de données

Bigtable et DynamoDB sont tous deux sans schéma. Les colonnes peuvent être définies au moment de l'écriture sans aucune application à l'échelle de la table pour l'existence des colonnes ou les types de données. De même, le type de données d'une colonne ou d'un attribut donné peut varier d'une ligne ou d'un élément à l'autre. Toutefois, les API DynamoDB et Bigtable gèrent les types de données de différentes manières.

Chaque requête d'écriture DynamoDB inclut une définition de type pour chaque attribut, qui est renvoyée avec la réponse pour les requêtes de lecture.

Bigtable traite tout comme des octets et s'attend à ce que le code client connaisse le type et l'encodage afin que le client puisse analyser correctement les réponses. Les opérations increment font exception, car elles interprètent les valeurs comme des entiers signés de 64 bits en mode big-endian.

Le tableau suivant compare les différences entre les types de données de DynamoDB et Bigtable.

DynamoDB Bigtable
Types scalaires  : renvoyés sous forme de jetons descripteurs de type de données dans la réponse du serveur. Octets  : les octets sont convertis dans les types prévus dans l'application cliente.

Increment interprète la valeur comme un entier signé en mode big-endian de 64 bits.
Ensemble  : collection non triée d'éléments uniques. Famille de colonnes  : vous pouvez utiliser des qualificatifs de colonne comme noms de membres de l'ensemble et, pour chacun d'eux, fournir un seul octet 0 comme valeur de cellule. Les membres de l'ensemble sont triés par ordre lexicographique au sein de leur famille de colonnes.
Map  : collection non triée de paires clé/valeur avec des clés uniques. Famille de colonnes
Utilisez le qualificatif de colonne comme clé de mappage et la valeur de cellule pour la valeur. Les clés de mappage sont triées de manière lexicographique.
Liste  : ensemble trié d'éléments. Qualificateur de colonne
Utilisez l'horodatage d'insertion pour obtenir un comportement équivalent à list_append, et l'inverse de l'horodatage d'insertion pour le préfixe.

Conception de schémas

Un point important à prendre en compte dans la conception du schéma est la manière dont les données sont stockées. Voici quelques-unes des principales différences entre Bigtable et DynamoDB :

  • Mises à jour de valeurs uniques
  • Tri des données
  • Gestion des versions de données
  • Stockage de valeurs volumineuses

Mises à jour de valeurs uniques

Les opérations UpdateItem dans DynamoDB consomment la capacité d'écriture pour la plus grande des tailles d'élément "avant" et "après", même si la mise à jour implique un sous-ensemble des attributs de l'élément. Cela signifie que dans DynamoDB, vous pouvez placer les colonnes fréquemment mises à jour dans des lignes distinctes, même si, logiquement, elles appartiennent à la même ligne que d'autres colonnes.

Bigtable peut mettre à jour une cellule aussi efficacement, qu'il s'agisse de la seule colonne d'une ligne donnée ou de l'une des milliers de colonnes. Pour en savoir plus, consultez Écritures simples.

Tri des données

DynamoDB hache et distribue aléatoirement les clés de partition, tandis que Bigtable stocke les lignes dans l'ordre lexicographique par clé de ligne et laisse le hachage à la charge de l'utilisateur.

La distribution aléatoire des clés n'est pas optimale pour tous les modèles d'accès. Cela réduit le risque de plages de lignes actives, mais rend les modèles d'accès impliquant des analyses qui traversent les limites de partition coûteux et inefficaces. Ces analyses illimitées sont courantes, en particulier pour les cas d'utilisation qui comportent une dimension temporelle.

La gestion de ce type de modèle d'accès (analyses qui traversent les limites de partition) nécessite un index secondaire dans DynamoDB, mais pas dans Bigtable. Bien que vous puissiez concevoir la clé de ligne lexicographique dans Bigtable pour gérer efficacement de nombreux modèles d'analyse, Bigtable prend également en charge les index secondaires asynchrones que vous implémentez en tant que vues matérialisées continues pour fournir des recherches efficaces et cohérentes à terme pour d'autres modèles de requête. De même, dans DynamoDB, les opérations de requête et d'analyse sont limitées à 1 Mo de données analysées, ce qui nécessite une pagination au-delà de cette limite. Bigtable n'impose pas de limite de ce type.

Malgré ses clés de partition distribuées de manière aléatoire, DynamoDB peut toujours avoir des partitions actives si une clé de partition choisie ne distribue pas uniformément le trafic, ce qui nuit au débit. Pour résoudre ce problème, DynamoDB recommande le partitionnement d'écriture, qui consiste à répartir aléatoirement les écritures sur plusieurs valeurs de clé de partition logique.

Pour appliquer ce modèle de conception, vous devez créer un nombre aléatoire à partir d'un ensemble fixe (par exemple, de 1 à 10), puis utiliser ce nombre comme clé de partition logique. Comme vous randomisez la clé de partition, les écritures dans la table sont réparties de manière uniforme sur toutes les valeurs de clé de partition.

Bigtable appelle cette procédure salage de clé. Elle peut être un moyen efficace d'éviter les tablets actifs.

Gestion des versions de données

Chaque cellule Bigtable possède un code temporel, et le code temporel le plus récent est toujours la valeur par défaut pour une colonne donnée. Un cas d'utilisation courant des codes temporels est le versioning, qui consiste à écrire une nouvelle cellule dans une colonne qui se distingue des versions précédentes des données pour cette ligne et cette colonne par son code temporel.

DynamoDB ne dispose pas d'un tel concept et nécessite des conceptions de schéma complexes pour prendre en charge la gestion des versions. Cette approche consiste à créer deux copies de chaque élément : une copie avec un préfixe de numéro de version égal à zéro, tel que v0_, au début de la clé de tri, et une autre copie avec un préfixe de numéro de version égal à un, tel que v1_. Chaque fois que l'élément est mis à jour, vous utilisez le préfixe de version immédiatement supérieur dans la clé de tri de la version mise à jour, et vous copiez le contenu mis à jour dans l'élément avec le préfixe de version zéro. Cela permet de s'assurer que la dernière version de chaque élément peut être trouvée à l'aide du préfixe zéro. Cette stratégie nécessite non seulement une logique côté application pour la maintenance, mais elle rend également les écritures de données très coûteuses et lentes, car chaque écriture nécessite une lecture de la valeur précédente plus deux écritures.

Transactions multilignes et grande capacité de lignes

Bigtable n'est pas compatible avec les transactions multilignes. Toutefois, comme il vous permet de stocker des lignes beaucoup plus volumineuses que les éléments dans DynamoDB, vous pouvez souvent obtenir la transactionnalité souhaitée en concevant vos schémas de manière à regrouper les éléments pertinents sous une clé de ligne partagée. Pour obtenir un exemple illustrant cette approche, consultez Modèle de conception à table unique.

Stocker de grandes valeurs

Étant donné qu'un élément DynamoDB, qui est analogue à une ligne Bigtable, est limité à 400 Ko, le stockage de grandes valeurs nécessite de les fractionner sur plusieurs éléments ou de les stocker sur d'autres supports tels que S3. Ces deux approches ajoutent de la complexité à votre application. En revanche, une cellule Bigtable peut stocker jusqu'à 100 Mo et une ligne Bigtable peut prendre en charge jusqu'à 256 Mo.

Exemples de traduction de schémas

Les exemples de cette section traduisent les schémas de DynamoDB en schémas Bigtable en tenant compte des principales différences de conception des schémas de clés.

Migrer des schémas de base

Les catalogues de produits sont un bon exemple pour illustrer le modèle clé/valeur de base. Voici à quoi pourrait ressembler un tel schéma dans DynamoDB.

Clé primaire Attributs
Clé de partition Clé de tri Description Prix Thumbnail
chapeaux fedoras#brandA Conçue en laine de qualité… 30 https://storage…
chapeaux fedoras#brandB Toile résistante à l'eau et durable, conçue pour… 28 https://storage…
chapeaux newsboy#brandB Ajoutez une touche de charme vintage à votre look de tous les jours. 25 https://storage…
chaussures sneakers#brandA Sortez avec style et confort grâce à… 40 https://storage…
chaussures sneakers#brandB Des fonctionnalités classiques avec des matériaux contemporains… 50 https://storage…

Pour cette table, le mappage de DynamoDB à Bigtable est simple : vous convertissez la clé primaire composite de DynamoDB en clé de ligne composite Bigtable. Vous créez une famille de colonnes (SKU) contenant le même ensemble de colonnes.

SKU
Clé de ligne Description Prix Thumbnail
hats#fedoras#brandA Conçue en laine de qualité… 30 https://storage…
hats#fedoras#brandB Toile résistante à l'eau et durable, conçue pour… 28 https://storage…
hats#newsboy#brandB Ajoutez une touche de charme vintage à votre look de tous les jours. 25 https://storage…
shoes#sneakers#brandA Sortez avec style et confort grâce à… 40 https://storage…
shoes#sneakers#brandB Des fonctionnalités classiques avec des matériaux contemporains… 50 https://storage…

Modèle de conception à table unique

Un modèle de conception à table unique rassemble ce qui serait plusieurs tables dans une base de données relationnelle en une seule table dans DynamoDB. Vous pouvez adopter l'approche de l'exemple précédent et dupliquer ce schéma tel quel dans Bigtable. Toutefois, il est préférable de résoudre les problèmes du schéma au cours du processus.

Dans ce schéma, la clé de partition contient l'ID unique d'une vidéo, ce qui permet de colocaliser tous les attributs associés à cette vidéo pour un accès plus rapide. Compte tenu des limites de taille des éléments de DynamoDB, vous ne pouvez pas placer un nombre illimité de commentaires en texte libre dans une même ligne. Par conséquent, une clé de tri avec le modèle VideoComment#reverse-timestamp est utilisée pour que chaque commentaire soit une ligne distincte dans la partition, triée par ordre chronologique inversé.

Imaginons que cette vidéo comporte 500 commentaires et que le propriétaire souhaite la supprimer. Cela signifie que tous les commentaires et attributs vidéo doivent également être supprimés. Pour ce faire dans DynamoDB, vous devez analyser toutes les clés de cette partition, puis envoyer plusieurs requêtes de suppression en les parcourant une par une. DynamoDB accepte les transactions multi-lignes, mais cette requête de suppression est trop volumineuse pour être effectuée en une seule transaction.

Clé primaire Attributs
Clé de partition Clé de tri UploadDate Formats
0123 Vidéo 2023-09-10T15:21:48 {"480": "https://storage…", "720": "https://storage…", "1080p": "https://storage…"}
VideoComment#98765481 Contenu
J'aime beaucoup. Les effets spéciaux sont incroyables.
VideoComment#86751345 Contenu
Il semble y avoir un problème audio à 1:05.
VideoStatsLikes Nombre
3
VideoStatsViews Nombre
156
0124 Vidéo 2023-09-10T17:03:21 {"480": "https://storage…", "720": "https://storage…"}
VideoComment#97531849 Contenu
J'ai partagé ça avec tous mes amis.
VideoComment#87616471 Contenu
Ce style me rappelle un réalisateur de cinéma, mais je n'arrive pas à mettre le doigt dessus.
VideoStats ViewCount
45

Modifiez ce schéma lors de la migration pour simplifier votre code et rendre les demandes de données plus rapides et moins coûteuses. Les lignes Bigtable ont une capacité beaucoup plus importante que les éléments DynamoDB et peuvent gérer un grand nombre de commentaires. Pour gérer le cas où une vidéo reçoit des millions de commentaires, vous pouvez définir une stratégie de collecte des déchets afin de ne conserver qu'un nombre fixe des commentaires les plus récents.

Étant donné que les compteurs peuvent être mis à jour sans la surcharge liée à la mise à jour de l'intégralité de la ligne, vous n'avez pas non plus besoin de les fractionner. Vous n'avez pas non plus besoin d'utiliser une colonne UploadDate ni de calculer un code temporel inversé pour en faire votre clé de tri, car les codes temporels Bigtable vous donnent automatiquement les commentaires dans l'ordre chronologique inverse. Cela simplifie considérablement le schéma. Si une vidéo est supprimée, vous pouvez supprimer de manière transactionnelle la ligne de la vidéo, y compris tous les commentaires, en une seule requête.

Enfin, comme les colonnes de Bigtable sont triées par ordre lexicographique, vous pouvez, pour optimiser le processus, renommer les colonnes de manière à permettre une analyse rapide de la plage (des propriétés vidéo aux N commentaires les plus récents) en une seule requête de lecture, ce que vous devez faire lorsque la vidéo est chargée. Vous pouvez ensuite parcourir le reste des commentaires au fur et à mesure que le spectateur fait défiler la page.

Attributs
Clé de ligne Formats J'aime Vues UserComments
0123 {"480": "https://storage…", "720": "https://storage…", "1080p": "https://storage…"} @2023-09-10T15:21:48 3 156 J'aime beaucoup. Les effets spéciaux sont incroyables. @ 2023-09-10T19:01:15
Il semble y avoir un problème audio à 1:05. @ 2023-09-10T16:30:42
0124 {"480": "https://storage…", "720":"https://storage…"} @2023-09-10T17:03:21 45 Ce style me rappelle un réalisateur de cinéma, mais je n'arrive pas à mettre le doigt dessus. @2023-10-12T07:08:51

Modèle de conception de liste d'adjacence

Envisagez une version légèrement différente de cette conception, que DynamoDB appelle souvent le modèle de conception de liste d'adjacence.

Clé primaire Attributs
Clé de partition Clé de tri DateCreated Détails
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":"13 Xyz St…"}
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…"}

Dans ce tableau, les clés de tri ne sont pas basées sur le temps, mais sur les ID de paiement. Vous pouvez donc utiliser un autre modèle de colonne large et faire de ces ID des colonnes distinctes dans Bigtable, avec des avantages similaires à l'exemple précédent.

Facture Paiement
clé de ligne Détails 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":"13 Xyz St…"}
@ 2023-09-10T15:21:31
clé de ligne Détails 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

Comme vous pouvez le voir dans les exemples précédents, avec la bonne conception de schéma, le modèle à colonnes larges de Bigtable peut être très puissant et offrir de nombreux cas d'utilisation qui nécessiteraient des transactions multi-lignes coûteuses, un indexage secondaire ou un comportement en cascade lors de la suppression dans d'autres bases de données.

Étapes suivantes