2009-09-29 5 views
0

내 AJAX 검색 프로그램은 PHP에 특정 검색어의 결과를 계속 요청합니다. PHP 스크립트의 시작은 MySQL DB를 통해 읽고 초기화합니다. PHP가 다시 시작되면 수백만 번 DB를 읽어야합니다. 내가 계속 살아 있고 여러개의 바보 같은 AJAX 요청이 하나의 실행중인 PHP 스크립트 인스턴스에 의해 제공된다면 나는 성능이 향상 될 것이라고 확신한다.PHP에서 여러 AJAX 요청을 어떻게 처리합니까?

어떻게 이것을 일반적으로합니까? 서비스를 사용 하시겠습니까? 서비스로이 작업을 수행 할 수 있습니까?

+0

은 태깅 시스템을위한 것입니까? 당신이 키워드에 대한 텍스트를 한 번 구문 분석하고 발견 된 키워드를 링크로 변환 할 수있는 방법은 없습니까? 어쩌면 당신이 정확히하려는 것을 설명 할 수 있습니다. – pixeline

+0

기본적으로 AJAX 요청에 쿼리 할 PHP 스크립트가 하나 있습니다. 나는 AJAX 부분을 어떻게 할 지 모르지만 PHP 쪽을 먼저 이해하려고합니다. –

답변

1

어떻게 세션 변수에 dB 결과를 저장 어떻습니까? 키워드가 세션에 없는지 (세션에서 페이지 새로 고침 사이에 변수 값을 전송할 수 있음) 먼저 확인하고 그렇지 않은 경우 db 쿼리를 확인합니다.

을 저장하려면

$_SESSION['storedQueries']['keyword']= 'its definition, from the database'; 

그것을 찾으려면 :

$('#resultZone').load('find.php',{keyword: $('input.search').val() }); 
+0

세션 변수가 HTTP로 전송됩니까? 문서에서 –

+0

: "귀하의 웹 사이트에 액세스하는 방문자에게 고유 ID 인 소위 세션 ID가 할당됩니다.이 ID는 사용자 측의 쿠키에 저장되거나 URL에 전파됩니다." – pixeline

2
: 당신은 jQuery와 같은 자바 스크립트 라이브러리를 사용하는 경우

$index= array_search('keyword',array_keys($_SESSION['storedQueries'])); 
    $result = ($index) ? $_SESSION['storedQueries'][$index] : 'nothing found, you should do a db query'; 

아약스 부분은 매우 간단합니다

PHP는 수명이 긴 객체 나 쓰레드 나 요청 사이의 공유 상태에 대한 개념이 없습니다. 모든 요청은 항상 0에서 시작됩니다 (excep 물론 세션 상태에 대한 t). 디스크 또는 메모리에 캐싱하여 수명이 긴 객체를 에뮬레이션 할 수 있습니다 (memcached 참조).

스크립트를 초기화 할 때 전체 데이터베이스를 읽을 특별한 이유가 있습니까?

1

검색 결과가 여러 사용자와 비슷할 경우 일반적으로 캐시 파일을 만들어 거기에서 결과 집합을 serialize합니다. 파일 이름으로 검색 쿼리와 사용자 그룹을 포함하는 문자열 md5sum을 사용할 수 있습니다. 그런 다음 Ajax가 데이터를 필요로 할 때 파일이 너무 오래되었는지 확인해야 할 필요가 없다면 클라이언트로 보내거나 아니면 Ajax http 요청을 파일로 리다이렉트해야한다 (제대로 포맷되었다고 가정) . 파일이 너무 오래된 경우 새 콘텐츠로 새로 고침합니다.

대용량 사이트의 경우 일반적으로 memcached가 더 나은 옵션입니다. 또한 어떤 종류의 PHP 캐시가 도움이되고 SQL 연결 풀링은 SQL 연결을 여는 오버 헤드를 줄입니다.

0

DB에 연결하는 것은 매우 비용이 많이 드는 작업이며 결과를 캐싱하여 돌아가서 Zend_Cache을보고 어떻게하면 두통을 줄일 수 있는지보실 수 있습니다.

관련 문제