DB/Couchbase

카우치베이스(Couchbase) 중요(view, bucket) 용어 설명

soccerda 2020. 6. 10. 18:32
반응형

설치까지 완료하였고 이글에서는 카우치베이스 중요한 용어들에 대해서 설명하겠다.

 

Key-Value

카우치베이스는 NoSQL이며 key-value 타입의 Document DB라고 설명하였다.

저장되는 방식은 JSON 도큐먼트가 저장된다.

key는 최대 250 Byte, value의 경우 카우치베이스 버킷은 20MB Memcached 방식의 버킷은 1M까지 저장이 가능하다.

 

이외에도 3가지 메타데이터가 같이 저장된다. 

첫 번째 CAS이며 이것은 데이터에 타임스탬프이며 여러 클라이언트가 한 번에 access 한 경우 일관성 문제를 해결해준다.

두 번째 TTL(time to live) 데이터 유효 시간을 정의하며 시간이 지나면 삭제된다.

세 번째 Flag 이 값은 카우치베이스 클라이언트에서 사용되는 메타데이터이다.

60 Byte의 메모리를 차지한다.

 

카우치베이스 서버는 key와 메타데이터를 메모리에 유지하기 때문에 설계할 때 이 부분을 고려하여 ram 사이즈를 결정해야 한다.

 

버킷(Bucket)

버킷은 일종의 RDBMS의 데이터베이스 같은 공간이며 JSON Document들이 이 버킷에 저장된다.

버킷 별로 고유 속성을 가지고 있어 버킷 별로 복제본의 수와 접근할 수 있는 TCP 포트 접근 비밀번호를 지정할 수 있다.

하나의 클러스터에 버킷은 최대 128까지 생성 가능하며 성능상 10개를 권장한다.

 

뷰(View)

 

뷰에는 각 버킷 내의 개별 데이터를 변환하는 맵 함수와 변환된 개별 데이터를 그룹별로 모아서 처리할 수 있는 리듀스 함수를 갖는다.

카우치베이스의 가장 강력한 기능이며 뷰를 통해 RDBMS의 indexing, grouping, sorting 등을 가능하게 한다.

 

1. 저장된 데이터에 대한 인덱싱과 쿼리 기능을 제공

2. 특정한 타입의 데이터 목록 제공

3. 추출해낸 정보에 대한 필터링 및 정렬 기능 제공

4. 데이터에 대한 연산과 데이터의 요약 기능 제공

 

이런 뷰는 원본 데이터에서 자바스크립트로 맵&리듀스(Map&Reduce) 함수를 통해서 데이터를 정재하여 뷰로 만들어 낸다.

 

 

맵 앤 리듀스 (Map&Reduce) 함수

뷰는 맵리듀스 패턴에 의해 구현된다. 

 

맵 함수는 버킷에 저장된 모든 데이터에 대해서 맵 함수를 실행하며 뷰를 정의할 때 반드시 정의해야 한다.

 

맵 함수

전체 버킷에 대해 Map 기능으로 문서를 읽고 정의한 조건에 의해 피터링 후 emit() 함수에 의해 출력된다.

function(doc,meta){
   emit(인자1,인자2);
}

맵 함수는 두 개의 인자를 전달받는다. "doc"는 버킷 내의 저장된 개별 데이터로 각 데이터별 id와 JSON Documnet 값을 갖는다. "meta"는 그 데이터에 대한 메타 데이터(flag, cas 값 등)를 리턴한다.

맵 함수에서는 받은 개별 데이터를 emit 함수로 가공하여 리턴한다.

emit 함수에 필터 등의 로직을 적용할 수 있다. emit(인자 1, 인자 2)의 인자 1은 뷰의 Key값을 리턴하고, 인자 2는 뷰의 value 값을 리턴한다.

 

value에 너무 많은 데이터나 문서 자체를 내보내는 것은 좋지 안하다.

 

emit 함수를 거쳐 맵 함수를 끝내면 ID, KEY, VALUE 형식의 데이터 셋이 나오는데 이를 Index라고 한다.

ID는 원래 데이터의 ID이고 emit()의 첫 번째 인자 KEY는 뷰의 키값이다. Value는 emit() 두 번째 인 Index는 이 KEY에 따라서 정렬(sorting)된 형태로 리스팅 된다. 그리고 마지막에 뷰의 값이 저장된다. index는 디스크에 저장된다.

index는 key에 따라서 정렬된 형태로 리스팅 된다.

 

저장된 index를 이용해서 리듀스 함수(Reduce)를 이용해서 Grouping을 할 수 있다. 

RDBMS의 groub by sum이나 count 같은 간단한 기능부터 복잡한 계산을 자바스크립트를 이용해서 구현하는 것이 가능한다.

_count, _sum, _stats 같은 내장 Reduce 함수를 정의하면, emit() 결과가 Reduce 함수를 거치게 된다.

 

Map으로 나온 key에 대한 카운트 구할 때 Group 옵션 지정을 emit key 값을 [key1, key2, key3] 형태로도 가능하고, Group level 지정에서 어떠한 값으로 그룹핑할지 설정 가능하다.

document에 year, month, day, hour, minute라는 항목이 있을 때

 

group_level=0 은 year, month, day, hour, minute 모든 항목을 key로

 

group_level=1 은 year key로 

 

group_level=2 은 year, month를 key로

 

group_level=3 은 year, month, day를 key로

 

group_level=4 은 year, month, day, hour key로

 

group_level=4 은 year, month, day, hour, minute를 key로 g그룹핑한다.

 

 

 

 

다음 글에서는 버킷을 콘솔에서 생성해보고 데이터를 생성 수정 삭제해보겠다.

https://soccerda.tistory.com/126

 

카우치베이스(Couchbase) 버킷(Bucket) 생성하기

버킷(Bucket) 생성 버킷을 생성해보겠다. Create New Data Bucket을 클릭하자. 아.... 램 사이즈를 작게 설정했더니.. 부족하다.. 어쩔 수 없이 샘플 버킷을 삭제하고 생성해야겠다. 버킷명을 클릭하여 상��

soccerda.tistory.com

 

반응형