카우치베이스 참여 데이터베이스 플랫폼

우후!!! 들어보셨나요? 참여 데이터베이스? "아니요"라고 확신합니다. 카우치베이스 발표 5.0 릴리스와 함께. 오늘날의 디지털 경제에서 비즈니스의 성공은 성공적인 디지털 혁신을 활용하여 탁월한 고객 참여와 경험을 제공할 수 있는 능력에 달려 있습니다. 이 모든 것의 DNA는 데이터에 있으며, 이를 위해서는 참여 시스템의 데이터 문제를 규모에 맞게, 쉽게, 그리고 근본적으로 해결할 수 있는 강력한 데이터베이스 플랫폼이 필요합니다. 이러한 문제는 매우 독특하기 때문에 해결책도 독특해야 합니다. 이 분야의 문제에 대한 탁월한 이해와 이러한 문제에 대한 우아하고 효율적인 솔루션을 통해 새로운 범주의 데이터베이스를 발견하게 되었습니다. 참여 데이터베이스. 이러한 데이터베이스는 데이터 패브릭 인프라에 있는 트랜잭션 데이터베이스와 분석 데이터베이스를 보완합니다. 다음 그림은 이들이 서로 어떻게 결합되어 있는지 보여줍니다.

N1QL은 애플리케이션이 참여 데이터베이스 및 JSON의 강력한 기능을 활용할 수 있도록 설계된 SQL 확장 쿼리 언어입니다. N1QL은 유연한 스키마와 계층적으로 구조화된 JSON 데이터를 처리하는 데 필요한 모든 정교함과 기능을 갖추고 있습니다. N1QL을 사용하여 간단한 선언적 쿼리를 작성하여 이러한 데이터를 자연스럽게 처리할 수 있습니다.

Couchbase 5.0은 고객 참여 중심 애플리케이션의 요구 사항을 충족하기 위해 N1QL에서 여러 가지 풍부한 쿼리 기능과 성능 최적화를 제공합니다. 많은 기능 및 성능 개선 사항에는 N1QL이 최적화를 완전히 활용할 수 있도록 GSI 인덱스의 해당 개선 사항도 포함되어 있습니다. 참조 Couchbase Server 5.0의 새로운 기능 에서 전체 목록과 자세한 내용을 확인하세요.

적응형 인덱스

적응형 인덱스는 문서의 전체 또는 지정된 필드 집합을 매우 적응적인 방식으로 색인할 수 있는 Couchbase의 특수한 유형의 인덱스입니다. 복합 GSI 인덱스와 달리 이러한 인덱스는 본질적으로 일반적입니다. 설명해 드리겠습니다. 적응형 인덱스는 일반적인 복합 인덱스에서 접두사 인덱스-키 순서와 같은 제한 없이 모든 인덱스-키 값을 효율적으로 조회할 수 있습니다. 따라서 여러 개의 복합 인덱스나 인덱스 키의 다양한 조합을 만들 필요 없이 임의의 필드에 WHERE 절 술어를 사용할 수 있는 효율적인 임시 검색 쿼리가 가능합니다.

예를 들어 사용자 프로필 사용 사례를 생각해 보세요. 이름, 성, 나이, 도시, 주소, 직업, 직위, 회사, 가족 등의 개인 속성을 기반으로 프로필을 검색해야 할 수 있습니다. 마찬가지로 호텔 객실의 경우 객실 시설, 편의시설, 가격, 위치, 특정 관심 지점과의 거리 등 다양한 기준에 따라 검색할 수 있습니다. 이러한 시나리오에서는 기존의 보조 복합 인덱스를 효과적으로 사용할 수 없습니다(아래 섹션 참조). 종합 지수와의 대조 를 참조하세요.) 적응형 인덱스는 이러한 임시 검색 쿼리를 효과적이고 효율적으로 실행할 수 있는 하나의 일반 인덱스를 생성하여 이 문제를 해결합니다.

예를 들어, 다음 그림(1)은 3개의 쿼리 Q1, Q2, Q3에 대해 3개의 서로 다른 인덱스 I1, I2, I3이 필요한 경우를 보여줍니다. 또한 인덱싱되지 않은 다른 필드에 대한 쿼리는 각각의 인덱스를 생성하지 않고는 불가능합니다. 또한, Q4와 같이 나이만 쿼리하는 경우 접두사 인덱스 키 ID도 필요하므로 인덱스 I2를 사용할 수 없습니다. 그림(2)는 하나의 적응형 인덱스가 인덱스 키 순서에 관계없이 모든 필드에 대한 쿼리를 지원하는 방법을 보여줍니다.

