문제

사용자 입력 동시성을 처리하는 좋은 방법은 무엇입니까?

답으로 이 질문 이미 데이터베이스 잠금을 배제하면 일반적으로 동시 사용자 입력을 어떻게 처리합니까?

Row Locking에 의해 구현되지 않더라도 잠금은 항상 나쁜 생각입니까? 사용 사례 의존적이지 않은 모범 사례가 있습니까? 당신의 전략에 대한 당신의 경험은 무엇입니까?

편집하다: 트랜잭션을 통해 데이터 수준에서 동시성을 처리하는 것을 알고 있습니다. 두 사용자가 복잡한 데이터 변경을 동시에 트리거하면 트랜잭션이 처리됩니다.

그러나 나는 GUI 레이어에서 처리하거나 적어도 반응하는 데 관심이 있습니다. 데이터 변경이 사용자 상호 작용으로 긴 작업의 일부라면 어떻게해야합니까?

두 명 이상의 사용자가 웹 인터페이스를 통해 동일한 파일을 편집한다고 가정 해 봅시다. 어느 시점에서 사용자 중 하나가 저장 버튼을 누릅니다. 다른 사용자에게 무슨 일이 일어 났습니까?

  • 그들은 통보 및/또는 재 장전을 강요 받습니까? 아니면 결국 첫 번째 사용자의 변경 사항을 덮어 쓰나요?
  • 파일을 잠그고 여러 사용자가 같은 파일을 편집하지 않습니까?
  • 전체 편집 프로세스를 거래에 넣을 수 있습니까 (의심하지만 누가 알고 있습니다 ...)

이 상황과 유사한 상황을 처리하는 가장 좋은 방법은 무엇입니까? 다른 전략이 있습니까?

도움이 되었습니까?

해결책

최상의 전략은 무엇에 달려 있습니다 ~해야 한다 (비즈니스) 프로세스 관점에서 발생합니다. 또한 중요한 질문은 사용자가 일반적으로 기대하는 것과 가장 놀라운 점, 물론 자신이 기대하는 것을 구현할 수 있는지 여부입니다.

파일 편집의 예 웹 위에 다음과 같이 분해 될 수 있습니다.

  1. user1 확인/GETS/DOWNLOAD/OPENS 파일 v0
  2. user2 체크 아웃/받기/다운로드/파일 v0
  3. user1은 파일 V0 사본을 변경합니다
  4. user2는 파일 V0 사본을 변경합니다
  5. user1은 파일 버전 v1을 서버에 저장합니다
  6. user2는 파일 버전 v2를 서버에 저장합니다

웹 애플리케이션에 일반적이며 실제로 일반적인 데스크톱 사무실 프로그램의 경우에도 사용자가 저장 한 후에 (다른 사람에게) 만 사용할 수있게되며, 이는 동료의 타이핑이 나타나는 경우가 아니라는 것을 의미합니다. 파일 사본에서 당신은 편집하고 있습니다.

이에 대한 클래식 버전 제어 접근 방식은 사용자 1의 경우 일반적인 데스크탑 편집/저장 프로세스와 비교하여 아무것도 변경하지 않는다는 것입니다.

그러나 user2의 경우 V2를 서버로 저장하려고 할 때는 사용자가 마지막으로 다운로드 한 이후 파일 버전 v0에 대한 변경 사항이 있는지 확인해야합니다. 이 경우 버전 제어 시스템은 일반적으로 화면에 나란히 버전 (v1 및 v2)을 표시하고 혼합하여 결과 버전 (v3)을 서버에 저장할 수 있습니다.

텍스트 파일의 경우 UNIX와 Windows에 여러 도구와 시스템이 존재하여 프로세스를 자동화하려고 시도하여 편집 된 파일 영역이 겹치지 않으면 변경 사항이 자동으로 병합됩니다.

대안은 user1이 편집을 마칠 때까지 user2의 파일을 잠그는 것입니다.

트랜잭션에 편집을하는 것은 일반적으로 관련이 없습니다. 기존 파일을 새 버전으로 덮어 쓰려고 시도하는 최종 작업은 중요합니다. 편집은 각 사용자 워크 스테이션에서 독립적으로 발생하며 마지막 지점 (저장)까지 서버를 터치하지 않습니다.


그건 그렇고, 비행기 티켓 예약 또는 의사에게 약속 예약과 같은 다른 상황과는 달라집니다.

티켓을 예약 할 때 비행기에는 제한된 수의 좌석이 있습니다. 데이터 전송이 실제로 한 사람 이상이 비행기의 동일한 마지막 좌석에 예약을하는 데 실제로 인간적이지 않기 때문에 가능합니다.

따라서 예약은 최소 2 단계 프로세스 여야합니다.

  1. 시스템은 무료 슬롯을 보여줍니다.
  2. 사용자는 무료 슬롯 중 하나 (S1)를 요청합니다.
  3. 시스템은 사용자에게 슬롯이 실제로 무료인지 여부를 알려줍니다. 그렇다면 그렇다면 귀하에게 보유합니다.
  4. 사용자는 예약을 완료합니다.

"실제로 무료"단계는 웹 페이지 사용자보기에 대한 정보가 일반적으로 실시간으로 업데이트되지 않기 때문에 1 단계와 2 단계 사이에서 다른 사용자가 무료 슬롯에 적용했을 가능성이 있습니다.

다른 팁

사용중인 언어/데이터베이스 API에서 "트랜잭션"을 처리하는 방법을 찾으십시오. 이것들을 올바르게 디자인하면 그것을 처리합니다.

그리고 이론을 이해하기 위해 추천합니다 Couloris et al 그러나 다른 좋은 책이 많이 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top