SQL++/N1QL 쿼리

이제 N1QL 쿼리 언어가 분산 ACID 트랜잭션을 지원합니다.

이제 다중 문서, 분산형 ACID 트랜잭션을 사용할 수 있습니다. 를 N1QL 쿼리 언어의 일부로 Couchbase에 추가했습니다.

카우치베이스 소개 v6.5의 ACID 트랜잭션 릴리스에 추가되었으며, 이제 이 기능이 Couchbase N1QL 쿼리 서비스로 확장되었습니다. 7.0 릴리스.

카우치베이스 는 수평적 확장이 가능하고 고가용성을 지원하는 분산 데이터베이스 플랫폼에 대한 다중 문서 ACID 트랜잭션을 지원합니다. 이 기능은 애플리케이션 개발자가 Couchbase SDK 및 API를 통해 사용할 수 있습니다. API를 통해 개발자는 트랜잭션 내에서 데이터베이스 문서를 안전하게 수정한 다음 애플리케이션 로직에 따라 트랜잭션의 모든 변경 사항을 커밋하거나 롤백할 수 있습니다.

카우치베이스 트랜잭션은 노드, 문서, 버킷, 범위 및 컬렉션 등 모든 곳에서 작동합니다. 트랜잭션 프로세스는 커밋된 데이터만 다른 프로세스에서 읽을 수 있도록 보장하며 잠금 및 충돌 감지를 자동으로 처리합니다.

7.0 릴리스에서는 분산 트랜잭션 지원이 다음과 같이 확장되었습니다. N1QL 쿼리 언어.

관계형 데이터베이스(RDBMS) 사용자의 경우, 이 N1QL 개선 사항은 다음과 같은 익숙한 트랜잭션 구성을 제공합니다. 거래 시작, 세이브포인트, 롤백 그리고 커밋. N1QL 트랜잭션은 다른 RDBMS 구현과 마찬가지로 모든 데이터 조작 언어(DML)도 지원합니다.

N1QL 트랜잭션의 이점

N1QL 쿼리 언어에 분산 트랜잭션 지원을 도입함으로써 얻을 수 있는 주요 이점은 다음과 같습니다:

    • 임시 데이터 조작을 위한 보다 안전한 환경으로, 개발자와 DBA가 데이터를 수정하고 데이터베이스에 변경 사항을 커밋하기 전에 그 정확성을 확인할 수 있습니다.
    • 개발자가 애플리케이션 코드에 연산을 포함하기 전에 로직을 검증할 수 있는 프로세스를 개념화하는 간단한 방법입니다.
    • N1QL 데이터 조작 언어의 모든 기능(선택/삽입/업데이트/삭제/병합)을 통해 한 번에 여러 문서에 대한 작업을 수행할 수 있습니다.
    • 애플리케이션이 동일한 트랜잭션에 데이터 서비스와 N1QL 쿼리 API를 모두 포함할 수 있도록 Couchbase SDK와의 완벽한 호환성을 제공합니다.

N1QL 트랜잭션을 사용하면 위의 모든 작업을 수행할 수 있습니다. 동시에 N1QL 트랜잭션은 트랜잭션이 완료될 때까지 또는 예기치 않은 시스템 장애가 발생할 때까지 불완전한 변경 사항을 격리하고 데이터베이스에 커밋하지 않음으로써 데이터 무결성을 유지합니다.

N1QL을 사용한 카우치베이스 ACID 트랜잭션

N1QL 트랜잭션 기능은 현재 Couchbase ACID 트랜잭션 프레임워크 위에 구축되었으므로 동일한 기능을 제공합니다. 완전한 ACID 규정 준수 보장.

원자성 여러 샤드 또는 노드에서 여러 문서의 업데이트를 지원하기 위한 전부 아니면 전무 시맨틱이 이제 명령문 수준의 원자성까지 확장되었습니다. 예를 들어 업데이트 자격을 갖춘 100개의 문서는 모든 문서 업데이트에 성공하거나 롤백해야 합니다. 부분 업데이트는 일어나지 않습니다.
일관성 카우치베이스 트랜잭션 프레임워크는 데이터 서비스에 대해 최고 수준의 일관성을 제공합니다. 즉, 복제본은 트랜잭션 커밋과 즉시 일치합니다.

