2015-11-03 1 views
0

Quelle est la différence dans l'écriture/suppression synchrone et asynchrone dans Cassandra?écriture synchrone vs asynchrone/suppression dans Cassandra

Si j'utilise executeAsynchronously() au lieu de execute() méthode de CqlOperation classe (pilote datastax) cela améliorera-t-il les performances en termes de débit (TPS)? Dans mon application, je fais une insertion/suppression unique ainsi que l'insertion de lot. Jusqu'à présent, je n'utilisais que la méthode execute (synchrone) et je pense utiliser l'exécution asynchrone pour améliorer les performances de l'application en termes de TPS.

+0

Avant de lire les lots, lisez-les. Les lots n'améliorent pas les performances – jny

Répondre

0

écriture de synchronisation (ou supprimer) à cassandra bloque l'exécution de code jusqu'à ce que le client reçoit une confirmation que l'opération a été réalisée sur la base de la niveau de cohérence. D'autre part, async write (ou delete) enverra la requête à cassandra, puis procédera à l'exécution du code (ne bloquera pas). Vous devez maintenant enregistrer un type de rappel qui vous informera (de manière asynchrone) que l'opération d'écriture est terminée.

Tout le blocage s'additionne et peut ralentir votre application. Comme les requêtes asynchrones se poursuivent immédiatement, elles vous permettent d'envoyer plus de requêtes asynchrones juste après, au lieu d'attendre que la première finisse. C'est là que l'augmentation des performances se produit, surtout si vous envoyez beaucoup de requêtes à cassandra.

1

Les écritures asynchrones offrent de meilleures performances par travailleur, mais elles ajoutent une surcharge aux rappels et au traitement des erreurs.

J'ai fait un test récemment pour trouver des avantages de performance ainsi que la mise en œuvre de callback avec gestion des erreurs en utilisant un seul travailleur avec des enregistrements 1M Async a été trouvé 4 fois plus rapide que Synchrone. in_flight queries ont été limitées à 1000, ce nombre peut être réglé en conséquence selon les conditions d'environnement (Nombre de connexions que vous voulez mettre sur le fil, disons avec 200ms de latence réseau et 1ms de temps de réponse du serveur Sync appel aurait laissé serveur libre pour 199ms sur 200ms dans ce cas serveur traiterait au moins une requête presque tout le temps) mais sans restriction, il encombrera le réseau avec une dégradation possible des performances.

Dans certains cas, la requête synchrone peut être plus appropriée, en particulier si le résultat de la requête est critique avant d'aller de l'avant avec le programme. Mais dans la plupart des cas Async suffit.

En bref, la réponse à votre question est Oui - J'ai testé TPS augmentation de 4x.

Référence - performance evaluation using async writes