준비하기....

N1QL 사용의 가장 인상적인 측면 중 하나는 준비된 문을 사용할 수 있다는 점입니다. 준비된 문이란 무엇인가요? 왜 사용하나요? 무엇이 큰 문제일까요? 모든 카우치베이스 설치에 번들로 제공되는 여행 샘플 버킷 및 데이터 집합의 다음 예제를 살펴보겠습니다: 계정을 만들고, 로그인하고, 항공편을 검색하는 사용자를 생각해 봅시다. 시스템을 사용한 적은 있지만 항공편을 예약한 적이 없는 사용자를 빠르게 식별할 수 있는 방법이 필요할 수 있습니다. 이는 일반적인 광고 타겟팅 사용 사례이며 터치포인트의 기회를 창출합니다. 단순화된 쿼리는 다음과 같습니다:

SELECT name FROM 여행 샘플 WHERE _type='User' AND ARRAY_LENGTH(flights)=0;

애플리케이션에서 이 쿼리를 실행하는 데 필요한 단계를 살펴보겠습니다. 이 예제에서는 nodejs를 사용하며 2.0 API를 사용하는 모든 SDK는 동일한 방식으로 작동합니다.

  • 먼저 문자열에서 N1QL 쿼리를 만들어야 합니다.
  • 둘째, 요청을 직렬화하여 HTTP REST를 사용하여 카우치베이스 서버 노드의 CBQ-ENGINE으로 전송합니다.
  • 셋째, CBQ-ENGINE은 쿼리를 구문 분석해야 합니다.
  • 넷째, CBQ-ENGINE의 옵티마이저는 실행 계획을 결정해야 합니다.
  • 다섯째, CBQ-ENGINE은 실행 계획을 작성해야 합니다.
  • 여섯째, CBQ-ENGINE이 계획을 실행합니다.

특히 여러 번 반복되는 쿼리의 경우 간단한 쿼리를 실행하는 데 상당한 양의 작업이 필요합니다. 애플리케이션에서 동일한 쿼리를 한 시간 동안 수천 번 실행하는 경우도 있습니다. 이러한 구문 분석/분석/계획 작성의 오버헤드를 어떻게 제거할 수 있을까요?

속도를 높일 준비를 하세요!

실행을 위한 문을 준비하여 오버헤드를 제거할 수 있습니다. N1QL 쿼리에서 하나의 추가 매개 변수인 adhoc=false를 사용합니다.

정확히 무슨 뜻일까요? 즉, SDK는 쿼리가 처음 실행될 때 엔진에 "내가 재사용할 수 있는 실행 계획을 생성하고 압축된 형식으로 반환해 달라"고 말하면서 쿼리를 CBQ-ENGINE에 전달합니다. 그 이후에는 애플리케이션이 특정 쿼리를 호출할 때마다 SDK가 압축된 계획을 CBQ-ENGINE에 전달하여 모든 구문 분석/분석/생성 단계를 생략하고 바로 실행으로 이동합니다.

준비 중

어떻게 작동할까요? 쿼리가 전달되고 애드혹 플래그가 false로 설정되면 SDK는 나중에 재사용할 수 있도록 로컬 압축 쿼리 계획을 캐시에 저장하고, 쿼리가 다시 실행되면 캐시에 있는 로컬 압축 계획을 사용합니다. SDK는 메모리를 절약하기 위해 LRU(가장 최근에 사용된) 캐시를 사용하며, 캐시의 크기가 5000 쿼리에 도달하면 가장 오래된 항목부터 제거하기 시작합니다.

이 모든 것은 SDK 내에서 내부적으로 관리됩니다. 사용자가 해야 할 일은 adhoc 속성을 false로 설정하는 것뿐입니다.

예방의 1온스

준비된 문을 사용할 때 고려해야 할 몇 가지 모범 사례

  • 현재 준비된 문은 SDK 인스턴스별로 다릅니다. 준비된 문의 로컬 LRU 캐시는 애플리케이션이 사용 중인 SDK의 각 인스턴스에 따라 다릅니다. 현재 클라이언트 간에 공유되는 문 캐시는 없습니다.
  • 애플리케이션의 성격이 극도로 임시적인 경우, 준비된 문은 이러한 유형의 쿼리에 적합하지 않습니다. 준비 작업으로 인한 오버헤드는 동일한 실행 계획을 반복적으로 사용함으로써 얻을 수 있는 성능 향상을 무효화합니다.
  • 준비된 문은 시간이 고정된 실행 계획입니다. 인덱스를 이동, 변경 또는 삭제하는 토폴로지 변경으로 인해 현재 실행 계획이 무효화될 수 있습니다. SDK에는 이러한 코너 케이스를 처리하기 위한 재시도 로직이 내장되어 있습니다.
  • 다른 매개변수를 사용하여 동일한 쿼리를 반복적으로 실행하려는 경우 쿼리 문자열에 매개변수 값을 포함하지 말고 매개변수화된 쿼리를 사용하세요. 이렇게 하면 동일한 계획을 다른 매개변수와 함께 사용할 수 있습니다.

선택한 언어로 Couchbase를 사용하는 방법에 대한 더 많은 예제는 다음을 참조하세요. 개발자 가이드및 github 저장소. 다운로드 카우치베이스 지금 바로 준비하세요!

작성자

게시자 토드 그린스타인

토드 그린스타인은 카우치베이스의 솔루션 아키텍트입니다. Todd는 API 설계, 아키텍처, 데이터 모델링, nodejs 및 골랑 개발을 전문으로 합니다.

댓글 남기기