我正在构建一个传统的webapp,它通过JDBC进行数据库CRUD操作.我想知道在当前的请求处理线程中将jdbc操作放入actor是否合适.我做了一些搜索,但没有找到演示这个的教程或示例应用程序.
那么缺点和优点是什么?这个异步化是否会像nio一样提高appserver的容量(即处理的并发请求)?
lee*_*777 13
将JDBC访问权限放在actor中是"好"还是不是很大程度上取决于应用程序的其余部分.
由于Servlet API是大多数Java(和Scala)Web框架的基础,因此今天的大多数Web应用程序都是同步的.虽然我们现在看到对异步servlet的支持,但是这种支持并没有在所有框架中发挥作用.除非您从支持异步处理的框架开始,否则您的请求处理将是同步的.
至于JDBC,JDBC是同步的.实际上,考虑到修改世界上大量的JDBC驱动程序实现所带来的负担,我们永远不会做任何事情.我们可以希望,但不要屏住呼吸.
并且JDBC实现本身不必是线程安全的,因此在完成对同一连接的某些其他操作之前调用JDBC连接上的操作将导致未定义的行为.未定义的行为!=好.
所以我的猜测是你不会看到与NIO看到的完全相同的容量改进.
编辑:刚发现 adbcj ; 异步数据库驱动程序API.这是一个为硕士论文写的实验项目,很早就是实验性的.这是一个有价值的实验,我希望它成功.看看这个!
但是,如果您正在构建一个基于actor的异步系统,我真的很喜欢拥有数据访问或存储库actor的想法,就像在分层OO架构中拥有数据访问或存储库对象一样.
Actors保证一次处理一个消息,这是访问单个JDBC连接的理想选择.(需要注意的一点是:大多数连接池默认发布每线程连接,这对于演员来说效果不佳.相反,你需要确保使用每个演员连接.同样如此用于交易管理.)
这允许您将数据库视为我们应该一直处理它的异步远程系统.这也意味着您的数据访问/存储库actor的结果是可以组合的期货.这使得更容易协调数据访问与其他异步活动.
那么,它好吗?可能,如果它适合您系统其余部分的架构.它会提高容量吗?这将取决于您的整体系统,但这听起来像一个非常有价值的实验.
| 归档时间: |
|
| 查看次数: |
1432 次 |
| 最近记录: |