개발 꿀팁/PHP

PHP 빅데이터(50만 이상) 엑셀 솔루션으로 내보내기

Jammie 2022. 7. 7. 15:15
반응형

총설하다
최근 작업 중 발생한 문제로 인해 회사 프로젝트 주문에 내보내기 기능이 있어 기존에도 PHP엑셀을 사용하여 몇 가지 내보내기 기능을 수행했지만, 이번에는 필요 도출의 양이 많아 개발 중에 일부 도출된 피트들을 만나게 되었음을 정리하여 적어본다.

토조
우선, 우리는 이 수요가 너무 XX(수동 조화)라고 확신할 수 있습니다. 이렇게 큰 데이터 양은 누가 보고 분석하게 합니까?일반적인 엑셀데이터는 시장, 재무적인 비기술부문에서 사용하기 때문에 이런 데이터를 왜 도출해야 하는지에 대한 생각을 먼저 가져야 한다고 생각합니다.필요에 따라 문제를 해결하다.결국 갑(甲)이 아니니 수요를 바꾸지 않고는 성실히 기능을 수행할 수밖에 없다.다음 솔루션을 보세요.

분석하다.
1.공구
먼저 우리가 도출해야 할 수량 50W+를 명확히 하고, 그 다음에 엑셀2003판의 최대행수가 65535행이고, 엑셀2007판의 행수(1048576행)가 되는 것으로 알고 있으므로 엑셀을 사용해야 합니다.판본은 반드시 2007판 이상이 되어야 한다.

2, 클래스 라이브러리
현재 가장 많이 쓰이는 PHP처리 엑셀의 라이브러리는 PHP엑셀(실례 테스트를 거쳐 1w개의 데이터를 도출해냈으며, 각종 데이터를 합쳐서 나를 처리한 것으로 판단되는 데 5~8분이 소요됨)입니다. 인터넷에서 PHPOffice라는 것도 발견하였습니다.pHP 엑셀보다 효율이 좋다고 하니 다음에 블로그 글을 써서 소개하자; 또 다른 fputcsv(fputcsv)는 csv 형식의 파일을 내보내고 엑셀 파일로 열 수도 있다

각종 구덩이
1,시간 초과
이것은 직접적인 부탁이다.시간 초과. 이 많은 데이터 요청으로 인해 슈퍼마켓에서 흔히 볼 수 있습니다. 이 때 PHP 설정을 수정해야 합니다: set_time_limit(0).

2、넘침
저희가 한 번에 다데이터를 데이터베이스에서 꺼내 메모리로 채워 넣기 때문에 메모리만 부족할 뿐 아니라 서버 CPU가 제대로 갖춰지지 않으면 사용률도 100%로 높아져 서버 카드에 부하가 걸린다.오버플로에 대해서도 PHP의 구성을 수정해야 한다: ini_set('memory_limit', '1024M').

해결 방안
1,PHPEx 사용셀 내보내기
이런 방안을 써서 안내하다50w+의 데이터를 내보내는 경험은 매우 좋지 않습니다. 테스트를 거친 후 실행 가능하다고 해도 서버에서 내보낼 수 있습니다. 시간이 좀 더 느릴 수 있고 계속 다운로드 할 수 있습니다.php클래스를 사용한다면라이브러리, php를 최신 php7 버전으로 업그레이드하여 메모리를 절약하고 계산속도가 빨라야 합니다.

2,csv를 사용하여 내보내기
php류가 아니면라이브러리, 그렇다면 fputcsv( )는 PHPExcel보다 훨씬 더 좋은 방법입니다. csv 파일이 작기 때문에 csv 파일 데이터를 저장할 수 있는 수량은 매우 작습니다. csv 생성은 CPU와 시간을 많이 차지하지 않으며, 엑셀의 생성 시간은 파일 데이터량이 증가할수록 더 많이 소요됩니다.

3. 이상안
데이터를 어떤 조건에 따르다데이터 분할을 수행하여 내보낸 데이터의 양을 줄입니다. 예를 들어 날짜별로 내보내면 일주일에 한 번 또는 하루에 한 번 내보낼 수 있습니다. 데이터 분할은 반드시 필요한 단계입니다. 메모리 오버플로우 방지, 실행 시간 초과.

알고리즘의 최적화를 진행하여, 숫자를 세다.루프에 따르면 중첩 루프를 줄이고 csv 또는 Excel의 데이터 객체를 생성할 때 한번에 몰딩하여 데이터베이스 조회 수를 줄이고, 다른 데이터를 사용해야 할 경우 해당 데이터 노드를 미리 생성해 둡니다.구성 데이터.

4. 가장 빠른 방안
수요를 운송 차원에 맡기고, 직접 처리하다.내보내기 위해 sql 스테이트먼트를 실행합니다.

SELECT
	*
FROM
	table_name 
INTO OUTFILE 'F:/test.csv' 
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"' 
LINES TERMINATED BY '\r\n';v

다음 오류가 발생할 수 있습니다

The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

이는 Mysql의 설정 권한 문제로 SHOW VARIABLES LIKE '%secure%'를 실행할 수 있으며 secure-file-priv의 현재 값이 무엇인지 살펴보면 NULL은 내보내기가 불가능하므로 설정해야 합니다.Mysql 설치 경로 아래의 my.ini 파일에서 경로를 수정하고, 없으면 이 설정을 추가합니다

secure_file_priv=F:/

반응형