클라이언트와의 동기화 충돌을 관리 할 수 있습니까?PouchDB - 수동으로 충돌 관리
pouchDB가 동기화를 수행하고 충돌을 감지하면 PouchDB가 동기화하려고하는 로컬 문서와 CouchDB doc의 마지막 버전을 가져올 수 있습니까? 두 문서를 모두 구할 수 있다면 사용자에게 표시 할 수 있으며 유지할 버전을 선택할 수 있습니다 ...
클라이언트와의 동기화 충돌을 관리 할 수 있습니까?PouchDB - 수동으로 충돌 관리
pouchDB가 동기화를 수행하고 충돌을 감지하면 PouchDB가 동기화하려고하는 로컬 문서와 CouchDB doc의 마지막 버전을 가져올 수 있습니까? 두 문서를 모두 구할 수 있다면 사용자에게 표시 할 수 있으며 유지할 버전을 선택할 수 있습니다 ...
CouchDB 및 PouchDB는 해결하기 위해 설계 되었기 때문에 운이 좋았습니다.
기본적으로 CouchDB docs on conflict resolution에서 읽을 수 있습니다. 거기에있는 모든 내용이 PouchDB에도 적용되어야합니다. (그렇지 않으면 버그입니다.;)). CouchDB wiki에는 좋은 글쓰기가 있습니다.
편집 : 그래서 당신이 (PouchDB에서 {conflicts:true}
) ?conflicts=true
로 문서를 가져 오기 할 수 있습니다 자세한 내용을 제공합니다. 예 : 이 같은 문서 가져올 것이다 :
http://localhost:5984/db1/foo?conflicts=true
을 그리고 다시이 같은 문서를 얻을 : (
여기{
"_id":"foo",
"_rev":"2-f3d4c66dcd7596419c76b2498b3ba21f",
"notgonnawork":"this is from the second db",
"_conflicts":["2-c1592ce7b31cc26e91d2f2029c57e621"]
}
나는 다른 데이터베이스에서 도입 충돌, 해당 데이터베이스의 수정이 수상했다있다 무작위로). 이 문서의 현재 개정판은 2-로 시작하고 충돌 버전은 2-로 시작하여 둘 다 개정 트리의 동일한 레벨에 있음을 나타냅니다.
가 충돌하는 버전을 얻으려면, 당신은 단지 충돌 회전을 잡고 전화 :
http://localhost:5984/db1/foo?rev=2-c1592ce7b31cc26e91d2f2029c57e621
을 그리고 당신이 얻을 :
{
"_id":"foo",
"_rev":"2-c1592ce7b31cc26e91d2f2029c57e621",
"notgonnawork":"this is from the first database"
}
그래서 사용자에게 두 개의 충돌 버전을 제시 한 후, 그 다음 결과를 결합하거나 잃는 버전을 선택하거나 원하는 것을 무엇이든지 위에 둘 모두의 위에 세 번째 개정판을 추가 할 수 있습니다. 이 다음 개정판에는 접두어 3이 붙습니다. 이해가 되니?
편집 : 충돌하는 버전을 삭제해야합니다. 그렇지 않으면 여전히 _conflicts
으로 표시됩니다. this answer을 참조하십시오.
그가 말한 것 : –
제 생각에는 정확하게 제 질문을 표현하지 못했을 것입니다. 문제는 어떻게 할 것인가입니다. 나는 내 클라이언트 중 하나가 서버와 충돌 할 때 여러 pouchdb 클라이언트가있는 couchdb 서버가 있으므로 409 오류가 발생합니다 (couchdb wiki의 충돌 방지 장). PouchDB는 투명하게 동기화를 수행하므로 서버와 클라이언트의 충돌하는 문서를 어떻게 얻을 수 있습니까? db.change 콜백에서 {status : 409, name : "conflict", 메시지 : "Document update conflict", 오류 : true, toString : function} 오류 메시지가 나타납니다. – ncohen
문서를 가져올 때'conflicts = true' ([link] (https://wiki.apache.org/couchdb/HTTP_Document_API#Special_Fields))를 사용하십시오. 좀 더 자세한 내용으로 내 대답을 편집했습니다. – nlawson