web-dev-qa-db-fra.com

Existe-t-il un moyen d'interroger plusieurs clés de hachage dans DynamoDB?

Existe-t-il un moyen d'interroger plusieurs clés de hachage à l'aide d'une seule requête dans AWS SDK for Java d'Amazon?

Voici mon problème. J'ai une table de base de données pour les statuts de projet. La clé de hachage est le statut d'un projet (c'est-à-dire: nouveau, affecté, en cours de traitement ou terminé). La clé de plage est un ensemble d'identifiants de projet. Actuellement, j'ai une configuration de requête pour trouver simplement tous les projets répertoriés comme statut ("hash") de "assigné" et un autre jeu de requête pour rechercher un statut de "traitement". Y a-t-il un moyen de faire cela en utilisant une seule requête plutôt que d'envoyer plusieurs requêtes pour chaque statut que je dois trouver? Code ci-dessous:

    DynamoDBMapper mapper = new DynamoDBMapper(new AmazonDynamoDBClient(credentials));
    PStatus assignedStatus = new PStatus();
    assignedStatus.setStatus("assigned");
    PStatus processStatus = new PStatus();
    processStatus.setStatus("processing");

    DynamoDBQueryExpression<PStatus> queryAssigned = new DynamoDBQueryExpression<PStatus>().withHashKeyValues(assignedStatus);
    DynamoDBQueryExpression<PStatus> queryProcessing = new DynamoDBQueryExpression<PStatus>().withHashKeyValues(processStatus);

    List<PStatus> assigned = mapper.query(PStatus.class, queryAssigned);
    List<PStatus> process = mapper.query(PStatus.class, queryProcessing);

En gros, j'aimerais savoir s'il est possible d'éliminer les variables queryAssigned et assigned et de gérer à la fois assignedStatus et processStatus via la même requête, process, pour trouver des projets non nouveaux ou complets.

12
DGolberg

Non, à partir d'aujourd'hui, il n'est pas possible d'envoyer plusieurs requêtes dans la même demande. Si vous êtes préoccupé par la latence, vous pouvez faire plusieurs demandes simultanément dans différents threads. Cela nécessiterait la même quantité de bande passante réseau qu’une "double requête" si Dynamo l’offrait (en supposant que vous en gagniez 2, pas des centaines).

8
Cory Kendall

Il n'y a aucun moyen d'interroger avec plusieurs clés de hachage, mais à partir d'avril 2014, vous pouvez utiliser QueryFilter afin de pouvoir filtrer par des champs non clés en plus des champs de clé de hachage.

Dans un article de blog du 24 avril 2014, AWS a annoncé la publication de l'option "QueryFilter":

Avec la version d'aujourd'hui, nous étendons ce modèle avec la prise en charge de filtrage des requêtes sur les attributs non clés . Vous pouvez maintenant inclure un QueryFilter dans le cadre d'un appel à la fonction de requête. Le filtre est appliqué après la récupération basée sur la clé et avant que les résultats ne vous soient renvoyés. Filtrer de cette manière peut réduire la quantité de données renvoyées à votre application tout en simplifiant et en rationalisant votre code.

Vérifiez ceci http://aws.Amazon.com/blogs/aws/improved-queries-and-updates-for-dynamodb/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+AmazonWebServicesBlog+%28Amazon + Web + Services + Blog% 29

5
Aybat

Essayez ceci en C #. Je pense que c'est similaire en Java. UserId c'est la clé de hachage.

        var table = Table.LoadTable(DynamoClient, "YourTableName");
        var batchGet = table.CreateBatchGet();
        batchGet.AddKey(new Dictionary<string, DynamoDBEntry>() { { "UserId", 123 } });
        batchGet.AddKey(new Dictionary<string, DynamoDBEntry>() { { "UserId", 456 } });
        batchGet.Execute();
        var results = batchGet.Results;
0
deverton