Scala 如何在Akka参与者之间共享状态?

Scala 如何在Akka参与者之间共享状态?,scala,akka,mutable,Scala,Akka,Mutable,我有一个BalanceSheetActor定义如下: class BalanceSheetActor extends Actor { val tradables = mutable.Set[Contract] } case class DepositContract(faceValue: Double) 我有一些简单的存款合同定义如下: class BalanceSheetActor extends Actor { val tradables = mutable.Set[Con

我有一个
BalanceSheetActor
定义如下:

class BalanceSheetActor extends Actor {

  val tradables = mutable.Set[Contract]

}
case class DepositContract(faceValue: Double)
我有一些简单的存款合同定义如下:

class BalanceSheetActor extends Actor {

  val tradables = mutable.Set[Contract]

}
case class DepositContract(faceValue: Double)
我的模型中的每个合同都是一个
余额表参与者的资产,另一个
余额表参与者的负债,因此任何
合同的状态都将在参与者之间共享(即,每个合同都将是至少两组
可交易项的成员)

假设我想将
存款合同的
面值
增加一些
金额
。我要么需要

  • 从两套
    可交易文件中删除旧合同
    ,并将其替换为新的
    存款合同(faceValue+金额)
  • 将每个
    合同建模为
    akka.Agent
  • 将每个
    合同
    建模为一个
    akka.Actor
    (从而封装状态)
  • 选项1似乎不必要地复杂(此外,合同很可能会失去同步),选项2似乎还可以,但我需要创建数以百万计的合同代理,并且担心内存使用。我对方案3也有类似的担忧。我不知道这些内存使用问题是否有充分的依据。想法


    我希望Scala/Akka noob没有想到有一个选项4…

    两个角色之间的共享状态与演员的模型哲学完全相反。然而,在这种情况下,共享状态是我试图建模的系统的一个基本属性。您确定参与者是这种状态的合适位置吗?在我看来,支持ACID事务(如关系数据库)的系统可能更适合处理金融数据的存储。参与者仍然可以用于处理交易。我不是在存储金融数据,而是在构建一个大规模的多代理系统/基于代理的金融市场模型。为什么选项1一定会很复杂?使用映射[contracd,Contract],并在修改契约时简单地替换映射条目。参与者之间的共享状态与参与者的模型哲学完全相反。然而,在这种情况下,共享状态是我试图建模的系统的一个基本属性。您确定参与者是这种状态的合适位置吗?在我看来,支持ACID事务(如关系数据库)的系统可能更适合处理金融数据的存储。参与者仍然可以用于处理交易。我不是在存储金融数据,而是在构建一个大规模的多代理系统/基于代理的金融市场模型。为什么选项1一定会很复杂?使用映射[contracd,Contract],并在修改契约时简单地替换映射条目。参与者之间的共享状态与参与者的模型哲学完全相反。然而,在这种情况下,共享状态是我试图建模的系统的一个基本属性。您确定参与者是这种状态的合适位置吗?在我看来,支持ACID事务(如关系数据库)的系统可能更适合处理金融数据的存储。参与者仍然可以用于处理交易。我不是在存储金融数据,而是在构建一个大规模的多代理系统/基于代理的金融市场模型。为什么选项1一定会很复杂?使用映射[contracd,Contract],并在修改契约时简单地替换映射条目。