지난 몇 달 동안 열심히 노력해 온 내용을 발표할 수 있게 되어 매우 기쁩니다. SDK 팀 전체가 합심하여 더 빠르고, 더 간단한 API를 제공하며, 향후 출시될 서버 기능에 대비하고, 프레임워크 에코시스템과의 통합을 용이하게 하는 완전히 새로운 SDK를 출시하기 시작했습니다.
Java SDK를 개선하는 것 외에도 완전히 새로운 Scala SDK! Scala로 개발하는 모든 사람을 위한 최고 수준의 지원을 제공하며 앞으로 Scala 에코시스템에 훨씬 쉽게 통합할 수 있습니다.
이 모든 것이 새로운 것이니, 용들이 여기 있습니다. 최고의 SDK가 될 수 있도록 모든 피드백과 버그 보고에 감사드립니다.
하이라이트
이 글에서는 주요 내용을 두 섹션으로 나누어 설명합니다. 한 섹션에서는 개편된 API(모든 SDK에 걸쳐)에 대해 설명하고 다른 섹션에서는 Java SDK별 개선 사항을 다룹니다.
크로스 SDK API 개선 사항
API의 사용성을 개선하기 위해 API를 상당히 많이 다듬고 리팩토링했습니다. 그 결과 매우 응집력 있고 규칙적인 API 구조가 만들어졌으며, 처음 사용하는 사용자나 오랜 Couchbase 사용자 모두 훨씬 더 쉽게 사용할 수 있게 되었습니다.
간단한 비교를 위해 다음은 2.x Java SDK의 일부 API입니다:
1 2 3 |
<D 확장 문서<?>> D 삽입(D 문서, PersistTo persistTo, ReplicateTo 복제 대상); 비동기 뷰 결과 쿼리(ViewQuery 쿼리); AsyncN1qlQueryResult 쿼리(N1qlQuery 쿼리); |
그리고 물론 타임아웃 과부하도 있습니다:
1 2 3 |
<D 확장 문서<?>> D 삽입(D 문서, PersistTo persistTo, ReplicateTo 복제 대상, long 시간 초과, 시간 단위 시간 단위); ViewResult 쿼리(ViewQuery 쿼리, long 시간 초과, 시간 단위 시간 단위); N1qlQueryResult 쿼리(N1qlQuery 쿼리, long 시간 초과, 시간 단위 시간 단위); |
이를 새 API와 비교해 보세요:
1 2 3 |
MutationResult 삽입(문자열 id, 개체 콘텐츠, 삽입 옵션 옵션); QueryResult 쿼리(문자열 문, 쿼리 옵션 ptions); ViewResult viewQuery(문자열 디자인 문서, 문자열 보기 이름, 보기 옵션 옵션); |
각 메서드는 결과 라는 선택적 블록이 있으며 끝에 옵션. 이전 문서 개념이 API 전체에서 더 간단하고 규칙적인 개념으로 대체되었습니다. 타임아웃, 내구성 요구 사항 또는 CAS와 같은 옵션 속성이 모두 옵션 매개변수로 이동되어 과부하가 줄어들고 "한 곳에서만" 확인할 수 있게 되었습니다.
추후 블로그 게시물에서 API 개편에 대해 자세히 살펴보겠지만, 지금은 Java 관련 개선 사항으로 넘어가겠습니다.
Java 관련 개선 사항
사용자에게 가장 눈에 띄는 두 가지 변경 사항은 다음과 같습니다:
- 기본 자바 버전인 Java 8
- RxJava에서 Reactor로 마이그레이션된 반응형 API
RxJava 1.x는 수년 동안 잘 사용되어 왔지만(사실 저희는 이 기술을 가장 먼저 채택한 기업 중 하나였습니다), 수명이 다한 것으로 표시되어 대안을 모색해야 했습니다. 리액티브 스트림이 서로 다른 구현 간의 통합을 위한 사실상의 표준으로 떠오르면서 RxJava 2.x와 리액터 중 하나를 결정해야 했습니다. 두 가지 모두 (대부분) 성능 면에서 정면으로 맞섰지만, 오랜 평가 기간 끝에 다음과 같은 이유로 리액터를 선택하기로 결정했습니다:
- 네이티브 자바 8 API
- 일부 주요 워크로드에서 성능이 약간 향상되었습니다.
- 더 많은 커뮤니티 견인력과 지속적인 성장 (스프링 코어에 통합되어 있기 때문이기도 함)
애플리케이션 플랫폼이 RxJava 2로 구축된 경우에도 걱정하지 마세요. 두 플랫폼 모두 반응형 스트림을 지원하므로 반응형 API 위에 플러그인하기만 하면 됩니다.
2.x SDK에는 차단 API와 RxJava를 통해 노출되는 비동기 API라는 두 가지 API가 있었습니다. SDK 3에서는 더 많은 제어 기능을 제공하기 위해 세 번째 API를 추가했습니다:
- 차단 API는 그대로 유지됩니다.
- 반응형 API는 리액터의 모노 및 플럭스 응답을 노출합니다.
- 비동기 API는 최고 수준의 성능이 필요한 경우 빌딩 블록으로 사용할 수 있는 CompletableFutures를 노출합니다.
마지막으로 모든 반응형 쿼리 API의 주요 개선 사항 중 하나는 백프레셔에 대한 선택적 지원입니다. 대용량 결과를 읽어야 하는데 한 번에 모두 힙에 넣지 않으려는 경우, 이제 내부 비동기 IO 계층까지 확장된 리액터 백프레셔 메카니즘을 사용할 수 있습니다. 이 주제에 대한 심층적인 블로그 포스팅을 준비 중이니 기대해 주세요!
시작하기
사용해 보고 싶으시다면 사전 릴리스 메이븐 리포지토리에서 다운로드할 수 있습니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<repositories> <repository> <id>카우치베이스</id> <name>카우치베이스 프리뷰 리포지토리</name> <url>http://files.couchbase.com/maven2</url> 리포지토리> 리포지토리> <dependencies> <dependency> <groupId>com.couchbase.client</groupId> <artifactId>자바 클라이언트</artifactId> <version>3.0.0-alpha.4</version> </dependency> </dependencies> |
종속성이 해결되면 Couchbase Server 5.0보다 이전 버전인 모든 클러스터에 연결할 수 있습니다. 그런 다음 버킷을 열고 원하는 컬렉션을 사용합니다(컬렉션 지원은 곧 출시될 Couchbase Server 릴리즈의 API에 이미 포함되어 있습니다). 이전 릴리즈의 경우 기본 컬렉션 를 입력하면 바로 작동합니다:
1 2 3 |
클러스터 클러스터 = 클러스터.연결("localhost", "username", "비밀번호"); 버킷 버킷 = 클러스터.버킷("버킷 이름"); 컬렉션 컬렉션 = 버킷.기본 컬렉션(); |
이제 문서를 작성하고 읽을 수 있습니다:
1 2 3 4 5 6 7 8 |
// 문서 업서트 MutationResult 업서트 결과 = 컬렉션.업서트( "내 문서", JsonObject.create().put("name", "mike") ); // 문서 가져오기 선택 사항<GetResult> getResult = 컬렉션.get("내 문서"); |
자세한 내용을 알아보시려면 새로운 문서 현재 지속적으로 작성되고 구체화되고 있습니다. 코드 예제를 찾아볼 수도 있습니다. 여기.