2013-02-01 4 views
1
이 어쨌든 일을위한 프로젝트입니다,하지만 나는 너무 많은 세부 사항으로 얻을 수

.. 내가 PHP의 SOAP 클라이언트를 작성하는 과정에있어더 나은 접근 방식은

즉 밀어 PHP 크론 작업을 최적화하기 MySQL 데이터베이스에 대한 모든 응답. 내 메인 스크립트는 항목의 큰 세트를 검색하는 초기 비누 요청을 만듭니다 (약 4000 개가 있지만 그 시점에서 목록은 수십만 개로 늘어날 것으로 예상됩니다).

4000 개의 항목 목록이 반환되면 각 항목에 대한 기록 요청을 보내는 exec ("/ usr/bin/php path/to/my/historyScript.php &")를 사용합니다. 웹 서비스 api는 초당 최대 30 개의 요청을 지원합니다.

$count = 0; 

foreach($items as $item) 
{ 
    if ($count == 30) 
    { 
     sleep(1); // Sleep for one second before calling the next 30 requests 
     $count = 0; 
    } 

    exec('/usr/bin/php path/to/history/script.php &'); 
    $count++; 
} 

내가 실행 해요 문제는 프로세스를 완료하고 내 개발 서버에 충돌이 시작할 때 나는 확실하지 오전입니다 : 아래는 내가 현재 무엇을하고 무엇을위한 몇 가지 의사 코드입니다. 데이터가 커질 것으로 예상되기 때문에 이것이 내 문제에 대한 해결책이 아님을 잘 알고 있습니다.

더 나은 접근 방식이 내가 이런 식의 작업을 위해 사용해야한다고 생각합니까? 나는 이것이 단지 "해킹"이라고 느낀다.

+0

30 개의 요청을 처리하는 데 걸리는 시간을 계산 한 다음 1 시간 동안 잠자기 시간을 계산하면 약간 더 빨라질 수 있습니다. –

답변

0

나는 잘 모르겠다. 그러나 나는 당신의 응용 프로그램 충돌에 대한 이유가 PHP 변수에 많은 양의 데이터를 가지고 있다고 느낀다. 이걸 살펴보면 RAM 크기에 따라이 (데이터 크기) 시스템 충돌이 발생할 것입니다. 그리고 내 제안은 서비스 요청에 대한 요청 수 대신 요청 당 외부 서비스로부터 들어오는 데이터를 제한하려고합니다.

+0

의견에 감사드립니다. 지금 스크립트를 최적화했습니다! 쿼리가 끝난 직후에 데이터베이스 연결을 끊고, 1 초가 아니라 2 초 동안 기다리고 있습니다. 이렇게하면 API가 내 요청을 처리 할 수 ​​있습니다. – ilikemypizza

관련 문제