2016-04-29 1 views
1

Je voudrais savoir comment concevoir au mieux mes tables DynamoDB pour le cas d'utilisation suivant et pourquoi. J'ai lu the best practices, mais je ne suis pas sûr de l'avoir bien compris.Format de table DynamoDB

L'utilisation principale est une entrée hebdomadaire pour chaque groupe d'utilisateurs. J'ai besoin de lister ces entrées triées par les entrées les plus récentes pour chaque groupe d'utilisateurs. Je dois également pouvoir obtenir facilement (ou rapidement) l'entrée la plus récente pour chaque groupe. Ma première idée naïve avant de lire l'article était d'utiliser des tables séparées pour chaque groupe, puis chaque entrée avait juste une clé de partition unique et une clé de tri sur une date convertie en secondes depuis l'époque. Mais après avoir lu cet article, cette approche semble violer la conception des partitions car ne fera-t-elle pas de chaque article une nouvelle partition?

Je me rends compte que l'entrée la plus récente pourrait être mise en cache assez facilement dans mes serveurs Web, mais je suis curieux de voir si cela affecte le design de toute façon.

Une guidance?

Répondre

1

À mon avis, la conception de la table préférée devrait ressembler à ceci:

  • groupes d'utilisateurs comme partition clé
  • horodatage comme clé de tri

Ce n'est pas violation toute partition conception, car dans une table avec des clés primaires basées sur des clés de partition et de tri, vous pouvez utiliser la même clé de partition sur plusieurs éléments, à condition Fertes clés de tri. De cette façon, vous pouvez facilement rechercher des entrées de groupes d'utilisateurs triées par horodatage et aussi facilement par ex. obtenir la dernière entrée.

Si vous souhaitez utiliser pleinement votre débit provisionné, vous devez vous assurer que vos données sont réparties uniformément entre les valeurs de clé de partition. Si vous avez 20 partitions et que seulement une ou deux d'entre elles sont fortement accédées, vous remarquerez une forte baisse des performances.

Dans votre scénario cependant, où une entrée est ajoutée chaque semaine à chaque partition, la conception ci-dessus fonctionnera très bien.

+0

Génial. Après avoir dormi dessus la nuit dernière, cette même idée m'est venue à l'esprit. Merci pour les conseils sur le débit. Je n'avais pas pensé à ça. – ProdigousRanger

+0

cela ne couvre pas efficacement (c'est-à-dire pas de recherche ou de requêtes multiples) "Je dois également pouvoir obtenir facilement (ou rapidement) l'entrée la plus récente pour chaque groupe." –

+0

Oui, c'est le cas. Une requête avec 'ScanIndexForward = false' (descendant) et' Limit = 1' retournera l'entrée la plus récente d'un groupe d'utilisateurs. Je ne pense pas qu'il y ait un moyen plus performant. – birnbaum