저는 조직에서 작업 지시를 추적하기 위해 개발중인 MySQL 데이터베이스 (InnoDB)가 있습니다. 이 다수의 사이트는 '이며, 각 사이트 WorkorderID가 자동 증가 필드 (100)MySQL은 자동 증가가없는 다음 고유 값을 얻습니다.
WorkorderID SiteID SiteWorkorderNum
1 1 100
2 1 101
3 2 100
에서 시작하는 작업 주문 번호를 가지고있다.
사이트 ID 및 SiteWorkorderNum은 모두 고유 한 제약 조건으로 설정됩니다.
특정 작업 사이트에 대해 새로운 작업 주문이 삽입 될 때마다 응용 프로그램은 로그인 한 사람의 siteid에 대한 max (SiteWorkorderNum)를 확인하고 해당 값을 insert 문에 반환합니다. 내가 피하고 싶은 문제는 동일한 사이트의 두 명의 사용자가 모두 정확히 동일한 시간에 새로운 작업 주문을 입력하는 경우입니다.
나는 몇 가지 가능한 해결책이 있지만 각각의 단점을 가지고 있기 때문에 더 좋은 방법이 있는지 알고 싶다.하지만 다른 것보다 더 나을 것이고 물론 나는 새로운 것 아이디어.
1) 잠금 다른 사용자가 우리가 검색하고 우리의 가치를 삽입 한 후까지 것, 그러나의 우리가 매 분마다 작업 지시를 입력하려고 사용자의 수천 척하자 (A SiteWorkorderNum 값을 검색하지 보장 할 수있는 테이블 테이블 잠금 느린 것을 아래로?)
2) 테이블을 고정하고 사용 가능한 다음 SiteWorkorderNum를 검색하고, 데이터베이스에 삽입 나는 고유 제한 오류가 발생하면 오류를 잡아 다시 시도하려고하지 마십시오 내가 성공할 때까지. (이것은 테이블을 자유롭게 유지할 수 있지만, 동일한 사이트에 수천 명의 사용자가있는 것처럼 보이기 때문에 다중 데이터베이스 호출은 약간 비효율적입니까?)
나는 이러한 솔루션 중 하나가 효과 성능? 물론 수천 명의 사용자가 없지만 트래픽이 많은 프로젝트에서 작업 할 경우를 대비해이 설계에서 모범 사례를 적용하고 싶습니다.