加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 把jdbc操作放在actor中是不是很好?

发布时间:2020-12-16 09:14:25 所属栏目:安全 来源:网络整理
导读:我正在构建一个通过JDBC进行数据库CRUD操作的传统webapp.而且我想知道是否将jdbc操作放在actor中,超出当前的请求处理线程.我做了一些搜索,但没有发现任何教程或示例应用程序演示这个. 那么什么是利弊呢?这个异步化可以提高app服务器的容量(即处理的并发请求
我正在构建一个通过JDBC进行数据库CRUD操作的传统webapp.而且我想知道是否将jdbc操作放在actor中,超出当前的请求处理线程.我做了一些搜索,但没有发现任何教程或示例应用程序演示这个.

那么什么是利弊呢?这个异步化可以提高app服务器的容量(即处理的并发请求)像nio吗?

解决方法

是否将JDBC访问权限置于“好”还是不在很大程度上取决于您的应用程序的其余部分.

今天的大多数Web应用程序都是同步的,这得益于大多数Java(和Scala)Web框架的Servlet API.当我们现在看到support for asynchronous servlets时,这种支持并没有为所有框架做好准备.除非您从a framework that supports asynchronous processing开始,否则您的请求处理将是同步的.

对于JDBC,JDBC is synchronous.实际上,从来没有做过任何事情,考虑到修改世界各地的gazillion JDBC驱动程序实现的负担.我们可以希望,但不要呼吸.

并且JDBC实现本身不必是线程安全的,因此在完成同一连接上的某些其他操作之前在JDBC连接上调用操作将导致未定义的行为.和未定义的行为!=好.

所以我的猜测是,你看不到与NIO看到的完全相同的容量改进.

Edit: Just discovered 07004; an asynchronous database driver API. It’s an experimental project written for a master’s thesis,very early,experimental. It’s a worthy experiment,and I hope it succeeds. Check it out!

但是,如果您正在构建一个基于异步的基于actor的系统,我真的很喜欢拥有数据访问或存储库角色的想法,就像在分层OO架构中具有data acccess或repository对象一样.

演员确保消息一次一个处理,这对于访问单个JDBC连接是理想的. (一句话要小心:大多数连接池默认发出每个线程的连接,这与actor不能很好的相反,你需要确保你使用的是每个连接的连接,同样如此用于交易管理.)

这样就可以像数据库那样处理数据库,就像我们一直在对待的异步远程系统一样.这也意味着您的数据访问/存储库角色的结果为futures,即composable.这使得更容易将数据访问与其他异步活动进行协调.

那么好吗?可能,如果它符合您系统其余部分的架构.会改善能力吗?这将取决于你的整体系统,但这听起来像是一个非常有价值的实验.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读