2014-07-18 2 views
0

PHP의 깔끔한 기능의 성능을 향상시키는 방법을 알고 있다면 물어보고 싶습니다.PHP의 깔끔한 기능의 성능을 향상시킬 수있는 방법이 있습니까?

while($ds = mysql_fetch_assoc($qry)) 
{ 
    $tidy = tidy_parse_string($ds['description']); 
    $html = tidy_parse_string($tidy, array('show-body-only'=>true, 'indent'=>true)); 
    $sql = "UPDATE tbl_*** SET description = '".mysql_real_escape_string($html)."' WHERE id = '".mysql_real_escape_string($ds2['id_artikel'])."'"; 
    sql4query($sql); 

    $allerr = $allerr + tidy_error_count($tidy); 
    $allwar = $allwar + tidy_warning_count($tidy); 
    $msg .= $ds['id'].":\n".$tidy->errorBuffer."\n\n\n"; 
} 

을하지만 천만 명 이상의 데이터 세트와, 너무 느린 :

순간에 이런 식으로 사용.

+1

왜'tidy_parse_string'을 두 번 호출하고 있습니까? – FuzzyTree

+0

모든 레코드를 깔끔하게 정리하는 대신 (많은 레코드는 볼 수 없음) 누군가가 특정 레코드를 보거나 편집하려고 할 때 정리 기능을 실행할 수 있습니다. –

+0

@FuzzyTree 필자는 문서화 된 것처럼 구현했습니다. 하지만 당신 말이 맞아요, 나는 그것을 2 번 임명해서는 안됩니다. – IHead

답변

1

다른 의견이 이미 말했듯이, 깔끔한 확장 프로그램이 더 빨리 작업을 수행 할 수있는 합리적인 방법은 없을 것입니다.

문제는 이러한 기록을 한 번 정리해야한다는 것입니다. 새 데이터베이스는 데이터베이스에 삽입하여 정리됩니다.

그럼 수천, 수십만 건의 "오래된"레코드는 몇 개입니까?

"한 번에 모든 작업을 수행 할 수 없다면 (cronjob, 실행 시간 제한 없음, 유지 보수 단계에서"밤중에 "실행) - 한 번에 하나씩 개별적으로 각 레코드를 수행 할 수 있습니다 처음으로 "필요"합니다.

테이블에 열을 추가하거나 still_needs_to_be_cleaned 또는 그 밖의 기존 레코드를 모두 true/1로 설정합니다. 새 레코드를 삽입 할 때 단순히 false/0으로 설정하면됩니다. 레코드가 (사이트 또는 무엇이든의 방문자가) 요청 이제

는, 당신은 체크 플래그 still_needs_to_be_cleaned는 여전히 true로 설정되어 있는지 여부 - 만약 그렇다면, 당신이 하나의 레코드에 깔끔한 실행하게하고, 업데이트 이후 데이터베이스에서 - still_needs_to_be_cleaned을 false로 설정하십시오.

레코드에 still_needs_to_be_cleaned이 이미 false로 설정된 경우 - 정리 작업이없고 업데이트가 필요하지 않은 경우 해당 레코드를 즉시 출력 할 수 있습니다.

예, 이것은 특정 레코드를 요청하는 첫 번째 사용자에 대한 약간의 지연을 의미합니다.하지만 대부분의 경우 거의 눈에 띄지 않습니다.


그리고 당신이 원한다면, 당신도 시간이 많은 기록이 여전히 true로 설정 still_needs_to_be_cleaned 플래그를 얼마나 시간을 확인할 수 있습니다. 남은 것이 없다면, 여분의 논리를 다시 제거 할 수 있습니다.

+0

당신의 답을 고맙게 생각합니다. 제가 언급했듯이, 천만 가지가 넘는 레코드에 대해 이야기하고 있습니다. 문제는 우리 테스트 시스템에 충돌을 일으키는 서버의 메모리 부하입니다. 나는 cronjob에서 5.000 개의 레코드 단계로 데이터베이스를 "청소"하지만 너무 느립니다. 그래서 나는 당신이 언급 한 것처럼 그것을해야한다고 생각합니다. 나는 피하려고했습니다. – IHead