演员的细微程度如何?

时间:2014-11-02 15:10:46

标签: scala akka

这是一个初学者Akka的问题(也许我到处都看到演员)

我有一个sql表“books”。 (500万行)我想要运行的查询需要尽可能快。 where子句非常复杂。我希望查询在一秒钟内运行。这就是我需要纯存储器解决方案的原因

每个书行都有一个演员是否有意义?

通过这种设计,我将拥有一个“bookManagerActor”来管理其500万儿童“bookActors”

“bookMangerActor”应该回复“过滤日期书”或“按日期和名称排序书籍”等消息(排序和过滤可能需要一些时间,过滤器可以组成)

或者我应该在bookManagerActor中使用java.util.Set吗? 将单书作为演员建模可以获得任何好处吗?

3 个答案:

答案 0 :(得分:2)

在这种情况下我没有看到使用演员的任何好处,是的,有500万演员要求。

我会使用不可变的HashMap将书籍存储在缓存actor中。

http://www.scala-lang.org/api/current/index.html#scala.collection.immutable.HashMap

答案 1 :(得分:2)

您可以处理的数据库并发连接数量有限,因此创建更多的actor是没有意义的 - 他们必须等待彼此进行查询。我建议整个表有一个演员,最终可以将查询委托给“工人”,即。它的儿童演员。 actor-manager将计算剩余的连接数,并为新查询创建worker或将查询发送给现有的worker。

答案 2 :(得分:1)

您似乎正在尝试重新创建标准数据库功能(排序和过滤)。这些都是相当复杂的主题,很多人花了很多时间来解决这些问题。例如,普通DB将有一个索引来加速排序。

可能有SQL DB可以在内存中运行。您甚至可以使用标准SQL DB并在内存文件系统上运行它。还有许多NoSQL缓存DB严格在内存中运行(Redis,memcached,...)。

如果你试图手动实现这一点,我认为Akka不会成为现实。普通的收藏会更有效率。我甚至无法想象你的500万演员会如何相互交谈以便自我解决。他们会将自己的日期和引用返回给主人,而主人会进行排序吗?这对于集合来说会更有效率。