代码之家  ›  专栏  ›  技术社区  ›  Can't Tell

Spring JPA和流媒体-数据是以增量方式获取的吗?

  •  2
  • Can't Tell  · 技术社区  · 7 年前

    我正在看 streaming query results Spring文档的一节。该功能是否一次获取所有数据,但将其作为流提供?或者它是以增量方式获取数据,以便提高内存效率?

    如果它不以增量方式获取数据,是否有其他方法可以通过spring数据jpa实现这一点?

    1 回复  |  直到 7 年前
        1
  •  5
  •   Kayaman    5 年前

    这取决于您的平台。

    不是简单地将查询结果包装到流中,而是使用特定的方法来执行流。

    以MySQL为例,流媒体是在 truly streaming fashion 当然,如果底层数据存储(或正在使用的驱动程序)不支持这种机制,那也不会有什么不同。

    MySQL是IIRC目前唯一一个可以以这种方式提供流媒体而无需额外配置的驱动程序,而其他数据库/驱动程序则采用Vlad Mihalcea所述的标准获取大小设置: https://vladmihalcea.com/whats-new-in-jpa-2-2-stream-the-result-of-a-query-execution/ ,请注意性能与内存使用之间的权衡。其他数据库很可能需要 reactive database client 甚至可以执行真正的流式处理。

    无论底层的流方法是什么,影响最大的是如何处理流。使用弹簧 StreamingResponseBody 例如,允许您以最小的内存使用量将大量数据直接从数据库流式传输到客户端。尽管如此,这是一个非常具体的用例,所以现在还不要开始流式传输所有内容,除非你确信这是值得的。