是否可以通过 Java NIO 非阻塞套接字异步访问数据库?

Is it possible to access a database asynchronously through Java NIO non-blocking sockets?

我想以非阻塞方式访问数据库,换句话说,我将通过套接字发送 SQL 请求并通过同一个套接字读取查询响应 异步。这意味着我只在套接字可用时从套接字读取数据(Java NIO SocketChannel)所以我从不阻塞。

我可能是错的,但据我所知 JDBC 数据库驱动程序都使用阻塞套接字。

即使我必须执行 returns 100 万行的查询,我也可以异步执行此操作,在套接字缓冲区中可用时接收行。

我的目标是在不阻塞的情况下执行 SQL 查询(即不产生延迟)。 使用单独的线程不是一个选项。我需要在网络线程(NIO 选择器线程)中执行此操作。

有没有人成功做到这一点,或者可以推荐一种不涉及额外线程的方法?

如果您编写自己的驱动程序,那么对于大多数数据库来说肯定可以做到这一点。

但是我不知道有任何驱动程序这样做 "out of the box,"。

有可能,但 JDBC 不行。除非您想使用原始 SocketChannel 接口并自己解析结果,否则我所知道的 JVM 上唯一的异步数据库驱动程序是 https://github.com/mauricio/postgresql-async(尽管名称也支持 MySQL ).它们是用 Scala 编写的,但应该 可能 从 Java 调用它们(因为它是一种 JVM 语言),尽管我不能说如何 Java -API 会很友好。