SQL++/N1QL 쿼리

파트너 블로그 게시물: SQL과 N1QL의 조화: Simba Couchbase 드라이버의 협업 쿼리 실행

SQL(구조화된 쿼리 언어)은 원래 관계형 데이터 저장소를 위한 직관적인 쿼리 언어로 설계되었습니다. 이에 비해 상대적으로 초기 단계인 NoSQL은 많은 BI 도구 및 응용 프로그램에서 SQL을 이해하므로 여전히 SQL과의 호환성이 필요합니다. Couchbase는 자체 쿼리 언어를 지원합니다, N1QL에 저장된 JSON 문서를 쿼리하기 위한 SQL을 확장한 것입니다. 카우치베이스 서버. Simba Couchbase ODBC 및 JDBC 드라이버는 사용자가 SQL과 N1QL을 모두 활용할 수 있게 함으로써 "일석이조"를 누릴 수 있게 해줍니다. 이를 달성하는 방법 중 하나는 협업 쿼리 실행(CQE) 이 문서에서는 심바 카우치베이스 드라이버가 SQL과 N1QL의 유사성을 활용하여 최적의 성능을 보장하기 위해 CQE를 사용하는 방법을 설명합니다.

조인 작업

N1QL 지원 조회 조인로 변환할 수 있으며, 이는 SQL에서 유사한 JOIN으로 대략적으로 변환할 수 있습니다. 여기서는 Simba Couchbase 드라이버가 어떻게 CQE 기능을 활용하여 JOIN 작업을 Couchbase Server에 전달하는지에 대해 설명하겠습니다.

맥주와 양조장 문서가 포함된 맥주 샘플 데이터 세트를 예로 들어보겠습니다. 심바 카우치베이스 드라이버를 사용하면 이러한 문서를 맥주와 양조장이라는 두 개의 서로 다른 테이블에 매핑할 수 있으며, 사용자는 이 두 테이블에서 JOIN 쿼리를 실행할 수 있습니다.

사용자가 캘리포니아 주에서 양조되는 모든 맥주를 찾고자 하는 경우 다음과 같은 SQL 문을 실행한다고 가정해 보겠습니다:

이 SQL 쿼리에 대한 결과를 생성하려면 다음을 수행해야 합니다:

  • 카우치베이스 서버에서 클라이언트로 모든 맥주 문서 가져오기
  • 카우치베이스 서버에서 클라이언트로 모든 브루어 문서 가져오기
  • 조인 실행
  • 주(州)가 캘리포니아인 결과를 필터링합니다.

 

조인 테이블이 매우 큰 경우 클라이언트 측에 많은 부하를 줄 수 있으므로 효율적이지 않습니다. 또한 N1QL에서는 JOIN 및 WHERE 작업이 지원됩니다. 부하를 서버 측으로 이전하면 성능이 향상될 수 있습니다.
Simba Couchbase 드라이버가 바로 그 역할을 합니다. CQE를 사용하면 Simba Couchbase 드라이버는 주어진 SQL을 유사한 N1QL로 변환하고, 이를 실행을 위해 Couchbase Server로 전달할 수 있습니다. 위의 SQL 문은 다음과 같이 N1QL로 변환할 수 있습니다:

 

내부적으로 Simba 카우치베이스 드라이버는 쿼리 구문 분석, 준비 및 실행을 위해 Simba SQL 엔진을 사용합니다. 쿼리를 실행하기 전에 드라이버는 대수 표현 트리(AE-Tree) 표현을 생성합니다. SQL 문은 Simba SQL 엔진이 실행 계획으로 변환하여 실행하기 직전에 이 형식을 취합니다. 실행 전에 드라이버는 계획을 검토하고 실행할 수 있는 부분이 있는지 확인할 수 있습니다. 이를 전달 단계라고 합니다.

전달 단계 바로 직전( AETree 최적화 기사), AE-Tree는 다음과 같이 보입니다:

 

그리고 계승 후 AETree는 이렇게 생겼습니다:

 

