하안인 님이 쓰신 글 :
:
: 프로세스를 200개 만들어서 각자 다른 일을 처리하도록 하려고 합니다.
:
: 그런데 200개의 프로세스에서 하나의 DB에 연결을 해서 정보를 가져오는데
:
: 한 프로세스에서 가져간 정보는 다른 곳에서는 가져가지 못하도록 해야하는데
:
: 데이타베이스는 mysql isam 으로 트랙잭션을 쓰지 못하는 데이타베이스 인경우에는
:
: 어떻게 처리해야 하는지요.
:
: 테이블에 필드를 만들어서 가져갔는지 안가져갔는지는 트랙잭션을 쓸수 가 없어서
:
: 동시에 접근해서 쓸 수 없을 것 같구,,
:
: 데이타 베이스를 분배해 주는 프로세스를 하나 만들어야 하는것인지...
:
: 아님 다른 방법이 있는지 자문을 구합니다.
:
: 그럼,수고하세요.
답변:
트랜젝션을 지원하지 않는다는 것은...
데이타베이스 백엔드 엔진이 세부적으로 쪼개서 Lock을 거는 게 아니고, 테이블 전체를 Lock을 거는
단순한 방법으로 구현되어 있다는 거잖아요.
어떤 특정 필드를 0 으로 해놓고..
특정필드가 0 이면 데이타 셋을 리턴하면서 필드를 1로 바꾸고
1일 때는 데이타 셋을 리턴하지 않도록...
Stored Procedure 를 정의해 주면 되겠네요.
데이타베이스 백엔드 엔진이 트랜젝션을 지원하지 않는 경우라도...
Stored Procedure는 세션의 수와 상관없이 Table Lock이 걸리면서 Atomic 조건으로 실행되니.
|