카우치베이스 서버

문서 지향 데이터베이스 및 N1QL

Michael K. 아보아기e 애플리케이션 보안 엔지니어이자 웹 펜테스터로 일하고 있으며 Linux, Git, PHP, Java, RDMS 및 Nosql 데이터베이스 개발에 대한 지식이 풍부합니다. 데브옵스에도 관심이 많습니다.

Michael K. Aboagye

문서 지향 데이터베이스 및 N1QL

이 글에서는 문서 지향 데이터베이스가 관계형 데이터베이스 관리 시스템과 완전히 다른 이유와 빅데이터가 꾸준히 발전하는 세상에서 문서 지향 데이터베이스가 관계형 데이터베이스 관리 시스템보다 성능이 훨씬 뛰어난 이유에 대한 지식을 공유하겠습니다. 마지막으로 다음을 사용하여 문서 지향 데이터베이스를 만드는 방법을 보여 드리겠습니다. 카우치베이스 그리고 SQL 구문을 사용하여 JSON 문서에 대해 실행하는 방법을 설명합니다.

카우치베이스에 대한 간략한 소개

Couchbase는 MongoDB와 마찬가지로 NoSQL 제품 또는 데이터베이스 시스템입니다. 여기서 NoSQL이란 단순히 구조화된 쿼리 언어의 도움 없이 데이터가 문서에 저장되는 것을 의미합니다. Couchbase는 두 제품의 조합입니다: 멤캐시드와 카우치베이스.

카우치베이스는 멤캐시드와 카우치베이스의 장점을 결합하여 노드 클러스터에 대한 스케일아웃 성능을 제공합니다. Couchbase는 가용성, 확장성, 파티션 허용 오차에 더 중점을 두기 위해 최종 일관성을 타협한 여러 NoSQL 제품 중 하나입니다.

에릭 브루어의 CAP 정리에 따르면, MongoDB나 Couchbase와 같은 분산 시스템이 일관성, 가용성, 부분 허용 오차라는 세 가지 개념을 모두 충족하는 것은 불가능합니다. 따라서 대부분의 관계형 데이터베이스 관리 시스템에서 흔히 발생하는 문제인 노드 장애를 효과적으로 관리하기 위해 고급 복제 기능인 데이터센터 간 복제(XDCR)를 통해 최종 일관성을 해결하고, 복제를 통해 더 약한 형태의 일관성인 최종 일관성을 제공합니다. 또한, 대부분의 관계형 데이터베이스 관리 시스템의 일반적인 문제인 노드 장애를 처리하는 자체적인 방법이 있습니다. Couchbase는 논리적 파티션 또는 샤딩으로 알려진 vBucket을 구현합니다. vBucket의 각 데이터 항목은 복제를 통해 존재하는 모든 노드에 저장됩니다. 따라서 노드에 장애가 발생하면 Couchbase는 복제된 vBucket 중 하나를 자동으로 사용할 수 있도록 합니다.

카우치베이스 서버 노드에는 두 가지 주요 구성 요소가 있습니다. 데이터 관리자 그리고 클러스터 관리자.

클러스터 관리자 - 는 Couchbase 클러스터 환경을 담당합니다. 노드 간 데이터 재조정을 처리하고, 특정 데이터를 요청하는 클라이언트가 해당 데이터를 찾을 수 있는 위치를 알 수 있도록 클러스터 맵을 제공하며, 노드 모니터링, 통계 수집 및 로깅을 수행합니다.

데이터 관리자 - 는 단순히 문서에서 데이터 저장 및 검색을 관리합니다. 여기에는 메모리 캐시, 쿼리 엔진, 디스크 지속성 메커니즘이 포함되어 있습니다.

