web-dev-qa-db-fra.com

Unités de lecture et d'écriture Dynamodb

J'ai lu divers articles sur Amazon DynamoDB mais je ne comprends toujours pas comment les unités de lecture/écriture sont utilisées. Par exemple, avec la version gratuite, j'ai 5 unités d'écriture et 10 unités de lecture disponibles par seconde, chaque unité représentant 1 ko de données. Mais qu'est-ce que cela signifie vraiment?

Cela signifie-t-il qu'un maximum de 10 demandes de lecture peuvent être effectuées par seconde ou un maximum de 10 Ko de données pouvant être demandé par seconde (qu'il y ait ou non 10 ou 100 demandes)? Parce que cet aspect n'est pas clair pour moi. Ainsi, si 20 utilisateurs accèdent simultanément à une page de mon site Web (ce qui entraîne l'exécution de 20 requêtes pour récupérer des données), que se passera-t-il? Est-ce que 10 d'entre eux verront les données immédiatement tandis que les 10 autres l'auront après 1 seconde? Ou verront-ils tous les données immédiatement si les données demandées (multipliées par 20) sont inférieures à 10 Ko?

De plus, si les unités de lecture ne suffisent pas et que 100 utilisateurs demandent simultanément 1 ko de données, cela signifie-t-il que toutes les demandes nécessiteront 10 secondes pour être complétées?

En outre, le prix est un peu déroutant car je ne comprends pas si les prix sont payés pour les unités réservées ou consommées? Ainsi, par exemple, le prix indiqué est "Débit en écriture: 0,00735 USD par heure pour 10 unités de capacité en écriture". Est-ce que cela signifie que l'on paiera (0,00735 $ * 24 = 0,176 $) même si aucune demande d'écriture n'est faite pendant une journée? 

28
Biggie Mac

Vous avez raison de dire que la capacité est étroitement liée à la taille des objets en lecture/écriture. 

Mises à jour de février 2016

AWS a mis à jour la manière dont il calcule le débit et le nombre d'objets de 1 Ko est passé à 4 Ko pour ses calculs. La discussion ci-dessous est toujours valable, mais certains calculs sont différents maintenant. 

Consultez toujours la documentation DynamoDB la plus récente pour obtenir les informations les plus récentes et des exemples sur la manière de calculer le débit. 

Ancienne documentation

Dans la documentation AWS DynamoDB (à partir du 08/01/14):

Unités de capacité requises pour les écritures = Nombre d'écritures d'articles par deuxième taille de l'élément (arrondie au Ko le plus proche)

Unités de capacité requises pour les lectures * = nombre de lectures d'élément par deuxième taille de l'élément (arrondie au Ko le plus proche)

  • Si vous utilisez des lectures cohérentes, vous obtiendrez un débit deux fois supérieur en termes de lectures par seconde.

Selon votre exemple de question, si vous souhaitez lire 10 Ko de données par seconde, vous aurez besoin de 10 unités de lecture fournies. Peu importe si vous faites 10 demandes pour 1 Ko de données ou si vous faites une seule demande pour 10 Ko de données. Vous êtes limité à 10 Ko/seconde. 

Notez que le nombre requis d'unités de capacité en lecture est déterminé par le nombre d'éléments lus par seconde, et non par le nombre d'API appels. Par exemple, si vous devez lire 500 éléments par seconde dans votre fichier table, et si vos éléments sont 1Ko ou moins, alors vous avez besoin de 500 unités de Capacité de lecture. Cela n'a pas d'importance si vous faites 500 GetItem individuels appels ou 50 appels BatchGetItem renvoyant chacun 10 éléments.

Pour votre exemple de 20 utilisateurs, gardez à l'esprit que les données sont arrondies à la base de connaissances la plus proche. Ainsi, même si vos 20 utilisateurs demandent 0,5 Ko de données, vous aurez besoin de 20 unités de lecture pour les traiter toutes en même temps. Si vous ne disposez que de 10 unités lues, les 10 autres demandes seront limitées. Si vous utilisez les bibliothèques Amazon DynamoDB, une logique de nouvelle tentative automatique est intégrée pour réessayer la demande. Elles doivent donc être traitées. 

