1

我有一个 Web 服务,它正在执行许多数据库查询(对 MongoDB),然后对这些数据库查询返回的记录进行大量处理。每个 Web 请求需要运行大约 15-45 个这样的请求,这导致不可接受的页面响应时间,因为每个查询 + 处理大约需要 20 毫秒。缓存将不起作用,因为缓存未命中率很高,并且数据需要尽可能新鲜。

我曾计划使用 Scala + Akka 和 actor 来并行化执行和处理查询的类,但我知道不鼓励在 servlet 容器内创建线程。在 Scala 中的 Web 请求中进行线程/并行化的推荐方法是什么?

4

1 回答 1

3

我不明白为什么你不能为此使用 Akka 的 Futures(我使用的是 2.0 SNAPSHOT)。

import akka.dispatch.Future
Future.sequence(1 to 45 map { i =>
  Future {
    ... make database query i ...
  }
}) onComplete { future =>
  future.result.map { resultList =>
    // resultList.foldLeft...
    // resultList.map...
    // resultList.foreach...
    // resultList.whatever...
  }
}

(并且在 Akka 中处理 Futures 的方法肯定不止一种以满足您的需求。该示例可能不适合您想要的)

查看优秀的 Akka 文档以获取更多信息: Akka 1.2R6 Future documentation

正如我在上面的评论中提到的,我过去曾使用Akka HTTP 模块来构建高度可扩展且可靠的应用程序,它们都是基于 Actor / Future 的。

于 2011-09-09T17:11:01.557 回答