异步JDBC的神话


我经常看到人们(尤其是在scala/typesafe世界)发布异步jdbc库。住手!在当前的应用编程接口下,异步JDBC属于独角兽、虎松鼠和8英尺蜘蛛的领域。虽然您可能能够移动阻塞操作和队列请求,并防止您的“主”工作线程阻塞,但jdbc是同步的。在某个时候,某个地方,会有一个线程阻塞等待响应。

看到如此多的人大肆宣传这一点并把水搅浑,真是令人沮丧。除非您为dbms编写自己的客户端,并且拥有一个可以通过单个连接多路传输调用的dbms(或者使用其他策略来启用这种功能),否则数据库访问将会被阻止。完全异步调用并不是不可能的,但是还没有人构建它。是的,我知道ajdbc正在尝试这种功能,但是即使是信息技术也使用线程池来阻止调用(默认)。

有一天我们会有异步数据库访问(这不是不可能的...目前的JDBC规范是这样的),但是目前没有通用的关系数据库管理系统有这个。炒作/误导的主要问题是#1没有经验的程序员不理解他们刚刚转移了问题,并且会使用APIs,并且想知道为什么系统这么慢(哦,我有1000个数据库调用排队等待我的单个数据库线程处理工作)和#2它掩盖了异步JDBC(根据当前规范是不可能的)和异步数据库访问(完全可能/可行,但是在野外很少见)之间的区别的严重误解。