tornado + celery + redis + mysql。
1.由于当 Excel 文件过大时,上传及导入数据库时需花费较长时间,所以采用 celery 异步处理,首先将 Excel 保存作为临时文件上传保存服务端本地,然后进行 Excel 文件解析操作,并将数据导入数据库。
2.导入时牵扯到数据重复问题,此时采用临时表进行数据去重,当前实现的方式是原生 sql ( orm 有点 hold 不住),创建临时表, 临时表去重, 然后临时表及主表进行 join 筛选出新数据,然后进行插入。经过一番折腾,算是达到了预期目标,然后再继续下面的坑。
3.导入后,需将导入结果返回给界面,比如 Excel 中的数据是有问题的,由于 celery 异步方式,无法将结果返回给主程, 所以请教了下别人,说是可借助数据库新建一张表,负责记录导入结果。
我的思路就是这了,我想问一下有没有别的方式,好的方式,主要问题就是在这个异步线程结果获取这里,因为上传导入数据库是需要花费不定时时间的,无法上传后立刻判断 celery 的 task 的 id 和状态。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.