2017-10-15 5 views
0

약 12 ​​개의 XML 파일을 구문 분석하고 결합 할 수있는 아이디어를 제공해 주실 수 있습니까? 각 파일에는 5 개의 메가가있어 최종적으로 단일 글로벌 파일을 갖습니다.많은 XML 파일, 불충분 한 메모리를 구문 분석하고 결합하십시오.

는 현재, 내가 스크립트 (심포니 프레임 워크 명령) 나 번들 JMSSerializerBundle로 직렬화 각 파일에 대해

을 실행하는 크론를 사용, 그것은 XML 파일에서 개체를 만들 수 있습니다.

그리고 메모리 문제가 있습니다. 나는 이것이이 비 직렬화 때문이라고 생각한다.

그래서 내 질문은,

  • 당신은, 내가 SimpleXML을 가진 구문 분석하여이 번들이 직렬화를 교체 할 경우,이 STUP을 할 수있는 더 좋은 방법을 알고 당신이 메모리를 적게 소모 생각합니까?

  • 또한 파일을 변수에 저장하면 변경 사항이 적용됩니까?

  • 예를 들어, 데이터베이스를 사용하면 테이블에 파일을 저장 한 다음 테이블의 모든 레코드를 검색하고이를 사용하여 전역 XML 파일을 만들 수 있습니다. 좋은 아이디어? 또는 전역 파일을 여러 단계 (매번 3 개 파일)로 작성하고 매번 테이블에 저장하고 간단한 배열로 매번 데이터를 검색하십시오.

감사합니다.

+1

SimpleXML에 메모리 문제가있는 경우 [XMLReader] (http://www.php.net/manual/en/class.xmlreader.php)와 같은 끌어 오기 구문 분석기를 사용하도록 전환해야합니다. –

+0

조합 XMLReader와 XMLWriter는 한 번에 전체 파일을 빌드 할 수 있어야합니다. 이것은 평균 시간에 데이터로 처리해야하는 처리량에 달려 있습니다. 한 번에 둘 다 파이프 라인 할 수 있습니다. –

+0

네, XMLReader에 감사드립니다. – sakados

답변

0

명령 줄을 통해 수행되는 작업 중 하나 인 경우 CLI 스크립트 시작 부분에 ini_set('memory_limit', -1);을 사용하여 PHP의 memory_limit-1으로 설정하면 문제를 해결할 수 있습니다.

단일 요청이 모든 시스템의 메모리를 소모 할 수 있으므로 이는 분명히 요청에 대한 옵션이 아닙니다. 또한 분명히 여전히 사용 가능한 시스템 메모리에 구속되어 있으므로이 문제가 계속 발생할 수 있습니다.

의견에서 이미 제안했듯이 XMLReader과 같은 끌어 오기 구문 분석기를 사용하여 메모리 사용을 줄일 수 있습니다. XML을 읽음으로써 메모리 사용량이 줄어들지 만, 분명히 읽혀진 데이터를 유지하는 것은 여전히 ​​누적 될 것입니다. 최신 PHP 버전을 사용하고 있지 않다면 아마 메모리 사용을 최적화하는 가장 쉬운 방법 일 것입니다.

xhprof 또는 blackfire.io와 같은 도구를 사용하여 스크립트의 메모리 사용량을 프로파일하고 해당 스크립트가 지적한 주요 문제를 해결하는 것이 좋습니다.

+0

감사합니다 dbrumann이 설명을 위해 :) – sakados