2013-07-06 9 views
9

私は現在、非常に大きなデータベース(> 50GB)を扱っており、Akka固有のスレッディングで最も効率的で使いやすいアプローチを理解しようとしています。AkkaのSlickデータベースセッション、効率性、スレッディング

「セッション内ですべてをラップする」というアプローチについては、これは簡単な修正方法ですが、これはアクターのアクター間のスレッドを制限することになると懸念しています。私はAkkaのスレッドの仕組みや、withSessionの中のアクターシステム全体をどのようにラップしてそれを有効にするかについて知識がありません。

もう1つのアプローチは、データベースにアクセスするたびにwithSessionを呼び出すことです。これはあまりにも非効率的です。 "withSession {"コードセグメントは実行に約6msかかるため、何百万ものクエリを作成しています。

本質的に、スレッドを破ることなくSlickとAkkaを使用してデータベースに迅速にアクセスするにはどうすればよいですか?

暗黙のセッションとトランザクションを使用するアプローチについて聞いたことがありますが、私はこれらのいずれかのドキュメントを見つけるのに苦労しています。

+0

いくつかのアドバイスを得るには[回答](http://stackoverflow.com/a/16834855/406435)を参照してください。 – senia

+0

ExecutionContextとセッションをどのようにインターフェースできますか? または、最善の解決方法は、すべてのデータベースアクセスコードを残りのExecutionContextの下に置くだけですか? – TreeWhale

+0

それぞれ独自のセッションを持つN個のアクターを作成できます。各アクタはそれぞれ独自のセッションを使用する必要があり、データベースとのすべての通信はこのアクターの束を通過する必要があります。 – senia

答えて

4

ないより後半:

推奨される方法は、JDBC接続プール(例えばC3P0)を使用しています。セッションが取得され、同じスレッド上に保持され、その間で返されることを確認する必要があります。 withSessionは、プールからlazily接続を取得し、スコープの終わりに返します。接続が必要なときにすばやく取得し、すぐにプールに戻します。

関連する問題