项目环境: Mysql8.0 PHP8.0 Laravel 9.0
幼年期幼年期顾名思义为我们的项目刚刚起步,这个时候我们可能不知道项目后面的走向,以及全体导出构造的数据量,以是这个时候我们常日采取最大略的办法进行导出 ,详细可以参考 Laravel-excel,这里就不做详细的先容。该方案最大的上风便是开拓快速,不须要过多的事情量。当然缺陷也很明显当数据超过1万条时,就会特殊慢而且占用内存也很高,随着数据越来越多,超过5万的时候基本便是不能正常事情的状态。
成长期当我们数据业务逐步增长的时候,我们选择了一个由C编写的PHP扩展 php-ext-xlswriter,该方案须要在php环境中安装扩展,支持pecl安装。该方案比上一个方案的优点在于,写入速率更快,而且占用内存更小。在项目中期我们每每采取该方案就可以知足项目需求。放一个作者的做的与PHPExcel的比拟图。
成熟期
上面两个方案都有一个问题那便是当一次性导出数据达到一定量(5万),并且数据库全体数据量比较大(300万)的时候,全体导出进程可能瓶颈就会在查询数据库以及处理数据类型等流程中。这个时候我们为了使导出能够正常完成,可以采取利用异步导出的办法,让导出任务在后台完成,待完成之后通过邮件关照到用户,或者在网页端显示对应的提醒。当然仅仅是异步导出也是不足的,我们还须要做分片导出。比如一次性导出20万条数据,我们可以每次导出1万条,然后末了将20个小的导出文件合并为一个作为终极的输出。导出跟合并在php-ext-xlswriter 都有对应的实现,开箱即用。
很多时候一个功能我们可能有很多种办理方案,但是我们须要在不同的阶段的选择最得当的办法。选择的指标常常有。用户习气、事情量等方面。终极的结果须要我们在事情中与产品经理一起协商确定,千万不要做一个只会专一苦干的人哦,末了常日吃力不谄媚。