web-dev-qa-db-fra.com

Comment joindre des tables dans AWS DynamoDB?

Je sais que toute la conception devrait être basée sur des agrégats naturels (documents), mais je pense mettre en place un tableau séparé pour les localisations (lang, key, text), puis utiliser des clés dans d'autres tableaux. Cependant, je n’ai trouvé aucun exemple pour ce faire. 

Tout pointeur pourrait être utile!

24
Centurion

Vous avez raison, DynamoDB n'est pas conçu comme une base de données relationnelle et ne prend pas en charge les opérations de jointure. DynamoDB peut simplement être considéré comme un ensemble de paires clé-valeur.

Vous pouvez avoir les mêmes clés sur plusieurs tables (par exemple, ID_document), mais DynamoDB ne les synchronise pas automatiquement ou ne possède aucune fonctionnalité de clé étrangère. Les document_ID d'une table, bien que portant le même nom, constituent techniquement un ensemble différent de ceux d'une autre table. Il appartient à votre logiciel d’application de s’assurer que ces clés sont synchronisées.

DynamoDB est une façon différente de penser aux bases de données et vous pouvez envisager d'utiliser une base de données relationnelle gérée telle que Amazon Aurora: https://aws.Amazon.com/rds/aurora/

Une chose à noter, Amazon EMR permet de joindre des tables DynamoDB, mais je ne suis pas sûr que vous recherchiez ce que vous recherchez: http://docs.aws.Amazon.com/ElasticMapReduce/latest/DeveloperGuide/EMRforDynamoDB .html

24
Reid Hughes

Avec DynamoDB, plutôt que de participer, je pense que la meilleure solution consiste à stocker les données dans la forme que vous souhaitez lire ultérieurement.

Si vous avez besoin de requêtes de lecture complexes, vous pourriez vous attendre à ce que DynamoDB se comporte comme un SGBDR, ce qui n'est pas le cas. Transformez et mettez en forme les données que vous écrivez, gardez la lecture simple.

Le disque est bien moins cher que de calculer ces jours-ci - n'ayez pas peur de dénormaliser.

9
Lloyd

Vous devez interroger la première table, puis parcourir chaque élément avec une requête get sur la table suivante. 

Les autres réponses ne sont pas satisfaisantes: 1) ne répondez pas à la question et, plus important encore, 2) comment pouvez-vous concevoir vos tables avant de connaître leur future application? La dette technique est tout simplement trop élevée pour couvrir raisonnablement des possibilités futures illimitées. 

Ma réponse est horriblement inefficace, mais c’est la seule solution actuelle à la question posée. 

J'attends avec impatience une meilleure réponse. 

2
James Shiztar

Je sais que ma réponse est légèrement en retard, de quelques années. Cependant, j'ai pu trouver des informations supplémentaires sur Amazon DynamoDB & Joins, qui pourraient être utiles pour vous (ou peut-être pour une autre personne susceptible de trébucher sur cette discussion lors de ses recherches ultérieures).

Pour aller droit au but, j'ai pu localiser une documentation sur le site Web Amazon DynamoDB, qui indique que le langage de requête Apache HiveQL peut être utilisé, pour effectuer des jointures sur des tables, des colonnes et des données Amazon DynamoDB, etc.

Interrogation des données dans DynamoDB (avec HiveQL): https://docs.aws.Amazon.com/amazondynamodb/latest/developerguide/EMRforDynamoDB.Querying.html

Travailler avec Amazon DynamoDB & Apache Hive: https://docs.aws.Amazon.com/amazondynamodb/latest/developerguide/EMRforDynamoDB.Tutorial.html

Traitement des données Amazon DynamoDB avec Apache Hive sur Amazon EMR: https://docs.aws.Amazon.com/amazondynamodb/latest/developerguide/EMRforDynamoDB.html

J'espère que cette information aide quelqu'un, si ce n'est l'affiche originale.

0
Matti

Récemment, j'ai eu la même exigence d'utiliser les fonctions de jointure et d'agrégation comme avg et sum avec dynamoDb. Pour résoudre ce problème, j'ai utilisé le pilote Cdata JDBC et cela fonctionnait parfaitement. Il supporte aussi les fonctions d'agrégation. Bien que je recherche aussi la solution pour éviter d’utiliser cdata en raison du coût de la licence de Cdata. 

0
vivek agrawal