web-dev-qa-db-fra.com

Copie d'une table dans une autre dans DynamoDB

Quelle est la meilleure façon de copier à l'identique une table vers une nouvelle dans DynamoDB?

(Je ne m'inquiète pas de l'atomicité).

23
ensnare

AWS Pipeline fournit un modèle qui peut être utilisé à cette fin: "CrossRegion DynamoDB Copy"

Voir: http://docs.aws.Amazon.com/datapipeline/latest/DeveloperGuide/dp-crossregion-ddb-create.html

Le résultat est un pipeline simple qui ressemble à:

enter image description here

Bien qu'il s'appelle CrossRegion, vous pouvez facilement l'utiliser pour la même région tant que le nom de la table de destination est différent (n'oubliez pas que les noms de table sont uniques par compte et par région)

17

Créez une sauvegarde (option de sauvegardes) et restaurez la table avec un nouveau nom de table. Cela permettrait d'obtenir toutes les données dans la nouvelle table. Remarque: prend beaucoup de temps en fonction de la taille de la table

15

Je viens d'utiliser le script python, dynamodb-copy-table , en m'assurant que mes informations d'identification se trouvaient dans certaines variables d'environnement (AWS_ACCESS_KEY_ID et AWS_SECRET_ACCESS_KEY), et cela a fonctionné parfaitement. Il a même créé la table de destination pour moi.

python dynamodb-copy-table.py src_table dst_table

La région par défaut est us-west-2, changez-le avec le AWS_DEFAULT_REGION variable env.

8
Rohmer

Vous pouvez utiliser Scan pour lire les données et les enregistrer dans la nouvelle table.

Sur les forums AWS, un gars de l'équipe AWS a publié une autre approche utilisant EMR: Comment puis-je dupliquer une table?

7
Chen Harel

Utilisez ce module de nœud js: copy-dynamodb-table

0
Ezzat

Le 29 novembre 2017 Global Tables a été introduit. Cela peut être utile en fonction de votre cas d'utilisation, qui peut ne pas être identique à la question d'origine. Voici quelques extraits du article de blog :

Tables globales - Vous pouvez désormais créer des tables qui sont automatiquement répliquées sur deux régions AWS ou plus, avec une prise en charge complète des écritures multi-maîtres, avec quelques clics. Cela vous donne la possibilité de créer des applications rapides et massivement mises à l'échelle pour une base d'utilisateurs mondiale sans avoir à gérer le processus de réplication.

...

Vous n'avez pas besoin d'apporter de modifications à votre code existant. Vous envoyez simplement des demandes d'écriture et éventuellement des demandes de lecture cohérentes à un point de terminaison DynamoDB dans l'une des régions désignées (les écritures associées à des lectures fortement cohérentes doivent partager un point de terminaison commun). Dans les coulisses, DynamoDB implémente des écritures multi-maîtres et garantit que la dernière écriture sur un élément particulier prévaut. Lorsque vous utilisez des tables globales, chaque élément comprend un attribut d'horodatage représentant l'heure de l'écriture la plus récente. Les mises à jour sont propagées à d'autres régions de manière asynchrone via les flux DynamoDB et sont généralement terminées en une seconde (vous pouvez suivre cela à l'aide des nouvelles ReplicationLatency et PendingReplicationCount métriques).

0
mkobit

Comme mentionné dans une réponse précédente, le modèle de pipeline de données n'existe plus.

Après avoir essayé quelques autres propositions dans ce fil, j'ai fini par écrire un script NodeJS pour déplacer les données. Peut-être que cela pourrait vous convenir? Si vous voulez essayer, j'ai documenté mon approche sur mon blog ici .

0
T Vernon