web-dev-qa-db-fra.com

Compteurs atomiques dans DynamoDB

J'avais envisagé d'utiliser Amazon DynamoDB dans mon application et j'ai une question à propos de ses compteurs atomiques fiabilité.

Je construis une application distribuée qui doit simultanément et régulièrement , incrémenter/décrémenter un compteur stocké dans un attribut du dynamo. Je me demandais quelle était la fiabilité du compteur atomique du Dynamo dans un environnement concurrentiel dense, où le niveau de simultanéité est extrêmement élevé (par exemple, un taux moyen de 20 000 hits simultanés - pour avoir l’idée, cela près de 52 milliards d’incréments/décréments par mois). 

Le compteur doit être super fiable et jamais manquer un coup. Quelqu'un a-t-il testé DynamoDB dans des environnements aussi critiques?

Merci

24
Mark

DynamoDB obtient ses propriétés de dimensionnement en scindant les clés sur plusieurs serveurs. Ceci est similaire à la façon dont d’autres bases de données distribuées, telles que Cassandra et HBase, sont mises à l’échelle. Bien que vous puissiez augmenter le débit sur DynamoDB, vos données ne sont déplacées que sur plusieurs serveurs. Chaque serveur peut désormais gérer le nombre total de connexions simultanées/nombre de serveurs. Consultez leur FAQ pour savoir comment atteindre le débit maximal ( http://aws.Amazon.com/dynamodb/faqs/#Will_I_always_be_able_to_achieve_my_level_of_provisioned_throughput )

Cela signifie qu’une clé incrémentée directement ne sera pas mise à l’échelle car cette clé doit résider sur un serveur. Il existe d’autres moyens de gérer ce problème, par exemple dans l’agrégation de mémoire avec un incrément de vidage dans DynamoDB (bien que cela puisse poser des problèmes de fiabilité) ou dans un compteur fragmenté où les incréments sont répartis sur plusieurs clés et lus en extrayant toutes les clés du fichier partagé. counter ( http://whynosql.com/scaling-distributed-counters/ ).

16
gigq

En plus de la réponse de gigq à propos de l'évolutivité, les incréments atomiques de DynamoDB ne sont pas idempotents et ne sont donc pas fiables: si la connexion est interrompue après l'envoi d'une demande UpdateItemADD, vous n'avez aucun moyen de savoir si l'ajout a été validé ou non. savoir si vous devez réessayer ou non.

Les mises à jour conditionnelles de DynamoDB résolvent ce problème, au prix de rendre le système encore moins évolutif, car vous devez réessayer à chaque fois que deux modifications de l'attribut sont tentées simultanément, même en l'absence d'erreur.

8
BCoates

si vous allez écrire une seule clé dynamo de base de données, vous souffrirez de hot partition issue. Le problème de la partition chaude commence autour de 300 TPS par index. Ainsi, si vous avez 5 index dans la table, vous pouvez rencontrer un problème de partition à chaud entre 300/5 et 60 TPS.

Sinon, dynamo db est extensible à environ 10-40K TPS, en fonction de votre cas d'utilisation.

1
pavelb