维护流中的状态

时间:2017-10-16 06:44:53

标签: scala akka-stream

我的用户数据负载很重。我想通过它的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

我的问题是可变状态是共享且不安全的。是否可以选择在流程中维持状态?

1 个答案:

答案 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))
}