高效地流式处理大型 MySQL 结果
在开发 Spring 应用程序的背景下,从巨大的 MySQL 表中检索数据可能会带来巨大的挑战,可能会带来巨大的挑战。导致 OutOfMemoryExceptions。这是因为 MySQL JDBC 驱动程序的默认行为是将整个结果集加载到内存中。
设置获取大小:一个不足的措施
缓解此问题,开发人员经常使用statement.setFetchSize(Integer.MIN_VALUE)方法来设置获取大小。然而,仅此并不是一个全面的解决方案。正如 Statement#setFetchSize() 的文档中所述,获取大小仅向驱动程序提供提示,该提示可能会也可能不会被遵守。
重访 MySQL JDBC 文档
深入研究 MySQL JDBC 驱动程序文档揭示了一种更细致的流式处理大型结果的方法。要启用流式传输,必须创建一条语句,如下所示:
stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY); stmt.setFetchSize(Integer.MIN_VALUE);
流式传输的注意事项
实施此方法有一些注意事项:
重新考虑内存分配
如果设置提取大小并调整语句创建,则不需要解决OutOfMemoryError,根本原因可能在于Java内存中的数据存储方式。不要缓存整个结果集,而是考虑在它可用时立即对其进行处理。这可能需要大量的代码修改,可能涉及完全重写。
以上是如何在 Spring 中高效地传输大型 MySQL 结果集以避免 OutOfMemoryErrors?的详细内容。更多信息请关注PHP中文网其他相关文章!