최근 2017년 3월 개발자 빌드에서는 많은 버그 수정이 이루어졌을 뿐만 아니라 N1QL과 같은 핵심 기술에 대한 기능 향상도 이루어졌습니다. 예를 들어, 이제 문서 cas 및 만료 값과 같은 다양한 메타 정보에 대한 인덱스를 생성할 수 있습니다. 또 다른 예로는 배열 인덱스를 만들 때 구문이 간소화되었습니다.
이러한 개선 사항 중 몇 가지를 살펴보고 각자의 애플리케이션에서 이를 어떻게 활용할 수 있는지 알아보겠습니다.
Couchbase 5.0의 간소화된 배열 인덱싱
Couchbase Server 4.5에는 배열 인덱싱 기능이 추가되었습니다. 다음 샘플 문서를 예로 들어보겠습니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
{ "type": "사람", "이름": "닉", "성": "라보이", "소셜 미디어": [ { "type": "트위터", "url": "https://www.twitter.com/nraboy" }, { "유형": "웹사이트", "url": "https://www.thepolyglotdeveloper.com" } ] } |
새로운 배열 인덱스 구문
Couchbase 5.0 이전에는 다음에서 찾은 배열 요소를 인덱싱하려면 소셜 미디어
와 같은 인덱스를 작성해야 합니다:
1 2 3 |
인덱스 만들기 ON `기본값` ( `소셜 미디어`에서 미디어에 대해 배열 미디어를 구분합니다. 끝 ) WHERE 유형 = '사람'; |
위의 예에서 FOR
연산자가 배열 인덱싱에 필요했습니다. Couchbase Server 5.0에서는 훨씬 더 간소화된 구문이 있습니다. 다음을 통해 동일한 인덱스를 생성할 수 있습니다:
1 2 3 |
인덱스 만들기 ON `기본값` ( 구별 `소셜 미디어` ) WHERE 유형 = "사람"; |
인덱스가 작동하는지 확인하려면 다음 N1QL 쿼리를 실행하면 됩니다:
1 2 3 |
설명 선택 * 기본값에서 WHERE type = 'person' 그리고 `social-media`의 모든 미디어가 media.type = 'website'를 만족하는 경우 END; |
결과를 살펴볼 때 설명
를 사용하면 ism
인덱스를 생성합니다.
이제 간소화된 구문이 존재한다고 해서 배열 인덱싱 시 이전 구문을 사용할 수 없다는 의미는 아닙니다. 다음은 이전 구문이 여전히 유효한 이유를 보여주는 완벽한 예시입니다:
1 2 3 |
인덱스 만들기 ism_웹사이트 ON `default` ( DISTINCT ARRAY media FOR media IN `social-media` WHEN media.type = 'website' END ) WHERE 유형 = '사람'; |
다음 사항에 유의하십시오. 언제
연산자를 생성할 때 ism_웹사이트
색인을 생성합니다.
배열 인덱싱에 대한 자세한 내용은 다음을 참조하세요. 여기를 참조하세요. Couchbase에서 인덱스 생성에 대한 다른 유용한 문서도 함께 제공됩니다.
배열 인덱스에 대한 변수 일치 요건 완화
4.x 릴리스에서는 배열 인덱싱에 정확히 동일한 변수 이름을 사용해야 했습니다. 선택
쿼리에서 사용된 인덱스 생성
진술. 자세한 내용 보기 여기.
예를 들어, 위에서 본 이전 쿼리를 참조하면 변수 미디어
배열을 반복하는 데 사용되는 소셜 미디어
은 매우 중요합니다. 4.x의 배열 인덱싱에서는 정확한 변수 이름이 필수입니다. 미디어
를 사용하여 이전 선택
쿼리.
Couchbase 5.0 릴리스에서는 이 요구 사항이 완화되었으며, 다음 쿼리는 완벽하게 작동합니다:
1 2 3 4 |
설명 선택 * 기본값에서 사용 지수(ISM) WHERE type = 'person' AND `social-media`의 모든 m이 m.type = 'website'를 만족하면 끝납니다; |
인덱스 ism
변수 이름 사용 미디어
를 사용하지만 위의 쿼리는 m
. 그래도 위의 쿼리는 인덱스 ism
성공적으로 완료했습니다.
배열 인덱스에 대한 완화된 전체 배열 인덱스 키 요구 사항
또한 4.x 릴리스에서 지원되는 배열 인덱싱은 배열 인덱스 정의에서 전체 배열 속성을 필수 인덱스 키로 요구한다는 점을 기억하세요. 예를 들어 다음 쿼리를 다시 살펴봅시다:
1 2 3 |
설명 선택 * 기본값에서 WHERE type = 'person' 그리고 `social-media`의 모든 미디어가 media.type = 'website'를 만족하는 경우 END; |
위의 쿼리에 해당하는 커버된 배열 인덱스는 다음과 같습니다:
1 2 3 |
인덱스 만들기 ism_covered ON `기본값` ( DISTINCT ARRAY 미디어에 대한 미디어를 `소셜 미디어`에서 `소셜 미디어` END, `소셜 미디어`) WHERE 유형 = '사람'; |
두 번째 인덱스 키는 소셜 미디어
는 예를 들어 다음 쿼리를 처리하는 데 필수입니다:
1 2 3 |
미디어 선택 설명 기본값에서 여기서 유형 = '사람'이고 `소셜 미디어`의 모든 미디어가 미디어를 만족하는 경우 null 끝이 아닙니다; |
Couchbase 5.0에서는 동일한 쿼리가 인덱스에 의해 처리됩니다. ism
이 글의 맨 처음에 설명되어 있습니다.
이 기능은 배열 인덱스에 많은 기능을 제공한다는 점에 유의하는 것이 중요합니다. 이제 배열 인덱스의 각 항목이 저장 공간과 메모리를 덜 차지하기 때문입니다. 다음과 같은 이점이 있습니다:
- 더 큰 배열에 커버된 배열 인덱스 사용
- 커버된 배열 인덱스를 사용하여 쿼리의 효율성과 성능을 향상시킵니다.
문서 메타 정보 색인화
이제 색인화할 수 있는 새로운 메타 정보에 대해 차례로 살펴보겠습니다. 이전에는 인덱스를 만들 수 있는 메타().id
속성이 있지만 이제는 메타().cas
그리고 메타().만료
속성이 지원됩니다.
그렇다면 메타 속성을 키로 사용하는 인덱스는 어떻게 만들까요? 이미 알고 있는 것과 다르지 않습니다. 다음 커버링 인덱스를 예로 들어보겠습니다:
1 2 3 4 5 |
인덱스 생성 idx_cas ON `기본값` ( META().cas, META().expiration ) 인덱스 생성 idx_exp ON `기본값` ( 메타().만료 ) |
이제 IDX_CAS
그리고 IDX_EXP
인덱스에 대해 다음과 같은 작업을 수행할 수 있습니다:
1 2 3 4 5 6 7 |
SELECT META().id, META().cas 기본값에서 WHERE META().cas > 1489531586248179712; SELECT META().id, META().expiration 기본값에서 WHERE META().expiration > NOW_MILLIS(); |
그렇다면 왜 이러한 속성을 색인화할 수 있을까요? 오늘 만료된 모든 문서 또는 오늘 수정된 모든 문서에 대한 쿼리를 수행하려는 경우 어떻게 해야 할까요?
CAS 및 만료 속성에 대한 자세한 내용은 다음을 참조하세요. 여기. Couchbase에서 N1QL을 색인화하거나 사용하는 방법에 대한 자세한 내용은 카우치베이스 개발자 포털.
[...] 카우치베이스 서버 5.0 3월 개발자 빌드의 N1QL 기능 개선 [...]