147 votes

Interrogation de DynamoDB par date

Je viens d'une base de données relationnelle et j'essaie de travailler avec DynamoDB d'Amazon.

J'ai une table avec une clé de hachage "DataID" et une plage "CreatedAt" et un tas d'éléments dedans.

J'essaie d'obtenir tous les éléments qui ont été créés après une date spécifique et triés par date, ce qui est assez simple dans une base de données relationnelle.

Dans DynamoDB, la chose la plus proche que j'ai pu trouver est une requête et l'utilisation du filtre range key greater than. Le seul problème est que pour effectuer une requête, j'ai besoin d'une clé de hachage, ce qui va à l'encontre du but recherché.

Alors qu'est-ce que je fais mal ? Le schéma de ma table est-il mauvais ? La clé de hachage ne devrait-elle pas être unique ? Ou existe-t-il une autre façon d'effectuer une requête ?

-1voto

Bhar32arya Points 1

requête de travail 1.aws dynamodb scan --table-name tableName --region us-east-1 --filter-expression "begins_with(createdTm,:gen)" --expression-attribute-values "{":gen":{"S" : "2021-04-15"}}" --select "COUNT"

2.aws dynamodb scan --table-name tableName --region us-east-1 --filter-expression "createdTm BETWEEN :v1 AND :v2" --expression-attribute-values '{":v1":{"S" : "2021-04-13"}, ":v2":{"S" : "2021-04-14"}}'' --select "COUNT"

-10voto

Sony Kadavan Points 3574

Réponse actualisée Il n'existe aucun moyen pratique de le faire en utilisant les requêtes Dynamo DB avec un débit prévisible. Une option (non optimale) consiste à utiliser un GSI avec une clé de hachage et un CreatedAt artificiels. Ensuite, vous interrogez par HashKey seul et mentionnez ScanIndexForward pour ordonner les résultats. Si vous pouvez trouver une clé de hachage naturelle (par exemple la catégorie de l'article, etc.), cette méthode est gagnante. D'autre part, si vous gardez la même clé de hachage pour tous les éléments, cela affectera le débit surtout lorsque votre ensemble de données dépasse 10 Go (une partition).

Réponse originale : Vous pouvez le faire maintenant dans DynamoDB en utilisant GSI. Faites du champ "CreatedAt" un GSI et lancez des requêtes comme (GT some_date). Stockez la date sous forme de nombre (msecs depuis l'époque) pour ce type de requêtes.

Les détails sont disponibles ici : Index secondaires globaux - Amazon DynamoDB : http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html#GSI.Using

Il s'agit d'une fonctionnalité très puissante. Sachez que la requête est limitée à (EQ | LE | LT | GE | GT | BEGINS_WITH | BETWEEN). Condition - Amazon DynamoDB : http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X