Hbase data model concept
Hbase data model
- Hbase에서는, 테이블에 데이터가 row와 column을 가진 형태로 저장된다.
- RDBMS(Oracle, Mysql)와 용어적으로 겹치는 부분이 존재해보지만, 관계형 데이터베이스와는 전혀 다르다.
- Hbase는 다차원 형태의 Map으로서 테이블을 이해하는 것이 도움이 될 것이다.
{
"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"
}
}
}
Table
- Table은 다수의 Row들로 구성되어 있다.
Row
- Hbase의 Row는 하나의 Row key와 다수의 값을 가진 컬럼들로 이뤄져있다.
- Row는 저장될 때 결정된 Row key에 의해서, 문자스럽게(alphabetically) 정렬된다.
- 정렬의 대상이 되는 Row key의 설계는 매우 중요하다.
- 정렬이 중요한 이유는 필요한 데이터들을 서로 근처에 둬서 효율적으로 데이터를 저장하는 것이 목적이다.
- 만약에 Domain의 주소들을 저장하는 상황이라고 생각하면,
- org.apache.www, org.apache.mail, org.apache.jira가 있는 상황
- Rowkey로 지정되면, 테이블 내에서 서로의 근처가 있기 때문에,
- org라고 검색이 됐을 때, 위 세 개의 데이터들이 근접하기 때문에 빠른 속도로 결과를 얻을 수 있다.
Column
- Hbase의 Column은 Column Family와 Column Qualifier로 구성되어 있다.
- Column을 유윌하게 구분하는 값은 {Column Family}:{Column Qualifier}
- {Student}:{Name}
Column Family
- Column, Value들에 대한 정보를 포함
- 각 Column Family는, 아래의 정보들을 포함할 수 있다.
- 메모리에 캐시에 필요한 정보
- 데이터들을 압축하는 방식
- Rowkey를 인코딩하는 방식
- 테이블내의 모든 Row는 동일한 Column Family를 가질 수 있다.
Column Qualifier
- Column Qualifier은 Column Family에 주어진 데이터의 Index를 제공하기 위한 목적
- {Column Qualifier}:{Column Family}
- Column Family는 테이블이 만들어질 때, 고정되지만, Column Qualifier은 각 Row마다 선택적으로 포함할 수 있음
- RDBMS와 다르게, 선택적으로 Column을 사용할 수 있으므로 데이터 저장 측면에서 효율적
Cell
- Cell은 Row, Column Family, Column Qualifier의 결합을 의미
- Value와 Value’s Version을 의미하는 Timestamp를 포함
Timestamp
- 값의 버전 관리를 위해서 사용된다
- 기본적으로, Timestamp는 Region Server에 데이터가 쓰여진 시간을 의미