모범 사례 및 튜토리얼

MongoDB 개발자 및 NoSQL 전문가를 위한 Couchbase 소개

6천 년 전, 수메르인들은 거래 처리를 위해 문자를 발명했습니다. 그레이 & 로이터

MongoDB는 널리 사용되는 문서 지향 JSON 데이터베이스입니다. 지난 십여 년 동안, 데이터베이스당 단일 잠금이라는 초라한 시작에서 스냅샷 격리 기능을 갖춘 최신 다중 문서 트랜잭션으로 성장해 왔습니다. MongoDB University는 수많은 개발자들이 MongoDB 데이터베이스로 개발할 수 있도록 교육해 왔습니다.

현재 많은 JSON 데이터베이스가 있습니다. NoSQL과 유연한 JSON 스키마를 배우기 위해 MongoDB로 쉽게 시작할 수 있지만, 많은 고객이 성능, 확장성 및 SQL을 위해 Couchbase를 선택합니다. 데이터베이스 평가와 발전이 진행됨에 따라 다른 JSON 데이터베이스에 대해서도 배워야 합니다. 저희는 MongoDB 전문가가 Couchbase를 쉽게 배울 수 있는 온라인 교육 과정을 준비 중입니다. 이를 게시할 때까지는 이 글을 읽어보셔야 합니다. :-) 

Microsoft SQL Server 및 Oracle과 같은 RDBMS를 알고 있다면 이 두 가지 과정을 통해 데이터베이스 지식을 Couchbase에 매핑하는 방법을 쉽게 배울 수 있습니다:

  1. CB116m - MSSQL 전문가를 위한 Couchbase 소개
  2. CB116o - 오라클 전문가를 위한 Couchbase 소개

요약

MongoDB와 Couchbase는 공통점이 많습니다. 둘 다 NoSQL입니다. 분산 데이터베이스둘 다 JSON 모델을 사용하며, 둘 다 선택-조인-프로젝트 작업을 지원하는 고급 쿼리 언어가 있고, 둘 다 보조 인덱스가 있으며, 둘 다 쿼리 계획을 자동으로 선택하는 옵티마이저가 있습니다. 둘 다 클러스터 내 및 클러스터 간 복제를 지원합니다.

예상대로 차이점이 있습니다. 일부는 다른 것보다 더 중요합니다. Couchbase는 처음부터 분산되도록 설계되었습니다. 예를 들어, 데이터 컨테이너 버킷은 샤딩할 필요 없이 항상 분산되어 있습니다. 새 노드를 추가하기만 하면 시스템이 자동으로 배포됩니다. 클러스터 내 복제는 새 서버가 필요하지 않으며, 복제본 수만 설정하면 모든 준비가 완료됩니다. 개발자 상호 작용 관점에서 볼 때 가장 큰 차이점은 쿼리 언어 자체에 있습니다. 독점 쿼리 언어 그리고 카우치베이스는 N1QL - JSON용 SQL. 몽고DB는 검색에도 B-Tree 기반 인덱스를 사용하며, 최근에 출시된 $검색베타 아파치 루씬을 사용하는 아틀라스 서비스의 경우, 카우치베이스에는 내장된 전체 텍스트 검색.

Couchbase의 차이점이 여러분의 삶을 더 편하게 만들어줄 수 있기를 바랍니다. 자세히 살펴보겠습니다.

상위 주제

  1. 리소스
  2. 아키텍처
  3. 데이터베이스 개체
  4. 데이터 유형
  5. 데이터 모델
  6. SDK
  7. 쿼리 언어
  8. 색인
  9. 옵티마이저
  10. 거래
  11. 분석

리소스

건축

노트북 버전: 

MongoDB:  올바른 매개변수와 함께 노트북에 Mongodb를 설치하고 사용하기만 하면 바로 실행할 수 있습니다. 전체 데이터베이스를 처리하는 단일 프로세스. 4.2에서는 트랜잭션을 실행하기 위해 몽고가 필요한 부분이 약간 변경되었습니다. Atlas 서비스에서만 제공되는 전체 텍스트 검색을 제외한 모든 MongoDB 기능(데이터, 색인, 쿼리)을 여기에서 사용할 수 있습니다.

 

 

 

 

