2011-12-05 6 views
3

PHP 스크립트에서 PDOS를 사용하여 데이터베이스에 csv 데이터를 삽입하고 있습니다.데이터를 기다리지 않고 데이터베이스에 삽입하십시오.

$sqlsmttempl = 'INSERT INTO %s (%s) VALUES (%s)';

그러나 내가 삽입을 기다리고에서 클라이언트를 방지 할 수 있습니다 records.How 단지 몇 수천 꽤 오랜 시간이 걸렸습니다?

나는 어떤 오류도 가지고 있지 않지만 전혀 반응이없는 것 같습니다. INSERT DELAYED을 시도했습니다.

힌트 : 고맙습니다.

+0

"INSERT DELAYED '를 시도했는데 오류가 없지만 응답이 전혀없는 것 같습니다." 무슨 일이 일어나길 기대하고 있니? –

+0

@FrancisAvila 다른 스레드에서 테이블을 사용하지 않을 때 데이터가 삽입됩니까? 여기에서 읽습니다 : http://dev.mysql.com/doc/refman/5.5/en/insert-delayed.html –

+0

하지만 "전혀 응답이없는 것 같다"는 의미는 무엇입니까? 'INSERT DELAYED'는 무엇이든지 상관없이 성공적으로 삽입을보고합니다. 왜냐하면 삽입 될 때까지 에러가 있는지 알 수 없기 때문입니다. 그리고 지금 삽입 할 수 없습니다. –

답변

1

클라이언트가 서버에서 처리를 마칠 때까지 기다리지 않는 유일한 방법은 응답을 보낸 후에 다른 프로세스에서 처리를 수행하는 것입니다.

INSERT DELAYED은 빠르고 간편한 방법입니다. 삽입 할 데이터베이스 행은 MySQL에 의해 큐에 대기되고 나중에 삽입됩니다. 즉, execute() 이후에 행이 실제로 삽입되지 않았기 때문에 값 오류를 감지하거나 처리 할 방법이 없습니다. 클라이언트가 기다리는 동안 csv를 반복하고 쿼리를 실행해야합니다.

너무 길면 몇 가지 종류의 스풀 또는 작업 대기열을 구성하거나 사용해야합니다. 이 설계에서는 요청이 승인 된 후 장기 실행 프로세스로 전달되거나 디렉토리에 배치되고 웹 응답이 즉시 전송됩니다. 한편, 서버에서 실행중인 다른 프로세스는 요청을 스쿠프하고 처리 한 다음 어딘가에 상태를 기록합니다 (예 : 데이터베이스 테이블). 사용자가 자신의 작업 상태를 모니터링하기 위해 이동할 수있는 또 다른 페이지가 있어야합니다.

+0

답변 해 주셔서 감사합니다. 처리하기 전에 클라이언트에게 메시지를 보내더라도 웹 사이트는 계속 로딩되고 걸려 있기 때문에 프로세스가 완료 될 때까지 다른 페이지에도 액세스 할 수 없습니다.이 문제를 해결하려면 어떻게해야합니까? –

+0

당신은 내 대답을 오해했거나 다른 문제가 있습니다. 당신은 클라이언트에게 "우리는이 메시지를 처리 ​​할 것입니다. ** 응답을 닫습니다 **"라고합니다. * webserver *는 요청을 처리하지 않습니다. * 다른 프로세스는 * 않습니다. –

관련 문제