적응형 인덱스는 만병통치약이 아니라는 점에 유의하세요. 이러한 수치는 적응형 인덱스가 단순/복합 인덱스보다 낫다는 인상을 줄 수 있습니다. 전적으로 사실이 아닙니다. 쿼리(및 인덱스 키)를 미리 알고 있다면 항상 일반 보조 인덱스를 사용하는 것이 더 좋습니다. 왜냐하면 적응형 인덱스보다 더 빠르기 때문입니다. 적응형 인덱스는 여러/모든 인덱스 키와 해당 값을 색인하기 때문에 크기가 훨씬 클 수 있다는 점을 기억하세요. 따라서 단순한 보조 인덱스만큼 성능이 빠르지 않을 수 있습니다. 하지만 적응형 인덱스는 보조 인덱스가 해결하지 못하는 문제를 적은 오버헤드로 해결합니다.

인생은 트레이드 오프에 관한 것입니다!! 자세한 내용과 예시는 적응형 인덱스 문서.

강력한 하위 쿼리 표현식

N1QL은 강력한 쿼리 언어입니다. JSON용 SQL이며, 다음과 같은 JSON 데이터 모델링의 많은 미묘한 부분을 처리하는 데 필요한 모든 언어 확장 및 표현식을 갖추고 있습니다:

  • 유연한 스키마
  • 누락된 필드 및 데이터 값.
  • 다중 값 배열 값
  • 문서의 필드가 또 다른 완전한 형태의 JSON 객체가 될 수 있는 중첩된 데이터

이러한 종류의 데이터는 관계형 데이터베이스에는 존재하지 않으므로 SQL이 이를 처리할 필요가 없습니다. 그러나 설계상 N1QL은 JSON 데이터 작업의 모든 뉘앙스를 처리해야 합니다. 사실 이러한 복잡한 데이터 특성과 유연성, 확장성, 단순성 때문에 현대의 애플리케이션은 Couchbase와 같은 참여 데이터베이스 플랫폼으로 몰리고 있습니다.

배열 데이터 작업을 우아하게 간소화하는 기능 중 하나는 배열의 하위 쿼리 표현식에 대한 N1QL의 지원입니다. 이를 통해 배열을 문서의 키 공간으로 취급하고 배열 요소를 키 공간의 문서로 취급하는 배열에서 N1QL의 모든 기능을 사용할 수 있습니다. 깨닫지 못할 수도 있지만, 읽는 방식보다 훨씬 더 강력합니다 ;-)

예를 들어 고객 주문 데이터를 추적하는 것을 고려해 보세요:

여기서 배열 필드  제품[]  에는 주문한 모든 제품에 대한 주문 세부 정보가 포함되어 있습니다. 이제 주문의 총 가치를 찾는 쿼리를 작성해 보겠습니다. 쿼리는 주문의 각 요소를 통해 실행되어야 합니다.  제품[]  배열의 합을 계산하고  수량 * 가격. 이 기능을 사용하지 않는 경우(예: Couchbase 4.5 사용 시) 쿼리는 다음과 같이 표시됩니다:


이 쿼리 자체는 N1QL의 SELECT 문에 있는 멋진 UNNEST 절을 통해 가능합니다. 그러나 배열의 하위 쿼리 표현식을 사용하면 동일한 쿼리를 아래와 같이 재작성할 수 있습니다:

엄청나게 간단하고 직관적이지 않나요! 사실, 성능도 더 좋아집니다. 이것이 바로 N1QL이 애플리케이션 개발자에게 힘을 실어주는 방식이며, 참여 데이터베이스는 고객이 참여 시스템 애플리케이션에서 데이터 문제를 해결할 수 있게 해줍니다. 이 멋진 기능에 대해 더 많은 이야기를 해보겠습니다. 참조 문서 그리고 이 블로그.

참고로, 이 간단한 데이터를 RDBMS로 모델링하고 SQL 또는 다른 NoSql 데이터베이스로 동등한 쿼리를 작성한다고 상상해 보세요. 주말을 허비하고 싶지 않다면 재미있는 문제가 될 수 있을 것입니다!

외부 데이터 액세스 및 페더레이션 쿼리

데이터 폭증의 문제 중 하나는 고객 참여형 애플리케이션이 여러 내부 및 외부 소스에서 관련 데이터를 찾아 통합해야 한다는 점입니다. 데이터 중심 애플리케이션이 제공하는 외부 데이터 소스와 데이터를 연결하는 것이 점점 더 중요해지고 있습니다:

  • 다음과 같은 데이터 서비스 제공업체  Google 지오코딩 API또는 야후 API

  • 다음과 같은 데이터 제공업체 www.data.gov

  • Couchbase 전체 텍스트 검색, 기타 Couchbase 클러스터 또는 JSON 데이터를 제공할 수 있는 기타 데이터 소스와 같은 마이크로 서비스.

Couchbase Server 5.0에는 새로운 N1QL 함수 CURL()이 추가되어, N1QL 쿼리가 HTTP/REST를 통해 제공되는 외부 JSON 데이터 소스와 상호 작용하고 통합할 수 있습니다. 이를 통해 외부 데이터 소스에 대한 연합된 N1QL 쿼리가 가능합니다. 예를 들어

  • Google 지오코딩 API에 액세스하여 데이터베이스에 저장된 특정 위치에 대한 자세한 위치 정보를 얻을 수 있습니다.

  • Yahoo 금융 데이터 API를 사용하여 데이터베이스에 저장된 특정 주식 기호에 대한 자세한 정보를 가져올 수 있습니다.

