微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我正在构建一个通过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 acccessrepository对象一样.

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