因用户需要,给网站增加了一项批量导入excel功能,单个excel文件记录大概2万到3万行,20列左右数据,目前测试发现每次导入数据的时候,都会造成网站其他功能短暂卡住无法使用的情况,直至excel全部处理完才可访问。目前每一行记录均通过网站API统一入库(进行一系列的权限、查询、增加、修改、去重、记录日志等操作)。
不知道有什么方法可以改进,使其导入同时不影响其他用户使用,目前想到的办法是将excel解析结果临时保存到xcache,然后分批(30000条/50条=600次)导入。不知是否有更好的办法。
以下是
老代码
:以下是
新代码
:异步任务队列
上传后生成任务记录,放到队列处理
如果需要处理的数据太多,建议写入一个队列,然后使用后台php—cli队列任务处理进程来异步处理吧。这个有点像我之前做的一个视频上传后加入队列,然后使用后台PHP—cli进程来异步处理视频转码过程的例子。
感谢各位关注,目前已改用Golang语句重写,15W条CSV记录,下载、解析、去重并导入Mongodb,大概50秒时间。
导入excel php原生处理很慢,可以采用PHP扩展xavxls https://git.oschina.net/xavie...
原生读取excel速度和内存都一般都无法接受,你们在网站增加的接口,每个excel2-3W行,服务器就会卡死的,因为内存和CPU不足了。采用其他语言或者PHP的C扩展可以解决读取的问题,剩下的就是插入数据库的问题了。插入数据库可以分批批量插入