私の状態が潜在的に非常に大きい (RAM に収まらないとしましょう) いくつかのエンティティのリストであるサービスを実装しようとして、akka 永続化で遊んでいます。ユーザーがすべてのエンティティのすべての履歴を利用できるようにしたいとします。akkaの永続性でそれを行うことはできますか?
現在、私のアクターの状態はそのようになっています。
case class System(var processes: Map[Long, Process] = Map()) {
def updated(event: Event): System = event match {
case ProcessDetectedEvent(time, activitySets, id, processType) =>
val process = Process(activitySets.coordinates, time, activitySets.channels, id, processType, false)
copy(processes = processes + (id -> process))
case ProcessMovedEvent(id, activitySets, time) =>
val process = Process(activitySets.coordinates, time, activitySets.channels, id, processes(id).processType, false)
copy(processes = processes + (id -> process))
case ProcessClosedEvent(time, id) =>
val currentProcess = processes(id)
val process = Process(currentProcess.coordinates, time, currentProcess.channels, id, currentProcess.processType, true)
copy(processes = processes + (id -> process))
case _ => this
}
}
ご覧のとおり、プロセスのマップはメモリに保存されるため、プロセスの数が多くなると、アプリケーションがメモリ不足になる可能性があります。