문제

다음 기준이있는 응용 프로그램을 작성하고 있습니다.

  • 작업 항목 : 사용자가 웹을 통해 수동으로 작업 해야하는 항목 (짧은 1 페이지 양식)
  • 여러 사용자가 '작업 항목'작업
  • 각 사용자는 '작업 항목'대기열이 있습니다.
  • 사용자가 '작업 항목'을보고 '작업 항목'을 대기열에 할당 할 수있는 검색이 있습니다.
  • 사용자는 다른 사람의 대기열에서 '작업 항목'을 스스로 할당하여 '작업 항목'을 가져갈 수 있습니다.

참고 : '작업 항목'은 한 번만 작동합니다. 이것은 Wiki 페이지가 아니며, 한 명의 사용자 만 수행 해야하는 일치 운동입니다. '작업 항목'이 작동하면 시스템에서 사라졌습니다 (일부 감사/보고 외에는 버그 추적 시스템과 비슷합니다.

어떤 옵션이 더 낫다고 믿습니까? 귀하의 의견을 뒷받침하는 주류 응용 프로그램을 인용 할 수 있습니까?

옵션 1:

  • 사용자 A가 '작업 항목'을 보거나 작업하면 '작업 항목'이 잠겨 있습니다.
  • 사용자 A가 '작업 항목'을 열면 다른 사용자가 '작업 항목'으로 이동하면 '작업 항목'만 볼 수 있습니다. 그들은 쓸 수 없습니다.
  • 잠금은 N 분 후에 만료됩니다.이 시점에서 다른 사용자는 '작업 항목'을 잠글 수 있습니다.

Option 2:

  • 모든 사용자는 '작업 항목'을 잠그지 않고 당겨 올릴 수 있습니다.
  • 사용자 A가 양식을 제출하여 '작업 항목'을 작동하는 경우 사용자 B가 동일한 '작업 항목'을 작동 시키면 사용자 A의 작업이 데이터베이스에 영향을 미치고 사용자 B는 다른 사람이 다른 사람이 영향을받지 않았다는 정보를 제공합니다. 사용자는 '작업 항목'을 수정했습니다.

나는 개인적으로 옵션 2를 좋아합니다. 생각 제발?

도움이 되었습니까?

해결책

당신이 말하는 것처럼 들립니다 비관적 구절 낙관적인 동시력 제어.

둘 다 널리 사용되며 개인적으로 낙관적 동시성을 다루기가 더 쉽지만 자신의 요구 사항과 사용에 따라 다릅니다. 편집 (및 잠재적 충돌)이 일반적이면 비관적 동시성 제어가 적절할 수 있지만 낙관적 동시성은 더 빠르고 간단해질 수 있습니다.

사용 사용 코드 예제를 보려면 알려주세요. rowversion SQL Server의 DataType (현재 사용중인 것)이지만 매우 간단합니다.

  • 모든 테이블에는 Rowversion 열이 포함됩니다
  • 모든 선택 쿼리에는이 열이 포함됩니다 (수정할 수있는 데이터 용)
  • 모든 업데이트 또는 삭제 쿼리에는 where rowversion = @rowversion이 포함됩니다. 이것은 낙관적 인 부분입니다. 0 행이 반환되면 다른 사람이 행을 만지면 업데이트가 발생하지 않으므로 사용자에게 알려주십시오. 참고 : 행이 업데이트 된 경우 Rowversion에 대한 새 값도 반환해야합니다. 이것은 삽입 후 삽입 쿼리에도 적용됩니다. 삽입 후 ID 열의 ID를 반환하는 것처럼.

다른 팁

형식을 간단한 용어로 설명하는 방법을 잘 모르겠지만 커뮤니티 페이지가 아니라 한 번의 일입니다. 가설 적으로, 사용자가 John Doee라는 이름을 다음과 같은 John Doe Jon Do 중 하나와 일치하면 편집이 완료되었다고 가정 해 봅시다. 우리의 경우, 우리는 단순히

그 의견을 고려할 때, 나는 옵션 1과 함께 갈 것입니다. 이러한 변화가 한 번의 변경이라는 점을 고려할 때 여러 사람이 동일한 변경 사항을 수행 할 수 있도록하는 이점은 없습니다. 당신은 두 번째 사람의 시간을 낭비하고 있습니다.

나는 개인적으로 옵션 2와 함께 갈 것입니다. 플러스, 적용 가능한 경우 (예 : 해당 편집이 더 긴 텍스트에있는 것과 같은 경우) 편집을 병합하는 사용자 B의 책임을지게합니다. B에게 그렇게 할 도구를 제공하십시오.

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