마지막으로, Couchbase는 데이터를 버킷으로 관리합니다. Couchbase의 버킷은 Microsoft SQL Server 또는 MySQL의 데이터베이스와 유사합니다. 버킷은 관련 리소스로 구성되지만 스키마는 다릅니다. 애플리케이션 기반 데이터베이스가 두 개 이상 있는 경우, 두 애플리케이션에서 들어오는 데이터를 별도로 관리하려면 두 개의 버킷이 필요합니다.

RDBMS와 문서 지향 데이터베이스의 차이점

관계형 데이터베이스 시스템은 개념과 구조(스키마) 측면에서 문서 지향 데이터베이스와는 완전히 다릅니다. 또한 관계형 데이터베이스는 코딩과 읽기가 그리 어렵지 않은 SQL 명령을 사용하여 구축됩니다.

관계형 데이터베이스에서 테이블은 외래 키를 통해 서로 연결됩니다. 외래 키는 SQL 데이터베이스 시스템의 개념으로, 외래 키는 테이블을 연결하는 데 사용되는 공통 필드로 구성됩니다. 또한 관계형 데이터베이스의 스키마는 문서 지향 데이터베이스에 비해 상당히 엄격합니다.

Aero Air에 항공편을 관리하기 위한 관계형 데이터베이스가 있다고 가정해 보겠습니다. 데이터베이스는 다음과 같은 세 개의 테이블로 구성됩니다: 항공편 스케줄, 항공편 정보, 항공편 경로입니다.

항공편 ID 항공편 이름 NumSeats 거리
001 보잉 Erv 5,000 1318km
002 에어버스 Erv 1,000 1578km
003 맥스 에르브 2,000 2967km

 

경로 코드 항공편 ID 에서 To
AeroAir001 001 글래스고 파리
AeroAir002 002 브뤼셀 벵갈루루
AeroAir003 003 함부르크 모스크바

 

스케줄 코드 항공편 ID Dep Time 도착 시간
AeroAir-010 001 1700 GMT 2000 GMT
AeroAir-012 002 1600 GMT 1300 GMT
AeroAir-013 003 1400 GMT 1400 GMT

문서 지향 데이터베이스에서 데이터베이스의 스키마는 데이터베이스의 모든 문서에서 다릅니다. 문서 지향 데이터베이스는 동적 스키마를 허용하므로 한 문서에 다른 문서와 다른 특정 필드나 키가 포함될 수 있습니다. 일반적인 문서 데이터베이스에서는 SQL 명령이 허용되지 않습니다. 그러나 "Nickel"이라고도 하는 N1QL을 사용하여 문서에 대해 SQL을 실행할 수 있습니다.

N1QL은 NoSQL과 SQL의 두 세계를 함께 사용할 수 있는 Couchbase용 특정 쿼리 언어입니다. N1QL을 사용하여 JSON 문서에 대해 실행할 수 있는데, 이 기능은 나중에 살펴보도록 하겠습니다.

이전 예제의 경우 에어로 에어 버킷의 이름을 "AeroAir"로 지정하여 저장된 데이터를 관리할 수 있는 Couchbase를 사용하여 동일한 작업을 수행할 수 있습니다. 버킷을 통해 AeroAir 버킷를 사용하여 Couchbase 개발자가 문서에서 데이터를 편집할 수 있습니다.

Couchbase로 문서 지향 데이터베이스 만들기

Couchbase로 문서 지향 데이터베이스를 만들려면 JSON 형식에 대한 기본 지식이 필요합니다.

먼저, 이미 Couchbase Server(엔터프라이즈 에디션 또는 커뮤니티 에디션)를 설치했다고 가정해 보겠습니다.

다음은 Couchbase Server에 대한 개요입니다:

Overview

카우치베이스에서 버킷을 만드는 방법

문서를 만들려면 먼저 저장된 데이터를 관리할 버킷을 만들어야 합니다. 원하는 이름을 입력할 수 있습니다. 저는 버킷의 이름을 다음과 같이 정했습니다. AeroAirImage 2

