0
votes

Puis-je avoir plusieurs entrées sous la même clé primaire lors de l'utilisation de DynamoDB?

Je développe actuellement une compétence qui sera un gestionnaire de portefeuille de stock. Je veux que la table ait trois titres

  1. userid (qui vient d'Alexa)
  2. Nom du stock
  3. montant du stock

    L'ID utilisateur est la clé principale et je peux actuellement ajouter une quantité de stock à la table, puis dans une méthode distincte appelée getPortfolioValue, je interroge la base de données pour retourner le nom de stock et le montant du stock pour un identifiant spécifique, que je vais Ensuite, faites quelques mathématiques pour renvoyer la valeur du portefeuille.

    Le problème est que je ne peux pas ajouter une autre entrée sous la clé primaire et que le portefeuille ne peut donc avoir qu'une seule option d'achat d'actions qui suce

    Je veux plus tard être capable de modifier le portefeuille au cas où un utilisateur vend une partie de leurs stocks.

    Y a-t-il une façon de le faire en utilisant dynamodb?


1 commentaires

Y a-t-il une relation à de nombreuses relations entre les utilisateurs et les stocks?


3 Réponses :


3
votes

Les clés primaires doivent être uniques. Vous avez probablement besoin d'une clé primaire composée de nom d'utilisateur + nom de stock. Dans DynamoDB qui est accompli en réglant l'ID utilisateur à la clé de hachage et en fonction du nom de stock à la touche de tri, sur l'indice de la table primaire.


0 commentaires

0
votes

Oui, en supposant que vous utilisiez l'ID utilisateur à partir des demandes d'Alexa, ils fourniront une excellente clé primaire pour votre base de données DynamoDB.

DynamoDB dynamo = new DynamoDB(new AmazonDynamoDBClient(...)); 
Table table = dynamo.getTable("stocks"); 

Item documentItem =
  table.getItem(new GetItemSpec()
                .withPrimaryKey("alexa_id", 1)
                .withAttributesToGet("document"));

System.out.println(documentItem.getJSONPretty("document"));


2 commentaires

Merci beaucoup, je vais donner ça un aller!


Une autre option serait d'avoir une clé primaire de (Userid, StockName) où Userid est la clé de hachage et le stockName est la clé de tri. Vous pouvez ensuite récupérer tous les stocks de l'utilisateur en interrogeant l'ID utilisateur et le montant de chaque stock en interrogant par Iserid et StockName. Vous ne seriez pas non plus limité par la taille de la limite de 400 ko



1
votes

vous peut avoir plusieurs éléments avec la même clé primaire lorsque la table a la clé de tri. Si la table n'a que la clé primaire sans clé de tri - alors non. Si la table a une touche de tri, chaque combo de clés primaire et de tri doit être unique.

 Entrez la description de l'image ici

Dans cette table, l'attribut PK est la clé principale, la touche SK-Tse.

 Entrez la description de l'image ici

Pourtant, les PKS seront placés physiquement ensemble, il ne devrait pas y avoir de PKS comme "actif" et "NOT_ACTIVE" alors qu'il n'y a que 2 valeurs possibles pour cette ligne de rangée et toutes les personnes ne tomberont que 2 espaces. Si vous aurez beaucoup de lignes avec la même clé primaire, vous créerez un spot thermique pour les requêtes et vous pourrez rencontrer des requêtes lentes. Mais c'est un sujet trop large pour discuter de la manière de concevoir une table de dynamodb.

Vous bénéficierez probablement de mon article: https://lukasliesis.medium.com / Apprendre-de-AWS-FCB0CC71926B

Il y a deux vidéos brillantes de Rick HOULIHAN mentionné sur DynamoDB Architecture:


0 commentaires