카우치베이스: Couchbase는 다릅니다. 각 서비스(데이터, 인덱스, 쿼리, 검색, 분석, 이벤트)를 추상화했으며, 리소스를 최적화하기 위해 인스턴스에서 실행할 기능을 선택할 수 있는 옵션이 있습니다. 일반적인 설치에는 데이터, 인덱스, 쿼리가 있습니다. 검색, 이벤트, 분석은 노트북에서 실행되므로 사용 사례에 따라 설치하여 사용하세요.

 

 

 

클러스터 배포: 대부분의 NoSQL 데이터베이스와 마찬가지로, MongoDB와 Couchbase 모두 확장할 수 있습니다. MongoDB에서는 다음과 같이 확장할 수 있습니다. 샤딩 컬렉션을 여러 노드로 분할할 수 있습니다. 해시 또는 범위별로 샤드할 수 있습니다. 명시적 샤드가 없으면 각 컬렉션은 단일 샤드에 남아 있습니다. 구성 서버는 클러스터에 대한 메타데이터와 구성을 저장합니다. MongoDB는 균일하게 분산되어 있고 Couchbase는 다차원적으로 분산되어 있습니다. 몽고DB 프로세스(서비스)는 모든 샤드(노드)에서 데이터, 인덱스, 쿼리를 관리하는 반면, 몽고에서는 중간 결과에서 분산 쿼리 처리 및 병합을 수행하며 데이터나 인덱스는 관리하지 않습니다. 몽고스는 코디네이터 역할을 하고, 몽고db는 일벌 역할을 합니다. 

카우치베이스는 각 노드가 데이터와 모든 서비스(데이터, 인덱스, 쿼리, 분석, 이벤트)를 관리하는 균일한 배포 방식으로 배포할 수 있습니다. 각 서비스는 기존 데이터베이스의 한 계층입니다. 이러한 서비스는 느슨하게 결합되어 서로 다른 프로세스 공간에서 실행되고 네트워크를 통해 통신합니다. 따라서 단일 노드에 균일하게 배포하거나 클러스터에 다차원적으로 분산할 수 있습니다. 선택은 워크로드와 SLA에 따라 달라집니다. 데이터 자체는 버킷에 저장됩니다. 모든 버킷은 지정된 노드 간에 해시로 분할되며, 이는 자동으로 이루어지므로 별도의 지정이 필요하지 않습니다. 애플리케이션이 문서 키를 가지고 있으면 개입하는 노드 없이 데이터에 직접 작업할 수 있습니다. 이는 Couchbase의 고성능과 스케일아웃에 기여하는 주요 아키텍처 차이점 중 하나입니다. 또한 구성 서버가 없습니다. 메타데이터와 그 관리는 코어 데이터베이스에 내장되어 있습니다. 데이터 서비스는 Couchbase 클러스터 내에서 데이터, 클러스터 및 복제를 관리합니다. 여러 Couchbase 클러스터 간의 복제는 XDCR에서 관리합니다. 이 문서를 읽고 MongoDB와 Couchbase의 복제 메커니즘을 이해하세요:  NoSQL 문서 데이터베이스에서의 복제(Mongo DB vs Couchbase)

클러스터 배포 내부.

MongoDB의 클러스터 구성 요소 및 배포에 대한 설명 여기 그리고 저는 그것을 사전 지식으로 가정합니다. 반복하지 않겠습니다.

