为什么数据库连接池不采用 IO 多路复用?( 二 )


相反 , 连接池的实现就相对独立的多,也简单的多 。外界只要配好DB URL,用户名密码和连接池的容量参数,就可以做到自行管理连接 。
而Nodejs和Vert.X是完全不同的 。他们本质就是Reactive的 。他们的NIO的驱动方式是其运行时的基础——所有要在这个基础上开发的代码都必须遵守同样的NIO+异步开发规范,使用同一个NIO的驱动 。这样DB与NIO的协作就不成问题了 。
最后,有大量场景是需要BIO的DB查询支持的 。批处理数据分析代码都是这样的场景 。这样的程序写成NIO就会得不偿失——代码不容易懂,也没有任何效率上的优势 。类似于Nodejs这样的运行时在此场景下 , 反而要利用async或等价的语法来让代码看起来是同步的,这样才容易写 。
总结一下 。DB访问一般采用连接池这种现象是生态造成的 。历史上的BIO+连接池的做法经过多年的发展,已经解决了主要的问题 。在Java的大环境下,这个方案是非常靠谱的,成熟的 。而基于IO多路复用的方式尽管在性能上可能有优势,但是其对整个程序的代码结构要求过多 , 过于复杂 。当然,如果有特定的需要 , 希望使用IO多路复用管理DB连接,是完全可行的 。
作者丨大宽宽
来源丨zhihu.com/question/23084473/answer/334920663




推荐阅读