욱'S 노트

HBase - HBase 데이터모델 본문

Programming/HBase

HBase - HBase 데이터모델

devsun 2014. 12. 26. 10:19

지난 시간에는 테이블을 만들고 데이터를 막 넣어봤다. 근데 테이블을 만들때랑 데이터를 넣을때랑 기존 RDBMS랑 먼가 다르다.

다행히 공식 사이트에 datamodel이라는 문서가 있다. 공부하자.


HBase 데이터모델 용어


Namespace

유사한 테이블들의 논리적인 집합. 향후 다중처리 feature에 토대가 될 전망이다.


  • Quota Management (HBASE-8410) - Restrict the amount of resources (ie regions, tables) a namespace can consume.

  • Namespace Security Administration (HBASE-9206) - provide another level of security administration for tenants.

  • Region server groups (HBASE-6721) - A namespace/table can be pinned onto a subset of regionservers thus guaranteeing a course level of isolation.


Table

다중 로우로 구성된 집합


Row

HBase에서 한 로우는 로우 키와 하나 또는 그 이상의 칼럼과 값으로 구성된다.  로우는 저장될때 로우키를 기준으로 알파벳순으로 정렬되어 저장된다. 이러한 이유로 로우 키는 설계에서 매우 중요하다. 이러한 저장 방식은 연관된 로우끼리 가깝게 배치하려는 목적이다. 가장 일반적인 로우키의 패턴은 웹사이트 도메인이다. 만약 로우키가 도메인이라면 도메인 역순으로 저장할 수 있을 것이다. ( org.apache.www, org.apache.main). 이러한 방식으로 저장하면 테이블에서 모든 아파치 도메인은 근처에 저장되게 된다. 이러한 방식은 서브도메인의 첫글자를 기준으로 저장되는 것 보다 좋은 방식이 될 것이다.


Column 

HBase 칼럼은 column family 와 column qualifier로 구성된다. 해당 항목들은 콜론(:)으로 구분된다.


Column Family

컬럼 패밀리란 컴럼과 값의 집합을 성능상의 이유로 물리적으로 값은 장소에 배치한 것을 의미한다.  각 컬럼 패밀리는 저장된 프로퍼티의 집합을 가진다. 각 테이블로 로우는 주어진 컬럼 패밀리에 저장할 것이 없더라도 같은 칼럼 패밀리들을 가진다. 컬럼 패밀리는 테이블이 생성될때 명시되며, 내부 파일시스템에 저장되는 방식에 영향을 준다. 그러므로, 컬럼 패밀리는 스키마 설계에서 중요한 고려 사항이다.


Column  Qualifier  

컬럼 수식어란 데이터를 인덱스를 제공하기 위해 컬럼 패밀리에 추가된 것이다. 주어진 컬럼 패밀리 content의 즉 컬럼 수석어는 content:html, content:pdf 일 수 있다. 컬럼 패밀리는 테이블이 생성될때 고정되지만, 컬럼 수식어는 로우간에 가변적이고 다를 수 있다.


Cell

셀은 로우, 컬럼패밀리, 컬럼 수식어의 집합이며, 값의 버젼을 표한하기 위해서 timestamp 값을 포함한다. 셀은 값은 해석되지 않은 바이트 배열이다.


Timestamp 

Timestamp는 주어진 값의 버젼 식별자로서 각 값과 나란히 기록된다. 기본적으로 timestamp는 데이터가 기록될때 RegionServer의 시간이며, 셀에 데이터를 넣을때 명시할 수도 있다. Timestamp를 직접적으로 조작하는 것은 특별한 경우이며, 일반적인 경우에는 권장하지 않는다. 어플리케이션 레벨에서 timestamp를 인코딩하는 것은 권장하는 패턴이다.


HBase가 획득할 수 있는 최대 수의 버젼을 컬럼 패밀리별로 명시할 수 있다. 최대 수의 버젼을 초과했을때, 가장 오래된 버젼은 삭제된다. 기본적으로는 최신버젼만 유지된다.


개념적인 테이블의 구조이다.


Row KeyTime StampColumnFamily contentsColumnFamily anchorColumnFamily people
"com.cnn.www"t9 anchor:cnnsi.com = "CNN" 
"com.cnn.www"t8 anchor:my.look.ca = "CNN.com" 
"com.cnn.www"t6contents:html = "<html>..."  
"com.cnn.www"t5contents:html = "<html>..."  
"com.cnn.www"t3contents:html = "<html>..."  
"com.example.www"t5contents:html = "<html>..." people:author = "John Doe"


{ "com.cnn.www": { contents: { t6: contents:html: "<html>..." t5: contents:html: "<html>..." t3: contents:html: "<html>..." } anchor: { t9: anchor:cnnsi.com = "CNN" t8: anchor:my.look.ca = "CNN.com" } people: {} } "com.example.www": { contents: { t5: contents:html: "<html>..." } anchor: {} people: { t5: people:author: "John Doe" } } }


'Programming > HBase' 카테고리의 다른 글

HBase - HBase 명령어(DML)  (0) 2014.12.26
HBase - HBase 명령어(DDL)  (0) 2014.12.26
HBase - HBase 시작하기  (0) 2014.12.24
HBase - HBase 개요  (0) 2014.12.24
Comments