카우치베이스란 무엇인가요?
Couchbase는 유연하고 확장 가능한 고성능의 데이터 관리 솔루션을 제공하는 분산형 NoSQL 문서 데이터베이스입니다. 문서 데이터베이스의 장점과 키-값 저장소를 결합하여 최신 애플리케이션 개발에 적합합니다.
Couchbase의 주요 기능은 다음과 같습니다:
-
- 문서 중심 스토리지: Couchbase는 데이터를 JSON 문서로 저장하므로 유연한 스키마 설계가 가능합니다.
- 메모리 우선 아키텍처: 카우치베이스의 메모리 우선 접근 방식은 자주 액세스하는 데이터를 메모리에 보관하여 고성능을 보장합니다.
- 다차원 스케일링(MDS): Couchbase MDS는 쿼리, 인덱스 및 데이터 서비스를 개별적으로 확장할 수 있도록 하여 성능을 개선하고 비용을 절감합니다.
- 통합 캐싱 레이어: 내장된 캐싱 기능으로 자주 사용하는 데이터에 빠르게 액세스할 수 있습니다.
- SQL과 유사한 쿼리 언어(SQL++): Couchbase는 간편한 데이터 검색 및 조작을 위해 SQL 호환 쿼리 언어를 제공합니다.
- 고급 인덱싱: 기본, 보조, 공간 및 전체 텍스트 검색 인덱스를 포함한 다양한 인덱싱 옵션.
- 카펠라 칼럼: GenAI 기능을 갖춘 JSON 네이티브 NoSQL 분석 데이터베이스. 여러 소스의 데이터를 통합하고 복잡한 분석 쿼리를 실행하여 데이터에서 시의적절한 인사이트를 얻는 데 사용할 수 있습니다.
왜 카우치베이스에 패브릭을 사용해야 하나요?
하이퍼레저 패브릭 는 이미 기본 LevelDB 외에 상태 데이터베이스 옵션으로 CouchDB를 지원합니다. 하지만 Couchbase를 통합하면 몇 가지 이점이 있습니다:
-
- 향상된 확장성: 카우치베이스의 분산 아키텍처는 데이터 볼륨이 증가하는 엔터프라이즈 블록체인 네트워크에 필수적인 카우치DB보다 더 나은 수평적 확장을 가능하게 합니다.
- 성능 향상: 카우치베이스의 메모리 우선 설계는 처리량이 많은 블록체인 네트워크에 더 나은 성능을 제공합니다. 이는 복잡한 쿼리와 세계 상태에 대한 풍부한 쿼리에서 특히 중요합니다.
- 엔터프라이즈 기능: Couchbase는 다음과 같은 엔터프라이즈급 기능을 제공합니다:
- 고급 모니터링 및 관리 도구
- 기본 제공 재해 복구
- 데이터센터 간 복제(XDCR)
- 메모리 최적화 인덱스
- 변경 데이터 캡처(CDC), 실시간 처리를 위한 문서 수준 변경 사항 기록 및 보존
- 풍부한 쿼리 지원: 카우치베이스는 월드 상태에 대한 풍부한 쿼리를 지원하지만 복잡한 쿼리에 대해 더 나은 성능 특성을 제공합니다.
- 동시성 향상: 카우치베이스는 트랜잭션이 많은 블록체인 네트워크에서 중요한 동시 작업을 카우치DB보다 더 효율적으로 처리합니다.
- 네이티브 SDK 통합: Couchbase는 여러 프로그래밍 언어에 걸친 강력한 SDK를 제공하므로 다양한 애플리케이션 및 서비스와 쉽게 통합할 수 있습니다.
- 분석: 카우치베이스 엔터프라이즈 분석의 컬럼형 스토리지를 사용해 패브릭 데이터에 대한 분석을 실행하여 대규모 데이터 세트를 빠르게 처리하고 운영 성능에 영향을 주지 않고 블록체인 트랜잭션에 대한 실시간 인사이트를 얻을 수 있습니다.
빠른 설정
이 설정은 테스트 목적으로만 사용되는 빠른 설정입니다. 이 설정에서는 다음을 사용합니다. 패브릭 샘플. 또한 다음을 시청할 수도 있습니다. 데모 비디오 🔗
1. 카우치베이스 서버 설정
-
- 카우치베이스 서버를 설치하고, 다음 지침을 따르세요. 여기
- Couchbase 웹 콘솔을 엽니다(일반적으로 다음 주소에서). http://localhost:8091)
- 사용자에 대한 관리자 자격 증명을 설정합니다: 관리자 비밀번호를 입력합니다: 비밀번호@123
- 다음과 같은 이름의 버킷 두 개를 만듭니다. fabric-1 그리고 fabric-2 (버킷을 생성하면 _기본값 범위 자체)
2. 패브릭 구성
- 패브릭 샘플 리포지토리를 복제합니다:
12git 복제 https://github.com/hyperledger/fabric-samplescd 패브릭-샘플 - 머신에 적합한 바이너리를 다운로드하고 패브릭 샘플 리포지토리에서 추출하세요:
- https://github.com/jaykumar-cb/fabric/releases
- https://github.com/hyperledger/fabric-ca/releases
123curl -L https://github.com/jaykumar-cb/fabric/releases/download/v3.1.0/hyperledger-fabric-[YOUR_ARCH]-3.1.0.tar.gz | tar -xz -C .curl -L https://github.com/hyperledger/fabric-ca/releases/download/v1.5.15/hyperledger-fabric-ca-[YOUR_ARCH]-1.5.15.tar.gz | tar --strip-components=1 -xz -C bin
- MacOS를 사용하는 경우 다음 명령을 실행하여 격리에서 바이너리를 제거합니다:
1xattr -rd com.사과.격리 bin - 선호하는 텍스트 편집기에서 패브릭 샘플을 엽니다.
- 이러한 파일을 만듭니다:
1234567891011121314151617181920212223242526272829303132333435363738# 패브릭 샘플/테스트-네트워크/컴포즈/컴포즈-카우치베이스.yaml버전: '3.7'네트워크:테스트:이름: fabric_test서비스:peer0.org1.예제.com:이미지: cbjaykumar/fabric-peer최신환경:- CORE_LEDGER_상태_스테이터베이스 = 카우치베이스 # 명시된b를 카우치베이스로 설정합니다.- CORE_LEDGER_상태_카우치베이스 구성_소파베이스주소=카우치베이스://host.docker.internal # 배포 호스트 사용- CORE_LEDGER_상태_카우치베이스 구성_사용자 이름=관리자 클러스터의 # 사용자 이름- CORE_LEDGER_상태_카우치베이스 구성_비밀번호=비밀번호@123 클러스터의 # 비밀번호- CORE_LEDGER_상태_카우치베이스 구성_BUCKET=fabric-1 # 버킷 이름- CORE_LEDGER_상태_카우치베이스 구성_범위=_기본값 # 범위 이름- CORE_LEDGER_상태_카우치베이스 구성_내부쿼리제한=1000- CORE_LEDGER_상태_카우치베이스 구성_최대배치업데이트크기=1000- CORE_LEDGER_상태_카우치베이스 구성_캐시 크기=64- CORE_LEDGER_상태_카우치베이스 구성_ISCAPELLAINSTANCE=false #는 카펠라를 사용하지 않으므로 거짓으로 설정합니다.추가 호스트:- "host.docker.internal:host-gateway"peer0.org2.예제.com:이미지: cbjaykumar/fabric-peer최신환경:- CORE_LEDGER_상태_스테이터베이스 = 카우치베이스- CORE_LEDGER_상태_카우치베이스 구성_소파베이스주소=카우치베이스://host.docker.internal- CORE_LEDGER_상태_카우치베이스 구성_사용자 이름=관리자- CORE_LEDGER_상태_카우치베이스 구성_비밀번호=비밀번호@123- CORE_LEDGER_상태_카우치베이스 구성_BUCKET=fabric-2- CORE_LEDGER_상태_카우치베이스 구성_범위=_기본값- CORE_LEDGER_상태_카우치베이스 구성_내부쿼리제한=1000- CORE_LEDGER_상태_카우치베이스 구성_최대배치업데이트크기=1000- CORE_LEDGER_상태_카우치베이스 구성_캐시 크기=64- CORE_LEDGER_상태_카우치베이스 구성_ISCAPELLAINSTANCE=false추가 호스트:- "host.docker.internal:host-gateway"
123# 패브릭 샘플/테스트-네트워크/컴포즈/도커/도커-컴포즈-카우치베이스.yaml# 예, 빈 파일입니다.버전: '3.7' - 네트워크.sh 파일을 수정하여 새 docker-compose-couchbase.yaml 파일을 사용하세요:
1curl -o 테스트-네트워크/네트워크.sh https://gist.githubusercontent.com/jaykumar-cb/328d23f20f572df3951f37a5c4545160/raw/ - 패브릭 네트워크 시작
12cd 테스트-네트워크./네트워크.sh up createChannel -s 카우치베이스 - 이제 원하는 체인 코드를 배포하고 평소처럼 작업을 수행할 수 있지만, 망고 쿼리 대신 SQL++를 사용하도록 쿼리와 인덱스를 변경해야 합니다. 다음 섹션에 이에 대한 가이드가 포함되어 있습니다.
체인코드 쿼리 변경 사항
체인 코드의 쿼리가 망고 쿼리 대신 SQL++를 사용하도록 변경됩니다. 예시:
1 2 3 4 5 6 7 |
// CouchDB에 대한 쿼리 { "Args": [ "QueryAssets", "{\"selector\":{\"docType\":\"asset\",\"owner\":\"tom\"}, \"use_index\":[\"_design/indexOwnerDoc\", \"indexOwner\"]}" ] } |
1 2 3 4 5 6 7 |
// 카우치베이스에 대한 등가 쿼리 { "Args": [ "QueryAssets", "SELECT a.* FROM {{ .Source }} as a WHERE a.docType=\"asset\" AND a.owner=\"tom\""" ] } |
인덱스 변경
인덱스에도 비슷한 변화가 있을 것입니다. 폴더 구조는 동일하게 유지되며 쿼리 부분만 변경됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 |
// CouchDB용 Owner.json 인덱싱 { "index": { "fields": [ "objectType", "소유자" ] }, "ddoc": "indexOwnerDoc", "name": "indexOwner", "type": "json" } |
1 2 3 4 |
// 카우치베이스용 indexOwner.json과 동일함 { "index": "CREATE INDEX index_meow ON {{ .Source }} (소유자, objectType)" } |
참고: 카우치베이스는 다양한 쿼리 패턴과 성능 최적화 시나리오를 위해 여러 유형의 인덱스를 지원합니다. 카우치베이스와 하이퍼레저 패브릭을 통합할 때, 이러한 유연한 인덱싱 옵션은 블록체인 상태 데이터베이스에 대한 복잡한 쿼리에 대해 상당한 성능 이점을 제공합니다.
💡 팁: 프로덕션 환경의 경우 각 피어마다 전용 Couchbase 인스턴스를 보유하는 것이 좋습니다. 스핀업해야 합니다. 각 피어당 하나의 인스턴스.
💡 팁: 아래에서 설정할 수 있는 구성 옵션은 다음과 같습니다. core.yaml 파일을 만듭니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
원장: 상태: 상태 데이터베이스: Couchbase couchbaseConfig: 주소: 카우치베이스://<카우치베이스 호스트> 사용자 이름: <사용자 이름> 비밀번호: <비밀번호> 버킷: <버킷 이름> 범위: <범위 이름> isCapellaInstance: false 내부 쿼리 제한: 1000 최대 배치 업데이트 크기: 1000 캐시 크기: 64 |
에 구현된 인터페이스 statecouchbase 패키지
그리고 statecouchbase 패키지는 하이퍼레저 패브릭을 위한 카우치베이스 기반 상태 데이터베이스 역할을 할 수 있는 몇 가지 주요 인터페이스를 구현합니다. 이러한 인터페이스는 상태 데이터베이스 운영을 위한 컨트랙트를 정의하고 Fabric의 원장 기능을 위한 토대를 제공합니다.
핵심 데이터베이스 인터페이스
1. statedb.VersionedDBProvider
구현 주체 버전이 지정된 DB 공급자
이 인터페이스는 버전이 지정된 상태 데이터베이스의 팩토리 및 수명 주기 관리자 역할을 합니다. 여러 채널에 대한 데이터베이스 인스턴스를 만들고, 관리하고, 폐기하는 일을 담당합니다. 공급자는 상태 데이터베이스 서브시스템의 진입점 역할을 하며 여러 채널 데이터베이스 간의 조정을 처리합니다.
목적:
-
- 여러 채널에서 데이터베이스 인스턴스 관리
- 리소스 수명 주기 관리
- 스냅샷 가져오기/내보내기 기능
- 공급자 수준 구성 및 정리
2. statedb.VersionedDB
구현 주체 VersionedDB
이는 상태 데이터베이스 작업을 위한 기본 인터페이스이며, Fabric의 상태 관리에 필요한 핵심 기능을 나타냅니다. 체인코드 실행, 트랜잭션 유효성 검사, 블록 커밋에 필요한 필수 읽기/쓰기 작업을 제공합니다.
목적:
-
- 핵심 상태 데이터 액세스 및 조작
- MVCC(다중 버전 동시성 제어)를 위한 버전 추적
- 트랜잭션 일괄 처리
- 쿼리 실행 기능
- 데이터베이스 일관성 및 저장점 관리
성능 최적화 인터페이스
3. 명시된b.대량 최적화 가능
구현 주체 VersionedDB
이 인터페이스는 블록 처리 중 대량 작업에 대한 성능 최적화를 제공합니다. 일괄 작업과 캐싱 메커니즘을 활성화하여 트랜잭션 유효성 검사 및 커밋 단계의 효율성을 개선하도록 설계되었습니다.
목적:
-
- 트랜잭션 유효성 검사를 위한 대량 버전 로드
- 자주 액세스하는 버전 데이터의 인메모리 캐싱
- 블록 처리 중 성능 최적화
- 유효성 검사 중 데이터베이스 왕복 횟수 감소
4. 명시된b.IndexCapable
구현 주체 VersionedDB
이 인터페이스는 사용자 정의 데이터베이스 인덱스를 지원하여 고급 쿼리 기능을 가능하게 합니다. 이를 통해 체인코드는 단순한 키-값 조회를 넘어 복잡한 쿼리를 정의하고 사용할 수 있으며, 이는 풍부한 쿼리 기능을 필요로 하는 비즈니스 애플리케이션에 특히 중요합니다.
목적:
-
- 사용자 지정 인덱스 생성 및 관리
- 복잡한 체인코드 쿼리 지원
- 데이터베이스별 최적화 기능
- 비즈니스 로직의 쿼리 성능 향상
이터레이터 인터페이스
5. 결과 반복기, 쿼리결과이터레이터, 풀스캔이터레이터
구현 주체 쿼리 스캐너, dbsScanner
이러한 인터페이스는 상태 데이터베이스에 대한 다양한 유형의 반복 기능을 제공합니다. 쿼리 결과의 효율적인 탐색, 범위 스캔, 전체 데이터베이스 스캔을 가능하게 하며 페이지 매김 및 북마크와 같은 기능을 지원합니다.
목적:
-
- 대규모 결과 집합에 대한 효율적인 반복
- 메모리 효율적인 데이터 처리
- 대규모 쿼리에 대한 페이지 매김 지원
- 스냅샷 생성 및 데이터 내보내기
- 범위 스캔 기능
인터페이스 구성 및 디자인
그리고 statecouchbase 패키지는 인터페이스 구성을 통해 Fabric의 상태 데이터베이스 아키텍처를 잘 구조적으로 구현한 것을 보여줍니다. 그리고 VersionedDB 유형은 여러 인터페이스를 동시에 구현하여 제공합니다:
-
- 계층화된 기능: 다음을 통한 핵심 운영 VersionedDB를 통해 선택적으로 최적화할 수 있습니다. 대량 최적화 가능 그리고 인덱스 가능
- 우려 사항의 분리: 데이터베이스 수준 작업과 분리된 공급자 수준 작업
- 확장성: 기존 기능을 중단하지 않고 새로운 인터페이스를 통해 추가 기능을 추가할 수 있습니다.
- 성능 유연성: 옵션으로 제공되는 최적화 인터페이스를 통해 지원되는 경우 향상된 성능을 구현할 수 있습니다.
이러한 설계를 통해 Couchbase 구현은 풍부한 기능을 제공하는 동시에 Fabric의 데이터베이스 추상화 계층과의 호환성을 유지하여 배포 요구 사항에 따라 서로 다른 상태 데이터베이스 구현 간에 원활하게 전환할 수 있습니다.
💡 참고: 카우치베이스를 스테이트DB로 사용하는 피어는 카우치DB를 스테이트DB로 사용하는 피어와 호환됩니다.
결론
하이퍼레저 패브릭의 엔터프라이즈 블록체인 배포는 중요한 데이터베이스 딜레마에 직면합니다. LevelDB는 고성능을 제공하지만 최신 애플리케이션에 필수적인 풍부한 쿼리 기능을 제공하지 않으며, CouchDB는 JSON 쿼리를 제공하지만 최종 데이터 일관성, 쿼리를 제한하고 성능을 저하시키는 순수 문서 저장소 아키텍처로 인한 성능 병목 현상, 엄격한 환경을 가진 오픈 소스 프로젝트로서 제한된 기업 지원 등의 심각한 제한을 초래합니다.
카우치베이스 서버는 조정 문제를 없애는 분산 ACID 트랜잭션으로 강력한 일관성을 제공하고, 다음을 통해 쿼리 성능을 향상시킴으로써 이러한 문제를 직접 해결합니다. SQL++ (일명 N1QL), 전문 서비스, 유연한 배포 옵션, 고급 관리 도구를 통해 CouchDB의 제한된 검색 API를 능가하는 포괄적인 엔터프라이즈 지원 서비스를 제공합니다.
카우치베이스로 전환하는 조직은 일반적으로 밀리초 미만의 응답 시간, 더 높은 애플리케이션 가동 시간, 우수한 데이터센터 간 복제 기술을 경험하게 되므로, 성능과 기능 사이에서 타협하지 않고 높은 거래 처리량과 정교한 쿼리 기능을 모두 필요로 하는 엔터프라이즈 블록체인 배포에 이상적인 솔루션이 될 수 있습니다.
-
- 보다 자세한 비교는 다음을 참조하세요. 카우치베이스와 카우치DB
- 하이퍼레저 패브릭 문서
- 가입하기 를 클릭해 Couchbase Capella DBaaS를 무료로 사용해보세요.