비트랜잭션 N1QL의 경우 스캔 일관성 옵션은 이전과 동일하게 유지되며 다음을 지원합니다. 무제한, at_plus요청_플러스. N1QL 트랜잭션의 경우 스캔 일관성은 기본값이 요청_플러스 모든 트랜잭션 읽기에 대해.

격리 N1QL 격리 지원 읽기 커밋 읽은 내용이 트랜잭션에 있는지 여부와 관계없이 모든 독자에게 제공됩니다.
내구성 카우치베이스 트랜잭션 프레임워크는 세 가지 수준의 내구성을 모두 지원하지만, 비 SDK(WebUI/cbq/RestAPI)를 통한 N1QL 트랜잭션은 기본적으로 "대다수"로 설정됩니다.

자세한 내용은 Couchbase 설명서를 참조하세요. 내구성에 대한 자세한 정보.

수평적 확장성 및 N1QL 트랜잭션

Couchbase의 모든 서비스와 마찬가지로 수평적 확장성은 핵심 요구 사항입니다.

N1QL 트랜잭션에 대한 모든 처리는 쿼리 서비스에서 시작되며, 수평적 확장성은 다음을 통해 이루어집니다:

중앙 거래 관리가 없습니다: 모든 트랜잭션 작업과 오버헤드는 쿼리 서비스 내에서 수행되고 유지 관리됩니다. 사실상 트랜잭션 관리는 여러 쿼리 서비스에 분산되어 있으므로 중앙 장애 지점이 없습니다.

거래량 및 규모: 현재 쿼리 서비스에서 사용할 수 있는 리소스에 의해서만 제한되는 트랜잭션의 크기는 트랜잭션의 복잡성에 따라 확장됩니다. 따라서 쿼리 서비스 노드를 추가하여 트랜잭션을 빠르게 확장할 수 있습니다.

A Couchbase cluster with N1QL transactions

위의 다이어그램은 다음 사항을 강조합니다:

    • 비트랜잭션 N1QL 쿼리는 다음에서 제공됩니다. any 의 쿼리 서비스 중 하나를 선택합니다. SDK에서 선택한 쿼리 서비스는 다음과 같이 결정됩니다. ns_server 일반적으로 라운드 로빈 방식을 사용하여 순환합니다.
    • 카우치베이스 트랜잭션 라이브러리가 제공하는 트랜잭션 컨텍스트에서 실행되는 N1QL 트랜잭션의 경우, 모든 후속 DML 작업( txid)는 트랜잭션이 커밋되거나 롤백될 때까지 동일한 쿼리 노드로 연결됩니다. 이는 다음에서 사용할 수 있습니다. Java SDK 1.1.3
    • SDK-쿼리 노드 선호도는 SDK에 의해 자동으로 관리됩니다.
    • 카우치베이스 트랜잭션은 Java 카우치베이스 트랜잭션 라이브러리를 통해 키-값 및 쿼리 서비스 DML 작업을 모두 지원합니다. 또한 트랜잭션에 따른 커밋을 준수하는 스캔 일관성 요청을 통해 전체 텍스트 검색 및 분석과 같은 다른 서비스에 액세스할 수도 있습니다.

N1QL 트랜잭션을 사용할 수 있는 곳

N1QL 트랜잭션 기능은 N1QL 쿼리를 사용하는 모든 곳에서 지원됩니다.

주요 요구 사항은 다음과 같습니다. txid 값에서 반환되는 거래 시작 명령은 트랜잭션의 일부인 경우 이후의 모든 N1QL DML에 사용됩니다. 마지막 커밋 또는 롤백.

쿼리 워크벤치 및 cbq 셸을 사용하는 경우에는 txid 는 투명하게 관리됩니다. 명시적인 조치를 취할 필요가 없습니다.

CBQ 쉘

다음은 cbq 셸을 사용하는 N1QL 트랜잭션의 예입니다:

N1QL REST API

트랜잭션이 시작되면, cbq 셸은 특정 쿼리 서비스와의 세션을 설정하고 이후의 모든 N1QL DML이 txid (반환 시 트랜잭션)를 동일한 쿼리 서비스에 추가합니다.

