2013-03-20 2 views
0

우리는 웹 사이트에 '프로젝트'가 있으며, 각 프로젝트에 일정한 수의 사람들이 가입되어 있습니다.PHP로 작업을 사용하여 많은 양의 데이터 처리하기

프로젝트의 '끝'에서 모든 구독자가 수집되어 처리됩니다. 이 경우 약 1,000 명의 가입자가 데이터를 가져 와서 처리해야합니다. 또한 배열에있는 각 데이터 세트와 함께 저장된 일부 관련 데이터가 있습니다.

마지막으로 ~ 300 개 항목의 대량 주문을 처리했을 때 PHP의 메모리가 부족합니다. 우리는 그 기억을 증폭 시켰고 그것을 처리 할 수있었습니다. 나는 그것이 이번에는 그렇지 않을 것이라고 생각한다.

현재 프로젝트를 가져 와서 구독자를 처리하는 작업을 사용하고 있습니다. 이 작업에서는 SQL 쿼리가 실행되어 모든 '구독자'를 가져 와서 배열에 관련 데이터를 저장합니다. 그런 다음 배열을 반복하여 개별 작업을 만들어 개별 가입자를 처리합니다.

내 질문은 : '블록'또는 뭔가를 할 수있는 방법은

있습니까? 아니면 메모리에 미치는 영향을 줄이는 더 나은 방법이 있습니까? 우리가 수천 명의 가입자를 확보 한 경우 확장 성이 있기를 바랍니다.

    프로젝트 '끝'
  • 작업이 몇 가지 플래그를 설정하는 시작했다, 그리고 끌어 내린다
  • 모든 가입자
  • MySQL의 데이터의 배열합니다 (:

    오른쪽 지금이 흐름입니다 가입자)가 반복되고 각 가입자에 대한 개별 작업이 생성됩니다.

  • 각 구독자 작업은 엔진에서 처리됩니다.

이 작업을 수행하는 데 가장 적합한 프로세스를 찾아내는 데 어려움을 겪고 있습니다.

+0

시간이 중요한가요? – Teson

+0

시간이 중요하지 않습니다. –

+1

사용자를 분할하여 분할해야합니다. 적은 양의 사용자를 처리하고 cron에 추가하고 밤마다 매시간 (또는 그 시간이 오래 걸리지 않으면 빨리) 예약하는 스크립트를 작성하십시오. 스크립트는 특정 사용자가 이미 처리되었다는 것을 데이터베이스에 기록하므로 다음 쿼리 (한 시간 후)가 다음 '사용자 패킷'을 처리합니다. – sobol6803

답변

0

나는 주전산기를 prefeerably int-key, 으로 분류하고 단지 하나의 가입자를 사용하고 싶습니다.

부분 작업이 끝나면 완료된 작업의 ID를 저장하십시오.

가 다른 플레이어를 수 있도록 processscript의 끝에 usleep 추가 ..

while(file_get_contents('http://yourscript.php') != false); 

(사용하지 않는 등 오버 헤드를 추가합니다 당신의 수행 여부, 및 부모 스크립트를 호출이있는 경우 다시 최종 에코에서 메모리 누출을 막아줍니다)

관련 문제