1

(MongoDBに対して)多数のデータベースクエリを実行し、それらのデータベースクエリによって返されたレコードに対して重要な量の処理を実行しているWebサービスがあります。各Webリクエストは、これらのリクエストの約15〜45を実行する必要があります。これにより、各クエリと処理に約20ミリ秒かかるため、許容できないページ応答時間が発生します。キャッシュミス率が高くなり、データを可能な限り新鮮にする必要があるため、キャッシュは機能しません。

Scala + Akkaとアクターを使用して、クエリの実行と処理を実行するクラスを並列化することを計画していましたが、サーブレットコンテナー内にスレッドを作成することはお勧めできません。ScalaでWebリクエスト内でスレッド化/並列化を行うための推奨される方法は何ですか?

4

1 に答える 1

3

これにAkkaの先物を使用できない理由がわかりません(私は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の先物に対処する方法は確かに複数あります。その例は、あなたが望むものには理想的ではないかもしれません)

詳細については、優れたAkkaドキュメントをご覧ください 。Akka1.2R6将来のドキュメント

上記のコメントで述べたように、私は過去にAkka HTTPモジュールを使用して、拡張性と信頼性の高いアプリを構築しました。これらはすべてActor/Futureベースです。

于 2011-09-09T17:11:01.557 に答える