Scala 软件事务内存和 Akka Actors/Agents
Scala Software Transactional Memory and Akka Actors/Agents
我一直在构建数据挖掘应用程序。我使用多个参与者来查询数据源,然后将增量更改记录到文本文件中。但是,多个矿工可以接收同一实体的数据。这会导致竞争条件,从而导致日志文件中出现重复的日志数据和其他异常情况。
为了防止这种情况,我想添加一个终结器 Actor
并使用 STM。我将让 Miner actor 将实体提交到共享内存,并向 Finalizer 发送消息以通知它处理该实体。通过使用 STM,如果实体在 Finalizer 的交易期间被另一个 Miner 更新,则 Finalizer 将中止交易并重新开始。当 Finalizer 成功读取(并删除,对于 GC)实体时,它会向 Logger 发送一条消息。这样,Logger actor 就不会记录重复的条目。
但是:
http://doc.akka.io/docs/akka/2.4.1/scala/agents.html
Agents participating in enclosing STM transaction is a deprecated feature in 2.3.
如果代理和 STM 现在已弃用,对于共享 actor 状态,推荐的解决方案是什么?
我的解决方案是使用 ScalaSTM,Actor 访问 singleton/shared TMap。
我一直在构建数据挖掘应用程序。我使用多个参与者来查询数据源,然后将增量更改记录到文本文件中。但是,多个矿工可以接收同一实体的数据。这会导致竞争条件,从而导致日志文件中出现重复的日志数据和其他异常情况。
为了防止这种情况,我想添加一个终结器 Actor
并使用 STM。我将让 Miner actor 将实体提交到共享内存,并向 Finalizer 发送消息以通知它处理该实体。通过使用 STM,如果实体在 Finalizer 的交易期间被另一个 Miner 更新,则 Finalizer 将中止交易并重新开始。当 Finalizer 成功读取(并删除,对于 GC)实体时,它会向 Logger 发送一条消息。这样,Logger actor 就不会记录重复的条目。
但是: http://doc.akka.io/docs/akka/2.4.1/scala/agents.html
Agents participating in enclosing STM transaction is a deprecated feature in 2.3.
如果代理和 STM 现在已弃用,对于共享 actor 状态,推荐的解决方案是什么?
我的解决方案是使用 ScalaSTM,Actor 访问 singleton/shared TMap。