像是仓库已经把货物按品类装好整箱,交接时却拆成单件,接手后又重新装箱。DuckDB 的 Java 查询过去就有这层浪费:数据库内部按列、每 2,048 行一批处理数据,但 JDBC ResultSet——Java 读取数据库结果的通用接口——要求程序逐行移动、逐列取值。面对数百万行和多个字段,反复定位、转换以及跨 JNI(Java 与原生程序之间的接口)传值,成本便会累积。
DuckDB Java 驱动 1.5.3.0 新增 DuckDBChunkedResult,直接把查询结果作为一串数据块惰性返回:应用需要下一批时才读取,并按列拿到向量,不必先拆成行和单元格。它尤其适合结果最终还要进入数组、Arrow 缓冲区或机器学习特征矩阵的场景,也能避免默认 ResultSet 可能把完整结果读入内存的问题。
这不是要替代 JDBC。对于只返回几百或几千行的普通查询,原有接口仍兼容且合适;新路径主要服务于大结果集,以及应用能控制数据管道两端的情况。