2016-08-25 2 views
0

일부 데이터가 포함 된 개체 D가 있다고 가정 해 보겠습니다. 이는 서로 다른 두 위치에서 다르게 수정되어 데이터 객체 D 및 D 을 발생시킵니다. 내용에 따라 D 및 D 은 동기화 프로세스의 일부로 다시 병합 될 때 서로 충돌 할 수 있습니다.소비자 관련 응용 프로그램에서 데이터를 동기화하는 동안 충돌을 어떻게 처리합니까?

버전 제어 시스템과 같은 시스템은 두 데이터 개체가 서로 충돌하고 사용자에게 충돌을 수동으로 해결하도록 남겨 둡니다.

그러나 이제 온라인으로 내용을 동기화하는 메모 작성 응용 프로그램과 같은 소비자 관련 응용 프로그램을 상상해보십시오. 이 경우 사용자가 다른 내용으로 동일한 메모의 두 가지 버전을 입력하기 때문에 발생할 수있는 충돌을 수동으로 해결하려는 사용자는 없습니다. 새로운 객체에 대해 오래된 객체를 버리는 것은 불가능합니다. 왜냐하면 오래된 객체에 사용자가 원하는 값진 컨텐트가있을 수 있기 때문입니다.

소비자 관련 응용 프로그램에서 이러한 충돌을 해결하려면 어떻게해야합니까?

+1

이 문제는 VCS가 충돌을 수동으로 해결하기 위해 사용자에게 맡기는 이유입니다. 정확성의 식별자가 없다면 (즉, 보관해야하고 거부해야하는 경우), 코드에서이를 수행 할 수 없습니다. – vish4071

+0

매우 사실이며 VCS가 자동으로 변경 사항을 병합 할 수있는 경우에도 결과가 충돌하지 않는 것은 아닙니다. 인간 만 [관련 답변]을 결정할 수 있습니다 (http://stackoverflow.com/a/38464406/23118). – hlovdal

답변

1

수동 충돌 해결을 원하지 않으면 두 업데이트의 변경 내용을 자동으로 병합해야합니다.

모든 응용 프로그램에서 잘 작동하는 방법은 없습니다. 이와 같은 요구 사항이있을 때 자동 병합이 적용되도록 신중하게 응용 프로그램을 디자인해야합니다.

은 일반적으로 다음과 같은 몇 가지 방법이있다, 당신은 다양한 조합으로 하나 또는 모두를 수행 할 수 있습니다

1) 정말 빠른 업데이트를 병합합니다. Google 워드 프로세서를 생각하십시오 - 사람들이 편집 할 때 실시간으로 병합됩니다. Operational Transformation (https://en.wikipedia.org/wiki/Operational_transformation)은 이러한 종류의 병합을 수행하는 방법을 정확하게 이해할 수있는 좋은 방법이지만 해당 문서만큼 복잡하지 않아도됩니다. 이것이 잘 작동하는 이유는 업데이트가 작고 많은 일을하기 전에 누군가가 자신의 물건을 망쳐 놓고 있는지 알 수 있기 때문입니다. 정중함은 갈등을 수정합니다 - 다른 사람이 그 물건으로 끝날 때까지 당신은 기다릴 것입니다.

2) 잠금. 메모의 수정 버튼을 클릭하면 완료 될 때까지 아무도 수정할 수 없도록 잠급니다. 예를 들어, (1)처럼 매끄럽지는 않지만 구식이지만 상황에 따라 작동 할 수 있습니다 당신이 할 수있을 정도로 빨리 병합 할 수없는 곳 (1).

3) 가능한 병합 된 버전을 만들기 위해 데이터 모델과 인터페이스를 디자인하십시오. 누구나 메모를 추가 할 수 있지만 소유자가 편집 할 수있는 메모는 아무런 문제가 없습니다. 아니면 먼저 허가를 요청하면 나는 내 물건 만 편집 할 수 있습니다. 상황이 그보다 복잡해지면 점점 어려워집니다. 응용 프로그램 기능을 희생하지 않으려는 경우 일반적으로이 작업을 수행 할 수 없습니다. 그러나 다른 사람의 작업을 엉망으로 만드는 것은 무례한 행동입니다. 따라서 좋은 행동을하기 위해 할 수있는 많은 일들이 보이고, 사용자는 기교로 그것을했다.

관련 문제