관계형 데이터베이스에서 NoSQL로 데이터를 마이그레이션하려는 경우, 그렇다면 지금이 그 어느 때보다 좋은 시기입니다.

최근 출시된 Couchbase 7.0은 다음과 같습니다. 범위 및 컬렉션을 소개합니다. JSON 데이터. 무엇보다도 범위와 컬렉션을 사용하면 현재의 관계형 데이터 모델을 Couchbase 문서 데이터 모델로 더 간단하고 쉽게 마이그레이션할 수 있습니다. 결과적으로 기업은 Couchbase의 분산형 공유 아키텍처, 고가용성 및 수평적 확장성의 이점을 누릴 수 있습니다.

그리고 Couchbase의 오랜 고객 또는 사용자라면 - 범위 및 컬렉션은 데이터 관리 및 구성 측면에서 많은 것을 제공합니다..

하지만 NoSQL을 처음 사용하든 Couchbase 베테랑이든 상관없이 데이터베이스 쿼리는 -. N1QL 쿼리 언어 사용 - 새로운 범위 및 컬렉션 데이터 모델의 이점을 활용하세요. N1QL 쿼리를 간소화하려면 이전 Bucket 모델에서 새로운 Collections 모델로 Couchbase 데이터를 마이그레이션해야 합니다. 다행히도 마이그레이션은 5단계의 간단한 과정으로 이루어집니다.

범위 및 컬렉션에 대한 검토부터 시작하겠습니다. (또는 준비가 되었다면 마이그레이션 가이드로 바로 건너뛰세요..)

잠깐만요, 범위 및 컬렉션이란 무엇인가요?

범위는 관계형 데이터베이스(RDBMS)의 스키마에 해당합니다. Couchbase 컬렉션을 위한 논리적 컨테이너입니다. 모든 Couchbase 버킷에는 기본 Scope가 포함되어 있습니다. 이러한 기본 컨테이너를 직접 사용하거나 직접 정의할 수 있습니다.

컬렉션은 RDBMS의 테이블과 유사합니다. 모든 범위에는 기본 컬렉션이 있습니다. 컬렉션 can 를 사용하여 유사한 유형의 레코드(예: RDBMS 테이블)를 저장할 수 있습니다, 컬렉션에 저장할 수 있는 항목에는 스키마 제한이 없습니다.. 전적으로 귀하에게 달려 있습니다.

다음은 다양한 관계형 데이터베이스 개념이 다음과 같은 새로운 기능에 어떻게 매핑되는지 보여주는 그림입니다. 카우치베이스 서버 7.0:

보시다시피, 이제 관계형 데이터와 NoSQL 데이터 모델 에서 범위 및 컬렉션을 사용할 때 카우치베이스.

범위 및 컬렉션 아래의 시스템 키 공간

키 스페이스 설명
시스템:모든_범위 기본 범위와 같은 시스템 객체를 포함한 모든 범위의 목록입니다.
시스템:범위 시스템 범위를 제외한 사용 가능한 모든 범위
시스템:모든_컬렉션 기본 컬렉션과 같은 시스템 개체를 포함한 모든 컬렉션의 목록입니다.
시스템:컬렉션 시스템 컬렉션을 제외한 사용 가능한 모든 컬렉션

범위 및 컬렉션으로 N1QL 쿼리를 간소화하는 방법

범위 및 컬렉션의 주요 결과 중 하나는 이제 N1QL 쿼리 언어가 더 간단해졌다는 것입니다. 그 이유는 유형 필드는 더 이상 모든 문서에 필요하지 않습니다. 결과적으로 N1QL 문의 데이터 정의 언어(DDL)와 데이터 조작 언어(DML)를 모두 더 쉽게 작성하고 이해할 수 있습니다.

이제 더 간단하고 직관적인 N1QL 쿼리

카우치베이스 컬렉션은 관계형 테이블과 동등한 기능을 제공합니다. 이러한 유사성의 강점은 약점 없이 논리적 테이블과 관계형 테이블 사이의 간극을 메워줍니다. 물리적 데이터 모델 많은 RDBMS가 익숙해져 있습니다.

아래의 나란히 배치된 N1QL 쿼리를 아래에서 살펴보세요. 여행 샘플 데이터 세트.

버킷 모델 컬렉션 모델

 

 

