我的用户数据负载很重。我想通过它的id确定这是否是新用户。为了减少对db的调用,我宁愿在以前用户的内存中维护一个状态。
val users = mutable.set[String]()
//init the state from db
user = db.getAllUsersIds()
val source: Source[User, NotUsed]
val dbSink: Sink[User, NotUsed] //goes to db
//if the user is added to the set it will return true
val usersFilter = Flow[User].filter(user => users.add(user.id))
现在我可以创建一个图表
source ~> usersFilter ~> dbSink
我的问题是可变状态是共享且不安全的。是否可以选择在流程中维持状态?
答案 0 :(得分:0)
有两种方法可以做到这一点。
如果要获取记录流并且想要对流进行重复数据删除(因为某些ID已经处理过)。你可以做到
http://janschulte.com/2016/03/08/deduplicate-akka-stream/
另一种方法是通过数据库查找,检查ID是否已存在。
val alreadyExists : Flow[User, NotUsed] = {
// build a cache of known ids
val knownIdList = ... // query database and get list of IDs
Flow[User].filterNot(user => knownIdList.contains(user.id))
}