소개
Couchbase Server 4.5가 막 출시되었으니 이제 사용해 보시기 바랍니다! 모든 새로운 기능에 대한 전체 개요는 아래에서 확인할 수 있습니다. 여기. 이 문서에서는 새로운 하위 문서 API 기능에 대해 중점적으로 설명합니다. 하위 문서란 무엇인가요? 다음 문서에는 '태그' 필드를 통해 액세스할 수 있는 하위 문서가 포함되어 있습니다:
지금까지
이전 Couchbase 버전(4.5 미만)에서는 문서 업데이트가 다음 패턴을 따라야 했습니다:
- 업데이트가 필요한 전체 문서 가져오기
- 클라이언트 측에서 문서 업데이트(예: 몇 가지 속성만 업데이트)
- 전체 문서 다시 쓰기
간단한 Java 코드 예는 다음과 같습니다:
이제 4.5에서
새로운 하위 문서 API는 서버 측 기능으로, Couchbase에서 기존 문서의 하위 문서만 가져오거나 수정할 수 있습니다(놀랍게도...). 장점은 다음과 같습니다:
- 클라이언트 측의 사용성 향상
- 경로를 기반으로 CRUD 작업을 수행할 수 있습니다.
- 수정이 이전 값에 의존하지 않는 경우, 문서를 미리 가져올 필요 없이 문서를 업데이트할 수 있습니다.
- 문서 간 주요 참조를 더 쉽게 관리할 수 있습니다.
- 성능 향상
- 전체 문서를 유선으로 전송할 필요가 없으므로 네트워크 대역폭이 절약되고 지연 시간이 개선됩니다.
또한 하위 문서 API를 사용하면 (하위) 문서의 내부 값이나 배열을 가져오거나 수정할 수 있습니다.
- 조회 작업: 문서에서 특정 경로를 쿼리합니다(예: GET, EXISTS).
- 돌연변이 연산: 문서에서 하나 또는 여러 경로를 수정합니다(예: UPSERT, ARRAY_APPEND, COUNTER).
API에 대한 자세한 설명은 카우치베이스 문서에서 확인할 수 있습니다: http://developer.couchbase.com/documentation/server/4.5/sdk/subdocument-operations.html.
이제 문서 업데이트는 다음 패턴을 따를 수 있습니다:
- 속성 또는 하위 문서를 찾을 수 있는 경로를 지정하여 속성 또는 하위 문서를 직접 업데이트하세요.
이제 Java 예제는 다음과 같이 단순화됩니다:
낙관적인 '잠금'
카우치베이스 서버에는 트랜잭션 매니저가 내장되어 있지 않지만, 트랜잭션 동작에 대해 이야기할 때 요구 사항은 ACID 트랜잭션 매니저가 제공하는 것보다 훨씬 적은 경우가 많습니다(예: 완전한 ACID 호환이 아닌 동시 액세스만 처리). Couchbase에서 문서는 소위 C(ompare) A(nd) S(wap) 값을 갖습니다. 이 값은 서버 측에서 문서가 수정되는 즉시 변경됩니다.
- 특정 CAS 값이 있는 문서 가져오기
- 클라이언트 측에서 속성 변경
- 이전 CAS 값을 전달하여 문서를 교체해 보세요. 서버 측에서 중간에 CAS 값이 변경되었다면 다른 사람이 중간에 문서를 수정했음을 알 수 있으므로 변경 사항을 다시 적용해 볼 수 있습니다.
따라서 CAS는 낙관적인 잠금 방식에 사용됩니다. 변경 내용을 적용할 수 있을 것으로 예상하고 이전에 다른 사람이 변경했기 때문에 변경이 불가능했던 경우를 처리하기 때문에 낙관적입니다. 비관적인 접근 방식은 문서를 미리 잠가서 이 잠금이 다시 해제될 때까지 아무도 문서를 작성할 수 없도록 하는 것입니다.
이제 다음과 같은 질문을 할 수 있습니다:
- 내가 하위 문서를 수정했는데 다른 사람이 같은 문서 또는 같은 문서의 다른 하위 문서를 업데이트하면 어떻게 되나요?
하위 문서 작업은 원자적입니다. 원자성은 전부 아니면 전무라는 뜻입니다. 따라서 오류 메시지를 검색하지 않고 하위 문서를 업데이트하면 서버 측에서 업데이트가 수행되었는지 확인할 수 있습니다. 즉, 5개의 클라이언트가 임베디드 배열에 요소를 추가하는 경우 5개의 값이 모두 추가되었다는 것을 확인할 수 있습니다. 그러나 원자성은 상태와 관련된 일관성을 의미하지는 않습니다. 따라서 충돌에 대해서는 알려주지 않습니다. 따라서 두 클라이언트가 동일한 하위 문서를 업데이트하는 경우 두 업데이트가 모두 수행되지만 이러한 업데이트와 관련하여 충돌이 있는지 확인하려면 여전히 CAS 값( 비관적 잠금 대신). 그러나 클라이언트가 서로 다른 하위 문서에 대해 작업하는 것이 확실하다면 충돌이 발생하지 않으므로 CAS 값이 필요하지 않습니다.
요약
새로운 하위 문서 API는 Couchbase 4.5의 새로운 훌륭한 기능 중 하나입니다. 이 기능을 사용하면 문서의 일부만 읽거나 수정하기 위해 전체 문서를 가져오지 않아도 됩니다. 이는 클라이언트 측의 관점에서 더 나은 사용성을 의미합니다. 주요 장점 중 하나는 특히 대용량 문서로 작업할 때 성능이 향상된다는 것입니다.
기사 작성해 주셔서 감사합니다. 저는 카우치베이스를 처음 사용하므로 용어 사용에 대해 용서해 주시기 바랍니다.
문서에는 "하위"문서라고 되어 있지만 예제에서는 (하위 문서가 아닌) 속성을 업데이트하는 것으로 나와 있습니다. 일부 속성(KV 쌍)이 있는 간단한 문서가 있어도 이 하위 문서 API를 사용하여 해당 속성 중 하나를 업데이트할 수 있다는 의미인가요?
고마워요