이미 알고 계신 분들도 계시겠지만, 카우치베이스의 쿼리 팀은 새롭고 흥미로운 기능을 개발하기 위해 열심히 노력하고 있습니다, N1QL를 사용하여 쿼리 언어(예: SQL)의 강력한 기능을 Couchbase에 제공합니다.

이제 막 N1QL의 개발자 프리뷰 4를 출시했습니다( 블로그 게시물 보기), 여러 가지 개선 사항, REST API 등...

이제 N1QL DP4와 호환되는 Java SDK의 개발자 프리뷰를 사용할 수 있게 되었음을 알려드리게 되어 기쁩니다. 이 버전에서는 쿼리 관리가 여러 가지 변경되어 2.1(이 시점에는 N1QL도 정식 출시 안정성을 확보할 예정)에서의 상태를 더 잘 반영합니다.

코드 받기 및 기능 사용 방법

N1QL을 받고 활성화하려면 다음과 같이 하세요, 를 참조하십시오. 소개 문서! 특히 버킷에서 N1QL 인덱싱을 활성화하는 단계가 있습니다.

업데이트: SDK의 두 번째 개발자 프리뷰가 출시되었으며, 이에 따라 아래 팸과 링크가 업데이트되었습니다. 하단으로 스크롤하여 변경 사항을 확인하세요...

이 개발자 프리뷰의 코드를 가져오려면 Maven에서 다음 코드 조각을 사용하세요. pom.xml 를 클릭하거나 core-io 그리고 자바 클라이언트 병에 직접 넣을 수 있습니다.



이 기능은 실험적인 기능이므로 SDK에서 명시적으로 활성화해야 합니다. 이 작업은 두 가지 방법으로 수행할 수 있습니다. -Dcom.couchbase.queryEnabled=true 를 JVM 매개변수로 사용하거나 핵심 환경 를 초기화할 때 클러스터 를 코드에 입력합니다:

이 블로그의 예시를 재현하려면(를 사용하여 하나의 자바 클래스의 모든 스니펫을 복사하여 전체 작동 예제를 얻을 수 있습니다.), 아래 코드를 사용하여 쿼리할 수 있는 두 개의 문서를 생성할 수도 있습니다:

2.0.3/N1QL DP3 이후 달라진 점은 무엇인가요?

가장 주목할 만한 변경 사항은 아래에 설명되어 있습니다.

쿼리 인터페이스로 이름이 변경되었습니다. 성명서

N1QL에서 완전한 쿼리는 최소 하나의 문(예. SELECT * FROM 기본값), 위치/명명된 값 및 추가 요청 매개변수(예: 서버 측 시간 초과, 스캔 일관성 등)를 가질 수도 있습니다.

그리고 쿼리 인터페이스는 이 문 컴포넌트를 나타내는 것에 불과했기 때문에 이전 버전에서는 이름이 성명서.

쿼리 클래스 계층 구조 도입

쿼리 는 실제로 유지되었지만 전체 N1QL 쿼리를 표현하기 위해 도입되었습니다. 가장 단순한 쿼리(단일 문)부터 쿼리를 나타내는 클래스 계층 구조가 도입되었습니다, SimpleQuery)에서 고급(매개변수화된 쿼리, 준비된 쿼리).

쿼리는 팩토리 메서드를 통해 구성할 수 있습니다. 쿼리 추상 클래스입니다.

예를 들어, 대상 버킷에 N1QL 인덱스가 있는지 확인하기 위해 문자열을 문으로 사용하는 메서드를 사용하여 DSL에서 다루지 않는 고급 문으로 쿼리를 실행할 수 있습니다:

문 및 쿼리 매개 변수

DP4에는 매개변수화된 문이라는 개념이 도입되었습니다. 이러한 문에는 쿼리에서 값을 전달하여 서버가 채울 수 있는 자리 표시자가 있습니다. 플레이스홀더는 이름이 지정되거나( $name 형식) 또는 위치( $1 형식).

이러한 쿼리는 매개변수화된 쿼리의 형태로 값을 가져옵니다. JsonObject 명명된 자리 표시자에 대한 이름-값 쌍 또는 JsonArray 위치 자리 표시자를 위한 값입니다. 참고: 현재 N1QL DP4에는 명명된 매개변수가 작동하지 않는 버그가 있으며, 대신 위치 매개변수를 사용합니다.

또한, 쿼리 매개변수 는 클라이언트 컨텍스트 ID, 서버 측 시간 초과, 스캔 일관성 등 SDK에서 지원하는 나머지 모든 쿼리 매개변수를 설명합니다. 이러한 매개변수는 애드혹을 사용하여 모든 요청에 추가할 수 있습니다. 쿼리 공장 메서드.

준비된 명세서

N1QL DP4의 또 다른 큰 새로운 기능은 준비된 문을 도입한 것입니다. 이러한 문은 두 단계로 작성됩니다: - 문을 분석하고 쿼리 계획을 생성합니다. - 쿼리 계획을 실행하고 결과를 반환합니다.

