기본 콘텐츠로 건너뛰기

카우치베이스 요약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/ } );

⌘ lock

connection.lock(KEY,{ lockTime: 5 }, funciton(err, result) { ... update...} );

⌘ touch

TTL을 업데이트 한다.

⌘ incr

auto-incrementing IDs를 생성하는것과 동일하다.

⌘ delete

delete는 실제 데이터를 삭제하지 않고 delete flag를 설정할 뿐이다.

시간단위로 데이터를 clean up 한다.

⌘ flush

버킷에서 모든 문서를 삭제한다. 기본적으로 disabled되어 있다. 리얼환경에서는 쓰면 안된다.

댓글