为什么数据库和数据库连接池不采用类似java nio的IO多路复用技术使用一个连接来维护和数据库的数据交换?
类似java的nio相比于传统阻塞io模型来说,有效率高(特别在高并发情况下)和资源耗费相对较少的优点。传统的阻塞IO为了提高效率,需要创建一定数量的连接形成连接池,而nio仅需要一个连接即可(大部分情况下一个连接即可)。那么请问,数据库和数据库连接池为什么不采用这种方式?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(11)
应该是事务的缘故
java nio是单一长连接 多socket复用,适合高并发、 服务端快速响应、传输数据量小的情况,而DB服务器的响应速度、传输数据量跟sql任务有很大关系,所以不适合。不过DB可以考虑加个开关,用户可以根据自己应用情况进行配置。
单个会话处理能力有限
连接本身是一个tcp的长连接。数据库一开始设计的时候就是要求多tcp连接的方式的。
数据库连接池是这个样子,是因为数据库是这个样子的。
如果改变这套机制,要重做数据库那部分。
JDBC是同步的吧?
连接池与数据库之间还有个JDBC驱动
helloworld类 是指 耗时比较少的吗?我昨天看dubbo ,文档里说 单个长链接 所以比较奇怪 为什么数据库要采用连接池的形式
回复
helloworld类不占用多少资源,主要指cpu 链接池可以根据负载平滑伸缩,不浪费资源 另外稳定性更好, 单个进程其中有一段代码出岔子,后面的全遭殃,可以参考nodejs
回复
单个长连接不就是标准的tcp协议啊。
回复
准确,以及精确
nio只对io密集的helloworld类应用有优势,但对cpu密集的交并差集,搜索,排序并没有优势,只是增加了不稳定性