기본 콘텐츠로 건너뛰기

카우치베이스 요약3 - View

⌘ 카우치베이스 뷰

  • Key 기반 동작은 데이터 접근에 효율적이고 성능도 좋지만 복잡한 동작엔 제한적이다.
  • Document 기반에서는 컨텐트를 효과적으로 쿼리 할수있다.
  • ViewN1QL 두가지 방법을 제공한다.
  • 뷰는 인덱스를 생성한다.
  • 뷰는 자바스크립트로 작성된 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}, function (error, results) {
    ...
});
firstPage 메소를 이용해 Paginator 조합으로 사용
view.firstPage({limit: 10, key: username}, function (error, results, paginator) {
    if(paginator.hasNext()) {
            paginator.next(function (error, results) {
                    ..
            });
    }
});
  • Built-in Reduce function
    • _count
    • _sum
    • _stats

⌘ 카우치베이스가 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 Documentb-tree형태로 가진다.
  • 버킷들은 Design Document 정의를 메타데이터 파일에 저장한다.
  • 카우치베이스의 인덱스는 Incremental 이다.
  • 모든 변경사항은 인덱스파일 마지막에 더해진다.
    • 문서가 추가되면 인덱스 파일 끝에 추가하고, 삭제되면 삭제된 문서로 마킹해서 마지막에 추가한다.
  • 카우치베이스는 인덱스와 데이터파일이 지속적으로 증가하기 때문에 클러스터의 성능과 디스크 공간에 영햘을 준다.
    • Auto Compaction 설정을 할 필요가 있다.

⌘ Lazy Erasing과 뷰

  • 카우치베이스는 문서를 바로 삭제하지 않고 삭제된 문서임을 마킹힌다.
    • 실제 삭제는 삭제된 문서에 접근할때나 주기적으로 삭제된다.
  • 뷰는 디스크에 저장된 모든 문서를 대상으로 계산하기 때문에 삭제된 문서를 포함 할 수 있다.
    • include_docs 쿼리 파라메터 사용

⌘ Geospatial 뷰

  • GPS기반 위치정보 검색에 사용되는 특정뷰
  • R-tree로 저장
 

댓글