Pour votre question concernant 100 utilisateurs, certaines de ces demandes peuvent simplement être limitées et la logique de nouvelle tentative peut éventuellement échouer (le code ne réessayera la demande que tant de fois avant d'arrêter d'essayer) - vous devez donc être prêt à gérer ces 400 réponses. codes de DynamoDB et réagissent en conséquence. Il est très important de surveiller votre application lorsque vous utilisez DynamoDB et de vous assurer de ne pas être limité par des transactions critiques pour les applications.

Votre dernière question sur les prix - vous payez toutes les heures pour ce que vous réservez. Si vous réservez 1000 unités de lecture et que votre site n'a absolument aucun trafic, tant pis, vous paierez toujours toutes les heures pour ces 1 000 unités de lecture.

Pour être complet, n'oubliez pas que le débit correspond à la fourniture PER TABLE. Donc, si vous avez 3 tables DynamoDB: Utilisateurs, Photos, Amis, vous devez prévoir une capacité pour chaque table, et vous devez déterminer ce qui est approprié pour chaque table. Dans cet exemple trivial, il est possible que l'utilisateur accède moins souvent à Photos dans votre application, ce qui vous permet de fournir un débit inférieur à celui de votre table Utilisateurs. 

Des lectures cohérentes à terme sont une excellente solution pour réduire les coûts, mais votre application doit être conçue pour la gérer. Une lecture éventuellement cohérente signifie que si vous mettez à jour les données et essayez immédiatement de lire la nouvelle valeur, vous risquez de ne pas obtenir la nouvelle valeur, elle peut toujours renvoyer la valeur précédente. Finalement, avec suffisamment de temps, vous obtiendrez la nouvelle valeur. Vous payez moins, car vous n'êtes pas assuré de lire les données les plus récentes - mais cela peut vous convenir si vous concevez correctement.

19
Mike Pugh

Pensez-y comme à un diamètre de tuyau: vous payez pour un débit de données possible par seconde. Le nombre de demandes n'est pas pertinent.

En outre, si vous demandez 10 unités lues, vous paierez effectivement 10 unités, quel que soit votre trafic réel.

Si votre trafic devait augmenter au-dessus de la limite, vous auriez tout d'abord un avertissement (disons à 80% de votre débit prévu). Ensuite, les demandes commencent à prendre plus de temps. Si vous restez au-dessus de la limite pendant un laps de temps important, les nouvelles connexions peuvent être refusées pendant quelques minutes.

J'espère que cela pourra aider

5
aherve

• L'ajout et la mise à jour d'éléments consomment votre débit en écriture et les éléments de requête/requête consomment votre débit en lecture dans dynamo db. La taille maximale d'un élément dans une table DynamoDB est de 400 kb. Plus vos éléments sont volumineux, plus le débit consommé est important et plus le coût sera élevé. Si vous effectuez une recherche dans DynamoDB à l'aide d'une clé, l'analyse de la table ne sera pas effectuée et vous aurez besoin d'un débit équivalent à la taille de votre élément. Par exemple, si la taille de votre élément est de 4 Ko, vous avez besoin d'une unité de capacité de lecture (1 unité équivaut à 4 Ko/secondes). Si vous souhaitez lire 40 Ko de données par seconde, vous aurez besoin de 10 unités de lecture configurées. Peu importe si vous faites 10 demandes pour 4 Ko de données ou si vous faites une seule demande pour 40 Ko de données. Vous êtes limité à 40 Ko/seconde. Mais si vous effectuez une recherche en dehors de la clé, DynamoDB analyse toutes les données de la table, alors que la base de données dépasse la limite de débit allouée lorsque les données sont élevées dans la base de données. Nous pouvons augmenter le débit de la table à la valeur maximale requise lors de l'analyse, mais cela augmentera la coût et rendra la base de données complètement inactive la plupart du temps.

1
ABHAY JOHRI