REST API를 사용하려면 다음과 같은 값을 제공해야 합니다. txid 를 후속 DML과 함께 사용합니다. 예를 들어

트랜잭션 암시적 설정

N1QL 트랜잭션의 일부로 트랜잭션 암시적 설정도 있습니다: tximplicit.

간단히 말해, 이 옵션을 true로 설정하면 이후의 모든 N1QL DML이 마치 거래 시작트랜잭션 커밋. 이 설정은 N1QL 트랜잭션 기능의 일부인 모든 N1QL 개선 사항을 사용할 수 있음을 의미합니다.

내구성

비 트랜잭션 N1QL은 현재 내구성에 대한 설정을 지원하지 않습니다. N1QL을 통한 모든 돌연변이 사용 내구성=없음. 와 tximplicit 설정하면 N1QL DML은 내구성을 얻습니다.

시사점: 이 tximplicit 설정을 사용하면 간접적으로 내구성을 설정할 수 있지만 추가 지연 시간을 예상해야 합니다.

스캔 일관성

비트랜잭션 N1QL 스캔 일관성은 SDK에서 애플리케이션에 필요한 모든 수준으로 설정됩니다. (자세한 내용은 성능 및 일관성에 대한 문서를 참조하세요..)

하지만 tximplicit 설정된 경우, DML은 다음과 같이 스캔 일관성을 유지하며 실행됩니다. 요청_플러스.

시사점: 이 설정을 사용하면 쿼리 지연 시간이 증가할 수 있습니다. 이는 DML이 모든 종속 인덱스가 쿼리와 동일한 타임스탬프로 업데이트되도록 해야 하기 때문입니다.

리소스 사용량

쿼리 서비스는 특히 집계 및 정렬 작업의 경우 쿼리를 처리하기 위해 메모리 리소스를 필요로 합니다.

비트랜잭션 DML의 경우, 모든 변경 사항은 즉시 적용됩니다. 트랜잭션 DML의 경우, 트랜잭션 내의 모든 변경 사항은 커밋 시간까지 쿼리 서비스에 로컬로 유지됩니다. 따라서 트랜잭션 기간 동안 메모리 리소스 사용량이 훨씬 더 높습니다.

시사점: N1QL 트랜잭션의 돌연변이는 메모리 사용량을 증가시킵니다.

N1QL 트랜잭션 사용 시기(및 사용 금지 시기)에 대한 가이드라인

N1QL 트랜잭션이 도입됨에 따라 애플리케이션에서 이 새로운 기능을 사용할 때(그리고 사용하지 않을 때)에 대한 몇 가지 지침을 염두에 두는 것이 중요합니다.

일반적인 경험 법칙은 다음과 같습니다. 필요한 경우에만 N1QL 트랜잭션을 사용하세요.. 카우치베이스 쿼리 서비스는 높은 처리량과 짧은 지연 시간을 제공하도록 설계되었으며, 이 두 가지 모두 트랜잭션에 영향을 받습니다. 이는 내구성, 스캔 일관성 및 리소스 사용 측면에서 후속 요구 사항과 비용이 발생하기 때문입니다.

또한 다음을 수행해야 합니다. 트랜잭션 크기를 작게 유지 돌연변이의 영향을 받는 문서 및 작업의 수 측면에서 볼 때 N1QL 트랜잭션을 사용하는 것이 좋습니다. 마지막으로 대용량 돌연변이 사용 사례에는 N1QL 트랜잭션을 사용하지 않는 것이 좋습니다.

N1QL 트랜잭션에 대한 추가 리소스

N1QL 트랜잭션을 직접 사용해 볼 준비가 되셨나요?

지금 Couchbase Server 7.0 다운로드하기

 
 
 

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

작성자

게시자 Binh Le

Binh Le는 Couchbase 쿼리 서비스의 수석 제품 관리자입니다. Couchbase에 입사하기 전에는 Oracle에서 근무하며 Sales Cloud Analytics 및 CRM OnDemand의 제품 관리 팀을 이끌었습니다. 영국 브라이튼 대학교에서 컴퓨터 공학 학사 학위를 받았습니다.

댓글 남기기

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

구축 시작

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

카펠라 무료 사용

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

연락하기

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