2014-06-14 2 views
0

안녕하세요 동료 프로그래머! :)"PHP 스크립트"/ "mysql 업데이트"동적 스케줄

사용자가 트리거 한 일부 이벤트 이후에 실행되도록 PHP 스크립트를 설정하고 싶습니다. 사용자가 자동으로 48 시간 후에 닫아야하는 포럼 스레드를 생성한다고 가정 해 보겠습니다. 이것은 MySQL 행에 대한 업데이트와 같습니다 : UPDATE threads SET closed = '1'WHERE threads.id = 'x'. 따라서이 문제는 반드시 php로만 해결해야하는 것은 아닙니다.

이런 종류의 질문은 수시로 팝업되지만, 발견 된 모든 것은 'x'시간마다 실행되도록 cron 작업을 설정하는 것이 었습니다. 시간이 스레드를 닫을 지 확인합니다. 문제는 주어진 시간에 한 번 스크립트를 실행하도록 예약하는 경우보다이 검사를 실행하면 시스템 부하가 더 커질 수 있다는 것입니다. 수백 또는 수천 개의 스레드가있을 수 있다는 것을 잊지 말아야합니다. 각 스레드는 닫을 시간이 있습니다. 우리는 예를 들어 MySQL에서 일종의 대기열을 생성하여 모든 단일 스레드를 검사하지 않아도되므로 스크립트는 "time_to_close < NOW()"가있는 DB 항목을 선택하고이를 닫습니다. 또 다른 단점은 스레드가 48 시간 후에 정확히 종료되기를 바랍니다. 이 경우 스크립트는 매 초마다 실행되어야하며 완전히 실행될 시간은 거의 걸리지 않아야합니다.

cron 작업 대신 다음 방법이 유용 할 수도 있습니다. 스레드를 닫아야하는 경우 액세스 할 때마다 확인하십시오. 특히 스레드에 자주 액세스하는 경우로드가 높아집니다.

그래서 특정 이벤트의 시간에 따라 (PHP) 스크립트 실행을 예약하는 효율적인 방법이 있습니까? 이 질문을 쓰면서 MySQL 이벤트 스케줄러를 발견했습니다. 프로 시저와 함께, 추가 플로우 제어 (48 시간 이후에 활동이 없었던 경우에만 닫는 스레드)를 제공 할 수 있습니다. 제 생각을 구현할 수 있다고 생각합니다. 나는이 MySQL 기능에 익숙하지 않기 때문에이 주제에 대한 도움을 주시면 감사하겠습니다.

최선을 다해, 시스템 __ 실수.

+0

왜 스레드를 명시 적으로 닫아야합니까? 48 시간 전에 시작된 경우 코드에서 적절하게 처리 할 수 ​​있습니다 (예 : 'Add Comment'링크 포함 안함). – andrewsi

+0

스레드가 닫힐 때마다 표시/열림/등을 계산해야하는 것보다 플래그를 한 번 설정하는 것이 더 좋을 것이라고 생각했습니다. –

답변

0

나는 많은 웹 사이트가 사용자 요청별로이를 수행함으로써 이러한 종류의 동작을 보완합니다. 오버 헤드가 그렇게 나쁘지 않고 레코드가 항상 올바르게 표시됩니다 (디자인 문제가없는 경우). 이는 대부분의 호스트가 cron 액세스를 제공하지 않기 때문에 효과가 있습니다. PHP로 작업을 예약해야하는 경우는 거의 없습니다. 1 시간마다 보고서 생성과 같은 몇 가지 예외가 있습니다. 하지만 cron으로 사용자 작업을 포착하려는 것은 좋은 생각이 아닙니다.

관련 문제