百万数据导出到 Excel的两种方案
需求背景
随着系统数据日增量的增加,导出接口的性能也面临着巨大挑战。为了解决导出性能问题,我们想出了两种优化方案。
方案一:同步导出
-
确定导出数据量:首先确定需要导出的数据量。
-
定义写入规则:定义每次写入 sheet 页的数据量。
-
计算写入次数:计算总共需要同步写入多少次。通过总数据量除以每次写入的数量得到总写入次数。
-
循环写入数据:
- 每次查询写入之后,获取上一次数据中的最大 ID。
- 下一次写入时,使用 SQL 的 ID 大于上一次的 ID 值并限制写入 sheet 页的数量。这样操作是为了避免数据量太大导致 SQL 查询偏移量过大而影响性能。
方案二:多线程异步查询导出
-
确定导出数据量:同样需要确定需要导出的数据量。
-
定义写入规则:定义每次写入 sheet 页的数据量。
-
计算写入次数:计算总共需要异步写入多少次。
-
异步查询数据:
- 循环写入数据,每个循环开启一个异步线程去查询数据。
- 计算每个异步线程的查询偏移量,确保每个线程查询的数据不重复。
-
同步写入 Excel:最后需要多线程加锁同步写入 Excel。这是因为 Excel 不支持并发写入,否则会抛出异常。
结语
以上是两种提高百万数据导出Excel 优化的方案,大家可以根据实际情况选择适合的方案来优化系统性能。