보시다시피 활성 버킷이 하나 있는데, 이것이 바로 AeroAir 버킷입니다.

Active bucket 1

이제 AeroAir에 여행자 또는 고객과 관련된 항공편 세부 정보로 구성된 간단한 문서가 있다고 가정해 보겠습니다.

DOCUMENT 1

문서 지향 데이터베이스는 SQL 계열에 속하는 관계형 데이터베이스와 완전히 다르며 매우 유연하다는 점을 기억하세요. 문서 지향 데이터베이스를 사용하면 다른 문서에 추가 필드를 포함할 수도 있고 제외할 수도 있습니다.

보잉 ERV에 대한 비행 문서를 만들어 보겠습니다. 맨 오른쪽 AeroAir에 다음과 같은 두 개의 버튼이 있는 것을 볼 수 있습니다. 문서 그리고 보기. 문서 버튼을 클릭하여 AeroAir 버킷에 새 비행 문서를 생성합니다.

미리 정의된 JSON 형식의 데이터를 자신의 데이터로 편집하여 새 문서를 만듭니다.

PREDINE

보시다시피, AeroAir 버킷에 Boeing ERV용 비행 문서를 만들었습니다.

new doc

또한 AeroAir 버킷에 4개의 문서를 만들었습니다. 각 문서는 비행 정보 데이터, 비행 일정 데이터 및 경로 정보를 나타냅니다. AeroAir 버킷에는 원하는 만큼의 문서를 계속 만들 수 있습니다.

new doc set

아래는 문서의 데이터가 어떻게 보이는지 보여주는 그림입니다. 마지막 요소의 쉼표가 닫는 태그 앞에 오지 않는 한 JSON 문서에서 후행 쉼표를 남겨두는 것은 유효한 것으로 간주됩니다.

json example

쉼표를 추가로 포함하면 JSON 오류 알림을 받게 됩니다. 아래 예시를 확인하세요:

JSON ERROR

앞서 설명한 것처럼 문서 지향 데이터베이스를 사용하면 일부 문서에는 없지만 다른 문서에는 있는 필드를 입력할 수 있습니다. 문서 지향 데이터베이스는 매우 유연한 스키마를 가지고 있기 때문에 데이터베이스 전체에 영향을 미치지 않습니다. 보잉 ERV 항공편과 보잉 FFH 항공편의 예를 확인해 보세요.

Beoing ERV example

Boeing ffh example

보시다시피 두 문서가 모두 AeroAir 버킷에 있지만 한 문서에는 다른 문서에 없는 필드가 있지만 데이터베이스나 버킷에는 영향을 미치지 않습니다.

Couchbase에서 문서의 데이터에 액세스하는 것은 행의 특정 값을 검색하기 위해 기본 키에 의존하는 관계형 데이터베이스와는 상당히 다릅니다. Couchbase에서는 문서 ID가 유효하고 문서가 존재하면 문서의 Document_ID를 사용해 버킷에 있는 특정 문서에 액세스할 수 있습니다. 관계형 데이터베이스와 마찬가지로 문서 ID는 고유해야 합니다.

따라서 AeroAir 데이터베이스 예제에서는 항공편 이름을 문서 ID로 사용했습니다.

DOCU id

이제 AeroAir 데이터로 문서를 만들었으니 이제 문서를 쿼리할 차례입니다.

Couchbase는 SQL 구문과 유사하지만 JSON 문서에서 작동할 수 있고 결과가 JSON 형식으로 반환되는 N1QL 쿼리 언어를 제공합니다.

MySQL 또는 일반적으로 SQL에 대한 기본 지식만 있으면 기초부터 고급 N1QL 명령어까지 충분히 익힐 수 있습니다. SQL과 마찬가지로 N1QL은 데이터 조작 언어와 데이터 정의 언어로 구성되어 있습니다.

