用laravel excel导入用户的excel
能够预计到的一个excel大概会有几千到几万条不等。
需要判断不导入重复的用户,比如导入10000人 数据库里面已经有100人了 那么这100人需要被判断出来 做另外的逻辑处理。另外9900人导入。并且记录着9900的插入状态 比如成功8000条 失败1900条。想在想到几个方案 不知道哪个比较合理
1、传统的批量的插入方法,无法精确到每条数据是否重复或者记录返回状态。但是效率应该是比较高的。
2、用for循环 插入前 先查询然后是否存在 然后插入完再记录状态 从业务逻辑上是最能符合需求的 但是效率很低,估计很容易就要500错误或者timeout。
3、在2的基础上改进 把整个过程写进队列 chunk分组后 进队列 然后后台处理。缺点就是用户相对来说体验比较差,不能立等可取 还需要配合通知系统来做这个。
4、查了下 还有种是用事务 分块提交,不知道这种如何 还没有测试。也请各位大大指教。
不知道各位大大还有什么更好的办法。能够在效率和逻辑中都比较平衡的。感谢了
过去多啦不再A梦2017-05-16 13:00:18
질문의 의미를 보니
1.엑셀 업로드
2.엑셀 분석, 저장
3.사용자에게 데이터 반환
전체 과정은 꽤 시간이 많이 걸릴 것입니다. 사용자에게 [처리 중] 상태를 제공하고 백그라운드에서 처리한 후 완전히 처리된 후 결과를 출력할 수 있습니다.
중복 사용자가 있는지 판단하고 성공 및 실패 상태를 기록하는 경우 먼저 Redis에 저장하는 것을 고려해 볼 수 있습니다. 그러면 속도가 빨라지고 최종적으로 모든 결과가 데이터베이스에 저장되어 처리됩니다
大家讲道理2017-05-16 13:00:18
내 생각을 말해주세요. 마음에 들지 않으면 댓글을 달지 마세요.
데이터베이스와 엑셀의 고유 식별자가 사용자 ID 번호라고 가정합니다.
데이터베이스에 있는 기존 ID번호를 확인해보세요,
Excel이 업로드된 후 각 행을 순회하여 현재 데이터 조각의 ID 번호가 데이터베이스의 배열에서 발견되는지 확인합니다
없으면 데이터베이스에 기록하고 찾은 배열에 ID 번호를 추가하세요.
그렇다면 건너뛰세요
저의 온라인 환경에서는 한 번에 50,000행이 넘는 엑셀 파일을 업로드하는데, 대기 시간은 6초 정도 입니다.
물론 각 온라인 환경과 엑셀 파일의 단일 행과 열의 개수는 다릅니다.
포스터 참고용입니다.