카우치베이스 배포는 키-값 데이터 서비스로 시작됩니다. 이것은 (일관된) 해시 분산 키-값 데이터 저장소입니다. 또한 클러스터 내 복제 기능이 내장되어 있어 별도의 복제 서버나 구성 서버가 필요하지 않습니다. 쿼리 서비스는 다음 실행을 오케스트레이션합니다. N1QL 쿼리를 사용합니다. 용도 GSI (글로벌 보조 인덱싱), FTS (전체 텍스트 검색) 색인을 필요에 따라 생성합니다. FTS는 전체 텍스트 인덱스를 관리하고 쿼리할 수 있습니다. 직접 또는 N1QL을 통해 쿼리 서비스이벤트 기능 를 사용하면 데이터 변경 시 자바스크립트 함수를 실행하여 자동으로 작업을 트리거할 수 있습니다. 카우치베이스 분석 엔진 는 MPP 데이터 및 쿼리 엔진입니다. 데이터의 복사본을 만들어 노드에 재배포하고 쿼리를 병렬로 실행하여 최상의 성능을 제공합니다. 이 모든 기능은 다음에서 제공되는 다양한 API를 통해 원활하게 사용할 수 있습니다. SDK 모든 인기 언어로 제공됩니다. 

데이터베이스 개체

MongoDB에는 사용자가 작업해야 하는 논리적 객체로 컬렉션과 데이터베이스가 있습니다. Couchbase는 전통적으로 버킷. 버킷은 데이터 컨테이너뿐만 아니라 리소스 관리(예: 메모리 사용량), 보안을 위해 작동했습니다. 6.5에서는 다음과 같은 개념을 도입했습니다. 수집 및 범위 를 개발자 미리 보기로 제공합니다. 이 bucket:scope:collection 계층 구조는 RDBMS의 database:schema:table과 유사합니다. 이를 통해 데이터베이스의 보안을 강화하고 멀티테넌트를 더 잘 활용할 수 있습니다. 6.5에서는 개발자 미리 보기 없이 각 버킷이 기본 범위와 컬렉션을 사용하므로 원활하게 전환할 수 있습니다.

RDBMS

MongoDB

카우치베이스

데이터베이스

데이터베이스

버킷

컬렉션

버킷

미래: 미래: 컬렉션

문서(BSON)

문서(표준 JSON)

칼럼

필드/속성

필드/속성

파티션(테이블/컬렉션/버킷)

기본적으로 파티션이 지정되지 않습니다.

해시 및 범위 파티셔닝(샤딩)은 수동으로 지원됩니다.

파티션(해시 자동)

개발자를 위한 참고 사항

MongoDB에서는 인스턴스(배포)로 시작하여 데이터베이스, 컬렉션 및 인덱스를 생성합니다.

Couchbase에서는 인스턴스로 시작하여 버킷과 인덱스를 생성합니다. 각 버킷에는 여러 유형의 문서가 있을 수 있으므로 각 문서에는 해당 유형을 인식할 수 있는 애플리케이션 지정 필드가 있어야 합니다. {"type": "parts"}. 각 버킷에는 문서 유형이 얼마든지 포함될 수 있으므로 너무 많은 버킷을 만들지 않아야 합니다. 또한 인덱스를 만들 때 고객, 부품, 주문 등 각 유형에 대한 인덱스를 만드는 데 관심이 있을 것입니다. 따라서 인덱스 생성에는 문서 유형에 대한 WHERE 절이 포함됩니다.

CREATE INDEX ix_customer_zip ON customer(zip) WHERE type = "customer";

SELECT * FROM customer WHERE zip = 94040 AND type = "customer"

각 몽고DB 문서에는 명시적으로 제공되거나 암시적으로 생성된 문서 ID 필드 _id가 포함되어 있습니다.

카우치베이스에서는 사용자가 각 문서에 대해 변경 불가능한 문서 키를 생성하여 삽입해야 합니다. N1QL을 통해 삽입하는 경우 UUID() 함수를 사용하여 키를 생성할 수 있습니다. 하지만 각 문서마다 별도의 문서 키의 규칙적인 구조.

데이터 유형

