Node.js

Node.js를 사용하여 복합 키 접두사로 문서 대량 삭제하기

설문조사에서 가장 많이 받는 질문은 카우치베이스 포럼 그리고 스택 오버플로에서
버킷에서 특정 값으로 시작하는 키가 있는 모든 레코드를 삭제합니다. 즉, 특정 값을 공유하는 모든 레코드를 삭제하는 방법은 다음과 같습니다.
특정 복합 키. 간단한 해결책은 카우치베이스 뷰를 만들고 범위 쿼리를 실행하는 것입니다.

모든 Couchbase SDK로 범위 쿼리를 실행할 수 있지만, 이 특정 예제에서는 Node.js를 사용하여 수행하는 방법을 살펴보겠습니다.

전제 조건

다음을 시도하기 전에 다음을 설치 및 구성해야 합니다:

  • Node.js 및 노드 패키지 관리자(NPM)가 설치되었습니다.
  • Couchbase 3.0+

샘플 데이터

이 예제의 나머지 부분에서는 제가 호출할 버킷에 있는 몇 가지 샘플 문서를 사용하겠습니다. 테스트 버킷.
버킷에 있는 문서의 주요 이름은 다음과 같습니다:

  • user::nraboy
  • 사용자::밍겐트론
  • user::blawson
  • 제품::1
  • 제품::2
  • 제품::3

이 예제에서는 이러한 문서의 내용은 중요하지 않습니다. 중요한 것은 각 문서에 사용하기로 선택한 접두사입니다.
두 가지 문서 유형이 있습니다. 저는 다음을 사용하기로 선택했습니다. user:: 를 사용하여 사용자 문서와 제품:: 를 나타내는
제품 문서. 전체 키는 복합 키를 나타냅니다.

카우치베이스 뷰 만들기

Couchbase 버킷에는 많은 문서가 있습니다(실제로는 아니지만). 직접 키-값을 수행하는 데 필요한 모든 키를 기억하지 못할 가능성이 높습니다.
조회를 사용할 수 없습니다. 따라서 Couchbase 뷰를 만들어야 합니다.

코드를 통해 카우치베이스 뷰를 만들 수 있지만 이 특정 예제에서는 카우치베이스 대시보드를 통해 뷰를 만들겠습니다. Sign
를 클릭하고 카우치베이스 대시보드에서 조회수 탭을 클릭하고 테스트 버킷 를 만들었습니다.

새 개발 보기를 만들고 디자인 문서를 호출하도록 선택합니다. 디자인/개발 문서 보기 이름을
by_id. 기본 뷰 코드는 괜찮을 것이지만 그렇지 않은 경우를 대비하여 뷰가
팔로잉:

이 보기는 모든 문서를 표시하며 키는 각 문서 ID입니다.

Node.js 애플리케이션

이 시점에서 이해하기 쉽도록 새로운 Node.js 애플리케이션을 만들어 보겠습니다.

프로젝트 준비하기

터미널(Mac/Linux) 또는 명령 프롬프트(Windows)를 사용하여 다음 명령을 실행합니다:

모든 질문에 답하시면 됩니다. 그냥 NPM을 만들 수도 있습니다. package.json 파일을 처음부터 다시 작성하고
다음 콘텐츠를 추가합니다:

아직 끝나지 않았습니다. 이 계획을 시작하기 전에 프로젝트 종속성을 설치해야 합니다.
애플리케이션을 실행합니다. 명령 프롬프트 또는 터미널에서 다음 명령을 실행합니다:

이렇게 하면 Express 프레임워크와 Couchbase Node.js SDK가 설치됩니다.

중요한 코드

아직 만들지 않았다면 app.js 파일 옆에 있는 package.json 파일을 프로젝트에 추가합니다.
이 파일의 연락처는 다음과 같아야 합니다:

여기에는 많은 일이 일어나고 있으므로 세분화하여 설명하겠습니다.

위의 내용은 크게 신경 쓸 것이 없습니다. 애플리케이션에서 사용할 수 있도록 Couchbase SDK와 Express 프레임워크만 포함하고 있습니다. 그러나 아래
를 클릭하면 클러스터에 연결하고 특정 버킷을 여는 것을 볼 수 있습니다:

로컬로 호스팅되는 Couchbase 인스턴스에 연결하고 다음을 열고 있습니다. 테스트 버킷 앞서 언급했습니다.

이제 멋진 것을 보러 가겠습니다!

에서 ViewQuery 객체를 준비하고 있습니다. 디자인/개발 문서 디자인 문서와 by_id 보기. 보기만 쿼리하려면
특정 문서에 대해 범위 쿼리라는 것을 사용하겠습니다. 우리는 이미 뷰가 문서에
문서 ID를 키 값으로 지정합니다. 즉, 범위 쿼리를 사용하면 어떤 키를 받을지 결정할 수 있습니다.

범위 쿼리에서 시작 키는 다음과 같습니다. user:: 를 누르면 모든 사용자 문서를 삭제할 수 있습니다. 종료 키는 또한
포함 user::를 사용하되 유니코드 문자 u02ad 를 추가합니다. 이렇게 하면 모든 것이 캡처됩니다.
앞에 찾고자 하는 내용을 추가합니다. 이러한 유형의 범위 쿼리에 대한 자세한 내용은
공식 카우치베이스 문서.

마지막으로 이 쿼리를 실행하고 결과를 캡처합니다. 결과가 반복되고 다음과 같이 모든 레코드가 하나씩 삭제됩니다.
에서 확인할 수 있습니다:

Node.js에서 실행되는 모든 삭제는 비차단 방식이므로 애플리케이션 계층이 잠기지 않습니다. 삭제 요청이 카우치베이스 서버에 도달하면,
문서가 삭제되도록 표시된 후 나중에 압축이 발생하면 삭제됩니다.

위의 코드를 실행하여 이 프로젝트가 실제로 작동하는지 확인하세요.

결론

범위 쿼리를 사용하면 뷰에서 특정 문서를 쿼리한 다음 해당 문서를 삭제하도록 선택할 수 있습니다. 이 예의 특정 문서
앞에 접두사가 붙은 복합 키가 있습니다. user:: 키를 입력하세요.

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

작성자

게시자 Nic Raboy, 개발자 옹호자, Couchbase

닉 라보이는 최신 웹 및 모바일 개발 기술을 옹호하는 사람입니다. 그는 Java, JavaScript, Golang 및 Angular, NativeScript, Apache Cordova와 같은 다양한 프레임워크에 대한 경험이 있습니다. Nic은 웹 및 모바일 개발을 보다 쉽게 이해할 수 있도록 자신의 개발 경험에 대해 글을 쓰고 있습니다.

댓글 하나

  1. 스왑닐 소나와네 8월 25, 2015에서 7:13 오전

    카우치베이스 서버 2.5와 자바 클라이언트 1.4에서도 이 작업을 수행할 수 있나요?

    1. 예, 이 개념은 거기에서도 작동해야 하며 보기는 동일해야 하지만 자바 코드는 분명히 위와 다를 것입니다.

  2. 제가 항상 사람들에게 추천하는 또 다른 옵션은 개체를 삭제해야 하는 시기와 Couchbase 클러스터에 가할 수 있는 부하량에 따라 개체를 직접 삭제하는 대신 지금부터 X일 후까지 각 개체에 임의의 TTL을 설정하는 것입니다. 그러면 클러스터의 부하가 줄어든 상태에서 TTL이 만료되면 Couchbase 클러스터가 버킷에서 개체를 삭제하는 작업을 처리합니다.

댓글 남기기

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

구축 시작

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

카펠라 무료 사용

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

연락하기

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