마찬가지로, 전체 텍스트 검색을 위해 N1QL 쿼리에서 FTS 인덱스를 사용하거나, 외부 데이터에서 N1QL 표현식의 모든 기능을 사용하여 N1QL 쿼리에서 다른 Couchbase 클러스터 또는 기타 JSON 데이터 소스의 데이터에 액세스할 수 있습니다. 자세한 내용은 다음을 참조하세요. CURL 함수.

N1QL 문용 RBAC

역할 기반 액세스 제어(RBAC)는 엔터프라이즈 배포의 보안 관리에 필수적입니다. Couchbase Server 5.0은 미리 정의된 다양한 역할을 가진 사용자를 시스템에 추가할 수 있는 애플리케이션용 RBAC를 제공합니다. 쿼리 서비스는 다음과 같은 주요 기능으로 RBAC에 대한 지원을 추가합니다:

  • SELECT, UPDATE, INSERT와 같은 다양한 N1QL 문을 실행하고 시스템 키 공간에 액세스하기 위한 문 수준 역할이 추가되었습니다.

  • SQL 표준에 맞춰 새로운 N1QL 문 GRANT 및 REVOKE가 추가되었습니다.

  • 다양한 역할 할당 세부 정보에 액세스할 수 있는 새로운 시스템 키 공간 user_info, my_user_info 및 applicable_roles가 추가되었습니다.

자세한 정보 보기 여기.

N1QL 쿼리 모니터링 및 프로파일링

이 기능을 사용하면 세밀하고 상세한 쿼리 모니터링 및 프로파일링이 가능합니다. 이를 통해 다양한 쿼리 단계, 쿼리 처리에 관련된 쿼리 연산자, 해당 실행 타이밍 및 특성(예: 중간 결과)에 대한 자세한 정보를 제공합니다. 또한 모든 모니터링 정보는 system:active_requests 및 system:completed_requests와 같은 다양한 시스템 키 공간에 캡처됩니다. 이는 문제가 있는 쿼리와 성능 문제를 진단하는 데 도움이 됩니다. 다음 그림은 쿼리 작업 벤치의 시각적 계획과 쿼리 프로필 세부 정보를 보여줍니다.

Screen Shot 2017-02-19 at 1.49.18 AM.png

모니터링 기능을 활성화, 비활성화 및 제어하기 위한 새로운 쿼리 매개변수가 제공되며, 쿼리 엔진 또는 개별 쿼리에 대해 구성할 수 있습니다. 참조 N1QL 쿼리 모니터링 를 참조하세요.

N1QL 성능 개선

Couchbase Server 5.0에서는 N1QL과 글로벌 보조 인덱스를 함께 사용하면 많은 성능 최적화가 가능합니다.

  • 복잡한 술어 푸시다운: 복잡한 AND/또는 술어를 효율적이고 정확하게 푸시다운하여 색인화할 수 있도록 지원합니다. 이 기능이 도움이 됩니다:

    • 색인 키 접두사 앞에 범위 스캔이 있는 특정 쿼리에서 색인기의 잘못된 결과를 방지합니다.

    • OR 술어의 다양한 조건 등에 대해 여러 인덱스를 효율적으로 사용할 수 있습니다.

  • 인덱스 투영: 버전 5.0에서 N1QL은 인덱스에서 필요한 정보만 요청하여 불필요한 처리를 피할 수 있도록 지원을 추가했습니다.

  • 개별 인덱스 키에 대해 ASC/DESC가 지정된 인덱스를 생성하고 정렬된 ORDER BY 절이 있는 쿼리에 대해 인덱스 순서를 활용하는 기능이 추가되었습니다.

  • 오프셋, 맥스(), 미니(), 디스틴트, 카운트(디스틴트 필드) 등의 연산자는 인덱서 아래로 푸시됩니다.

자세한 내용은 다음을 참조하세요. 인덱스 푸시다운 최적화.

요약

매우 흥미진진하고 압도적인 일이라고 확신합니다. 참여 데이터베이스에 대한 비전을 공유하고 N1QL을 혁신하여 여러분의 준비를 돕게 되어 매우 기쁩니다! 이 글에서는 Couchbase Server 5.0 참여 데이터베이스 플랫폼의 다양한 N1QL 기능 및 성능 향상에 대해 이야기했습니다. 의견이나 질문이 있으시면 언제든지 남겨 주세요. 건배!!

작성자

게시자 프라사드 바라쿠르, 수석 제품 관리자, Couchbase

프라사드 바라쿠르는 카우치베이스의 수석 제품 관리자입니다. Prasad는 데이터베이스(SQL, noSQL, 빅 데이터) 및 분산 시스템 분야의 제품 및 엔지니어링 리더입니다.

댓글 남기기