문서번호 : 11-893360
Document Information
•
최초 작성일 : 2022.07.28
•
최종 수정일 : 2022.08.09
•
이 문서는 아래 버전을 기준으로 작성되었습니다.
◦
SinglestoreDB : 8.1
Goal
컬럼스토어 테이블의 SORT KEY (컬럼스토어 인덱스)의 정렬이 ASC 또는 DESC일때 기존 segment 파일에 데이터가 어떻게 추가되는지? 또 성능에 어떤 영향을 미치는지 확인한다.
Solution
결론
•
ingestion 성능은 차이 없음
•
select시 sort key에 대한 reverse scan은 지원하지 않음
시험 내용
•
시험 항목
1) 성능 차이 : 두 정렬 방식의 ingestion 성능 차이
2) 저장 방식 : Segment(파일)에 어떻게 데이터가 정렬되어 저장되는지
새로운 데이터가 저장될때, Segment의 끝에 append되는 것인지, 맨앞에 insert되는 것인지 확인
•
시험 환경
1) 컬럼스토어, SORT KEY는 데이터의 생성 시각
2) Kafka 파이프라인을 통해 데이터는 생성되는 대로 테이블에 적재됨
•
시험시 유의 사항
◦
메모리내 rowstore-backed segment가 디스크로 flush 되어야 segment(파일)를 확인할 수 있음 (즉시 flush 하려면 OPTIMIZE TABLE ..<table> FLUSH; 사용)
•
시험 결과 요약
◦
컬럼스토어는 row를 컬럼으로 나누고, 컬럼 끼리 SORT KEY에 의한 정렬순으로 값을 저장함 (컬럼세그먼트)
create table tbl (col1 varchar(100), col2 varchar(100), col3 varchar(100), shard key(col1), sort key(col1));
insert into tbl values ('1', 'aaa', 'A'), ('2', 'bbb', 'B'), ('3', 'ccc', 'C'), ('4', 'ddd', 'D');
optimize table tbl full;
-- segment 파일의 내용 출력
$sudo strings blobs/21147/0/0/108136715_25
aaabbbccc
insert into tbl values ('5', 'eee', 'E'), ('6', 'fff', 'F'), ('7', 'ggg', 'G'), ('8', 'hhh', 'H');
optimize table tbl full;
-- segment 파일의 내용 출력
$ sudo strings blobs/21147/0/0/108136715_34
12368
aaabbbcccfffhhh
SQL
복사
◦
rowstore-backed segment가 디스크로 flush될때는 segment(파일)가 새롭게 만들어짐
◦
즉, 기존 segment파일에 append되거나 insert되는 것이 아닌 새로운 segment파일이 생성됨
◦
그러므로, ASC/DESC에 대한 정렬방식은 segment(파일)의 쓰기 성능에 영향을 미치지 않음
◦
단, ASC/DESC 정렬방식은 SELECT 성능에 영향을 미침 (현재, 컬럼스토어 인덱스는 reverse scan/order 가 지원되지 않음)
References
•
Columnstore : Link
•
Understanding Sort Key Selection : Link
History
일자 | 작성자 | 비고 |
2022.07.28 | kkh | 최초 작성 (task 결과 정리) |
2022.08.09 | kkh | ColumnStore 의 data 이동 설명 그림 추가 |