이미 알고 계신 분들도 계시겠지만, 카우치베이스의 쿼리 팀은 새롭고 흥미로운 기능을 개발하기 위해 열심히 노력하고 있습니다, N1QL를 사용하여 쿼리 언어(예: SQL)의 강력한 기능을 Couchbase에 제공합니다.
이제 막 N1QL의 개발자 프리뷰 4를 출시했습니다( 블로그 게시물 보기), 여러 가지 개선 사항, REST API 등...
이제 N1QL DP4와 호환되는 Java SDK의 개발자 프리뷰를 사용할 수 있게 되었음을 알려드리게 되어 기쁩니다. 이 버전에서는 쿼리 관리가 여러 가지 변경되어 2.1(이 시점에는 N1QL도 정식 출시 안정성을 확보할 예정)에서의 상태를 더 잘 반영합니다.
코드 받기 및 기능 사용 방법
N1QL을 받고 활성화하려면 다음과 같이 하세요, 를 참조하십시오. 소개 문서! 특히 버킷에서 N1QL 인덱싱을 활성화하는 단계가 있습니다.
업데이트: SDK의 두 번째 개발자 프리뷰가 출시되었으며, 이에 따라 아래 팸과 링크가 업데이트되었습니다. 하단으로 스크롤하여 변경 사항을 확인하세요...
이 개발자 프리뷰의 코드를 가져오려면 Maven에서 다음 코드 조각을 사용하세요. pom.xml
를 클릭하거나 core-io 그리고 자바 클라이언트 병에 직접 넣을 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
com.카우치베이스.클라이언트 자바-클라이언트 2.1.0-dp2 카우치베이스 카우치베이스 repo http://files.couchbase.com/maven2 false |
이 기능은 실험적인 기능이므로 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 팀
와, 좋은 소식 계속 전해주세요!
[...] 자바 프로그래밍 언어로 개발된 애플리케이션에서 카우치베이스에 대해 알아보세요( http://www.couchbase.com/n1ql-dp4-java-sdk […]