我正在查看Spring文档的streaming query results部分。此功能是否一次性获取所有数据,但是将其作为流提供?或者它是否以递增方式获取数据,以便提高内存效率?
如果它没有逐步获取数据,有没有其他方法可以用spring数据jpa实现这一点?
答案 0 :(得分:2)
这取决于您的平台。
不是简单地将查询结果包装在Stream数据存储中,而是使用特定的方法来执行流式传输。
以MySQL为例,流式传输是在truly streaming fashion中执行的,但当然如果基础数据存储区(或正在使用的驱动程序)不支持这种机制(尚未)它将不会差异。
据我所知,MySQL目前是唯一以这种方式提供流媒体的驱动程序,而其他数据库/驱动程序则采用标准的提取大小设置,如古老的Vlad Mihalcea所述:https://vladmihalcea.com/whats-new-in-jpa-2-2-stream-the-result-of-a-query-execution/,注意性能与内存使用之间的权衡。
无论底层的流媒体方法是什么,影响最大的是如何处理流。例如,使用Spring的StreamingResponseBody
将允许您直接从数据库向客户端传输大量数据,而内存使用最少。它仍然是一个非常具体的用例,所以除非你确定它值得,否则不要开始流式传输所有内容。