⌘ 카우치베이스는 Key-Value Store인 동시에 Document 데이터베이스다.
⌘ Document를 저장할때는 1차적으로 메모리에 캐시되고 경우에 따라 디스크에 저장된다.
Eventually Persistent Model⌘ Optimistic Concurrency와 Pessimistic Concurrency를 제공한다.
Optimistic Concurrency-> 저장시점에 변경이 있으면 업데이트가 실패 (check-and-set)
Perssimistic Concurrency
-> 리소스에 접근 자체를 막는다. (get-and-lock)
-> client.get(KEY, {expiry: 3600, callback});
-> connection.get(KEY, function(err, result) { ... update(result); }
-> 리소스에 접근 자체를 막는다. (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/ } );
시간단위로 데이터를 clean up 한다.
-> 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 한다.
댓글
댓글 쓰기