나는의 테이블 내가 데몬 여러 인스턴스 (아마존 EC2)를 요구 한 상태 ('toprocess', '처리', '완료')행 잠금
에 "할 명령"이 "명령 할".
데몬은 상태 'toprocess'와 행 요청을 처리 한 다음, 각 루프의 끝에서 그 '일'로 상태를 변경한다.
것은 그 루프를 시작하기 전에, 나는 상태 '처리'모든 행 'toprocess'을 변경해야한다는 것입니다, 그래서 다른 경우 충돌을 피하고, 같은 행이 적용되지 않습니다.
내가 InnoDB의 행 잠금에 대해 읽었습니다,하지만 난 아주 잘 그들을 이해하지 못하는 ...
SELECT * 상태 = 'toprocess' 다음 나는이 결과의 ID 년대를 취할 필요가 명령의 , 상태를 'processing'으로 갱신하여 갱신 될 때까지이 행을 잠급니다.
어떻게 할 수 있습니까? 난 당신이 (내장 된 방법을 사용하여) 행을 잠글 MySQL을 사용할 수 없습니다 알고
은 지금까지 당신에게
안녕하세요, ... 테이블 잠금이 너무 많아서 (응용 프로그램의 나머지 부분에서 생각 중입니다 ...) 두 번째 옵션은 해결책을 제시합니다 ... 어떻게 할 수 있습니까? – FlamingMoe
테이블을 변경하고 'locked'라는 BIT (1) 데이터 유형을 추가하고 '처리 중'으로 표시 한 모든 행에서 1로 설정해야합니다. 각 행의 처리가 끝나면 'locked'속성을 0으로 재설정하십시오. 테이블에서 임의의 행을 선택할 때는 쿼리 절에 "WHERE locked = 0"을 추가하십시오. 이렇게하면 모든 프로세스가 두 번 실행되지 않습니다. – JamesHalsall
우리는 같은 문제를 발견 할 것입니다 ... 그 동안 필드를 1로 업데이트하면 다른 인스턴스가 읽을 수 있습니다 ... 그래서 행 고정 솔루션이 필요하지만 구현 방법을 모르겠습니다. – FlamingMoe