2. HBase
● Hadoop 기반의 NoSQL
○ 컬럼 패밀리 + 스키마 없음
○ 조인, 인덱스 없음
○ 행 단위 조작에 대해서만 Atomic
■ 다중 행에 대한 트랜잭션 지원 없음
● 분산 데이터 저장소
○ 데이터를 다수 서버에 분산 보관
○ 자주 접근되는 데이터를 메모리에 캐시
● 데이터 영속성
○ 물리적 저장소로 HDFS를 사용
3. 데이터 모델
1개 테이블의 구조
rowkey
column qualifier
info 컬럼패밀리
bkchoi
email:
bkchoi@scgs.co.kr
madvirus
name: 최
범균
email:
madvirus@madvirus.net
zoro
address 컬럼패밀리
realname:
돈 디에고 데 라 베가
addr2:
상도동 ...
addr1:
서울시 관악구
cell
addr1:
서울시 동작구
zipcode
신사동 ….
4. 데이터 모델
● 테이블은 n개의 컬럼 패밀리를 가짐
● 1개의 행 = rowkey + 컬럼패밀리들
○ rowkey를 기준으로 정렬: 유일한 인덱스
● 컬럼 패밀리
○ 임의의 (column qualifer, 값) 쌍들로 구성
● column qualifer의 값은 n개의 버전을 가짐
○ 기본 설정은 3개의 마지막 버전 보관
○ 버전 값은 시간(timestamp)을 이용
● 단일 셀 식별
○ <rowkey, column family, column qualifer, version>
● rowkey, column qualifier, 셀 값의 타입
○ byte 배열
5. 데이터 모델 예시: 채팅메시지
rowkey: 대화ID-timestamp(역순)
message 컬럼 패밀리
location 컬럼 패밀리
1010101-0000124345456
senderId:
kame
senderName:
출판사
message:
안녕하세요
1010101-0000124345477
senderId:
bkchoi
senderName:
최범균
message:
네~
coord:
locname:
파주
6. 데이터 접근 오퍼레이션
● get: 특정 rowkey에 해당하는 row 접근
● put: 특정 rowkey에 해당하는 데이터를 추가
또는 변경
● delete: 특정 rowkey에 해당하는 row 삭제
● scan: 특정 범위의 rowkey에 속하는 row 목록
접근
● increment: 특정 셀의 값을 증가
● CAS(compare and set): 특정 셀의 값을 비교
후 설정
7. 리전Region
● 테이블의 부분 집합을 관리
○ 각 리전은 특정 범위의 rowkey 데이터를 다룸
■ 예) 리전1: [~1000], 리전2: [1001~]
○ 리전 서버마다 n개의 리전을 제공
● 일정 크기 이상 커지면 분리
리전서버
테이블A
의
리전1
테이블B
의
리전2
리전서버
테이블A
의
리전2
테이블B
의
리전1
테이블B
의
리전3
8. 리전서버, 마스터서버, 주키퍼
테이블 생성, 삭제, 수정 요청
리전 위치 검색
클라이언트
주키퍼 클러스터
마스터서버
DDL 처리
리전 할당 관
리
리전 분리 정보 제공
데이터 송수신
리전서버
리전서버
HDFS 데이터노드
HDFS 데이터노드
9. 리전의 구성
변경 내역 로그
리전서버
LRU 캐시.
HFile의 블록을 캐
시
블록캐시 (BlockCache)
리전 (특정 테이블의 rowkey 1000~ 범위)
데이터를 Put 하면 일단
멤스토어에 보관.
멤스토어가 가득 차면
HFile 형식으로 파일로
Flush하고 멤스토어를
비움.
스토어
스토어(컬럼패밀리 당 1개)
리전
HLog
(WAL)
멤스토어
(MemStore)
HFile
HFile
HFile
<rowkey, cf, c, ver, 값>
목록을 가짐.
파일
파일
파일
파일 시스템(HDFS)
파일
10. HFile Compaction
● Minor Compaction
○ 주어진 기준에 따라 작은 크기의 HFile들을 묶어서 한
개의 HFile로 만듦
■ 기준: 스토어의 최대/최소 HFile 개수, 최소 크기,
최대 크기 등을 고려해서 합칠 파일 선택
○ 삭제된 행, 오래된 버전도 그대로 복사
● Major Compaction
○ 스토어의 모든 HFile을 합쳐서 1개의 HFile 생성
○ 삭제된 행, 오래된 버전은 삭제 됨
11. 컬럼 패밀리 별 설정
● HFile 블록 크기: 기본 64KB
○ 블록 크기 작으면 랜덤 접근, 크면 순차 스캔 유리
● 블룸 필터
○ 검색 데이터가 해당 블록에 존재하지 않는지에 대한
데이터를 추가할 지 여부 (기본은 추가하지 않음)
● TTL: 데이터 수명 지정 (초 단위, 기본 값은 TTL 없음)
○ major compaction에서 TTL 보다 오래된 버전을 삭제
● 압축:
○ 블록 데이터를 디스크에 저장할 때 압축처리
● 셀 버전 개수: 기본 3개
○ 개수 지정 가능 (예, 1개)
○ 최소 보관 개수 지정 가능
■ 이 경우 TTL 보다 오래된 버전도 최소 1개 남음