php - laravel中导入excel 数据量很大的情况下 处理重复数据时如果做最好
世界只因有你
世界只因有你 2017-05-16 12:58:18
0
2
1102

用laravel excel导入用户的excel
能够预计到的一个excel大概会有几千到几万条不等。
需要判断不导入重复的用户,比如导入10000人 数据库里面已经有100人了 那么这100人需要被判断出来 做另外的逻辑处理。另外9900人导入。并且记录着9900的插入状态 比如成功8000条 失败1900条。想在想到几个方案 不知道哪个比较合理
1、传统的批量的插入方法,无法精确到每条数据是否重复或者记录返回状态。但是效率应该是比较高的。
2、用for循环 插入前 先查询然后是否存在 然后插入完再记录状态 从业务逻辑上是最能符合需求的 但是效率很低,估计很容易就要500错误或者timeout。
3、在2的基础上改进 把整个过程写进队列 chunk分组后 进队列 然后后台处理。缺点就是用户相对来说体验比较差,不能立等可取 还需要配合通知系统来做这个。
4、查了下 还有种是用事务 分块提交,不知道这种如何 还没有测试。也请各位大大指教。

不知道各位大大还有什么更好的办法。能够在效率和逻辑中都比较平衡的。感谢了

世界只因有你
世界只因有你

모든 응답(2)
过去多啦不再A梦

질문의 의미를 보니
1.엑셀 업로드
2.엑셀 분석, 저장
3.사용자에게 데이터 반환

이라고 이해됩니다.

전체 과정은 꽤 시간이 많이 걸릴 것입니다. 사용자에게 [처리 중] 상태를 제공하고 백그라운드에서 처리한 후 완전히 처리된 후 결과를 출력할 수 있습니다.

중복 사용자가 있는지 판단하고 성공 및 실패 상태를 기록하는 경우 먼저 Redis에 저장하는 것을 고려해 볼 수 있습니다. 그러면 속도가 빨라지고 최종적으로 모든 결과가 데이터베이스에 저장되어 처리됩니다

大家讲道理

내 생각을 말해주세요. 마음에 들지 않으면 댓글을 달지 마세요.

데이터베이스와 엑셀의 고유 식별자가 사용자 ID 번호라고 가정합니다.

  • 데이터베이스에 있는 기존 ID번호를 확인해보세요,

  • Excel이 업로드된 후 각 행을 순회하여 현재 데이터 조각의 ID 번호가 데이터베이스의 배열에서 발견되는지 확인합니다

  • 없으면 데이터베이스에 기록하고 찾은 배열에 ID 번호를 추가하세요.

  • 그렇다면 건너뛰세요

저의 온라인 환경에서는 한 번에 50,000행이 넘는 엑셀 파일을 업로드하는데, 대기 시간은 6초 정도 입니다.
물론 각 온라인 환경과 엑셀 파일의 단일 행과 열의 개수는 다릅니다.
포스터 참고용입니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!