2014-11-04 9 views
0

데이터베이스의 많은 데이터를 업데이트해야합니다. 작동은 약 5 분이 필요합니다. 저는 PHP 프로그래머가 아니며이 문제를 해결하는 방법을 모르겠습니다 (서버의 시간 초과는 120ms로 설정 됨). 현재이 방법으로이 문제를 해결 했으므로이 작업을 몇 개 더 작게 나누었습니다. 이것은 하나의 트랜잭션으로 처리하기 때문에 최상의 솔루션은 아닙니다. 이 작업은 다음과 같습니다.PHP - 긴 작업 작업을 수행하는 방법

  1. 응용 프로그램에서 모든 제품 ID를 가져옵니다 (~ 5000 ids).
  2. 웹 서비스를 통해 제품 ID를 다른 서버로 보내고 응답을 기다립니다.
  3. 응답으로 반환 된 데이터를 사용하고 db를 업데이트합니다 (각 제품은 내가 만든 응용 프로그램 API를 사용하기 위해 별도로 업데이트됩니다).

현재 단계별로 나누었습니다. 각 단계는 100ids를 보냅니다. 내가 썼듯이, 트랜잭션이 없어서이 솔루션에 만족스럽지 않습니다.

  1. 조작 (응용 프로그램 크론의 요청으로이 작업을 실행) 명령 줄을 통해 실행할 수 없습니다 :

    이러한 요구 사항입니다.

  2. 빌드 int API로 인해 각 제품을 개별적으로 업데이트해야합니다.
  3. 트랜잭션 조작으로 인해 한 단계에서 실행해야합니다.

기능 : (이 PHP에서 가능한 경우 -이를 처리 할 추가 라이브러리를 설치할 수 있는지 모르겠어요?)

  1. 작동 비동기를 실행할 수 있습니다. 당신의 안전 모드를 사용하지 않으면
+1

# 1 크론의 값을 설정할 수 있습니다 명령 줄에서 php를 실행합니다. # 2는 도움이되지 않습니다. # 3은 ACID 불만 데이터베이스에 적용되는 전통적인 용어로 "트랜잭션"이라고 말하면서 # 2를 무효화하지만 한 요청/총을 의미한다고 가정합니다. # 4 (capabilities 1) cron은 Apache 서버처럼 PHP를 비동기 적으로 실행합니다. 게시물을 사용하여 "다른 서버"로 보내시겠습니까? 그렇다면 1000 개의 입력 (해시도)으로 제한됩니다. – ArtisticPhoenix

답변

1

, 당신의 스크립트에 이것을 추가 :

set_time_limit(10*60); 

가, 그렇지 않으면 당신은 참으로 php.ini 파일

http://php.net/manual/en/function.set-time-limit.php

+0

"네트워크 서비스를 통해 제품 ID를 다른 서버로 보내고 응답을 기다리는 네트워크 시간 제한이 될 수 있습니다." – ArtisticPhoenix

관련 문제