최근 사이에 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/

+ Recent posts