Search
Duplicate

SORT KEY의 정렬 방식(ASC/DESC)에 따른 ingestion 성능 확인

문서번호 : 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파일이 생성됨
Columnstore의 데이터 흐름.pptx
39.8KB
그러므로, 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 이동 설명 그림 추가