SQL++/N1QL 쿼리

유연한 JSON 모델을 위한 유연한 쿼리 및 인덱싱.

JSON 피클에 있을 때는 N1QL을 사용하세요. - Confucius

JSON 데이터 모델의 경우, 대략적으로 컬렉션을 테이블로, JSON 문서를 비정규화된 행으로, 필드 이름을 열로 생각하라는 조언이 있습니다. 이 모든 것은 권장 사항을 엄격하게 준수하는 경우 Couchbase 및 MongoDB와 같은 데이터베이스에 적용됩니다. 사용자가 단순히 키-값 쌍 모델을 따르지 않는 데에는 여러 가지 이유가 있습니다. 항상 주요 이유는 다음과 같습니다. 

    1. JSON은 너무 장황한.
    2. 키가 동적인 맵/해시맵 데이터 구조를 변환하려고 합니다.
    3. 필드 이름이 일반적으로 타임스탬프로 인코딩된 시계열 데이터입니다.
    4. 사전 기반 인코딩
    5. 기존 문서 형식 및 표준은 재설계를 허용하지 않습니다.

데이터베이스와 쿼리 언어가 해당 상황을 처리하지 못하면 정교한 재설계를 거쳐야 합니다. 단순히 정보에 액세스하는 것뿐만 아니라 JSON에 대한 쿼리를 효율적으로 만들려면 어떻게 해야 하나요? 색인해야 할 필드의 이름조차 모르시나요? 다행히도 Couchbase N1QL에는 유연한 메타데이터를 처리할 수 있는 다양한 쿼리 및 인덱스 기능이 있습니다.

이러한 사용 사례를 고려해 보겠습니다.

사용 사례 1: 가치 혁신.

다음은 JSON 문서 샘플입니다.

JSON 데이터 모델은 간단히 키-값 쌍의 집합으로 설명됩니다. 각 키는 문자열이며, 해당 키의 계층 수준과 값이 스칼라, 객체 또는 배열일 수 있다는 점에서 고유합니다. 엄격한 정의는 다음과 같습니다. 여기. JSON은 또한 자체 설명이 가능하기 때문에 데이터베이스 문서 모델. 모든 고객이 고정된 전화번호나 자동차 또는 기타 유형의 속성을 보유할 필요는 없습니다. 

위의 동일한 정보를 정보 손실 없이 아래 JSON으로 재구성할 수 있지만 일부 암시적 스키마는 다음과 같습니다.

단순히 문서를 넣고 설정하는 것이라면 이 모든 것이 괜찮습니다. JSON의 구조가 무엇이든 상관없습니다. 단순히 앞뒤로 오가기만 하면 됩니다.

이제 이것이 쿼리에 어떤 영향을 미치는지 살펴보겠습니다.

Q1: 선택 * FROM 고객 어디 cxname = "Jane Smith";

새 JSON 모델에서는 다음과 같은 필드 이름이 없습니다. cxname 여기를 클릭하세요.

마법의 힘 object_pairs() 함수를 사용하시나요? 이 함수는 JSON {"key":"value"} 쌍을 이름-값 쌍의 배열로 변환합니다. 다음은 예제입니다.

OBJECT_NAMES() 함수는 키(여기서는 "Jane Smith")를 추출하여 값으로 반환한 다음 인덱싱할 수 있습니다. 이 함수는 하나의 값이 아니라 '키 이름'의 배열을 값으로 반환하므로 배열 인덱스를 만들어야 합니다.  쿼리 Q1과 Q2는 각각의 데이터 모델에 대해 동일한 작업을 수행합니다. 하지만 각 쿼리가 밀리초 단위로 실행되어야 합니다. 

1분기의 경우, cxname에 인덱스를 생성하기만 하면 됩니다.

만들기 INDEX ix_cxname 켜기 고객(cxname)

2분기의 경우  

만들기 INDEX ix_people 켜기 사람들(DISTINCT OBJECT_NAMES(self))

이 지수를 사용하면 2분기에는 이 지수를 사용하는 요금제가 제공됩니다.

 

사용 사례 2: 동적 키 이름.

이 사용 사례는 카우치베이스 포럼 게시물.

질문: 내에서 값을 인덱싱하는 가장 좋은 방법은 무엇일까요? 번역 동적으로? 즉, 모든 키를 인덱싱하는 일반 인덱스입니다. 번역 객체입니다.

단순히 항상 영어 문서를 쿼리해야 하는 경우, 다음과 같이 하세요. 다음이 포함된 모든 문서를 쿼리합니다. translations.en = "안녕하세요".

항상 영어로 된 번역을 찾고 있다면 transactions.en에 색인을 생성하면 됩니다.

키가 동적일 경우 데이터에 어떤 특정 언어가 포함될지, 어떤 언어가 쿼리될 수 있는지 알 수 없으므로 둘 다 동적으로 만들어야 합니다.

다음은 인덱스가 실제로 선택되고 술어가 인덱스 스캔으로 푸시되는지 확인하기 위한 설명입니다.

인덱스 정의가 평소보다 조금 더 복잡해 보이더라도 걱정하지 마세요. 인덱스 어드바이저가 도와드리겠습니다.

평가 중인 각 표현식 위에 표현식을 추가할 수도 있습니다.

 

더 많은 개체 함수

N1QL에는 다음과 같은 추가 기능이 있습니다. 객체 및 중첩된 데이터 함수를 사용하여 복잡한 데이터 모델에 도움을 받을 수 있습니다. 객체 함수의 전체 집합과 토큰 함수.

참조:

  1. 카우치배 N1QL 객체 함수 문서
  2. 카우치베이스 배열 인덱싱 
  3. 카우치베이스 색인 블로그
이 문서 공유하기
받은 편지함에서 카우치베이스 블로그 업데이트 받기
이 필드는 필수 입력 사항입니다.

작성자

게시자 케샤브 머시

케샤브 머시는 Couchbase R&D의 부사장입니다. 이전에는 MapR, IBM, Informix, Sybase에서 근무했으며 데이터베이스 설계 및 개발 분야에서 20년 이상의 경력을 쌓았습니다. IBM Informix에서 SQL 및 NoSQL R&D 팀을 이끌었습니다. Couchbase에서 두 번의 President's Club 상을, IBM에서 두 번의 우수 기술 업적상을 수상했습니다. 인도 마이소르 대학교에서 컴퓨터 과학 및 공학 학사 학위를 받았으며, 10개의 미국 특허를 보유하고 있고 3개의 미국 특허를 출원 중입니다.

댓글 남기기

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

구축 시작

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

카펠라 무료 사용

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

연락하기

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