위키 스타일 웹 사이트에서 쓰기 쓰기 충돌을 방지하기 위해 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/624186

  •  05-07-2019
  •  | 
  •  

문제

위키 스타일 웹 사이트에서 예방 또는 완화를 위해 무엇을 할 수 있습니까? 쓰기 충돌 충돌 여전히 사이트가 빠르게 실행되고 사이트를 쉽게 사용할 수 있도록 허용하는 동안?

내가 예측 한 문제는 이것입니다.

  1. 사용자 A는 파일 편집을 시작합니다
  2. 사용자 B는 파일 편집을 시작합니다
  3. 사용자 A 파일 편집을 마무리합니다
  4. 사용자 B는 파일 편집을 마치고 실수로 모든 사용자 A의 편집을 덮어 씁니다.

다음은 다음과 같이 생각해 냈습니다.

  • 어떤 종류의 체크 아웃 / 체크인 / 잠금 시스템이 있어야합니다 (사람들이 파일을 너무 길게 체크 아웃하는 것을 막는 방법을 모르겠지만, 사용자가 없어서 사용자가 좌절하지 않기를 원하지 않습니다. 허용된 편집하려면)
  • 일종의 종류가 있습니다 차이 사용자가 변경을 수행하고 어떤 종류의 병합을 허용 할 때 이루어진 다른 변경 사항을 보여주는 시스템 (그러나 이것이 제작하기가 어렵고 사이트를 너무 어렵게 사용하기가 어려울 까봐 걱정됩니다).
  • 동시 편집을 사용자에게 알립니다 동안 그들은 변화를하고 있습니다 (일종의 Ajax?)

이것에 갈 다른 방법이 있습니까? 이것을 잘 구현하는 사이트의 예가 있습니까?

도움이 되었습니까?

해결책

마지막 변경의 버전 번호 (또는 ID)를 기억하십시오. 그런 다음 글을 쓰기 전에 항목을 읽고이 버전이 여전히 동일하다면 비교하십시오.

충돌이 발생하면 그 동안 변경된 항목을 작성하려는 사용자에게 알리십시오. 차이로 그를 지원하십시오.

대부분의 위키는 이런 식으로합니다. 미디어 위키, USEMOD, .

다른 팁

3 방향 병합 : 가장 먼저 지적하는 것은 가장 긴 문서에서 가장 동시 편집이 텍스트의 다른 섹션에 있다는 것입니다. 결과적으로, 어떤 개정 사용자 A와 B를 획득한지 주목함으로써 우리는 Guiffy Software의 Bill Ritcher. 3 방향 병합은 원본에서 편집이 제작 된 위치를 식별 할 수 있으며, 충돌하지 않으면 두 편집을 조용히 새 기사로 병합 할 수 있습니다. 이상적으로,이 시점에서 합병을 수행하고 사용자 B에게 새 문서를 추가하여 추가 수정을 선택할 수 있도록합니다.

충돌 해결 :이로 인해 두 편집자가 동일한 섹션을 편집 한 시나리오가 있습니다. 이 경우 다른 모든 것을 병합하고 세 가지 버전의 텍스트를 사용자 B에 제공합니다. 이 선택은 기본값이 최신을 수락해야한다고 생각하는지 여부에 따라 다릅니다 (사용자는 버전을 유지하기 위해 저장을 클릭합니다) 또는 편집기가 두 번 편집하도록 강제로 변경 사항을 얻습니다 (편집기 A의 변경 사항을 다시 적용해야합니다. 섹션의 버전).

이와 같은 3 방향 병합을 사용하면 웹에서 잘 다루기가 매우 어려운 잠금을 피합니다 (잠금 장치를 얼마나 오래 보냈습니까?) 포럼 스타일의 응답에 적합합니다. 또한 웹의 응답 후 스타일을 유지합니다.

조금씩 Ajax를 원한다면 동적으로 3 방향으로 사용자 A 버전을 사용자 B 버전으로 병합합니다. 그들이 편집하는 동안, 그들에게 알립니다. 이제 그것은 인상적입니다.

MediaWiki에서 서버는 첫 번째 변경 사항을 수락 한 다음 두 번째 편집이 저장되면 충돌 페이지가 나오고 두 번째 사람이 두 개의 변경 사항을 병합합니다. 보다 Wikipedia : 도움 : 충돌 편집

