2009-04-29 3 views
0

나는 단순한 것을 간과했을 것입니다.하지만 몇 주 동안 잘못 될 것이 무엇인지 이해하려고 노력하고 있습니다. 눈이 많이 필요합니다.두 프로세스의 MySQL MYISAM 동시성 문제

저는 페이팔 결제 알림을 처리하는 CGI 애플리케이션이 있습니다. 누군가가 구독 할 때 실제로 구독 IPN과 지불 IPN이 이어집니다. 내가 다른 두 CGI 프로세스가 시작되도록 다른 프로세스가 바로 뒤에 있습니다. 나는 각각에 대해 별도의 로그를 만들고, 타임 스탬프는 동일하다 (타임 스탬프의 해상도 - 초).

CGii 응용 프로그램은 새 구독자에 대한 사용자 계정을 만든 다음 지불 IPN을 사용하여 새로 만든 계정에 정보를 추가합니다. 충분히 간단합니다.

문제는 두 번째 IPN이 계정을 찾을 수 없다는 것입니다. 두 번째 IPN이 그것을 찾은 시점에 생성이 완료 되었기 때문에 이것이라고 가정 했으므로 두 번째 IPN이 5 초 지연되었습니다.

이제 타임 스탬프는 두 번째 IPN이 찾기 시작하기 전에 첫 번째 IPN에 대한 계정을 만드는 함수가 반환되었음을 보여줍니다. 즉, 첫 번째 SELECT가 실행되기 전에 INSERT가 완료되었음을 의미합니다. 불운.

캐싱 문제인지 궁금해했습니다. http://dev.mysql.com/tech-resources/articles/mysql-query-cache.html 하지만 저는 그렇게 생각하지 않습니다.

여기서는 TRANSACTIONS를 사용하지 않지만 두 번째 문제가 발생하기 전에 첫 번째 CGI 응용 프로그램의 핸들을 다시 설정하지는 않았지만 문제가되지는 않습니다. 나는 아마도 간단한 것을 간과 한 적이 있지만, 몇 주간에 무엇이 잘못되고 있는지 이해하려고 노력하고 있으며, 나는 신선한 눈이 필요합니다.

저는 페이팔 결제 알림을 처리하는 CGI 애플리케이션이 있습니다. 누군가가 구독 할 때 실제로 구독 IPN과 지불 IPN이 이어집니다. 내가 다른 두 CGI 프로세스가 시작되도록 다른 프로세스가 바로 뒤에 있습니다. 나는 각각에 대해 별도의 로그를 만들고, 타임 스탬프는 동일하다 (타임 스탬프의 해상도 - 초).

CGii 응용 프로그램은 새 구독자에 대한 사용자 계정을 만든 다음 지불 IPN을 사용하여 새로 만든 계정에 정보를 추가합니다. 충분히 간단합니다.

문제는 두 번째 IPN이 계정을 찾을 수 없다는 것입니다. 두 번째 IPN이 그것을 찾은 시점에 생성이 완료 되었기 때문에 이것이라고 가정 했으므로 두 번째 IPN이 5 초 지연되었습니다.

이제 타임 스탬프는 두 번째 IPN이 찾기 시작하기 전에 첫 번째 IPN에 대한 계정을 만드는 함수가 반환되었음을 보여줍니다. 즉, 첫 번째 SELECT가 실행되기 전에 INSERT가 완료되었음을 의미합니다. 불운.

캐싱 문제인지 궁금해했습니다. http://dev.mysql.com/tech-resources/articles/mysql-query-cache.html 하지만 저는 그렇게 생각하지 않습니다.

TRANSACTIONS을 사용하지 않지만 INSERT 후에 COMMIT를 실행하지 않았습니다.

무엇이 여기에 있습니까?

답변

1

MYISAM 테이블은 트랜잭션을 지원하지 않으므로 문제가되지 않습니다. 살펴볼 코드가 없으면 두 번째 쿼리가 잘못된 ID를 사용하는 것처럼 솔직히 나에게 들립니다. 타임 스탬프 외에 로깅은 무엇입니까? 전체 쿼리를 기록하고 ID가 일치하는지 확인하고 두 번째 쿼리가 올바른 레코드를 찾고 있는지 확인합니다.아마도 SQL 만 사용하여 수동으로 상황을 재현하고 쿼리를 테스트하는 동안 스크립트를 그대로 두십시오.

+0

위대한 아이디어. 나는 그것을 시도 할 것이다. 감사 –