
헨델의 악보 원본 초안 사본
사진 제공 아드리안 팔란트 라이선스에 따른 허가 CC BY-SA 2.0
CRUD의 U
In 이 이전 게시물에서 기본 CRUD 작업 시작하기 에 대해 썼습니다. 카우치베이스 라이트 를 사용하세요. 이 간단한 메모에서는 문서 업데이트에 대해 좀 더 자세히 살펴보고자 합니다. 이렇게 하면 완전히 새로운 문제에 대한 문이 열립니다. 내부를 들여다보겠습니다.
카우치베이스 라이트는 문서 중심의 데이터베이스입니다. 문서는 다음과 같이 저장됩니다. JSON 객체를 사용할 수 있습니다. 이전 게시물에서 설명한 대로 문서 콘텐츠를 직접 작업하는 것은 쉽습니다. 문서 개체에 맵으로 저장됩니다. 이는 콘텐츠를 조작하는 기본 방식과 잘 맞습니다.
직접 접근 방식 조정하기
문서를 검색하면 데이터의 변경 불가능한 버전이 포함된 복사본을 얻게 됩니다. 지도를 별도의 지도 개체에 복사한 다음 이전 지도를 덮어쓰면 이 문제를 해결할 수 있습니다. 이 코드 스니펫에 그 방법이 나와 있습니다:
|
1 2 3 4 5 6 7 8 9 |
profile = new HashMap(); profile.putAll(document.getProperties()); profile.put("type", "profile"); // Add a "type" to the document try { document.putProperties(profile); } catch (CouchbaseLiteException ex) { Log.e(TAG, "CBL operation failed"); } |
이렇게 하면 실제로 새로운 개정 를 사용하여 새 문서 본문을 만듭니다.
또는 다음을 사용할 수 있습니다. createRevision() 를 사용하여 새로운 저장되지 않은 수정본. 그러면 변경 가능한 콘텐츠가 포함된 최신 수정본 사본이 반환됩니다. 그런 다음 속성 맵을 직접 조작할 수 있습니다. 변경 사항은 저장(). 이 코드 스니펫의 최종 효과는 이전 코드 스니펫과 동일합니다:
|
1 2 3 4 5 6 7 8 9 |
UnsavedRevision update = document.createRevision(); profile = update.getProperties(); profile.put("type", "profile"); // Add a "type" to the document try { update.save(); } catch (CouchbaseLiteException ex) { Log.e(TAG, "CBL operation failed"); } |
수정이라고요?
이는 많은 애플리케이션에 유용합니다. 아직 개정에 대해서는 많이 말씀드리지 않았습니다. 문서가 변경된다는 것을 알 수 있습니다. Couchbase Lite에는 이러한 변경 사항과 함께 문서 수정본에 대한 개념이 있습니다.
하지만 수정은 단순히 일련의 선형적인 변경 사항을 추적하는 것 이상의 의미를 가집니다. 제가 보여드린 예에서 눈에 띄지 않는 것은 충돌의 가능성입니다. 충돌은 특정 문서 수정본에 대한 두 개 이상의 업데이트가 데이터베이스에 다시 커밋될 때 발생합니다.
실제 문서처럼 생각하세요. 기사(또는 블로그 게시물!)를 작성하여 여러 사람에게 보내서 의견을 받는다고 가정해 보세요. 한 세트의 댓글을 받고 약간의 수정을 가합니다. 그러면 동일한 원본 문서를 기반으로 한 또 다른 댓글 세트가 돌아옵니다. 이 과정을 충분히 자주 반복하면 일부 변경 사항이 겹치는 경우를 거의 보장할 수 있습니다. (소프트웨어 개발자의 경우 소스 제어를 사용할 때 충돌을 병합하는 것이 더 좋은 예일 것입니다.) 충돌!
문서 업데이터
문서 충돌, 수정 내역 등을 다루는 것은 이 글에서 다루고 싶은 것 이상입니다. 하지만 Couchbase가 어떻게 도움이 되는지 살짝 엿볼 수 있습니다. 이 마지막 업데이트 접근 방식은 과한 것처럼 보일 수 있지만 충돌이 해결되면 그 가치를 알게 될 것입니다. 다음은 코드입니다:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
document = database.getDocument(documentId); try { document.update(new Document.DocumentUpdater() { @Override public boolean update(UnsavedRevision newRevision) { Map properties = newRevision.getUserProperties(); properties.put("type", "profile"); newRevision.setUserProperties(properties); return true; } }); } catch (CouchbaseLiteException ex) { Log.e(TAG, "CBL operation failed"); } |
와, 앞의 예제보다 훨씬 더 복잡해 보이네요. 실제로는 조금 더 복잡할 뿐입니다. 구조가 추가되면 결국 생활이 훨씬 더 쉬워집니다. 그래서 무슨 일이 일어나고 있을까요?
이 구조를 통해 Couchbase Lite는 충돌을 처리하는 지루한 작업을 처리할 수 있습니다. 콜백을 정의할 때는 문서 업데이터 인터페이스. 카우치베이스 라이트는 새로운 인터페이스 생성을 처리합니다. 저장되지 않은 수정본 인스턴스를 생성합니다. 그런 다음 메서드에서 원하는 대로 변경해야 합니다. 반환되면 Couchbase Lite는 자동으로 문서를 저장하려고 시도합니다. 충돌이 감지되는 경우 카우치베이스 라이트는 간단히 업데이트() 다시 클릭합니다. 반환 true 저장하려는 변경 사항을 수행한 경우 또는 false 그렇지 않으면
수정, 충돌 및 충돌 해결에 대해 자세히 알아보려면 다음 가이드를 참조하세요. 여기
포스트 스크립트
더 많은 리소스를 확인하세요. 개발자 포털 트위터에서 팔로우하세요 카우치베이스 개발.
질문에 대한 답변을 게시할 수 있습니다. 포럼. 그리고 다음에도 적극적으로 참여합니다. 스택 오버플로.
다음 주소에서 저를 개인적으로 팔로우할 수 있습니다. 호드그릴리
... [트랙백]
[...] 자세히 보기: http://www.couchbase.com/better-updates-couchbase-lite/ [...]
[...] 간단히 말해서 문서를 만들고 업데이트하는 두 가지 예가 있습니다. 이 방법이 선호되는 업데이트 방법은 아니지만 많은 경우에 충분합니다. 업데이트에 대한 자세한 내용은 여기에서 확인할 수 있습니다. [...]