Scala 数据结构去重复 akka 完成的工作
Scala data structure to deduplicate work done by akka
我想在 Scala 中实现一个数据结构,它允许我对我的程序完成的工作进行重复数据删除。该程序基于akka-scala框架构建。
每次我在我的 worker 中收到一条消息时,我都会检查这个数据结构以了解当前正在处理的内容。如果此类消息类型已经在处理中,我会将其存储在该数据结构中并等待处理结果。当处理结果到达时,我会为所有这种类型的存储消息发送确认,并将其从结构中删除
如果在这个数据结构中没有找到这样的消息类型,我会把它存储在那里并开始处理。
目前我想到的是mutable.Map[Long, Seq[ETLMessageMeta]]
这样的任务还有什么更好的吗?
如果每个工作单元都是唯一可识别的,那么 Map
听起来很合适。但是,不要使用 mutable.Map
,而是使用 immutable.Map
即 var
,以帮助确保此可变状态不会泄漏到工作 actor 之外。例如:
class Worker extends Actor {
var inProgress = immutable.Map[Long, Seq[ETLMessageMeta]]()
def receive = ???
}
我想在 Scala 中实现一个数据结构,它允许我对我的程序完成的工作进行重复数据删除。该程序基于akka-scala框架构建。
每次我在我的 worker 中收到一条消息时,我都会检查这个数据结构以了解当前正在处理的内容。如果此类消息类型已经在处理中,我会将其存储在该数据结构中并等待处理结果。当处理结果到达时,我会为所有这种类型的存储消息发送确认,并将其从结构中删除
如果在这个数据结构中没有找到这样的消息类型,我会把它存储在那里并开始处理。
目前我想到的是mutable.Map[Long, Seq[ETLMessageMeta]]
这样的任务还有什么更好的吗?
如果每个工作单元都是唯一可识别的,那么 Map
听起来很合适。但是,不要使用 mutable.Map
,而是使用 immutable.Map
即 var
,以帮助确保此可变状态不会泄漏到工作 actor 之外。例如:
class Worker extends Actor {
var inProgress = immutable.Map[Long, Seq[ETLMessageMeta]]()
def receive = ???
}