몽고DB의 데이터 모델은 다음과 같습니다. BSON 그리고 카우치베이스 데이터 모델은 JSON. 독점적인 BSON 유형에는 JSON이 아닌 일부 유형이 있습니다. JSON에는 문자열, 숫자, 부울(참/거짓), 배열, 객체 유형이 있습니다. BSON에는 문자열, 숫자, 부울, 배열, 객체, 이진, UTC 날짜 시간, 타임스탬프 및 기타 많은 사용자 지정 독점 확장자가 있으며, 가장 일반적인 차이점은 날짜 시간 및 타임스탬프입니다. Couchbase에서는 모든 시간 관련 데이터가 ISO 8601 형식의 문자열로 저장됩니다. Couchbase N1QL에는 시간을 추출, 변환 및 계산하는 다양한 함수가 있습니다. 전체 함수 세부 사항은 다음과 같습니다. 이 문서에서 사용 가능

데이터 유형

MongoDB

카우치베이스

JSON

숫자

BSON 번호

JSON 번호

{ "id": 5, "balance":2942.59 }

문자열

BSON 문자열

JSON 문자열

{ "name": "Joe","city": "Morrisville" }

부울

BSON 부울

JSON 부울

{ "premium": true, "pending": false}

날짜 시간

사용자 지정 데이터 형식

추출, 변환 및 산술 함수가 포함된 JSON ISO 8901 문자열

{ "soldate": “2017-10-12T13:47:41.068-07:00” }

MongoDB:

{ "soldate": ISODate(“2012-12-19T06:01:17.171Z”)}

공간 데이터

GeoJSON

가장 가까운 이웃 및 공간적 거리를 지원합니다.

"지오메트리": {"유형": "점", "좌표": [-104.99404, 39.75621]}

누락

지원되지 않음

누락

NULL

JSON Null

JSON null

{ "last_address": null }

개체

유연한 JSON 객체

유연한 JSON 객체

