1. 구조 ¶
테이블 -> 태블릿 -> SSTABLE -> block
1. 테이블은 태블릿들의 논리적인 집합.
1. 태블릿은 SSTABLE들의 집합으로 구성되어있으며 SSTABLE들의 리스트를 저장하고 있다.
1. SSTABLE은 block의 집합이며 block들의 주소와 오프셋으로 구성되어있다.
1. 테이블은 태블릿들의 논리적인 집합.
1. 태블릿은 SSTABLE들의 집합으로 구성되어있으며 SSTABLE들의 리스트를 저장하고 있다.
1. SSTABLE은 block의 집합이며 block들의 주소와 오프셋으로 구성되어있다.
2. 테이블 ¶
1. Key - value
- row key : url(또는 데이터값의 대표, 제목등)
- column family : column 종류
- 앵커
- 콘텐츠(제목?) <- 컬럼의 값이 value
- Title
- 앵커
- timestamp는 별도
- value : 해당 사이트/키와 매핑되는 구조화된 데이터값
3. 태블릿 ¶
태블릿을 모두 합병하면 테이블이 된다.
태블릿은 SSTABLE들의 집합으로 구성되어있으며 SSTABLE들의 리스트를 저장하고 있다.
1. 태블릿의 이름은 : 마지막 키 -> 카탈로그에 매핑필요
1. 태블릿은 SSTABLE의 ID+오프셋을 리스트를 저장하고 있다.
태블릿은 SSTABLE들의 집합으로 구성되어있으며 SSTABLE들의 리스트를 저장하고 있다.
1. 태블릿의 이름은 : 마지막 키 -> 카탈로그에 매핑필요
- 마지막 키는 카탈로그에서 shorten id와 매핑되어있다.
1. 태블릿은 SSTABLE의 ID+오프셋을 리스트를 저장하고 있다.
5. 블록 ¶
- 블록은 64KB내외의 암시적인 자료구조이다.
- SSTABLE의 주소와 오프셋으로 블록들이 구분된다.
- SSTABLE의 주소와 오프셋으로 블록들이 구분된다.
- 명시적인 자료구조가 아니라 SSTable에서 row key들로 구분되어진 범위이다.
- 블록 인덱스로 선택된 row key부터 다음 블록 인덱스로 선택된 row key가 나올 때 까지를 하나의 블록 단위로 한다.
- 반드시 64KB가 되지는 않음
- 블록 인덱스로 선택된 row key부터 다음 블록 인덱스로 선택된 row key가 나올 때 까지를 하나의 블록 단위로 한다.
6. memtable ¶
1. 메모리에 할당되어있다.
1. 태블릿당 한개
1. 쓰기밖에 안됨.
1. 데이터 블럭과 인덱스 블럭으로 나누어짐
1. SSTABLE들의 인덱스를 가진다
1. 태블릿당 한개
1. 쓰기밖에 안됨.
1. 데이터 블럭과 인덱스 블럭으로 나누어짐
- 크기
- 데이터 블럭 크기 : 32MB
- 인덱스 블럭은 크기제한 없다.
- 데이터 블럭 크기 : 32MB
- 데이터
- 데이터 블럭 : 키:값을 쓴다.
- 인덱스 블럭 : 태블릿이 참조하고 있는 SSTable의 블럭 인덱스들 merge
- 데이터 블럭 : 키:값을 쓴다.
1. SSTABLE들의 인덱스를 가진다
- 인덱스는 어떻게?
8. 커밋로그 ¶
- 태블릿의 ID + 쓰려는 키:밸류
- 태블릿의 ID은 태블릿의 가장 마지막 키를 이용해 만든다.
- 태블릿의 ID은 매핑테이블(카탈로그)에서 짧은 ID으로 대체됨.
- 태블릿의 ID은 태블릿의 가장 마지막 키를 이용해 만든다.
- 저장공간의 재사용 : 커밋로그는 원형 자료구조를 사용하여 자동으로 공간을 재사용하도록 한다.
- 커밋로그의 가장 마지막 타임스탬프와 memtable의 가장 오래된 타임스탬프와 비교하여 memtable의 타임스탬프가 더 최신이라면 로그삭제가능
- memtable의 T/S가 더 최신이 아니라면 minor compaction을 하여 로그를 비운다.
- 커밋로그의 가장 마지막 타임스탬프와 memtable의 가장 오래된 타임스탬프와 비교하여 memtable의 타임스탬프가 더 최신이라면 로그삭제가능
9. 카탈로그 ¶
- 카탈로그의 주소는 Locker에 등록되어있다. (client의 접근을 위해 Locker에 등록)
- 카탈로그 또한 태블릿. TS가 관리한다.
- 카탈로그에 필요한 것
- 태블릿 ID 매핑 테이블
- 컬럼 패밀리 개수
- 카탈로그 전용 파일 필요?? SSTable 하나를 할당받아 다 쓸때까지 해제하지 않는건 어떨까?
- 태블릿 ID 매핑 테이블
- ISSUE
- 카탈로그에 언제 접근할 것인가?
- 카탈로그에 언제 접근할 것인가?
10. 태블릿 컴색 트리/ 태블릿 트래커 ¶
루트태블릿, 메타데이터 태블릿, 유저태블릿으로 구성됨. 일반 태블릿과 마찬가지로 SSTABLE로 이루어져있으며 write only임.
자료구조 : B+-트리 -- 배열(루트, 메타태블릿) + 리스트(유저태블릿) --
자료구조 : B+-트리 -- 배열(루트, 메타태블릿) + 리스트(유저태블릿) --
- 루트 태블릿
- Locker에 위치가 기록된다
- 메타태블릿이 분할될 때(또는 삽입될 때) 갱신됨.
- 루트태블릿의 원소 하나는 메타데이터 태블릿과 매칭된다.
- Locker에 위치가 기록된다
- 메타데이터 태블릿
- 유저태블릿이 분할될 때(또는 삽입될 때) 갱신됨
- 유저태블릿이 분할될 때(또는 삽입될 때) 갱신됨
- 유저 태블릿
- 태블릿 ID(row key)와 태블릿 서버 매핑해줌.
- 태블릿이 어디에 저장되어있는지 알 수 있음.
- 태블릿 ID(row key)와 태블릿 서버 매핑해줌.
- 저장 데이터
- key : 태블릿 ID(row key)
value : IP+port#
- key : 태블릿 ID(row key)