Java

카우치베이스에서 자동 번호 사용

Ratnopam Chakrabarti라트노팜 차크라바티 는 현재 에릭슨에서 근무하는 소프트웨어 개발자입니다. 그는 오랫동안 IoT, 기계 간 기술, 커넥티드 카, 스마트 시티 분야에 집중해 왔습니다. 그는 새로운 기술을 배우고 이를 실무에 적용하는 것을 좋아합니다. 일하지 않을 때는 3살 난 아들과 함께 시간을 보내는 것을 즐깁니다.

일련 키(자동 번호)로 문서 삽입하기

소프트웨어 개발 과정에서 (엔티티의) 고유 키를 순서대로 순차적으로(증가 또는 감소 순서로) 생성해야 하는 상황에 종종 직면하게 됩니다. 일반적인 예는 다음과 같습니다:

  1. 각 데이터 행에 자동 생성된 시퀀스 번호가 할당된 로그 파일의 항목을 저장합니다.

  2. 데이터베이스에 비즈니스 엔티티를 저장하고 증분 시퀀스 번호로 생성된 기본 키가 있습니다.

관계형 데이터베이스 세계에서는 "데이터베이스 시퀀스"라는 것을 사용하여 이를 달성합니다. 시퀀스는 대부분의 데이터베이스 제품에서 제공하는 기능으로, 단순히 고유 번호 값을 질서정연하게 생성하는 기능입니다. 값을 증가시켜 반환하기만 하면 됩니다. 데이터베이스 시퀀스가 없으면 특정 순서로 고유 번호를 생성하기가 쉽지 않습니다. 그렇기 때문에 기본 키(또는 고유 키)를 고유한 자동 증가 값으로 채울 때 많이 사용됩니다.

무작위로 고유한 키를 생성하는 다른 방법으로는 GUID 또는 UUID와 같은 기능을 사용하는 방법이 있습니다. 그러나 데이터베이스 시퀀스 생성기를 사용할 때 얻을 수 있는 자동 증가 특성은 보장할 수 없습니다.

NoSQL 데이터베이스에 시퀀스 없음

관계형 데이터베이스 세계와 달리, 시중에 나와 있는 대부분의 NoSQL 데이터베이스에는 간단한 내장 시퀀스 생성 기능이 없습니다. 자유 형식 데이터를 사용하는 분산 시스템에서는 서로 다른 노드와 샤드 간에 데이터를 교차 복제할 때 생성되는 번호가 충돌할 수 있기 때문에 고유한 자동 증가 번호를 문서의 고유 키로 사용하는 것이 일반적이지 않다고 주장할 수도 있습니다. 대신 UUID를 구현하는 것이 고유성을 보장하는 훨씬 더 실용적인 옵션으로 보입니다. 그러나 시퀀스에서 무작위로 생성된 고유 ID가 필요한 경우, UUID 솔루션은 생성된 번호의 시퀀싱 특성을 보존하지 못하므로 어떻게든 NoSQL 데이터베이스에 자동 증가 시퀀스 열을 만들어야 합니다. 주요 질문입니다: Couchbase를 사용하면 어떻게 처리할 수 있을까요? 이 글에서는 Couchbase를 사용하여 이 문제를 해결할 수 있는 방법을 설명합니다.

데이터를 저장할 Couchbase 버킷을 설정하세요.

제품 카탈로그의 상품을 Couchbase 버킷에 저장하는 동안 각 제품 데이터 JSON에 생성된 시퀀스를 설정하여 고유하게 식별 가능한 문서의 '키'로 사용할 수 있도록 해야 한다고 가정해 보겠습니다.

이렇게 하려면 아래 단계에 따라 "prodcat"이라는 이름의 버킷을 만드세요.

  • 먼저 Couchbase의 관리 콘솔에 로그인합니다.
  • 유형 http://localhost:8091/ui/index.html 를 클릭합니다.
  • 관리자 사용자 아이디와 비밀번호로 로그인합니다.
  • 데이터 버킷 탭으로 이동하여 새 데이터 버킷 만들기를 클릭합니다.
  • 버킷 이름 필드에 "prodcat"을 입력하고 노드당 RAM 할당량 필드에 512를 입력합니다.
  • 다른 모든 필드는 기본값으로 두고 "만들기"를 클릭합니다.
  • 버킷이 성공적으로 생성되면 항목이 0개로 나열됩니다.

카운터 문서 사용

카우치베이스는 "카운터" 문서로 알려진 시퀀스 생성을 처리합니다. 카운터는 순차적으로 증가하거나 감소할 수 있는 문서입니다. 여기서 주목해야 할 중요한 점은 카운터의 증가 또는 감소 연산이 원자적이라는 것입니다. 비즈니스 엔티티(예: 이 경우 Product)를 JSON 문서로 삽입하면 키 패턴이 있는 카운터 문서를 사용하여 시퀀스를 생성할 수 있습니다.

다음 코드 스니펫은 초기값이 20인 카운터 문서를 초기화합니다.

이 시점에서 카운터 문서는 20의 값으로 초기화됩니다.

다음 코드를 루프에서 실행하여 제품 데이터를 순차적으로 삽입합니다:

다음은 위 코드에 대한 설명입니다:

다음Id는 카운터를 1씩 증가시켜 계산합니다.

다음Id를 사용하여 제품 문서의 'id' 필드를 채웁니다.

여기서 "idGeneratorForProducts"는 카운터의 현재 값을 저장하는 카운터 문서입니다. 각 제품 문서에는 시퀀스로 채워진 "id"가 있습니다:

이 시퀀스를 내림차순으로 구현할 수도 있다는 점을 언급할 가치가 있습니다. 이 경우 우리가 해야 할 유일한 작업은

  • 카운터를 최대값으로 초기화합니다.
  • 카운터를 1씩 감소시켜 다음Id를 순차적으로 생성합니다.
  • 다음Id를 사용하여 버킷에 문서를 삽입합니다.

결론

이 문서에 사용된 코드는 Java로 작성되었으며, 다음과 같이 스프링 부트 및 스프링 데이터 카우치베이스 종속성. 동일한 개념을 모든 카우치베이스 클라이언트 SDK에 적용할 수 있습니다.

애플리케이션의 소스 코드는 다음 링크에서 확인할 수 있습니다. https://github.com/ratchakr/prodcat.

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

작성자

게시자 Laura Czajkowski, 개발자 커뮤니티 관리자, Couchbase

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

댓글 하나

  1. 이 기능은 관리자 API에서 사용할 수 있나요(또는 SDK에서만 사용할 수 있나요)...?

댓글 남기기

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

구축 시작

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

카펠라 무료 사용

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

연락하기

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