gpt4 book ai didi

database - AKKA Actor 是优化我的设置的好解决方案吗?

转载 作者:搜寻专家 更新时间:2023-10-30 23:46:59 25 4
gpt4 key购买 nike

我在一个项目中工作,其中大量并发读取和写入数据库会降低性能。想象一下,我需要不时地重新索引整个数据库,因此,最简单的方法是将“脏”标志设置为 true,让多台机器抓取“脏”项,进行一些处理,然后然后再次将他们的状态设置为“干净”。可以想象,这是死锁的天堂。

我想对此进行优化,将 DB IO 操作留给一台协调机器,其余可能的并发计算留给其他机器。我认为 Akka 及其分布式 actor 模型可以成为这方面的理想选择。我的想法是让协调 Actor 从数据库中读取一批“脏”项目,解雇众多处理 Actor ,将一个项目传递给每个人。这个想法是处理参与者将驻留在不同的机器上,但协调器和处理器都不应意识到这一点。这似乎是通过使用 Akka 的巨大优势实现的。我想让这成为一个部署配置问题,以便可以随意扩展。

处理 actor 完成处理后,它们可以将结果作为消息发送给协调 actor,协调 actor 将使用相同的连接来保存其状态。

我的设置方向是否正确?

最佳答案

您可以使用 Cluster Singleton作为协调员。请注意,协调 actor 将按顺序接受所有请求,因此它应该非常轻量级。至少您可能希望将批量读取和回写分开。也许(如果你没有触发器)也可以使用分页读取脏 block ,以免长时间阻塞 actor。我使用了在 ResultSet 上定义的迭代器(Oracle JDBC 驱动程序自动进行分页)- 并且像 case ScheduledBulk if previousBulkFinished => future {getIterator(...).foreach(coordinator !_)}} 一样。

如果你想快速写入数据库 - 你可以使用 Fixed Size Router在许多参与者之间分配写入(计数 < 数据库连接池的大小)

关于database - AKKA Actor 是优化我的设置的好解决方案吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27399473/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com