2016-12-20 2 views
0

서버에서 여러 동시 작성 요청을 해결하기위한 표준 설계 패턴이 있습니까? 예) 여러 클라이언트 (브라우저/모바일)가 웹 서비스를 호출하여 지정된 시간 동안 의사 약속을 만들 수 있습니다. 웹 서비스는 처음에는 의사가 무료인지 확인한 다음 생성하지만 여전히 경쟁 조건이 있으며 백엔드에서 여러 약속을 만드는 결과를 가져올 수 있습니다. 서버가 여러 약속을 만드는 것을 어떻게 막을 수 있습니까? webservice가 여러 개의 서버에서 실행되고 약속에는 고정 된 시간이 없습니다.복수 작성 조작 요청

답변

0

어떤 패턴이 확실하지 않습니다. 내가 생각할 수있는 하나의 아이디어.

1)는 약속이 이미 존재하는 경우 확인하기 위해 검사를 추가

if Appointment.where(time:, docter_id:).exists? 
     raise 'appointment already exists' 
    else 
     create_appointment 

위는하지 수표를 존재 통과하고 있기 때문에 동시성의 성격의 중복 약속을 끝낼 수있는 가능성을 가지고있다. 이 문제에 대해 가능한 두 가지 옵션,

i) DB 제약 수준에서 검사를 시행합니다. docter_id, appointment_time의 고유 인덱스가 좋은 시작일 수 있습니다. 오류가 발생하면 이미 존재하므로 처리하십시오. 앱/스크립트에서 DB 레코드를 업데이트하기 위해 일관성을 보장하기 위해 DB 수준에서 제약 논리를 적용하는 것이 좋습니다.

ii) 두 번째 옵션 트랜잭션에 대한 테이블의 비관적 잠금을 생각할 수 있습니다. 레코드 만들기를 제안하지는 않습니다.