빌딩, 연구 등의 게임 내 이벤트가 포함 된 테이블 events
이 있습니다. 각 이벤트의 완료시기는 timestamp
입니다. 엔진 : innoDBMySQL 잠금이 올바르게 작동하는지 테스트합니다.
모든 pageload 프로그램은 timestamp
이 과거 인 (즉, 이벤트가 완료된) 행에 대해 events
테이블의 빠른 검색을 실행합니다. 이 행을 선택하고 삭제하여 다른 실행이 동일한 이벤트를보고 처리하지 않도록합니다.
두 개의 pagelod가 발생하여 두 개 모두 동일한 행을 읽은 다음 다른 행이 읽힌 행을 삭제할 수있는 기회가 생기면 무슨 일이 벌어 질지 걱정됩니다. 및 삭제.
SET @now=NOW();
SELECT * FROM `events` WHERE `timestamp` < @now FOR UPDATE
DELETE FROM `events` WHERE `timestamp` < @now
하지만 몇 가지 문제를 테스트하는 데 문제가 있습니다 :
내가 그것을 수정해야 생각하고 같습니다. 이것이 제대로 작동하는지 여부를 테스트하는 방법은 무엇입니까? 여기에 내 자신의 질문에 대답가는
MySQL에서는'NOW()'와 같은 시간 함수가 두 번째에 대해서만 정밀도를 가지기 때문에 이것이 작동하지 않을 것이라고 생각합니다. 몇 초 동안 페이지로드가 밀리 초 단위로 동일하게 발생합니다. – Xint0
괜찮습니다. 이벤트 자체는 두 번째 이벤트에만 정확합니다. 내가 원하는 것은 선택된 행을 잠그는 것이지만, 다른 프로세스가 교착 상태가되는 것을 피하고자합니다. –