내가 배우는 내용 카우치베이스 는 합리적인 기본값을 제공하는 것을 목표로 하지만, 절충점을 만들 수 있는 옵션도 제공합니다. 이 블로그 게시물에서 집중적으로 다룰 절충안은 N1QL 쿼리에 대한 스캔 일관성입니다.

N1QL is SQL for JSON Documents

Couchbase 4.5는 다음과 같은 새로운 기능을 도입했습니다. 스캔 일관성 옵션: AtPlus. 기존 옵션과 합쳐져 총 세 가지가 됩니다:

  • NotBounded(기본값)

  • AtPlus(카우치베이스 서버 4.5의 새로운 기능)

  • 요청 플러스

이 블로그 게시물에서는 NotBounded와 RequestPlus를 검토하고 AtPlus를 소개합니다. 또한 세 가지를 모두 직접 사용해 볼 수 있는 코드 샘플도 제공할 것입니다.

제한 없음

이것이 기본 동작입니다.

"경계 없음" 스캔 일관성을 사용하는 N1QL 쿼리는 쿼리를 실행하고 결과를 반환하기 전에 인덱스 업데이트가 완료될 때까지 기다리지 않는다는 의미입니다. 버킷에 문서 A,B,C가 있다고 가정해 보겠습니다. 쿼리 시에는 A와 B만 색인됩니다. Not Bounded를 사용하면 문서 A와 B만 반환됩니다.

쿼리가 인덱싱을 기다리지 않으므로 성능에 가장 적합한 옵션입니다. 문서 C는 색인되면 표시됩니다. 오래 걸리지는 않지만, 예를 들어 방금 C를 만든 다음 바로 전체 문서 목록을 쿼리하는 경우 C가 표시되지 않을 수 있습니다. 예를 들어 여행 샘플 버킷:

이 코드를 실행할 때 예상되는 것은 다음과 같습니다:

  1. 초기 카운트: N

  2. 삽입 후 계산합니다: N (스틸)

  3. 대기 중

  4. 기다린 후 계산합니다: N+1

대기 시간을 5초로 설정했는데, 이는 아마도 지나친 설정일 수 있습니다. 저는 데모 목적으로 Thread.Sleep을 사용했지만 실제 앱에는 어색한 방식입니다. 그래서 RequestPlus를 소개합니다.

요청 플러스

이 스캔 일관성 옵션은 경계 없음과 거의 정반대의 기능을 제공합니다. 쿼리를 실행하기 전에 모든 문서 변경 및 인덱스 업데이트(쿼리가 실행될 때까지)가 처리될 때까지 기다립니다.

다음은 요청 플러스를 사용할 때의 간단한 이벤트 시퀀스 예시입니다.

  1. 문서 C가 생성됩니다.

  2. 모든 문서를 가져오기 위한 N1QL 쿼리가 실행됩니다(A,B,C 모두 버킷에 존재).

  3. 하나 이상의 문서를 색인해야 하므로 N1QL 쿼리가 보류됩니다(문서 C).

  4. 색인 프로세스가 완료되었습니다. 이제 문서 C가 색인되었습니다.

  5. N1QL 쿼리가 실행되어 A,B,C를 반환합니다.

이렇게 하면 성능이 저하되는 대신 쿼리 결과의 완전성을 확보할 수 있습니다. 경우에 따라서는 쿼리 결과가 완성될 때까지 모든 것 를 색인화할 수 있습니다. 그리고 AtPlus를 소개합니다.

AtPlus(Couchbase 4.5의 새로운 기능)

이 스캔 일관성 옵션은 요청 플러스와 바운딩되지 않음 사이의 중간 지점을 제공합니다. 이것은 또한 Couchbase 4.5의 새로운 스캔 일관성 옵션.

AtPlus를 사용하면 코드에서 조금 더 많은 작업을 수행해야 하지만 그 대가로 RequestPlus를 사용하는 것보다 더 나은 성능을 얻을 수 있습니다. 전체 색인(여러 문서일 수 있음)이 완료될 때까지 기다리는 대신, 쿼리를 실행하기 전에 지정한 문서가 색인될 때까지 기다립니다. 이를 "읽기 자체 쓰기" 또는 RYOW라고도 합니다.

이 예제에서 N1QL 쿼리는 새 문서가 색인될 때까지만 대기합니다. 다른 어떤 것도 기다리지 않습니다. 대용량 시스템에서는 이렇게 하면 성능 향상과 결과의 완전성 간에 좋은 균형을 이룰 수 있습니다.

이 게시물을 작성하는 시점에서는 다음과 같이 설정할 때 UseEnhancedDurability를 명시적으로 true로 설정해야 합니다. 클라이언트 구성:

결론

N1QL에는 속도와 완성도의 스펙트럼이 있습니다. Couchbase Server 4.5에서는 이제 세 가지 옵션이 제공됩니다. 원시 속도를 위한 NotBounded, 현재까지의 완성도를 위한 RequestPlus, 그리고 그 중간에 위치한 AtPlus가 있습니다.

댓글을 남겨 주세요, 트위터에서 나를 핑하기를 참조하거나 이메일(matthew.groves AT couchbase DOT com)로 문의하세요.

작성자

게시자 매튜 그로브스

Matthew D. Groves는 코딩을 좋아하는 사람입니다. C#, jQuery, PHP 등 무엇이든 풀 리퀘스트를 제출할 정도로 코딩을 좋아합니다. 90년대에 부모님의 피자 가게를 위해 QuickBASIC POS 앱을 만든 이후로 전문적으로 코딩을 해왔습니다. 현재 Couchbase의 선임 제품 마케팅 관리자로 일하고 있습니다. 여가 시간에는 가족과 함께 축구 경기를 관람하고 개발자 커뮤니티에 참여하며 시간을 보냅니다. 그는 .NET의 AOP, .NET의 프로 마이크로서비스, Pluralsight 저자, Microsoft MVP의 저자이기도 합니다.

댓글 남기기