보시다시피 AE-Tree에는 조인된 테이블을 나타내는 노드가 하나만 포함되어 있으므로 조인 및 필터링을 포함한 다른 모든 작업은 Couchbase Server로 전달됩니다. Couchbase Server에서 드라이버로 전송되는 데이터가 적고 클라이언트 측에서 수행되는 작업 수가 적으면 성능이 향상됩니다!

UNNEST 작업

N1QL은 개념적으로 중첩된 배열과 상위 개체의 조인을 수행하는 UNNEST 절을 지원합니다.

심바 카우치베이스 드라이버에서 중첩 배열은 가상 테이블에 매핑되며, 사용자는 부모 테이블과 가상 테이블을 조인할 수 있습니다. 이 역시 SimbaEngine X의 CQE 기능을 사용하며 N1QL UNNEST 절을 활용합니다.

예를 들어, 맥주 샘플 데이터 세트의 모든 양조장 문서에는 brewery_address라는 중첩 배열이 포함되어 있습니다. Simba Couchbase 드라이버에서 이러한 문서는 brewery 테이블과 brewery_address 가상 테이블에 매핑됩니다. 사용자가 brewery와 brewery_address를 조인한 후 모든 양조장 이름을 얻으려면 다음과 같이 SQL 문을 실행한다고 가정해 보겠습니다:

Simba 카우치베이스 드라이버는 위의 SQL 문을 다음과 같이 N1QL로 변환합니다:

 

전달 전의 AE-Tree는 다음과 같은 모습입니다:

 

전달 후 AE-Tree는 다음과 같은 모습입니다:

보시다시피 AE-Tree에는 다시 조인된 테이블을 나타내는 노드 하나만 포함되어 있으며, 이는 다른 모든 것이 실행을 위해 Couchbase Server로 전달된다는 것을 의미합니다. 다시 말하지만, 서버 측에서 발생하는 연산이 많을수록, 그리고 유선을 통해 드라이버로 돌아오는 데이터가 적을수록 쿼리 성능이 향상됩니다.

이 두 가지 예는 지원되는 N1QL 연산을 서버로 전달하여 실행하도록 함으로써 Simba Couchbase 드라이버가 Couchbase Server의 잠재력을 최대한 활용하는 방법을 강조합니다. N1QL에서 지원되지 않는 SQL 기능의 경우 드라이버가 작업을 실행합니다(클라이언트 측). 이러한 방식으로 드라이버는 SQL 및 N1QL에 대한 폭넓은 지원과 고성능을 보장합니다.

이제 당신의 차례입니다

무료 평가판 다운로드 카우치베이스 ODBC/JDBC 드라이버 새로운 Couchbase Server 4.5에서 사용해 보세요!

이 문서 공유하기
받은 편지함에서 카우치베이스 블로그 업데이트 받기
이 필드는 필수 입력 사항입니다.

작성자

게시자 노린 안와르 조이타

현재 노린 안와르 조이타는 비트 퀼 테크놀로지스에서 소프트웨어 개발자로 일하고 있습니다. 비트 퀼 테크놀로지스에 입사하기 전에는 약 2년간 Simba 테크놀로지스에서 컴퓨터 과학자로 근무했습니다. 그녀는 Simba에서 여러 ODBC(C++) 및 JDBC(Java) 드라이버, 즉 Athena ODBC 및 JDBC 드라이버, Couchbase ODBC 및 JDBC 드라이버, MongoDB ODBC 드라이버, Presto JDBC 드라이버, Drill ODBC 드라이버를 개발했습니다.

댓글 남기기

카우치베이스 카펠라를 시작할 준비가 되셨나요?

구축 시작

개발자 포털에서 NoSQL을 살펴보고, 리소스를 찾아보고, 튜토리얼을 시작하세요.

카펠라 무료 사용

클릭 몇 번으로 Couchbase를 직접 체험해 보세요. Capella DBaaS는 가장 쉽고 빠르게 시작할 수 있는 방법입니다.

연락하기

카우치베이스 제품에 대해 자세히 알고 싶으신가요? 저희가 도와드리겠습니다.