{ "주소": {"거리": "1, 메인 스트리트", "도시": Morrisville, "우편번호":"94824″}}

배열

유연한 JSON 배열

유연한 JSON 배열

{ "hobbies": ["테니스", "스키", "레고"]}

실종에 관한 모든 것

MISSING은 JSON 문서에 없는 필드 값 또는 리터럴입니다.

{"name":"joe"} 문서에서 "name" 필드를 제외한 모든 항목이 누락되었습니다. 필드 값을 MISSING으로 설정하여 필드를 사라지게 할 수도 있습니다. 기존 관계형 데이터베이스는 세 가지 가치 논리 를 참, 거짓 및 NULL과 함께 사용할 수 있습니다. MISSING이 추가되면 N1QL 4값 로직을 사용합니다.

MISSING에는 다음과 같은 표현식이 있습니다.  

누락됨

문서에 상태 필드가 없는 경우 true를 반환합니다.

상태가 누락된 고객으로부터;

누락되지 않음

문서에 상태 필드가 있는 경우 true를 반환합니다.

상태가 누락되지 않은 고객으로부터;

누락 및 무효

누락은 누락된 것으로 알려진 수량입니다.

NULL은 알려진 UNKNOWN입니다. IS NULL 또는 IS NOT NULL 표현식을 사용하여 MISSING과 유사한 null 값을 확인할 수 있습니다.

유효한 JSON: {"status": null}

누락된 값

모든 유형의 필드를 누락으로 설정하여 사라지게 만들면 됩니다.

업데이트 고객 세트 상태 = 누락됨 여기서 cxid = "xyz232"

데이터 모델링

관계 MongoDB 카우치베이스 
1:1
  • 임베디드 객체(암시적)
  • 문서 키 참조
  • 임베디드 객체(암시적)
  • 문서 키 참조
1:N
  • 임베디드 오브젝트 배열
  • 문서 키 참조
  • $lookup 연산자를 사용한 쿼리
  • 임베디드 오브젝트 배열
  • 문서 키 참조
  • INNER, LEFT OUTER, RIGHT OUTER, NEST, UNNEST 조인을 사용한 쿼리
N:M
  • 임베디드 오브젝트 배열
  • 참조가 있는 객체 배열
  • $lookup 연산자로 쿼리하기 어려움
  • 임베디드 오브젝트 배열
  • 참조가 있는 객체 배열
  • INNER, LEFT OUTER, RIGHT OUTER, NEST, UNNEST 조인을 사용한 쿼리

물리적 공간 관리

인덱스 유형 MongoDB 카우치베이스 
테이블 스토리지 파일 시스템 디렉토리 파일 시스템 디렉토리
인덱스 저장소 파일 시스템 디렉토리 파일 시스템 디렉토리
파티셔닝 - 데이터 범위 및 해시 샤딩이 지원됩니다. 해시 파티셔닝

1024개의 v버킷에 저장

파티셔닝 - 색인 모든 (하위) 인덱스가 각 몽갓 노드에 로컬이므로 컬렉션 샤딩 전략에 묶여 있습니다. 항상 버킷에서 분리된 상태

글로벌 인덱스(버킷/컬렉션과 다른 전략을 사용할 수 있음)

인덱스의 해시 파티셔닝을 지원합니다.

범위 파티셔닝, 부분 인덱싱은 부분 인덱스를 통해 수동으로 이루어집니다.

SDK

두 SDK에 대한 제 개인적인 지식은 제한적입니다. 두 제품 모두 동등한 API, 드라이버 및 커넥터가 있어야 합니다. 그렇지 않은 경우 알려주세요.

SDK MongoDB 카우치베이스 
Java 몽고DB 자바 드라이버 카우치베이스 자바 SDK, 

Simba 및 CDATA JDBC

C MongoDB C 드라이버

ODBC 드라이버

카우치베이스 C SDK,

Simba 및 CDATA ODBC

NET, LINQ Mongodb .NET 공급자. Couchbase .NET 공급자

LINQ 공급자

PHP, Python, Perl, Node.js 이 모든 언어에 대한 MongoDB SDK 이 모든 언어에 대한 Couchbase SDK
골랑 몽고DB 이동 SDK 카우치베이스 Go SDK

쿼리 언어

SELECT:   몽고에는 문서를 선택하기 위한 여러 API가 있습니다. find(), aggregate() 모두 간단한 SELECT 문으로 작업을 수행할 수 있습니다. 이 섹션의 뒷부분에서 aggregate()에 대해 살펴보겠습니다.

삽입

MongoDB에서 _id 제공은 선택 사항입니다. 값을 제공하지 않으면 Mongo가 필드 값을 생성하여 저장합니다. Couchbase에서는 문서 KEY 제공이 필수입니다.

업데이트

삭제

MERGEETL 프로세스 또는 일일 업데이트의 일부로 JSON 문서 집합에 대한 MERGE 작업이 필요한 경우가 많습니다. MERGE 문에는 복잡한 비즈니스 규칙 기반 술어가 있는 복잡한 데이터 소스가 포함될 수 있습니다. Couchbase는 동일한 의미로 표준 MERGE 작업을 제공합니다. MongoDB에서는 이 작업을 수행하기 위해 긴 프로그램을 작성해야 했지만, 설정된 일부 작업 규칙(예: 각 문서는 한 번만 업데이트되어야 함)은 애플리케이션에서 적용하기가 어려웠습니다. Couchbase에서는 간단하게 MERGE 문RDBMS와 마찬가지로.

설명:

JSON 데이터는 자체 설명이 가능하고 유연합니다. MongoDB 스키마 도우미는 다음을 통해 사용할 수 있습니다. 나침반 시각화 엔터프라이즈 에디션에서만 사용할 수 있습니다.

Couchbase에는 스키마 이해를 분석하기 위한 INFER가 있습니다. 쿼리 서비스와 분석 서비스 모두 스키마를 추론할 수 있습니다.

    1. 쿼리 서비스 INFER 명령
    2. 애널리틱스 서비스에는 다음과 같은 기능이 있습니다. array_infer_schema() 함수입니다.

다음은 INFER 출력 예제입니다.

설명

설명은 선택한 인덱스, 술어 및 기타 푸시다운, 조인 유형, 조인 순서 등 각 쿼리에 대한 쿼리 계획을 알려줍니다. MongoDB와 Couchbase는 모두 JSON 형식으로 설명을 생성하며, 이는 JSON 데이터베이스의 자연스러운 현상입니다.

Couchbase에서는 문 앞에 EXPLAIN을 붙이기만 하면 됩니다. N1QL의 모든 문을 설명할 수 있습니다.

쿼리 워크벤치에는 프로파일링과 함께 시각적 설명도 있습니다. (다른 쿼리)

그룹 기준

MongoDB의 "GROUP BY" 절은 aggregate() API의 일부입니다. 다음은 비교입니다.

SQL 및 N1QL과 달리, MongoDB 쿼리 API는 공식적인 정의 없이 많은 암시적 의미를 가지고 있습니다. N1QL을 사용하면 그룹화(b 및 c)와 집계(SUM(a))를 명시적으로 알 수 있습니다.

주문 기준

오프셋 및 제한

이는 일반적으로 오프셋 페이지 매김 방식에 사용되며, 몽고와 카우치베이스 모두 지원합니다. 하지만 키세트 페이지 매김 는 더 적은 리소스를 사용하고 더 나은 성능을 제공하는 우수한 접근 방식입니다. Mongo 사용자는 $skip 및 $limit 절을 사용하고 N1QL은 OFFSET 및 LIMIT를 사용합니다. MongoDB에서 수행된 페이지 매김 최적화에 대해 잘 모르겠습니다.

조인

조인은 일반적으로 NoSQL 데이터베이스, 특히 몽고DB에서 권장하지 않습니다. 그러나 현실 세계는 복잡하고 단일 컬렉션으로 정규화할 수 없습니다. MongoDB에는 조인을 위한 $lookup 연산자가 있으며, 한 컬렉션(잠재적으로 샤딩 가능)에서 다른 컬렉션(샤딩 불가능) 간에 중첩 루프를 수행합니다. Couchbase에서는 모든 버킷이 분할(샤딩)됩니다. 조인 작업(INNER JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN, 하위 쿼리와의 조인, NEST 및 UNNEST) MongoDB와 JSON 간의 동등한 연산을 보여주는 자세한 문서가 있습니다. 다음 기사를 읽어보시기 바랍니다. JSON 조인: Couchbase와 MongoDB 비교.

조인 유형 MongoDB 카우치베이스 
내부 가입  $lookup은 샤딩되지 않은 컬렉션에 대해서만 왼쪽 외부 조인이 제한됩니다. 애플리케이션은 이 작업을 수행한 다음 일치하는 문서가 없는 문서를 제거해야 합니다.   ON 절에는 문서 키 참조가 필요합니다. 동일 조인 전용
왼쪽 외부 조인 제한된 1TP4조회.  

배열에 조인할 수 없습니다. 조인하기 전에 배열을 수동으로 평평하게 해야 합니다.

ON 절에 배열 술어를 포함한 전체 왼쪽 외부 조인.
오른쪽 외부 조인 지원되지 않습니다. 애플리케이션에서 처리해야 합니다. 제한된 오른쪽 외부 조인 지원; 다른 조인을 사용하여 해결했습니다.
전체 외부 조인 지원되지 않습니다. 애플리케이션에서 처리해야 합니다. 다른 조인을 사용하여 해결했습니다.

부여 및 취소

인덱스

다음은 MongoDB와 Couchbase의 인덱스 기능에 대한 개요입니다. 둘 다 다양한 인덱스가 있습니다. Couchbase 인덱스 유형과 사용법은 이 문서에 잘 설명되어 있습니다: 올바른 인덱스 생성 및 올바른 성능 확보. 또한 Couchbase에는 다음과 같은 인덱스 어드바이저가 내장되어 있습니다. 개별 진술 뿐만 아니라 워크로드 또한 인덱스 어드바이저 서비스 매월 업데이트됩니다.

인덱스 유형 MongoDB 카우치베이스 
기본 색인 테이블 스캔, 기본 색인 기본 색인
보조 색인 보조 색인 보조 색인
종합 지수 종합 지수 종합 지수
기능 색인 

(표현식 색인)

사용 불가 기능 색인, 표현 색인
부분 색인 사용 불가 부분 색인
범위 분할 인덱스 분할된 범위, 간격, 목록, 참조, 해시, 하이브리드 분할 인덱스 부분 인덱스를 사용하여 분할된 수동 범위
배열 색인 1. 인덱스당 하나의 배열 키가 있는 B-Tree 기반 인덱스입니다.

2. 하나의 배열 키는 단순 또는 복합(다중 키) 키일 수 있습니다.

1. 인덱스당 하나의 배열 키가 있는 B-트리 기반 인덱스.

2. 배열 키를 복합적으로 사용할 수 있습니다.

3. SEARCH() 사용: 인덱스당 배열 키 수에 제한이 없는 역 트리 기반 인덱스입니다.

표현식의 배열 색인 사용 불가
개체

전체 텍스트 검색

몽고DB 제품에는 텍스트 검색 지원을 제공하고 있으며, 현재 Atlas 서비스에 루신을 통합하는 실험을 하고 있습니다. $검색베타 기능을 사용할 수 있습니다. 카우치베이스에는 전체 텍스트 검색 인덱싱 서비스를 노트북과 클러스터에서 실행할 수 있습니다. 다시 말씀드리지만, 노트북과 클러스터를 비교하는 자세한 문서가 있습니다. 기능별 텍스트 검색를 예제와 함께 살펴보세요. Couchbase 6.5는 다음을 통합합니다. N1QL을 사용한 FTS를 사용하여 쿼리 기능을 더욱 강화할 수 있습니다.

옵티마이저

쿼리 최적화 도구는 더 나은 최적화를 위해 쿼리를 다시 작성하고, 가장 적합한 인덱스를 선택하고, 인덱스 푸시다운, 조인 순서, 조인 유형을 결정하고, 엔진이 실행할 수 있는 계획을 생성합니다. 각 데이터베이스에는 엔진의 기능과 특성을 이해하는 전문화된 최적화 도구가 있습니다.

기능 MongoDB 카우치베이스 
옵티마이저 유형 쿼리 모양 기반 규칙 기반

비용 기반(6.5에서 미리 보기)

색인 선택 쿼리 모양 기반 규칙 기반

비용 기반(6.5에서 미리 보기)

쿼리 재작성 아니요 예, 제한적입니다.
주문하기 작성된 대로 집계 프레임워크를 사용하는 절차적 방법 사용자 지정(왼쪽에서 오른쪽으로)
조인 유형 중첩 루프 중첩 루프

해시 조인

힌트 예. 1TP4 힌트 예.

색인 사용, 해시 사용

설명 1TP4설명 설명
시각적 설명 예.
쿼리 프로파일링 yes

거래

NoSQL 데이터베이스는 SQL과 트랜잭션을 피하기 위해 개발되었습니다. 시간이 지남에 따라 각 데이터베이스는 하나 또는 다른 하나 또는 둘 모두를 추가하고 있습니다! MongoDB는 분산형 다중 문서 트랜잭션 스냅샷 격리 기능을 제공합니다. Couchbase는 분산된 다중 문서 트랜잭션 읽기 커밋 격리를 지원합니다. 다중 문서 트랜잭션은 아직 N1QL을 통해 지원되지 않습니다.

기능 MongoDB 카우치베이스 
색인 업데이트 인덱스가 동기식으로 유지 관리됩니다. 인덱스는 비동기적으로 유지 관리됩니다.
원자성 단일 문서

다중 문서(4.2 버전부터)

단일 문서

다중 문서(6.5 버전)

일관성 데이터와 인덱스는 동기식으로 업데이트됩니다. 기본적으로 데이터 및 인덱스에 대한 더티 읽기가 사용됩니다.  항상 일관된 데이터 액세스

인덱스에는 여러 일관성 수준(UNBOUNDED, AT_PLUS, REQUEST_PLUS)이 있습니다.

격리 기본값입니다: 더티 읽기

트랜잭션: 스냅샷 격리

CAS 검사를 통한 최적의 잠금

트랜잭션: 단조로운 원자 격리

내구성 쓰기 과반수 옵션으로 내구성이 뛰어납니다. 복제 후 확인을 통한 내구성

분석

카우치베이스 애널리틱스 은 ETL 없이도 JSON 데이터에 대한 인사이트를 얻을 수 있도록 설계된 NoSQL용 NoETL입니다. 키-값 데이터 저장소의 JSON 데이터는 분석 서비스로 복사되어 해당 저장소에 데이터를 배포합니다. 카우치베이스 쿼리 서비스인 데이터 서비스는 애플리케이션을 실행하기 위한 대량의 동시 작업 또는 쿼리를 처리하도록 설계되었습니다. 분석 서비스는 대량의 문서를 분석하여 비즈니스에 대한 인사이트를 제공하도록 설계되었습니다. 전통적인 용어로, 분석 서비스는 OLAP용으로 설계되었고 나머지는 OLTP용으로 설계되었습니다. MongoDB에는 이에 상응하는 분석 서비스가 없습니다. 따라서 기존 클러스터에 OLTP와 OLAP 워크로드 모두를 과부하시켜야 합니다. 곧 알게 되겠지만 공짜 점심은 없습니다. 분석 워크로드에 필요한 대규모 스캔은 OLTP 쿼리의 지연 시간에 영향을 미칩니다. 그런 다음 읽기 워크로드를 수행할 수 있는 데이터의 보조 및 3차 복사본을 위해 새 노드를 할당하기 시작합니다. 장애 조치 시에는 어떤 일이 발생하나요? 보조 노드가 인계받지만 다시 OLTP 워크로드에 영향을 미칩니다.

별도의 서비스가 필요한 두 번째 이유는 분석을 위한 쿼리 처리에는 OLTP 쿼리와는 다른 접근 방식이 필요하기 때문입니다. SQL의 공동 발명가인 Don Chamberlin의 책을 비롯하여 이 서비스에 대해 배울 수 있는 훌륭한 리소스가 있습니다.

  1. SQL 사용자를 위한 SQL++: 튜토리얼:  https://resources.couchbase.com/analytics/sql-book
  2. 카우치베이스 애널리틱스: 심층 분석 - 커넥트 실리콘 밸리 2018: https://www.youtube.com/watch?v=1dN11TUj58c
  3. SQL에서 NoSQL로
  4. NoSQL용 NoETL - Couchbase를 사용한 실시간 분석: https://www.youtube.com/watch?v=MIno71jTOUI
  5. N1QL: 쿼리할까요, 분석할까요?
  6. 2부: N1QL: 쿼리할까요, 분석할까요?

요약: 파트 2

데이터베이스는 매우 유용합니다. 미묘한 차이가 있고 끈적거리기도 합니다. 데이터베이스는 문명의 필수 요소입니다. 수메르인들은 세금, 토지, 금을 추적하고 정보를 찾기 위해 점토판으로 데이터베이스를 만들어 거래 처리를 위한 문자를 발명했습니다. 데이터베이스는 영원히 존재할 것입니다. SQL 데이터베이스든 NoSQL 데이터베이스든 각 데이터베이스는 서로 다릅니다. 모든 SQL 데이터베이스가 같은 것은 아닙니다. NoSQL 데이터베이스도 모두 같은 것은 아닙니다. 다양한 데이터베이스를 이해하면 조직의 유연성과 효율성이 향상됩니다.

리소스: 파트 2

  1. SQL 사용자를 위한 SQL++: 튜토리얼:  https://resources.couchbase.com/analytics/sql-book
  2. N1QL 실무 가이드
  3. Couchbase 6.5 블로그: https://www.couchbase.com/blog/tag/6.5/

 

 

 

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

작성자

게시자 케샤브 머시

케샤브 머시는 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는 가장 쉽고 빠르게 시작할 수 있는 방법입니다.

연락하기

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