블로그 이미지
평범하게 살고 싶은 월급쟁이 기술적인 토론 환영합니다.같이 이야기 하고 싶으시면 부담 말고 연락주세요:이메일-bwcho75골뱅이지메일 닷컴. 조대협


Archive»


Couchbase Server

#2 기본 개념 잡기

조대협 http://bcho.tistory.com

개념 잡기


카우치베이스 서버 설치가 끝났으면 기본적인 개념을 잡아보도록 하자.


Document 기반의 Key-Value 스토어


카우치 베이스느 키, 밸류 스토어이다 하나의 유니크(Unique)한 키에, 값을 저장하는 방식이다. 저장 되는 값은 JSON 도큐먼트가 저장된다. 키는 최대 250 바이트, (밸류)의 경우에는 카우치베이스 버킷의 경우 20MB, Memcached 방식의 버킷의 경우 1MB 까지 저장이 가능하다.

저장할때, 키와 값뿐만 아니라 메타데이타가 같이 저장되는데, 메타 데이타에는 CAS,TTL,Flag 3가지가 저장된다.

저장할때, 키와 값뿐만 아니라 메타데이타가 같이 저장되는데, 메타 데이타에는 CAS,TTL,Flag 값 3가지가 저장된다.

CAS는 데이타에 대한 일종의 타임 스탬프와 같은 개념으로, 여러 클라이언트가 같이 데이타를 ACCESS 했을때, 일관성(Consistent) 문제가 생기는 것을 해결해줄 수 있다. (자세한 내용은 나중에 설명한다.)

TTL 은 Time To Live 로, 데이타의 유효 시간을 정의한다. TTL을 정의해놓은 데이타는 TTL 시간이 지나면 자동으로 삭제 된다.

FLAG는 카우치베이스 클라이언트에서 사용하는 메타데이타 이다. 

이러한 메타데이타는 하나의 메타데이타 (CAS,TTL,Flag)는  60바이트의 메모리를 차지하게 된다.

카우치베이스 server는 모든 Key와 메타데이타를 메모리에 유지하기 때문에 데이터 모델링 또는 용량을 설계할때, 이 부분을 고려해서 RAM의 사이즈를 결정해야 한다.


버킷(Bucket)


버킷은 일종의 RDBMS의 데이타베이스 같은 공간이다. JSON 도큐먼트들은 이 버킷에 저장된다.

각각의 버킷은 고유의 속성 값을 가지고 있다. 버킷별 사용할 수 있는 메모리양, 옵션으로 버킷별로 접근할 수 있는 TCP 포트를 지정하거나, 접근 비밀번호를 지정할 수 있으며, 버킷에 들어가는 데이타에 대한 복제본의 수등을 정의할 수 있다.

하나의 클러스터에서 버킷은 최대 128개까지 생성할 수 있으나, 보통 성능상 10개를 권장한다.

http://docs.couchbase.com/couchbase-manual-2.0/#setting-maximum-buckets-for-clusters


뷰(View)


카우치베이스의 강력한 기능중의 하나인데, 이 뷰를 이용해서 RDBMS에서 제공되는 Indexing, grouping, sorting등을 가능하게 한다. 이 뷰는 데이타베이스 뷰와 유사한 개념을 갖는데, 카우치베이스의 뷰는 인크리멘탈 뷰 (Incremental view)라는 컨셉을 가지고 있다.

예를 들어 설명해보자. 사용자 정보를 저장하는 버킷에서, 사용자 정보를 저장하는 JSON 도큐먼트 안에 SSN(Social Security Number)라는 이름으로 주민등록 번호를 저장하는 필드가 있고, 이 주민등록 번호 필드에서 80년생 이하만 저장하는 뷰를 만든다고 하자.

데이타가 버킷에 저장될 때마다, 생성된 뷰에 같이 저장되는데, 이때, 뷰코드(View Code)라는 로직을 통해서 뷰에 저장된다. 뷰코드는 자바스크립트로 작성된 코드이다. 뷰코드에서 주민등록 번호가 80년생 이하일 경우에만 뷰에 저장하도록 정의한다.

 


결과적으로 데이타를 저장하거나 업데이트할때, 이 뷰코드가 매번 수행되게 되고 (마치 RDBMS의 트리거 처럼), 뷰코드에 정의된 알고리즘에 따라서 뷰에 데이타를 업데이트하게 된다.

이렇게 데이타가 저장/업데이트될때 마다 뷰를 증분적(Incremental)하게 업데이트 하기 때문에, 인크리멘탈 뷰라고 하며, 실제로 저장된 데이타가 많다고 하더라도 뷰에는 데이타가 업데이트 될때 하나만 추가/수정 되기 때문에 실제로 카우치베이스가 받는 로드는 그리 크지 않기 때문에, Indexing, grouping, sorting등에 사용한다 하더라도 성능상에 큰 문제를 가지지 않고 사용할 수 있는 것이다.


카우치베이스 시작하기


대략적인 개념을 잡았으면, 이제 카우치베이스를 직접 사용해보도록 하자. 


버킷 생성하기


버킷을 생성하기 위해서는 카우치베이스 웹콘솔에서 상단 “Data Buckets”를 선택한후 “Create New Data Bucket”을 선택한다.

 


버킷 생성을 선택하면 아래와 같이 버킷 생성 창이 나오는데, 버킷 이름을 “mybucket”이라고  지정하고,  개발 테스트용으로만 사용할 것이기 때문에, 이 버킷에서 사용할 메모리를 최소 사이즈인 100메가로 설정한후 버킷을 생성한다.

 



데이타 핸들링


버킷이 생성되었으면, 해당 버킷에 직접 데이타를 저장,조회,수정,삭제를 해보도록 하자.

앞에서 생성한 버킷의 우측 부분을 보면 “Documents”라는 버튼이 나온다. 이 버튼을 누르면, 현재 저장되어 있는 도큐먼트들을 보거나 또는 생성,수정,삭제 등이 가능하다.

“Create Document” 버튼을 누른후, 

Document ID에 “user0001”이라고 입력한다.

그리고 아래 그림과 같이 JSON 도큐먼트를 입력하고 Save 버튼을 누른다.


 

이때 주의할점은 카우치베이스에서 JSON 도큐먼트를 정의할때, 문자열은 “로 감싸야 한다. 일반 자바스크립트처럼 ‘로 감쌀 경우 에러가 나온다.

 


조회는 위의 보이는 Documents 메뉴창에서 Lookup Id를 선택하고, 도큐먼트 ID를 넣으면 해당 도큐먼트를 조회할 수 있고, 위의 도큐먼트 좌측에 보이는 “Edit Document”와 “Delete” 버튼을 이용하면, 수정 및 삭제를 할 수 있다.