왼쪽 점프에 있는 쿼리는 문서를 지정하는 방법을 보여줍니다. 유형 필드를 사용할 수 있습니다. 오른쪽의 쿼리가 더 간단한 이유는 문서 유형 는 Couchbase 7.0에 도입된 새로운 컬렉션 모델에서 더 이상 필요하지 않습니다.

N1QL 조인 조건도 더 간단해졌습니다.

N1QL의 조인도 더 쉬워졌습니다. 아래에서 이전 쿼리와 새 쿼리를 비교해 보세요.

버킷 모델 컬렉션 모델

 

 

새 컬렉션 모델에서는 JOIN 구문을 사용할 때 유형 필드를 사용하여 버킷 내의 특정 문서 테이블로 쿼리를 제한할 수 있습니다.

버킷 모델과의 하위 호환성을 유지하는 N1QL 쿼리

새로운 컬렉션 모델의 도입이 버킷의 종말을 의미하지는 않습니다. N1QL 쿼리 서비스는 이전과 마찬가지로 여전히 버킷 모델을 지원합니다.

유일한 변경 사항은 이제 버킷 데이터가 기본 컬렉션을 포함하는 기본 범위에 저장된다는 점입니다.

버킷 모델 컬렉션 모델

 
둘 중 하나를 사용할 수 있습니다:

 

또는

 

다음 사항에 유의하세요. 네임스페이스 접두사는 필수입니다. 값을 가져야 합니다. 기본값입니다: 기본 범위 또는 기본 컬렉션에 대한 모든 참조에 대해.

컬렉션을 사용한 N1QL 쿼리의 중요한 변경 사항

컬렉션 모델 사용, 쿼리 엔진은 컬렉션 이름의 전체 경로를 알고 있어야 합니다.. 이는 컬렉션 이름이 버킷 내에서 고유할 필요는 없고 해당 범위 내에서만 고유할 수 있기 때문입니다.

정규화된 컬렉션 이름의 형식은 다음과 같습니다:

형식:

예시:

그러나 상대 경로를 사용하여 컬렉션을 참조할 수 있습니다. 쿼리_컨텍스트

그리고 쿼리 워크벤치 UI 를 클릭하면 아래 스크린샷의 오른쪽 상단에 있는 드롭다운 상자에서 버킷과 범위를 선택하여 쿼리 컨텍스트를 설정할 수 있습니다.

쿼리 컨텍스트는 다음에서도 지원됩니다. 카우치베이스 SDK, REST API 그리고 cbq 쉘.

컬렉션으로 마이그레이션해야 하나요?

아니요, 원하지 않는 경우 컬렉션 모델로 마이그레이션할 필요는 없습니다.

마이그레이션하지 않기로 선택한 경우 그대로 유지되는 사항은 다음과 같습니다:

    • 데이터: 기존의 모든 데이터는 동일한 버킷에 남아 있습니다. Bucket 쿼리 구문을 사용하거나 새로운 기본 범위 및 컬렉션을 사용하여 문서를 참조할 수 있습니다.
    • 쿼리: DDL 및 DML에 대한 N1QL 쿼리 구문은 계속해서 Bucket 모델을 지원합니다.
    • 색인: 기존 인덱스는 버킷 수준으로 유지되며 이전과 마찬가지로 모든 쿼리에서 계속 사용할 수 있습니다.

Couchbase 7.0에서 버킷에서 컬렉션으로 마이그레이션하기

이전 버킷 모델에서 현재 Couchbase 7.0에서 제공되는 새로운 범위 및 컬렉션 모델로 마이그레이션할 준비가 되었다면 완료해야 하는 5가지 주요 단계는 다음과 같습니다.

이 마이그레이션 가이드에서는 다음과 같이 여행 샘플 버킷을 예제 데이터 집합으로 사용합니다.

1단계: 데이터 마이그레이션

문서에 이미 그룹을 식별하는 필드가 있는 경우, 해당 그룹을 사용하여 컬렉션을 만드세요.

의 경우 여행 샘플 데이터 집합을 사용하려면 각각의 유형 필드를 컬렉션 이름으로 사용합니다. 또한 인벤토리 데이터 집합의 모든 컬렉션에 대한 범위입니다.

위의 예제에서는 인벤토리 범위 지정 및 동일한 범위 내에 새 컬렉션을 추가했습니다. 여행 샘플 버킷.

2단계: 고유 문서 키 확인

문서 키는 고유해야 합니다.

문서가 모두 같은 버킷에 존재하므로 현재 기존 버킷에 대해 가지고 있는 문서 키는 이미 고유해야 합니다. 따라서 기존 문서 키를 새 컬렉션 문서 키로 사용하기에 적합해야 합니다.