쿼리 계획을 반환하는 준비 단계는 사용자가 계획이 어딘가에 캐시되어 있는 경우 처음 발생한 후 건너뛸 수 있습니다. 이렇게 하면 서버는 한 단계를 건너뛸 수 있으므로 시간을 절약할 수 있습니다.

A 쿼리 계획 를 호출하여 서버에서 얻을 수 있습니다. 버킷.준비(들), s 어떤 성명서. 이 개체는 캐시되어 나중에 여러 번 재사용할 수 있습니다.

계획을 실행하려면 다음을 사용하세요. 버킷.쿼리(쿼리.준비(계획)). 참고 준비 팩토리 메서드는 쿼리 매개변수와 자리 표시자 값도 허용합니다(원래 문에 해당 자리 표시자가 있는 경우).

결과 형식 변경

DP4는 서버 응답 형식에 몇 가지 변경 사항을 도입했으며, 이는 SDK에 반영되었습니다. 비동기 쿼리 결과 (동기식 버전 QueryResult 비슷한 변경 사항이 있습니다):

  • 최종 상태가 결정되기 전에(예: 결과 중 하나 처리가 실패하거나 중단되지 않는 경고가 있는 경우) 결과를 클라이언트로 스트리밍할 수 있습니다. 따라서 새로운 finalSuccess() 부울 메서드가 도입되었습니다. 성공()parseSuccess()를 사용하여 초기 오류를 미리 포착할 수 있지만 쿼리의 실제 최종 상태는 마지막에야 알 수 있습니다. finalSuccess().
  • 오류는 여러 가지가 있을 수 있으며 그 수준도 다양합니다. 따라서 error()오류()를 반환하고 관찰 가능 오류 및 경고의 수입니다.
  • 정보() 는 더 이상 오류나 경고를 포함하지 않고 타이머, 행 수, 응답 값의 크기 등과 같은 메트릭을 한 번에 전송하는 방식으로 변경됩니다.

동기식 QueryResult 는 이제 전체 응답을 사용할 수 있을 때까지 차단합니다. 지금까지는 응답의 첫 번째 청크가 처리될 때까지, 즉 행을 사용할 수 있게 되기 전까지 차단했기 때문에 이 변경으로 인해 결과를 얻는 데 약간 더 큰 지연이 발생할 수 있습니다(이전 초기 지연 + 후속 호출로 인해 발생하는 지연). allRows()).

개발자 프리뷰 2의 변경 사항

이번 릴리스에서는 쿼리 관련 몇 가지 버그가 수정되었습니다:

  • 응답이 너무 커서 청크가 결과 행으로만 구성된 경우 구문 분석 오류를 수정합니다.
  • 일부 사용자에 대해 쿼리할 때 지속적으로 시간 초과가 발생하는 차단 오류를 수정했습니다.

또한 기능적인 측면에서도 몇 가지 변경 사항이 적용되었습니다:

  • 요청 ID(N1QL 서버에서 생성)와 클라이언트 컨텍스트 ID(쿼리 시 사용자가 제공하지만 서버에서 64바이트의 UTF8 문자로 잘림)에 대한 접근자를 추가했습니다.
  • 버킷에 대한 쿼리 계획을 얻기 위해 문자열 문을 허용하는 준비 오버라이드를 추가했습니다.

포럼에서 피드백을 제공하고 문제를 알려주신 사용자 여러분께 감사드립니다!

이 릴리스에는 N1QL과 관련이 없는 다양한 버그 수정 및 새로운 기능도 포함되어 있지만 여기서는 자세히 설명하지 않겠습니다(다음 릴리스 노트 참조). 자바 클라이언트 그리고 core-io).

결론

최신 Java SDK로 N1QL과 N1QL 요청 코딩을 즐겨보시기 바랍니다. 언제나 그렇듯이 피드백, 제안, 버그 보고서 (글쎄, 우리가 버그를 기꺼이 도입하는 수준까지 즐기는 것은 아닙니다) 그리고 심지어 기여 :)

행복한 코딩!

Java SDK 팀

작성자

게시자 Simon Basle, 소프트웨어 엔지니어, 피보탈

Simon Basl_은 파리에 거주하는 소프트웨어 엔지니어로 피보탈의 Spring 팀에서 근무하고 있습니다. 이전에는 Couchbase Java SDK 팀에서 근무했습니다. 그의 관심 분야는 소프트웨어 설계 측면(OOP, 디자인 패턴, 소프트웨어 아키텍처), 리치 클라이언트, 코드 너머의 것(지속적 통합, (D)VCS, 모범 사례), 반응형 프로그래밍 등 다양합니다. 또한 프랑스어 버전의 InfoQ.com의 편집자이기도 합니다.

댓글 하나

  1. 와, 좋은 소식 계속 전해주세요!

  2. [...] 자바 프로그래밍 언어로 개발된 애플리케이션에서 카우치베이스에 대해 알아보세요( http://www.couchbase.com/n1ql-dp4-java-sdk […]

댓글 남기기