scala – JDBC在事件驱动的程序中有多大用处?

我正在
Scala中编写一个事件驱动的体系结构,我需要使用它来管理数据库.

我想知道使用只支持同步调用的JDBC是否可以很好地解决我的问题?

我想过为JDBC调用编写一个异步包装器,但是它真的会解决我因为数据库调用而被阻塞的问题吗?

最佳答案 这是一个非常好的问题,实际上没有一个好的答案.

这实际上取决于您的数据库,协议和驱动程序实现.首先,一些数据库,例如, Cassandra具有内置于协议级别的异步功能.应该让它更容易在事件驱动的模型中工作,对吗?不完全是 – 如果您通过慢速连接获得数十亿字节的数据,则可能会阻止网络级别.

其他数据库只有同步协议,因此可以阻止你的资源,对吗?不完全是 – 有连接池可以防止阻塞的一些问题.

因此,根据您正在访问的应用程序体系结构和数据,您可能需要隔离一层数据访问,这将包装JDBC连接并提供异步功能.该层可以根据打开连接的可用性(例如,持有连接的actor,以及如果没有空闲数据库将生成新的DB连接actor的主管,并使用PinnedDispatcher创建新线程)来上下扩展.

在其他情况下,使用特定的驱动程序,您可能只需将JDBC包含在Future中,希望驱动程序能为您带来魔力.

如果您构建大型应用程序,您可能希望甚至将持久性访问逻辑完全分离到RabbitMQ中,并使用RPC来访问数据库.

点赞