laravel excel을 사용하여 사용자의 Excel을 가져옵니다.
Excel에는 수천에서 수만 개의 항목이 있을 것으로 예상할 수 있습니다.
중복된 사용자를 가져오지 않도록 판단해야 합니다. 예를 들어 10,000명을 가져오고 데이터베이스에 이미 100명이 있는 경우 이 100명을 판단하고 추가 논리적 처리를 수행해야 합니다. 또 9,900명이 해외로 유입되었습니다. 그리고 성공 8000, 실패 1900 등 9900개의 삽입 상태를 기록합니다. 여러 가지 해결 방법을 생각하고 있는데 어느 것이 더 합리적인지 모르겠습니다
1. 기존의 일괄 삽입 방식으로는 각 데이터 조각이 반복되는지 여부를 정확하게 판별할 수 없거나 반환 상태를 기록할 수 없습니다. 그러나 효율성은 상대적으로 높아야 합니다.
2. for 루프를 사용하여 삽입하기 전에 쿼리한 다음 삽입 후 상태를 기록하는 것이 비즈니스 로직상으로는 가장 적합하지만 효율성이 매우 낮을 것으로 예상됩니다. 500 오류나 시간 초과가 발생하기 쉽습니다. .
3. 2. 전체 프로세스를 대기열에 기록하고 청크를 대기열로 그룹화한 다음 백그라운드에서 처리합니다. 단점은 사용자 경험이 상대적으로 좋지 않고 이를 즉시 얻을 수 없다는 것입니다. 이를 위해서는 알림 시스템과 협력해야 합니다.
4. 확인해 보니 트랜잭션을 사용하여 블록 단위로 커밋하는 또 다른 방법이 있으며 아직 테스트해 본 적이 없습니다. 조언도 부탁드립니다.
더 좋은 아이디어가 있는지 모르겠습니다. 효율성과 논리의 균형을 맞출 수 있습니다. 감사합니다
질문의 의미를 보니
이라고 이해됩니다.1.엑셀 업로드
2.엑셀 분석, 저장
3.사용자에게 데이터 반환
전체 과정은 꽤 시간이 많이 걸릴 것입니다. 사용자에게 [처리 중] 상태를 제공하고 백그라운드에서 처리한 후 완전히 처리된 후 결과를 출력할 수 있습니다.
중복 사용자가 있는지 판단하고 성공 및 실패 상태를 기록하는 경우 먼저 Redis에 저장하는 것을 고려해 볼 수 있습니다. 그러면 속도가 빨라지고 최종적으로 모든 결과가 데이터베이스에 저장되어 처리됩니다
내 생각을 말해주세요. 마음에 들지 않으면 댓글을 달지 마세요.
데이터베이스와 엑셀의 고유 식별자가 사용자 ID 번호라고 가정합니다.
데이터베이스에 있는 기존 ID번호를 확인해보세요,
Excel이 업로드된 후 각 행을 순회하여 현재 데이터 조각의 ID 번호가 데이터베이스의 배열에서 발견되는지 확인합니다
없으면 데이터베이스에 기록하고 찾은 배열에 ID 번호를 추가하세요.
그렇다면 건너뛰세요
저의 온라인 환경에서는 한 번에 50,000행이 넘는 엑셀 파일을 업로드하는데, 대기 시간은 6초 정도 입니다.
물론 각 온라인 환경과 엑셀 파일의 단일 행과 열의 개수는 다릅니다.
포스터 참고용입니다.