2010-07-31 5 views
0

웹 응용 프로그램 사용자를위한 정보를 읽고 쓰는 database.php 클래스 (싱글 톤)가있는 경우 동일한 데이터베이스 함수에 대한 동시 요청이 호출되면 어떻게됩니까?싱글 톤 database.php

데이터베이스 클래스가 동일한 기능에 동시에 액세스하는 다른 사용자에게 잘못된 정보를 반환 할 가능성이 있습니까?

다른 유사한 문제가 발생할 수 있습니까?

답변

4

동일한 데이터베이스 기능에 대한 동시 요청이 호출되면 어떻게됩니까? 데이터베이스 클래스가 같은 함수에 동시에 액세스하는 다른 사용자에게 잘못된 정보를 반환 할 가능성이 있습니까?

절대적으로 아닙니다.

각 PHP 요청은 전적으로 자신의 프로세스 공간에서 처리됩니다. 스레딩이없고 응용 프로그램 서버 연결 풀도없고 공유 메모리도없고 펑키 한 것도 없습니다. APC/memcached의 캐싱과 같은 방법으로 벗어나지 않는 한 공유되는 것은 없습니다.

응용 프로그램이 시작될 때마다 귀하의 싱글 톤이 생성됩니다. 요청이 끝나면 스크립트도 끝납니다. 스크립트가 종료되면 Singleton을 포함한 모든 변수가 사라집니다.

다른 유사한 문제가 발생할 수 있습니까?

InnoDB와 같은 트랜잭션 세이프 테이블 유형을 사용하는 MySQL을 사용하고 있고 트랜잭션을 사용하지 않는 한 사용자가 부분 업데이트를 볼 수 있습니다. 예를 들어 한 세트의 데이터를 올바르게 업데이트하기 위해 세 개의 테이블을 업데이트해야한다고 가정 해 봅시다. 첫 번째 업데이트가 완료되었지만 다른 두 프로세스가 완료되기 전에 다른 프로세스가 와서 세 개의 테이블에서 데이터를 요청하고 지금 일치하지 않는 데이터를 가져올 수 있습니다. 이것은 race condition의 한 형태입니다.

+1

즉, 싱글 톤은 ACID를 지원하지 않습니다. – Gordon