在日常实际业务中涉及到数据统计,我们需要将数据库的数据导出到Excel等文件中,以供数据人员进行查看,如果数据集不大,其实很容易;但是如果对于大数集的导出,将要考虑各种性能的问题。
PHP业务中一般使用的是PHPExcel,对小批量数据导出是完全没有问题。在实际业务中,导出5万多数据就歇菜了,当然场景稍微复杂点。也有人提出来如何优化,比如:
1、将数据按照某种条件进行分割,减少导出的数据量,例如按照日期进行导出,可一周导出一次或者一天导出一次,数据分割肯定是必须的步骤,防止内存溢出,运行超时;
2、进行算法优化,在数据循环时,减少嵌套循环,生成csv或者Excel的数据对象时,一次成型,减少数据库查询次数,如果需要用到其他数据请提前生成相应数据结构的数据。
这些优化项都是ok的,但无法从根本上解决问题,PHP是解释型脚本语言,既然这样何不试试Go语言呢,如果比较熟悉Go语言的话,使用Go+excelize搭建一个下载API,和下载任务更搭哦,至于导出效果,嘿嘿。
以下代码是Go创建一个简单的Http服务,简直太简单了,赶快go mod excelize类库试试吧。
package main
import (
"fmt"
"net/http"
)
type indexHandler struct {
content string
}
func (ih *indexHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, ih.content)
}
func main() {
http.Handle("/", &indexHandler{content: "hello world!"})
http.ListenAndServe(":8000", nil)
}