More actions
imported>rabierre No edit summary |
(Repair batch-0001 pages from live compare) |
||
| (33 intermediate revisions by 2 users not shown) | |||
| Line 1: | Line 1: | ||
__TOC__ | __TOC__ | ||
<!-- MONIWIKI PageList(^Bigtable) --> | |||
* [[Bigtable]] | |||
* [[Bigtable/DataModel]] | |||
* [[Bigtable/MasterServer]] | |||
* [[Bigtable/TabletServer]] | |||
* [[Bigtable/분석및설계]] | |||
* [[Bigtable기능명세]] | |||
== 구조 == | == 구조 == | ||
테이블 -> 태블릿 -> SSTABLE -> block | 테이블 -> 태블릿 -> SSTABLE -> block | ||
| Line 7: | Line 13: | ||
# SSTABLE은 block의 집합이며 block들의 주소와 오프셋으로 구성되어있다. | # SSTABLE은 block의 집합이며 block들의 주소와 오프셋으로 구성되어있다. | ||
== 테이블 == | == 테이블 == | ||
데이터 저장 형식은 3차원 테이블형태. 행(row key), 열(column), 깊이(timestamp) | |||
태블릿을 모두 합병하면 테이블이 된다. | |||
# Key - value | # Key - value | ||
# row key : url(또는 데이터값의 대표, 제목등) | ## row key : url(또는 데이터값의 대표, 제목등) | ||
# column family : column 종류 | ## column family : column 종류 | ||
## 앵커 | ## 앵커 | ||
## 콘텐츠(제목?) <- 컬럼의 값이 value | ## 콘텐츠(제목?) <- 컬럼의 값이 value | ||
## Title | ## Title | ||
# timestamp는 별도 | ## timestamp는 별도 | ||
# value : 해당 사이트/키와 매핑되는 구조화된 데이터값 | ## value : 해당 사이트/키와 매핑되는 구조화된 데이터값 | ||
== 태블릿 == | == 태블릿 == | ||
태블릿을 모두 합병하면 테이블이 된다. | 태블릿을 모두 합병하면 테이블이 된다. | ||
태블릿은 SSTABLE들의 집합으로 구성되어있으며 SSTABLE들의 리스트를 저장하고 있다. | 태블릿은 SSTABLE들의 집합으로 구성되어있으며 SSTABLE들의 리스트를 저장하고 있다. | ||
# 태블릿의 이름은 : 마지막 키 -> 카탈로그에 매핑필요 | # 태블릿의 이름은 : 마지막 키 -> 카탈로그에 매핑필요 | ||
# 마지막 키는 카탈로그에서 shorten id와 매핑되어있다. | ## 마지막 키는 카탈로그에서 shorten id와 매핑되어있다. | ||
# 태블릿은 하나 이상의 row로 구성됨. | # 태블릿은 하나 이상의 row로 구성됨. | ||
# 태블릿은 SSTABLE의 | # 태블릿은 SSTABLE의 ID+오프셋을 리스트를 저장하고 있다. | ||
=== SPLIT === | === SPLIT === | ||
# split 허용 | # split 허용 | ||
| Line 29: | Line 36: | ||
# row는 하나 이상의 태블릿에 존재할 수 있다. | # row는 하나 이상의 태블릿에 존재할 수 있다. | ||
== | == SSTable == | ||
SSTABLE은 하나의 memtable과 block의 시작주소와 오프셋들로 이루어져있다. | SSTABLE은 하나의 memtable과 block의 시작주소와 오프셋들로 이루어져있다. | ||
DFS 최소 파일 단위 | |||
# SSTABLE 명? | # SSTABLE 명? | ||
## 태블릿Id | ## 태블릿Id | ||
## + | ## + 마지막 row key | ||
## | # 데이터 블록과 인덱스 블록 | ||
# | ## 데이터 블록 | ||
## 인덱스 블록 | |||
## 약 64KB마다 존재하는 row key를 블록의 인덱스로 한다. | |||
## 블록의 인덱스와 실제 파일의 주소를 | |||
# 다수의 태블릿이 하나의 SSTable을 참조할 때의 문제점? | |||
## 여러 태블릿이 하나의 SSTable을 참조해도 블럭들을 오프셋으로 참조하므로 같은 부분을 참조하는 일이 없다. | |||
## 각 태블릿의 majorCompaction시 태블릿별로 SSTable들이 나누어지므로 결국 SSTable은 하나의 태블릿에 피참조된다. | |||
== 블록 == | == 블록 == | ||
# 블록은 | # 블록은 64KB내외의 암시적인 자료구조이다. | ||
## SSTABLE의 주소와 오프셋으로 블록들이 구분된다. | ## SSTABLE의 주소와 오프셋으로 블록들이 구분된다. | ||
# | # 명시적인 자료구조가 아니라 SSTable에서 row key들로 구분되어진 범위이다. | ||
## 블록 인덱스로 선택된 row key부터 다음 블록 인덱스로 선택된 row key가 나올 때 까지를 하나의 블록 단위로 한다. | |||
## 반드시 64KB가 되지는 않음 | |||
== memtable == | == memtable == | ||
# 메모리에 할당되어있다. | # 메모리에 할당되어있다. | ||
# 태블릿당 한개 | # 태블릿당 한개 | ||
# 쓰기밖에 안됨. | # 쓰기밖에 안됨. | ||
# '''데이터 블럭과''' '''인덱스 블럭으로''' 나누어짐 | |||
# 크기 | |||
## '''데이터 블럭 크기 : 32MB''' | |||
## '''인덱스 블럭은 크기제한 없다'''. | |||
# 데이터 | |||
## '''데이터 블럭 : 키:값을 쓴다'''. | |||
## '''인덱스 블럭 : 태블릿이 참조하고 있는 SSTable의 블럭 인덱스들 merge''' | |||
# 할당된 메모리 크기가 다 차서 더이상 쓸 수 없을 때 SSTABLE로 저장한다. | # 할당된 메모리 크기가 다 차서 더이상 쓸 수 없을 때 SSTABLE로 저장한다. | ||
# SSTABLE들의 인덱스를 가진다 | # SSTABLE들의 인덱스를 가진다 | ||
# 인덱스는 어떻게? | # 인덱스는 어떻게? | ||
== 로컬리티 그룹 == | == 로컬리티 그룹 == | ||
특정 컬럼 | 특정 컬럼을 가지는 row들을 별도의 태블릿에 저장한 것. ex) 타이틀 | ||
# TS의 메모리에 존재한다. | |||
# 특정 컬럼 종류만을 가진다. ex) title | |||
== 커밋로그 == | == 커밋로그 == | ||
# 태블릿의 ID + 쓰려는 키:밸류 | # 태블릿의 ID + 쓰려는 키:밸류 | ||
| Line 62: | Line 82: | ||
## memtable의 T/S가 더 최신이 아니라면 minor compaction을 하여 로그를 비운다. | ## memtable의 T/S가 더 최신이 아니라면 minor compaction을 하여 로그를 비운다. | ||
== 카탈로그 == | == 카탈로그 == | ||
# 카탈로그의 주소는 | # 카탈로그의 주소는 Locker에 등록되어있다. (client의 접근을 위해 Locker에 등록) | ||
# 카탈로그 또한 태블릿. TS가 관리한다. | # 카탈로그 또한 태블릿. TS가 관리한다. | ||
# 카탈로그에 필요한 것 | # 카탈로그에 필요한 것 | ||
## 태블릿 ID 매핑 테이블 | ## 태블릿 ID 매핑 테이블 | ||
## 컬럼 패밀리 개수 | ## 컬럼 패밀리 개수 | ||
## | ## 카탈로그 전용 파일 필요?? SSTable 하나를 할당받아 다 쓸때까지 해제하지 않는건 어떨까? | ||
* ISSUE | * ISSUE | ||
## 카탈로그에 언제 접근할 것인가? | ## 카탈로그에 언제 접근할 것인가? | ||
== 태블릿 컴색 트리/ 태블릿 트래커 == | == 태블릿 컴색 트리/ 태블릿 트래커 == | ||
'''루트태블릿, 메타데이터 태블릿, 유저태블릿으로 구성됨. 일반 태블릿과 마찬가지로 SSTABLE로 이루어져있으며 write only임'''. | '''루트태블릿, 메타데이터 태블릿, 유저태블릿으로 구성됨. 일반 태블릿과 마찬가지로 SSTABLE로 이루어져있으며 write only임'''. | ||
'''자료구조 : B+-트리''' | '''자료구조 : B+-트리 -- 배열(루트, 메타태블릿) + 리스트(유저태블릿) --''' | ||
# '''루트 태블릿''' | # '''루트 태블릿''' | ||
## | ## Locker에 위치가 기록된다 | ||
## 메타태블릿이 분할될 때(또는 삽입될 때) 갱신됨. | ## 메타태블릿이 분할될 때(또는 삽입될 때) 갱신됨. | ||
## 루트태블릿의 원소 하나는 메타데이터 '''태블릿'''과 매칭된다. | ## 루트태블릿의 원소 하나는 메타데이터 '''태블릿'''과 매칭된다. | ||
| Line 85: | Line 105: | ||
## key : 태블릿 ID(row key) | ## key : 태블릿 ID(row key) | ||
value : IP+port# | value : IP+port# | ||
Latest revision as of 23:56, 26 March 2026
구조
테이블 -> 태블릿 -> SSTABLE -> block
- 테이블은 태블릿들의 논리적인 집합.
- 태블릿은 SSTABLE들의 집합으로 구성되어있으며 SSTABLE들의 리스트를 저장하고 있다.
- SSTABLE은 block의 집합이며 block들의 주소와 오프셋으로 구성되어있다.
테이블
데이터 저장 형식은 3차원 테이블형태. 행(row key), 열(column), 깊이(timestamp) 태블릿을 모두 합병하면 테이블이 된다.
- Key - value
- row key : url(또는 데이터값의 대표, 제목등)
- column family : column 종류
- 앵커
- 콘텐츠(제목?) <- 컬럼의 값이 value
- Title
- timestamp는 별도
- value : 해당 사이트/키와 매핑되는 구조화된 데이터값
태블릿
태블릿을 모두 합병하면 테이블이 된다. 태블릿은 SSTABLE들의 집합으로 구성되어있으며 SSTABLE들의 리스트를 저장하고 있다.
- 태블릿의 이름은 : 마지막 키 -> 카탈로그에 매핑필요
- 마지막 키는 카탈로그에서 shorten id와 매핑되어있다.
- 태블릿은 하나 이상의 row로 구성됨.
- 태블릿은 SSTABLE의 ID+오프셋을 리스트를 저장하고 있다.
SPLIT
- split 허용
- 트리거 : 태블릿 크기가 200MB 이상일때
- row는 하나 이상의 태블릿에 존재할 수 있다.
SSTable
SSTABLE은 하나의 memtable과 block의 시작주소와 오프셋들로 이루어져있다. DFS 최소 파일 단위
- SSTABLE 명?
- 태블릿Id
- + 마지막 row key
- 데이터 블록과 인덱스 블록
- 데이터 블록
- 인덱스 블록
- 약 64KB마다 존재하는 row key를 블록의 인덱스로 한다.
- 블록의 인덱스와 실제 파일의 주소를
- 다수의 태블릿이 하나의 SSTable을 참조할 때의 문제점?
- 여러 태블릿이 하나의 SSTable을 참조해도 블럭들을 오프셋으로 참조하므로 같은 부분을 참조하는 일이 없다.
- 각 태블릿의 majorCompaction시 태블릿별로 SSTable들이 나누어지므로 결국 SSTable은 하나의 태블릿에 피참조된다.
블록
- 블록은 64KB내외의 암시적인 자료구조이다.
- SSTABLE의 주소와 오프셋으로 블록들이 구분된다.
- 명시적인 자료구조가 아니라 SSTable에서 row key들로 구분되어진 범위이다.
- 블록 인덱스로 선택된 row key부터 다음 블록 인덱스로 선택된 row key가 나올 때 까지를 하나의 블록 단위로 한다.
- 반드시 64KB가 되지는 않음
memtable
- 메모리에 할당되어있다.
- 태블릿당 한개
- 쓰기밖에 안됨.
- 데이터 블럭과 인덱스 블럭으로 나누어짐
- 크기
- 데이터 블럭 크기 : 32MB
- 인덱스 블럭은 크기제한 없다.
- 데이터
- 데이터 블럭 : 키:값을 쓴다.
- 인덱스 블럭 : 태블릿이 참조하고 있는 SSTable의 블럭 인덱스들 merge
- 할당된 메모리 크기가 다 차서 더이상 쓸 수 없을 때 SSTABLE로 저장한다.
- SSTABLE들의 인덱스를 가진다
- 인덱스는 어떻게?
로컬리티 그룹
특정 컬럼을 가지는 row들을 별도의 태블릿에 저장한 것. ex) 타이틀
- TS의 메모리에 존재한다.
- 특정 컬럼 종류만을 가진다. ex) title
커밋로그
- 태블릿의 ID + 쓰려는 키:밸류
- 태블릿의 ID은 태블릿의 가장 마지막 키를 이용해 만든다.
- 태블릿의 ID은 매핑테이블(카탈로그)에서 짧은 ID으로 대체됨.
- 저장공간의 재사용 : 커밋로그는 원형 자료구조를 사용하여 자동으로 공간을 재사용하도록 한다.
- 커밋로그의 가장 마지막 타임스탬프와 memtable의 가장 오래된 타임스탬프와 비교하여 memtable의 타임스탬프가 더 최신이라면 로그삭제가능
- memtable의 T/S가 더 최신이 아니라면 minor compaction을 하여 로그를 비운다.
카탈로그
- 카탈로그의 주소는 Locker에 등록되어있다. (client의 접근을 위해 Locker에 등록)
- 카탈로그 또한 태블릿. TS가 관리한다.
- 카탈로그에 필요한 것
- 태블릿 ID 매핑 테이블
- 컬럼 패밀리 개수
- 카탈로그 전용 파일 필요?? SSTable 하나를 할당받아 다 쓸때까지 해제하지 않는건 어떨까?
- ISSUE
- 카탈로그에 언제 접근할 것인가?
태블릿 컴색 트리/ 태블릿 트래커
루트태블릿, 메타데이터 태블릿, 유저태블릿으로 구성됨. 일반 태블릿과 마찬가지로 SSTABLE로 이루어져있으며 write only임. 자료구조 : B+-트리 -- 배열(루트, 메타태블릿) + 리스트(유저태블릿) --
- 루트 태블릿
- Locker에 위치가 기록된다
- 메타태블릿이 분할될 때(또는 삽입될 때) 갱신됨.
- 루트태블릿의 원소 하나는 메타데이터 태블릿과 매칭된다.
- 메타데이터 태블릿
- 유저태블릿이 분할될 때(또는 삽입될 때) 갱신됨
- 유저 태블릿
- 태블릿 ID(row key)와 태블릿 서버 매핑해줌.
- 태블릿이 어디에 저장되어있는지 알 수 있음.
- 저장 데이터
- key : 태블릿 ID(row key)
value : IP+port#