2017-04-19 7 views
1

나는 50 만 개의 레코드로 구성된 엑셀 시트를 가지고 있습니다. 시트에는 전화 번호가있는 두 개의 열과 번호 소유자의 다른 이름이 있습니다.laravel로 500,000 개의 레코드로 엑셀 시트 읽기

숫자를 읽고 대량 SMS를 보내는 웹 서비스에 제출하고 싶습니다. 워크 시트를 처리하기 위해 laravel 큐를 사용하고 싶습니다.

여러명의 작업자를 사용하는 경우 파일을 더 빠르게 읽고 데이터베이스에 내용을 삽입 할 수 있습니까? 예를 들어 작업자가 다른 작업자가 이미 읽은 행을 다시 읽지 않도록하려면 어떻게해야합니까?

답변

2

laravel-excel 패키지에이 기능이있는 것으로 보입니다 ("대기 청크"섹션 참조). source code 보면

내 제안을 확인의 chunk 방법은 N (청크 크기로 나눈 행 수) 작업 요청을 생성 경우 파일의 각 작업 과정의 일부입니다. 당신이해야 할 유일한 것은 eq를 설정하는 것입니다. redis 대기열 드라이버 및 php artisan queue:work 명령을 사용하여 일부 작업자를 시작하십시오. (구현의 위 아래에 숨겨져있다)

수동 솔루션 : 전체 내용을 읽지 않고 파일의 행

  1. 가져 오기 수, N 부분에
  2. 나누기 행 (청크 크기로 나눈 행 수),
  3. 각 파트에 대해 작업 요청을 만듭니다 (이 작업에서 처리해야하는 첫 번째 및 마지막 행 번호를 전달해야 함). 각 작업은 파일을 열고 지정된 시작 행으로 이동하여 지정된 행 수를 읽어야합니다.
  4. 일부 작업자를 시작하십시오.