기본적으로 SELECT, WHERE, FROM과 같은 절을 사용하여 AeroAir에서 문서를 쿼리할 것입니다. SQL과 마찬가지로 N1QL은 선택, FROM어디. 예를 들어 문서에서 값을 업데이트하려면 UPDATE 절을 사용하고 새 데이터를 포함하려면 INSERT 절을 사용할 수 있습니다.

SQL 구문을 잘 알고 있다면 JSON 문서에 대해 Couchbase N1QL을 사용하는 것은 문제가 되지 않습니다.

다음과 같은 방법에만 집중하겠습니다. 선택, FROM어디 다음 절을 사용하여 Couchbase N1QL을 사용하여 AeroAir에서 문서를 쿼리합니다.

선택 - 이 절을 사용하여 문서의 특정 필드를 선택할 수 있으며, SELECT 절이 문서의 모든 필드를 반환한 후 별표 기호를 포함할 수도 있습니다.

FROM - 이 절을 데이터 버킷에 사용하여 작업하거나 작업할 수 있습니다.

어디 - 이 절을 사용하여 검색된 문서가 갖추어야 하거나 충족해야 하는 조건을 표시할 수 있습니다.

카우치베이스는 웹 콘솔에서 쿼리를 실행할 수 있는 쿼리 워크벤치와 명령줄을 사용하는 것을 선호하는 경우 cbq 도구를 제공합니다.

쿼리 워크벤치 사용

이제 버킷에 몇 개의 문서가 생겼으니 한두 개의 문서에 대해 기본적인 쿼리를 해보겠습니다.

가장 먼저, 가장 먼저 쿼리 탭 옆에 있는 인덱스 탭 또는 그 사이 데이터 버킷 그리고 인덱스. 보시다시피 현재 시스템에서 관리 중인 버킷을 보여주는 버킷 분석이 있습니다. 또한 오른쪽에는 JSON 형식으로 반환된 결과가 어디에 표시되는지 보여주는 결과 패널이 있습니다.

queryaeroair

쿼리 실행을 더 흥미롭게 만들기 위해 문서에 특정 필드가 있습니다. 인터넷 Wi-Fi로 고정된 항공편에 관심이 있다고 가정해 보겠습니다. 버킷에 기본 인덱스를 만들지 않고 웹 콘솔에서 쿼리 실행하기 AeroAir 는 오류로 끝납니다.

create index

이제 웹 콘솔에서 동일한 쿼리를 실행해 보세요. 이번에는 쿼리가 성공적으로 실행된 것을 확인할 수 있습니다.

flightname

결과가 JSON 형식으로 반환되는 것을 확인할 수 있습니다. 인터넷 속도가 100kbps 이상인 항공편을 쿼리했습니다. 쿼리 조건을 만족하는 유일한 항공편으로 보잉 FFH 항공편이 반환되었습니다. 비교 연산자는 간단히 초당 100킬로바이트 이상입니다.

비교 연산자를 사용하지 않고도 특정 조건을 지정할 수 있습니다. 잭 카리스마가 수석 파일럿으로 지정된 항공편을 찾고 싶다고 가정해 보겠습니다..

jacvkcharism a

 

흥미롭게도 N1QL 는 SQL 구문을 사용하므로 JSON 문서에 대해 실행할 수 있습니다. 이것이 바로 N1QL이 포함된 Couchbase가 관계형 데이터베이스에 대한 흥미로운 대안이자 더 나은 대안인 이유입니다.

이 게시물은 카우치베이스 커뮤니티 글쓰기 프로그램의 일부입니다.

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

작성자

게시자 로라 챠코프스키

로라 챠코브스키는 카우치베이스의 Snr. 개발자 커뮤니티 매니저로 카우치베이스의 커뮤니티를 총괄하고 있습니다. 그녀는 월간 개발자 뉴스레터를 담당하고 있습니다.

댓글 남기기

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

구축 시작

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

카펠라 무료 사용

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

연락하기

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