3단계: 데이터 복사

아래 코드 샘플에서는 다음을 사용합니다. 선택 항목 삽입 을 클릭해 버킷의 데이터를 각 개별 컬렉션으로 복사합니다. 또한 기존의 META().id 컬렉션 키용 버킷 키입니다.

4단계: 색인 변환

새로운 컬렉션 모델에서 효과적으로 사용하려면 기존 버킷 인덱스를 수정해야 할 가능성이 높습니다.

아래의 세 가지 하위 섹션에서는 버킷 인덱스의 가장 일반적인 패턴을 나열하고 이를 컬렉션 기반 인덱스로 변환하는 단계를 보여 줍니다.

인덱스 변환: 술어 유형이 있는 버킷 인덱스

특정 버킷 인덱스가 있는 버킷의 경우 유형 필드 필터(즉, 부분 인덱스)를 사용하는 경우 해당 유형의 특정 컬렉션에 새 인덱스를 다시 만들면 됩니다.

아래 두 가지 예를 비교해 보세요:

버킷 모델 컬렉션 모델

 

 

인덱스 변환: 유형 술어가 없는 버킷 인덱스

문서에 존재할 수도 있고 존재하지 않을 수도 있는 필드에 대해 글로벌 보조 색인(GSI)을 만들 수 있습니다.

예를 들어 인덱스에는 icao 필드가 있지만 모든 문서에 icao 필드에 추가할 수 있습니다. 이러한 인덱스의 경우 인덱서는 문서에 icao 필드를 사용할 수 있습니다. 이러한 종류의 인덱스를 사용하는 경우 좀 더 구체적으로 해당 필드가 사용되는 컬렉션에 대한 인덱스를 만들어야 할 수 있습니다.

다시 한 번 아래 두 코드 샘플을 이전 모델과 새 모델을 대조해 보세요:

버킷 모델 컬렉션 모델

 

 

인덱스 변환: 공통 필드에 대한 버킷 인덱스

필드가 여러 문서 유형에 존재하는 경우에도 특정 유형을 지정하지 않고도 버킷 인덱스를 만들 수 있습니다.

필드 도시 은 공항, 랜드마크, 호텔 문서 등 여러 문서 유형으로 존재합니다. 버킷 모델에는 단 하나의 def_city 인덱스는 세 가지 문서 유형을 모두 포함할 수 있습니다. 그러나 새 컬렉션 모델에서는 이러한 유형의 인덱스에 대해 각 컬렉션에 대해 별도의 인덱스를 만들어야 합니다.

아래 코드 샘플에서 차이점을 확인할 수 있습니다:

버킷 모델 컬렉션 모델

 

 

5단계: 쿼리 전환

기본 데이터 모델이 공유 버킷에서 개별 컬렉션으로 바뀌었기 때문에 기존 N1QL 쿼리를 수정해야 합니다.

또한 쿼리를 수정한 후에는 해당 쿼리가 새로운 컬렉션 기반 인덱스를 사용하는지 다시 확인해야 합니다.

아래 코드 샘플에서 이전 쿼리와 업데이트된 쿼리를 확인할 수 있습니다:

버킷 모델 컬렉션 모델

 

유형 필터 없이 다시 작성된 쿼리입니다:

 

결론

이제 끝났습니다! 이전 버킷 모델에서 Couchbase 7.0의 새로운 범위 및 컬렉션 모델로 마이그레이션이 완료되었습니다.

새로운 컬렉션 데이터 모델이 더욱 강력하고 직관적이며, 그 결과 N1QL 쿼리가 간소화되고 능률화되었기를 바랍니다.

Couchbase Server 7.0 릴리스에 대해 자세히 알아보려면 다음을 참조하세요, 새로운 기능 확인 및/또는 7.0 릴리스 노트.

N1QL 쿼리를 직접 실행할 준비가 되셨나요?
?지금 Couchbase를 사용해 보세요

 

작성자

게시자 Binh Le

Binh Le는 Couchbase 쿼리 서비스의 수석 제품 관리자입니다. Couchbase에 입사하기 전에는 Oracle에서 근무하며 Sales Cloud Analytics 및 CRM OnDemand의 제품 관리 팀을 이끌었습니다. 영국 브라이튼 대학교에서 컴퓨터 공학 학사 학위를 받았습니다.

댓글 남기기