카우치베이스 동기화 게이트웨이 변경사항 피드는 복제 외에도 다양한 종류의 로직을 구동하는 데 유용할 수 있습니다. 변경사항 피드의 복잡한 기능을 이해하기 쉽도록 간단한 도구를 개발했습니다. 이 블로그 게시물에서는 이 앱의 기능에 대해 설명하겠습니다. 다음 글에서는 코드를 살펴본 다음 알아야 할 주요 출력에 대해 이야기하겠습니다.
소개
그리고 카우치베이스 모바일 스택은 세 가지 구성 요소로 이루어져 있습니다, 카우치베이스 서버, 동기화 게이트웨이및 카우치베이스 라이트. 이러한 각 요소는 그 자체로 유용합니다. 하지만 일반적인 시나리오에서는 이 요소들이 모두 함께 작동합니다.
정교하고 강력한 데이터 동기화는 까다로운 작업입니다. 바로 이 부분에서 Couchbase Mobile이 빛을 발합니다. 항상 켜져 있는 네트워크나 일관되지 않은 클럭에 의존하는 대신 다중 버전 동시 제어(MVCC)를 사용합니다. 이 접근 방식은 개발자에게 안정성과 문서 충돌을 유연하게 처리할 수 있는 기능을 모두 제공합니다.
동기화 게이트웨이는 모든 요소 간에 데이터를 동기화할 수 있도록 하는 핵심 요소입니다. 이를 위해 Couchbase Mobile은 변경 피드라는 것을 사용합니다. Couchbase Lite 클라이언트는 이 피드에 액세스하여 데이터 복제를 추진합니다. 변경 사항 피드는 이러한 목적만을 염두에 두고 설계되었지만 다른 목적에도 사용할 수 있습니다. 따라서 더 깊이 이해할 가치가 있습니다.
CBM 변경 사항 탐색기
저는 이 도구를 CBM 변경 사항 탐색기라고 부릅니다. 이 앱을 사용하면 동기화 게이트웨이 변경 피드를 모니터링하면서 동시에 Couchbase Lite를 통해 데이터를 조작할 수 있습니다. 또한 한 번에 두 개 이상의 인스턴스를 실행할 수 있으므로 클라이언트와 동기화 게이트웨이가 온라인과 오프라인에서 어떻게 상호 작용하는지 확인할 수 있습니다.
이 애니메이션은 UI가 실제로 작동하는 모습을 보여줍니다. 상단에는 세 개의 창이 있습니다. 가장 왼쪽 창에는 로컬(Couchbase Lite) 데이터베이스에 있는 모든 문서 목록이 표시됩니다. 가운데 창은 왼쪽 목록에서 선택한 문서의 내용을 표시하고 새 문서 또는 문서 수정본을 편집 및 저장할 수 있는 역할을 합니다.
가장 오른쪽 창에는 동기화 게이트웨이의 변경 사항 피드 출력이 표시됩니다.
사용자 이름 및 비밀번호 필드는 카우치베이스 라이트와 동기화 게이트웨이 간의 기본 인증에 사용되는 값을 설정합니다. GUEST 사용자를 활성화하면 인증이 필요하지 않습니다. "적용" 버튼은 인증 사용을 켜고 끕니다. (즉, 자격 증명을 제공한 경우에도 토글을 사용하여 인증을 해제할 수 있습니다.)
저장 버튼은 콘텐츠 창에 현재 JSON을 새 수정본으로 저장하려고 시도합니다. 구조가 없는 구조를 입력하여 새 문서를 만들 수 있습니다. _rev
항목으로 이동합니다. 문서 목록에서 기존 문서를 먼저 선택하고 내용을 수정한 다음 저장하면 기존 문서의 새 수정본을 쉽게 만들 수도 있습니다. 문서 목록의 _rev
항목은 자동으로 현재 값을 가지며, 이 값은 카우치베이스 라이트가 하위 리비전을 생성하는 데 필요합니다.
동기화 버튼은 카우치베이스 라이트 클라이언트와 동기화 게이트웨이 간의 연속 푸시 및 풀 복제를 모두 켜고 끕니다.
예시: 변경 사항 피드 출력에 충돌 표시하기
이러한 기능을 결합하여 수정본 충돌을 생성하여 어떻게 작동하는지 확인할 수 있습니다. 문서를 두 개의 개별 앱 인스턴스에 동기화합니다. 동기화를 끕니다. 그런 다음 각 클라이언트 인스턴스에서 문서를 서로 다르게 변경합니다. 동기화를 다시 켜면 충돌이 발생합니다.
다음은 충돌이 없는 문서 업데이트에 대한 변경 사항 피드입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
{ "변경": [ { "rev": "3-dcb456e2abf57fcedd3c912d73f0dc47" } ], "doc": { "_id": "doc", "_rev": "3-dcb456e2abf57fcedd3c912d73f0dc47", "채널": [ "105.3" ], "key": "#2" }, "id": "doc", "seq": 7 } |
그리고 여기에 충돌이 있는 동일한 문서가 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
{ "seq" : 7, "id" : "doc", "doc" : { "_id" : "doc", "_rev" : "3-dcb456e2abf57fcedd3c912d73f0dc47", "채널" : [ "105.3" ], "key" : "#2" }, "변경" : [ { "rev" : "3-dcb456e2abf57fcedd3c912d73f0dc47" }, { "rev" : "3-07e37dc9e819d7a4c20e5d125f56c714" } ] } ], "last_seq" : "7" } |
(참고: 변경사항 피드의 출력은 여러 매개변수에 의해 제어됩니다. 위에 표시된 피드를 가져오려면 다음과 같이 설정해야 합니다. active_only
에 false
, include_docs
에 true
및 스타일
에 all_docs
.)
의 차이에 주목하세요. 변경 사항
배열입니다. 두 개의 수정본이 나열됩니다. 문서 데이터에는 여전히 기본 우승 수정본만 표시됩니다. 충돌을 해결하는 방법을 선택할 수 있도록 다른 리비전에 대한 데이터는 계속 사용할 수 있습니다. 실제 앱에서는 이 충돌을 해결하고 싶을 것입니다. 그렇지 않으면 대체 데이터가 데이터베이스에 남아서 불필요하게 커질 수 있습니다.
다음 단계
사용해 볼 수 있는 기능 중 일부만 소개해 드렸습니다. 명령줄 도구와 동기화 게이트웨이 관리자 인터페이스를 사용할 수도 있습니다. 살펴보기 여기 에서 자세히 알아보세요.
애플리케이션 코드 자체는 약 400줄의 코드와 UI xml을 위한 100줄의 코드로 구성되어 있습니다. 이 글의 2부에서는 코드를 자세히 살펴보겠습니다. 앱을 더 유용하게 만들 수 있는 간단한 기능들이 꽤 많이 있으므로 여러분의 기여를 환영합니다.
프로젝트는 이제 깃허브에서. 여기에서 배포용 앱을 빌드, 실행 및 패키징하는 방법에 대한 지침을 찾을 수 있습니다.
포스트 스크립트
더 많은 리소스를 확인하세요. 개발자 포털 트위터에서 팔로우하세요 카우치베이스 개발.
질문에 대한 답변을 게시할 수 있습니다. 포럼. 그리고 다음에도 적극적으로 참여합니다. 스택 오버플로.
질문, 의견, 보고 싶은 주제 등이 있으면 트위터에서 저에게 연락해 주세요. 호드그릴리
[...] 코드는 제가 만든 도구에서 가져온 것입니다. 이 게시물에서 도구 자체에 대해 읽어 보세요. 소스 코드는 GitHub [...]에서 찾을 수 있습니다.
[...] 피드를 검토하고 이해하는 데 도움이 되는 도구입니다. 2부로 구성된 이 시리즈의 1부에서는 소개와 설명을 읽을 수 있습니다. 이 코드는 [...]를 듣는 예제로도 사용됩니다.