tornado + celery + redis + mysql。
1.由于当 Excel 文件过大时,上传及导入数据库时需花费较长时间,所以采用 celery 异步处理,首先将 Excel 保存作为临时文件上传保存服务端本地,然后进行 Excel 文件解析操作,并将数据导入数据库。
2.导入时牵扯到数据重复问题,此时采用临时表进行数据去重,当前实现的方式是原生 sql ( orm 有点 hold 不住),创建临时表, 临时表去重, 然后临时表及主表进行 join 筛选出新数据,然后进行插入。经过一番折腾,算是达到了预期目标,然后再继续下面的坑。
3.导入后,需将导入结果返回给界面,比如 Excel 中的数据是有问题的,由于 celery 异步方式,无法将结果返回给主程, 所以请教了下别人,说是可借助数据库新建一张表,负责记录导入结果。
- 那么,下面就是新建表的问题,如何建这个表呢? 个人觉得需要有个字段来记录导入的数据的唯一性,然后通过这个字段进行筛选查询当前导入的是哪些个数据。
我的思路就是这了,我想问一下有没有别的方式,好的方式,主要问题就是在这个异步线程结果获取这里,因为上传导入数据库是需要花费不定时时间的,无法上传后立刻判断 celery 的 task 的 id 和状态。