2016-02-15 1 views
2

J'ai construit une application d'exploration de données. J'utilise plusieurs acteurs pour interroger une source de données, puis j'enregistre les modifications incrémentielles dans les fichiers texte. Cependant, plusieurs mineurs peuvent recevoir des données sur la même entité. Cela conduit à des conditions de concurrence qui peuvent conduire à des données de journal en double et à d'autres anomalies dans les fichiers journaux.Scala Software Mémoire transactionnelle et acteurs/agents Akka

Pour éviter cela, je souhaite ajouter un seul Finalizer Actor et utiliser STM. Je vais avoir des acteurs mineurs qui soumettent des entités à la mémoire partagée et envoyer un message au Finalizer pour l'informer de traiter cette entité. En ayant STM, si l'entité est mise à jour par un autre mineur pendant la transaction du Finalizer, le Finalizer annulera la transaction et recommencera. Lorsque le Finalizer lit avec succès (et supprime, pour GC) l'entité, il envoie un message au Logger. De cette façon, l'acteur Logger n'enregistrera pas les entrées en double.

Cependant: http://doc.akka.io/docs/akka/2.4.1/scala/agents.html

agents participant à la transaction entourant STM est une caractéristique désapprouvée en 2.3.

Si les agents et STM sont désormais obsolètes, quelle est la solution recommandée pour l'état d'acteur partagé?

Répondre