我目前正在使用一个非常大的数据库(> 50GB),并尝试了解最有效,最实用的方法,该方法与Akka固有的线程配合良好。
关于“将所有内容包含在withSession {}”方法中,虽然这将是一个更容易修复,但我担心这会限制Akka在actor之间的线程。我对Akka的线程如何工作知之甚少,以及如何在withSession中包装整个actor系统会影响它。
另一种方法是每当访问数据库时调用withSession,效率太低。 “withSession {”代码段需要大约6ms才能执行,我们正在进行数百万次查询。
基本上:在没有破坏线程的情况下,使用Slick和Akka快速访问数据库的最佳方法是什么?
我听说过使用隐式会话和事务的方法,但我很难找到其中任何一个的文档。
答案 0 :(得分:4)
迟到总比没有好:
推荐的方法是使用jdbc连接池(例如c3p0)。您需要确保在同一个线程上保存并从中恢复会话。 withSession
懒惰地从池中获取连接并在范围的末尾返回它。在需要时快速获取连接并在之后立即将它们返回池中。