최근 몇 년 사이에 SAP 시스템의 데이터베이스를 HANA DB로 옮기는 프로젝트가 한창 진행 중입니다. HANA DB의 경우, 기존의 RDBMS와는 다르게 Column 형태의 테이블 구조를 가지고 있는데요. 이 Column Store에 대해 한번 알아보겠습니다.
Column Store는 말그대로 기존의 Row 방식으로 입력하던 데이터베이스와는 달리 Column 별로 데이터를 입력하는 것을 의미합니다.
아래 그림을 보시면 우리가 생각해왔던 테이블이 Row Store 방식일 때와 Column Store 방식일 때 각각 어떻게 저장되는지 확인하실 수 있습니다.
그림 출처: https://www.youtube.com/watch?v=jerczCx8nmQ
그림에서 보시면 아시겠지만, Column Store는 말 그대로 각 속성들에 대한 값 순서대로 저장됩니다. 영어로는 Sequence of Column 이라고 말하더군요. 그리고 이 값들은 압축될 수 있습니다. 연속되는 중복값들을 하나로 압축해버리는 거지요.
또한 이런 방식의 압축 외에도 Data Dictionary 라는 테이블을 가지고 있어서, 실제로 데이터베이스에서는 Data Dictionary에서 저장하고 있는 Index값만을 가지고 있습니다. HANA DB는 이것 말고도 여러 Encoding 방식으로 압축을 진행합니다. 각각에 대해서는 별도로 언급하지 않겠습니다.
그림 출처: https://blogs.sap.com/2016/08/12/how-and-why-to-do-compression-of-column-store-tables-in-sap-hana/
마냥 Column Store가 모든 경우에 더 좋은 것은 아닙니다. 위의 예에서 select * from Table where country = 'CAN'; 이라는 쿼리를 날려볼까요? 이렇게 한 행의 모든 값들을 뽑아내는 것을 Row Operation이라고 부르더군요. 아무튼 이렇게 되면 Row Store Table의 경우는 CAN PEN ORD4 8000을 한번에 쭉 뽑아낼 수 있습니다. 반면에 Column Store Table은 CAN을 찾고, 건너건너 PEN을 찾고, 다시 건너건너 ORD4를 찾고, 또 건너건너 8000을 찾아야해서 4번의 작업이 필요합니다. 느리겠죠? 이런 경우에는 Row Store Table이 더 빠른 작업을 할 수 있습니다. 그렇다면 select Product from Table 쿼리와 같이 Column Operation 작업을 하게되면 어떨까요? 예상하셨다시피 Column Store Table이 더 효율적일 겁니다.
SAP HANA DB는 Row Store Table과 Column Store Table을 모두 지원합니다. 하지만, Column Store Table에 최적화되어 있습니다.
그럼 Row Store와 Column Store 각각이 이점을 발휘할 수 있는 상황에 대해 간단히 알아볼까요?
(1) Row Store가 이점을 발휘할 수 있는 경우
- 테이블의 Record가 적을 경우
- 전체 Column에 대한 작업이 필요한 경우 (Select * from …) 등
(2) Column Store가 이점을 발휘할 수 있는 경우
- 적은 수의 Column에 대한 작업이 필요한 경우 (Select A, B from …)
- Column에 입력 가능한 값이 적어 압축률이 좋은 경우 등
출처:
https://blogs.sap.com/2012/02/20/column-store-in-sap-hana
https://www.youtube.com/watch?v=jerczCx8nmQ
https://blogs.sap.com/2016/08/12/how-and-why-to-do-compression-of-column-store-tables-in-sap-hana/
'SAP HANA' 카테고리의 다른 글
SAP HANA DB - System / Server Architecture (0) | 2022.04.03 |
---|---|
SAP HANA DB - Column Table Unload/Load (0) | 2022.03.06 |
HANA Studio 접속 오류 (Invalid Credential) (0) | 2021.10.27 |
SAP HANA DB - Memory Architecture (Used Memory) (0) | 2021.06.28 |
SAP HANA DB - Memory Architecture (0) | 2021.06.28 |