⌘ 카우치베이스 뷰
- Key 기반 동작은 데이터 접근에 효율적이고 성능도 좋지만 복잡한 동작엔 제한적이다.
- Document 기반에서는 컨텐트를 효과적으로 쿼리 할수있다.
- View와 N1QL 두가지 방법을 제공한다.
- 뷰는 인덱스를 생성한다.
- 뷰는 자바스크립트로 작성된 MapReduce function 이다.
- 뷰는 Design Documents에 하나 이상 저장될수 있다.
⌘ 뷰 생성하기
- 뷰를 큰 데이터셋으로 생성하면 클러스터 성능에 영향이 있을 수 있기 때문에 Development View를 생성해서 테스트 할 수 있다.
- Development View는 Development Design Document 에 생성되고 Production View 로 Publish 할 수 있다.
- 뷰의 생성과 수정은 Admin Console에서도 가능하고 Code 에서도 가능하다.
⌘ 뷰에 쿼리하기
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}, function (error, results) {
...
});
firstPage 메소를 이용해
Paginator 조합으로 사용
view.firstPage({limit: 10, key: username}, function (error, results, paginator) {
if(paginator.hasNext()) {
paginator.next(function (error, results) {
..
});
}
});
⌘ 카우치베이스가 Reduce function을 실행하는 방법
- key와 values 파라메터 2개를 받음
- key는 [key, Document IDs..] 형식의 배열
- 멀티노드 클러스터에서는 각 노드에서 매번 reduce를 실행
- values 배열이 큰 경우, 실행을 나눠서 해서 결과를 받는다.
- key별로 한번이상 redouce가 실행될 경우 결과를 줄이고 취합하는 부가적인 동작을 한다.
- re-reduce 최종 reduce실행을 의미
- reduce function의 마지막 파라메터로 전달됨
function (key, values, rereduce) {
if(rereduce){
//Final aggregation...
} else {
...
}
}
⌘ 뷰는 파일로 저장된다
- 뷰는 파일로 저장되고 저장된 파일들은 Design Document를 b-tree형태로 가진다.
- 버킷들은 Design Document 정의를 메타데이터 파일에 저장한다.
- 카우치베이스의 인덱스는 Incremental 이다.
- 모든 변경사항은 인덱스파일 마지막에 더해진다.
- 문서가 추가되면 인덱스 파일 끝에 추가하고, 삭제되면 삭제된 문서로 마킹해서 마지막에 추가한다.
- 카우치베이스는 인덱스와 데이터파일이 지속적으로 증가하기 때문에 클러스터의 성능과 디스크 공간에 영햘을 준다.
- Auto Compaction 설정을 할 필요가 있다.
⌘ Lazy Erasing과 뷰
- 카우치베이스는 문서를 바로 삭제하지 않고 삭제된 문서임을 마킹힌다.
- 실제 삭제는 삭제된 문서에 접근할때나 주기적으로 삭제된다.
- 뷰는 디스크에 저장된 모든 문서를 대상으로 계산하기 때문에 삭제된 문서를 포함 할 수 있다.
⌘ Geospatial 뷰
- GPS기반 위치정보 검색에 사용되는 특정뷰
- R-tree로 저장
댓글
댓글 쓰기