如何查询大量 Akka actor 并将结果存储在数据库中?
How to query large numbers of Akka actors and store results in a database?
我正在 Scala/Akka 中构建一个证券交易模拟器。每个 TraderActor
都有一个 var wealth
随着参与者通过市场进行交易而随时间波动。
在不同的时间间隔,我想查询所有 TradingActors
以获取它们各自 'wealth' 的当前值,并将所有结果存储在数据库中以供以后分析。我怎样才能做到这一点?
我会发送一个 StoreMessage
告诉 TraderActor
将他们的 wealth
值通过一些 StoreData
消息发送给 StoreController
actor ref .
然后 StoreController
将接收 StoreData
消息并在接收时存储它们的内容,或者将它们路由到 StoreWorker
以在接收时存储它们(制作 StoreController
路由器),或者在编写它们之前堆叠它们,或者任何其他适合您需要的策略。
您希望 StoreController
处理接收到的 wealth
的方式主要取决于您的数据库、TraderActor
的数量、您希望存储值的频率、等等
我认为 Akka 附带的 event bus 实现就是为了这个目的。
查询数百万个演员以检索他们拥有的价值不是一个好主意,因为
- 无论何时获得整个聚合值,这些值都会过时。
- 你不能有实时报告
因此,您需要像 Kafka 这样的分布式事件系统来在任何更改时将值推送到那个值。然后你可以定义订阅它的 Kafka 消费者并接收事件并聚合或可视化等。
通过这种方式,您将拥有实时报告系统,而无需设置任何 cronjob 来定期检查参与者并检索他们的状态。
我正在 Scala/Akka 中构建一个证券交易模拟器。每个 TraderActor
都有一个 var wealth
随着参与者通过市场进行交易而随时间波动。
在不同的时间间隔,我想查询所有 TradingActors
以获取它们各自 'wealth' 的当前值,并将所有结果存储在数据库中以供以后分析。我怎样才能做到这一点?
我会发送一个 StoreMessage
告诉 TraderActor
将他们的 wealth
值通过一些 StoreData
消息发送给 StoreController
actor ref .
然后 StoreController
将接收 StoreData
消息并在接收时存储它们的内容,或者将它们路由到 StoreWorker
以在接收时存储它们(制作 StoreController
路由器),或者在编写它们之前堆叠它们,或者任何其他适合您需要的策略。
您希望 StoreController
处理接收到的 wealth
的方式主要取决于您的数据库、TraderActor
的数量、您希望存储值的频率、等等
我认为 Akka 附带的 event bus 实现就是为了这个目的。
查询数百万个演员以检索他们拥有的价值不是一个好主意,因为
- 无论何时获得整个聚合值,这些值都会过时。
- 你不能有实时报告
因此,您需要像 Kafka 这样的分布式事件系统来在任何更改时将值推送到那个值。然后你可以定义订阅它的 Kafka 消费者并接收事件并聚合或可视化等。 通过这种方式,您将拥有实时报告系统,而无需设置任何 cronjob 来定期检查参与者并检索他们的状态。