最近产品出了个需求,要求:
在后台管理系统导入10~50w左右的数据到系统,通过excel上传,可以非实时,模板为下图
作为程序员,第一反应脑海里应该出现了以下几个关键字
PHPExcel
异步、消息队列
mysql的update
很好,其实主要的解决方案的确围绕在这几个问题,其实现实问题中有很多的解决方案,比如能否通过csv,naviecat导、load data、写入一个 sql 文件,然后 mysql source执行等等。那么接下来我们应该按What - Why - How来对应选择方案
但是在实际场景中,我们应该把需求更加具体化,比如
导入的excel是否存在错误的数据?(是否每一行过滤),数据是否会重复、单元格能否空行(判断跳过)
允许非实时,但导入的频率如何?(我这里是一个月导1到2次)
导入完成怎么通知用户?(后台站内信)
方案一
PHPExcel+Mysql Update,简单粗暴的方案,读一行(excel)写一行(update),但是必须在后台常驻内存执行,否则会超时、严重影响业务进行。我这里通过thinkphp5的命令行+定时任务执行,innodb是行锁,要注意更新内容的范围
方案二
PHP