2013-07-06 23 views
9

我目前正在使用一個非常大的數據庫(> 50GB),並試圖瞭解最有效,可用的方法,可以很好地與Akka的固有線程配合使用。在Akka中精確的數據庫會話,效率和線程

關於「使用會話{}」方式封裝所有內容,雖然這會更容易解決,但我擔心這會限制阿卡在參與者之間的線程。我不是很瞭解Akka的線程是如何工作的,以及在Session中如何包裝整個actor系統會影響它。

另一種方法是在訪問數據庫時調用withSession,這是效率太低。 「withSession {」代碼段需要6ms才能執行,而且我們正在進行數百萬次查詢。從本質上講:什麼是在不破壞線程的情況下用Slick和Akka快速訪問數據庫的最佳方式?

我聽說過使用隱式會話和事務的方法,但我正努力尋找其中任何一種方法的文檔。

+0

請參閱[此答案](http://stackoverflow.com/a/16834855/406435)以獲得一些建議。 – senia

+0

如何將一個ExecutionContext與Sessions對接? 或者最好的解決方案是簡單地將所有數據庫訪問代碼放在不同的ExecutionContext下,而不是其他的? – TreeWhale

+0

你可以創建N個演員,每個演員都有自己的會話。每個演員應該使用自己的會話,並且所有與數據庫的通信都應該通過這些演員。 – senia

回答

4

優於從不遲到:

推薦的方法是使用JDBC連接池(例如C3P0)。你需要確保一個會話被獲取並返回,並保持在同一個線程中。 withSession懶洋洋地從池中獲取一個連接,並在範圍的末尾返回它。在需要時快速獲取連接,並在之後立即將它們返回到池中。