기본 콘텐츠로 건너뛰기

라벨이 couchbase인 게시물 표시

카우치베이스 요약1

⌘ 카우치베이스 서버 클러스터는 1개 부터 1024개 까지 노드로 구성 될 수 있다.   ⌘ 노드 하나가 하나의 카우치베이스 인스턴스.   ⌘ 데이터는 클러스터내 노드들에서 파티션되고 분산된다.   ⌘ 카우치베이스 서버는 두개의 주요 컴포넌트가 있다. 클러스터 매니저 * 클러스터내 노드 설정 * 노드간 데이터 리발란싱 * 페일오버 후 데이터 복제 핸들링 * 통계자료 수집 * 로깅 * 클라이언트가 어디서 데이터를 찾아야 하는지 알려줄 수 있게 클러스터 맵(Cluster map)을 업데이트하며 관리한다. * 어드민 API를 노출하고 있고 웹 매니징 콘솔도 있다. * 클러스터 매니저는 distributed, concurrent 한 처리에 적합 하도록 Erlang/OTP로 만들어졌다. 데이터 매니저 * 데이터 저장소와 검색에대한 관리 * 메모리 케시 레이어, Disk Persistence Mechanism, 쿼리 엔진을 포함하고 있다 * 카우치베이스 클라이언트는 카우치베이스 매니저가 제공하는 클라이언트 맵을 사용한다. 이 맵을 통해 필요한 데이터를 가진 노드를 찾고 그 노드와 통신한다.   ⌘ 데이터 스토리지 카우치베이스는 데이터를 버킷에 관리한다. * 리소스와 연관된 로지컬한 그룹이다. * 오라클의 스키마 정도로 생각하면 된다. 두가지의 버킷종류를 제공한다. * 카우치베이스 * 멤케시 멤케시 버킷은 * 1MB 크기의 메모리에 바이너리로 데이터를 저장한다. * 데이터를 디스크에 저장하지 않는다. * Redundancy 하려고 노드에 데이터를 복제 하지 않는다. 카우치베이스 버킷은 * JSON Document, Primitive data 타입이나 Binary blob 형태로 20MB 까지 데이터를 저장 할 수 ...

카우치베이스 요약3 - View

⌘ 카우치베이스 뷰 Key 기반 동작은 데이터 접근에 효율적이고 성능도 좋지만 복잡한 동작엔 제한적이다. Document 기반에서는 컨텐트를 효과적으로 쿼리 할수있다. View 와 N1QL 두가지 방법을 제공한다. 뷰는 인덱스를 생성한다. 뷰는 자바스크립트로 작성된 MapReduce function 이다. 뷰는 Design Documents 에 하나 이상 저장될수 있다. ⌘ 뷰 생성하기 뷰를 큰 데이터셋으로 생성하면 클러스터 성능에 영향이 있을 수 있기 때문에 Development View를 생성해서 테스트 할 수 있다. Development View는 Development Design Document 에 생성되고 Production View 로 Publish 할 수 있다. 뷰의 생성과 수정은 Admin Console에서도 가능하고 Code 에서도 가능하다. ⌘ 뷰에 쿼리하기 Key로 쿼리하기 view.query({limit: 10, key: username}, function (error, results) { ... }); 범위로 쿼리하기 view.query({startkey: startDate, endkey: endDate}, function (error, results){ ... }); 정렬 순서 Null False True Number Text ( 대소문자 가림, 소문자 우선, UTF-8 순서 ) Arrays ( 저장된 값으로 동일하면 인덱스 순 ) Object ( 키 알파벳순 ) view.query({startkey: endDate, endkey: startDate, descending: true}, function (error, results){ ... }); 페이징 skip 파라메터와 limit 파라메터의 조합으로 사용 view.query({limit: 10, skip: 10, key: username}, funct...

카우치베이스 요약2

⌘ 카우치베이스는 Key-Value Store인 동시에 Document 데이터베이스다. ⌘ Document를 저장할때는 1차적으로 메모리에 캐시되고 경우에 따라 디스크에 저장된다. Eventually Persistent Model ⌘ Optimistic Concurrency와 Pessimistic Concurrency를 제공한다. Optimistic Concurrency  -> 저장시점에 변경이 있으면 업데이트가 실패 (check-and-set) Perssimistic Concurrency -> 리소스에 접근 자체를 막는다. (get-and-lock) ⌘ Item을 저장할때 기본 TTL은 0이다. 즉, Document는 Nerver Expired. ⌘ 카우치베이스는 JSON Document의 일부를 업데이트 하지 않고 전체를 새 버전으로 바꾼다. ⌘ set 메소드는 create new item and override를 의미한다. 논리적으로 upsert ( insert-or-update ) 이다. ⌘ add 메소드는 set과 유사하지만 동일 키가 있으면 에러난다. ⌘ get-and-touch는 일시적인 값을 다룰때 유용하다. 가령 특정기간 동안 임시 저장을 할 수있다. 값을 읽을때 마다 expire time을 연장할 수 있다.  -> client.get(KEY, {expiry: 3600, callback}); ⌘ CAS (check-and-set) Get-with-CAS: 값을 가져온 후 업데이트 가능 여부를 체크 -> connection.get(KEY, function(err, result) { ... update(result); } Check-and-Set: 값을 업데이트 할 때 체크 -> connection.set(KEY, DOC, {cas: cas}, function(err, result) { ... if(!err) / success / } ); ...