10장. 칼럼 패밀리저장소
• 칼럼 패밀리 데이터 베이스를 사용하는 카산드라에 대해 다룸
RDBMS 카산드라
데이터베이스 인스턴스 클러스터
데이터베이스 키스페이스
테이블 칼럼패밀리
로우(=행) 로우
칼럼(모든 행이 같아야 함) 칼럼(행마다 다를 수 있음)
13년 4월 20일 토요일
3.
10.1 칼럼패밀리 데이터저장소
Coulum 2, 9 처럼 행마다 칼럼이 다를 수 있음.
13년 4월 20일 토요일
4.
10.2 특징
/* 표준칼럼패밀리
RDMBS 의 테이블과 비슷함
각 행이 같은 컬럼을 가지지 않아도 됨
다른 행에 영향을 주지 않고 칼럼 추가 */
{
//행
“pramod-sadalage” : {
firstName :“Pramod”,
lastName :”Sadalage”,
lastVisit :”2012/12/12”
}
//행
“martin-flower” : {
firstName :“Martin”,
lastName :“Fowler”,
location :“Boston”
}
}
- 칼럼이 하나의 기본 저장 단위 (이름(키) - 값)
- 키스페이스 : 표준칼럼패밀리와 슈퍼칼럼패밀리를 저장하는 데이터베이스 개념
/* 슈퍼칼럼 : 관련 데이터 저장에 유용,
일부 칼럼을 사용하지 않을 경우 최적이 아님 */
{
name:“book:978-070392849”
value : {
author :“Mitch Albon”,
title :“Tuesdays with Morrie”,
isbn :“978-0767905923”
}
}
// 칼럼패밀리에 슈퍼칼럼이 있으면 슈퍼칼럼 패밀리가 됨
13년 4월 20일 토요일
5.
10.2.1 일관성
• 커밋로그와멤테이블(memtable, 메모리 내 구조)에 기록되면 쓰기 연산 완료
• SSTable : 메모리에서 주기적으로 기록하는 공간, 한번 Flush 되면 수정 불가, 재기록 X
• 사용되지 않는 SSTable 은 컴팩션 시 회수됨.
• 읽기 보정(read repaire) : 최신 데이터를 얻기 위해 낡은 복제본 데이터를 먼저 읽는 절차
• 일관성 설정 QUORUM : 최신 데이터 리턴을 보장, 과반수 이상의 노드에 전파되어야 클
라이언트에 통지 (일관성 수준 설정에 따라 달라질 수 있음 : ONE,ALL...)
• 일관성 값을 2로 지정한다면 R + W 가 복제 인수가 커져 (2+2>3) 일관성 수준 향상
• 힌티드 핸드오프 : 다운된 노드가 데이터 관할권이 다른 온라인 노드로 전달되어 실패한 노
드를 빠르게 복원할 수 있음
13년 4월 20일 토요일
6.
10.2.2 트랜잭션
• 전통적의미의 트랜잭션을 지원하지는 않음
• 특정 행에 대해 칼럼을 삽입하거나 갱신하는 것을 하나의 쓰기로 취급
• 커밋로그와 멤테이블에 기록이 성공하면 쓰기가 성공한 것으로 판단
• 노드 다운 후 복원되면 반영되지 않은 사항을 커밋 로그에 적용 (오라클의 redo log)
• ZooKeeper, Cages 등 외부 트랜잭션 라이브러리 사용
13년 4월 20일 토요일
7.
10.2.3 가용성
• 가용성공식 : R(읽기 응답 수) + W(쓰기 성공 수) > N(참여 노드 수)
• N 을 고정한 상태에서 R,W 를 변경해 가용성 수준 조절함.
• 필요에 따라 키스페이스와 읽기/쓰기 연산의 설정을 조절해야 함.
10.2.4 조회 기능
• 카산드라는 질의어가 풍부하지 않음
• 데이터가 칼럼 이름으로 정렬되므로 칼럼과 칼럼패밀리가 읽기에 최적화 되도록 설계필요
• 자주 조회되는 칼럼의 값을 행의 키로 사용
•
13년 4월 20일 토요일
8.
10.2.4.1~3 기본 쿼리,고급쿼리,인덱싱,CQL
• 카산드라 기본 쿼리 : GET, SET, DEL
• SET Customer [‘mfowler’] [‘web’] = ‘www.naver.com’;
• GET Customer [‘mfowler’]; GET Customer [‘mfowler’][‘web’];
• DEL Customer [‘mfowler’]; DEL Customer [‘mfowler’][‘web’];
• 인덱스를 설정한 고급쿼리 : GET Customer WHERE city = ‘Boston’;
• CQL(카산드라 쿼리 언어) : SQL 과 비슷한 질의어 지원, 조인이나 서브쿼리 불가
13년 4월 20일 토요일
9.
10.2.5 확장성
• 클러스터확장 시 노드만 하나 더 추가
• 노드를 추가하면 더 많은 읽기와 쓰기를 지원하며 클러스터의 능력이 늘어남
• 새로운 노드가 추가되는 동안에도 클라이언트에서 오는 요청을 처리 가능
13년 4월 20일 토요일
10.
10.3 적절한 사용처
•이벤트 로깅 : 모든 어플리케이션의 이벤트 로그를 읽고 쓰는데 적합
• 콘텐츠 관리 시스템 : 블로그 항목 저장 시 태그, 카테고리, 링크, 트랙백을 다른 칼럼에
함께 저장할 수 있음.
• 카운터 : 칼럼패밀리 생성 시 CounterColumnType 속성을 사용 하면 각 칼럼 패밀리
별로 카운트를 가짐 ex) INCR vsist_counter[‘mfowler’][‘home’] BY 1;
• 기간만료(접근권한, 배너광고 등) : 카산드라에서는 미리 정한 시간이 지난 다음에 자동
으로 삭제되는 칼럼을 만들 수 있음 (TTL :TimeTo Live , 초로 정의 함)
13년 4월 20일 토요일
11.
10.4 사용하지 말아야할 때
• 쿼리를 사용해 데이터 집계할 때 모든 데이터를 조회해 수행해야 함
• 초기 프로토타입이나 기술 검토용으로 부적절함
• 쿼리 패턴이 바뀌면 칼럼 패밀리 설계도 바꿔야 함
• 스키마 변경보다 쿼리 변경에 더 많은 비용이 듦
13년 4월 20일 토요일