2017-09-27 4 views
0

J'ai cherché sur google, mais je n'ai pas eu de liens autres que la page de documentation de Cassandra. Donc, je veux juste demander s'il y a une API ou une fonction déjà incluse dans le paquet Akka-Cassandra pour l'insertion de ligne de lot ou que je dois appeler le code d'insertion plusieurs fois pour l'insertion de plusieurs lignes.Batch Insérer dans Lagom-Scala Cassandra readside

Remarque: - Je ne vous demande pas d'insérer plusieurs événements, je veux juste stocker des données json au format Key-Pair. Ainsi, un seul événement contenant un objet Json peut nécessiter plusieurs lignes. En PHP et dans d'autres langues, nous pouvons fournir un tableau ayant plusieurs lignes, mais comment l'implémentation du pilote Cassandra d'Akka offre-t-elle cela?

Répondre

0

Le côté lecture de Lagom traite les événements un à la fois. Le seul scénario dans lequel une insertion par lots serait possible est de conserver les événements en mémoire et de conserver le lot après un délai d'attente ou lorsque l'ensemble est suffisamment important. Cette approche est sujette à la perte de données (ou à la sémantique au plus une fois) car, en cas d'accident, le flux d'événements considérera l'événement consommé mais les données en mémoire ne seront pas conservées.

Les valeurs par défaut de Lagom font que chaque événement traite une transaction unique qui inclut un code fourni par l'utilisateur pour mettre à jour les tables de lecture et la mémoire de décalage dans lagom. Cette approche permet un traitement côté lecture efficace une fois que toutes les opérations fournies par l'utilisateur ont eu lieu au sein de la transaction.

L'approche suggérée, pour le moment, consiste à partitionner votre balise d'entité persistante afin que votre flux d'événements d'entité persistante puisse être consommé depuis de nombreuses instances de processeurs de lecture en parallèle. Avec cette solution, chaque instance traitera les événements un à la fois, mais de nombreuses instances seront réparties sur votre cluster.

+1

Désolé, @ ignasi35 vous avez compris ma question de manière différente, j'ai mis à jour la question. –

0

CassandraSession expose tout ce dont vous avez besoin pour le lot écrit, à savoir CassandraSession#prepare suivi par CassandraSession#executeWriteBatch.

Quelque chose comme ceci:

PreparedStatement ps = session.prepare(...); 
BatchStatement batch = new BatchStatement(); 
batch.add(ps.bind(...)); 
batch.add(ps.bind(...)); 
session.executeWriteBatch(batch); 

Cela dit, notez que lire les gestionnaires de côté construit en utilisant CassandraReadSide besoin de retourner un List<BoundStatement> des méthodes de gestionnaire d'événements. Lagom exécutera automatiquement ces instructions dans un lot.

+0

Merci @pazustep S'il vous plaît pouvez-vous partager l'exemple de code Scala aussi? Et sera-t-il compatible avec l'immuabilité, puisque nous changeons les données d'un même objet en appelant 'batch.add (..)'? –