잠금 장치를 사용하는 것이 가장 쉬운 구현 일 것입니다. 각 기사에는 잠금 필드와 관련된 잠금 필드와 잠금 시간이있을 수 있습니다. 잠금 시간이 일부 설정 값을 초과하면 잠금이 유효하지 않은 것으로 간주하고 편집 할 기사를 확인할 때 제거 할 것입니다. 열린 잠금 장치를 추적하고 세션을 가까이에서 제거 할 수도 있습니다. 또한 두 사람이 편집 할 수있는 경우를 대비하여 체크 아웃 버전에 대한 업데이트를 확인하고 있는지 확인할 수 있도록 데이터베이스 (자동 생성 타임 스탬프)에서 동시성 제어를 구현해야합니다. 동시에 기사. 올바른 버전을 가진 사람 만 편집을 성공적으로 확인할 수 있습니다.

위키 편집기에 표시하는 것은 문제가 될 수 있지만 차이를 구성하는 데 사용할 수있는 차이 엔진을 찾을 수도 있습니다. 실제로 차이를 표시하는 것은 Diff를 구성하는 것보다 어려울 수 있습니다. 편집을 거부하고 Diff를 수행해야 할 때를 감지하기 위해 버전 관리 시스템에 의존합니다.

Gmail에서는 메일에 답장을 작성하고 다른 사람이 여전히 입력하는 동안 답장을 보내면 팝업이 새 업데이트가 있고 업데이트 자체가 페이지를 다시로드하지 않고 다른 게시물로 나타나는 것으로 나타납니다. 이 접근법은 귀하의 요구에 적합하며 AJAX를 사용하여 사용자 B가 여전히 업데이트 된 내용에 대한 링크와 함께 정확한 게시물을 표시 할 수 있다면 사용자 B는 여전히 그의 항목을 입력하는 데 바쁘다.

Ravi (및 다른 사람들)가 말했듯이 Ajax 접근 방식을 사용하고 다른 변경이 진행 중일 때 사용자에게 알릴 수 있습니다. 편집이 제출되면 텍스트 차이를 나타내고 두 번째 사용자가 두 버전을 병합하는 방법을 알아 보도록하십시오.

그러나 나는 그 외에 시도 할 수있는 새로운 것을 추가하고 싶습니다. 편집자가 편집을하는 동안 채팅 대화 상자를 엽니 다. 내장 같은 것을 사용할 수 있습니다 멍청한 예를 들어, 예를 들어.
 
 
최고의 갈등 해결은 직접 대화입니다.

귀하의 문제 (손실 업데이트)는 사용을 가장 잘 해결합니다. 낙관적 동시성 제어.

한 가지 구현은 a를 추가하는 것입니다 버전 시스템의 각 편집 가능한 엔티티의 열. 사용자 편집시 행을로드하고 사용자에게 HTML 양식을 표시합니다. 숨겨진 필드는 버전을 제공합니다. 3. 업데이트 쿼리는 다음과 같은 모양이 필요합니다.

update articles set ..., version=4 where id=14 and version=3;

반환 된 행이 0이면 누군가가 이미 14 조를 업데이트했습니다. 그러면 상황을 다루는 방법 만 있으면됩니다. 몇 가지 일반적인 솔루션 :

  1. 마지막 커밋 승리
  2. 첫 번째 커밋 승리
  3. 충돌하는 업데이트를 병합합니다
  4. 사용자가 결정하게하십시오

증분 대신 버전 int/long 당신은 a를 사용할 수 있습니다 타임 스탬프 그러나 다음과 같이 제안되지 않습니다.

JVM에서 현재 시간을 검색하는 것이 클러스터링 된 환경에서 반드시 안전하지는 않습니다. 노드는 시간 동기화되지 않을 수 있습니다.

(인용 최대 절전 모드와의 자바 지속성)

더 많은 정보 최대 절전 모드 문서.

내 사무실에는 모든 데이터 테이블에 4 개의 필드가 포함 된 정책이 있습니다.

  • 창조
  • 만들어졌습니다
  • Lastupdateby
  • Lastupdatedate

그렇게하면 적어도 가장 최근에 기록에 무엇을했는지에 대한 멋진 감사 트레일이 있습니다.

그러나 가장 중요한 것은 화면에서 현재 또는 편집 된 레코드의 마지막 업데이트를 비교하기에 충분히 쉬워집니다 (페이지, 쿠키에 데이터베이스의 값이있는 쿠키에 저장해야합니다. 값이 그렇지 않은 경우 값이 그렇지 않은 경우 일치, 당신은 거기에서 무엇을 해야하는지 결정할 수 있습니다.

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