본문으로 건너뛰기

데이터베이스를 지탱하는 기술 05

· 약 4분
Seokjae Lee
Software engineer

원문: https://doljae.tistory.com/13

분석계 처리는 무엇이 어려운가?​

1. 데이터베이스는 데이터를 안전하고 빠르게 저장하는 것도 중요하지만, 결국 저장된 데이터를 어떻게 사용할지가 근본적인 존재 이유다.

2. 그러나 "분석 자체에 너무 시간이 걸려 현실적인 시간 내에 처리를 완료할 수 없다"라는 문제가 발생한다.

3. 그 이유는 RDBMS 자체가 DWH 같은 형태의 작업 형태에 적합하지 않기 때문이다.

4. 테이블은 크게 2개로 분류할 수 있다. 팩트 테이블, 디멘션 테이블이 그것이다.

5. 디멘션 테이블은 상대적으로 데이터의 삽입이나 갱신이 적은 테이블을 의미한다. 예를 들어 "고객", "협력사" 등의 테이블은 데이터의 갱신이 자주 이루어질 필요가 없다. 하지만 이 테이블의 데이터는 다른 테이블의 FK로 사용된다

6. 팩트 테이블은 축적계 데이터 테이블이다. 예를 들어서 Order라는 테이블이 있다면 고객마다 추가되는 주문 데이터가 계속 쌓일 것이다. 

7. 즉 팩트 테이블은 다른 테이블에 비해서 데이터의 양이 매우 비대하고, 팩트 테이블의 데이터는 디멘션 테이블의 칼럼들을 요구한다.

8. 문제는 RDBMS는 이 팩트 테이블의 수많은 컬럼들의 일부를 다루는 것이 구조적으로 매우 어렵다.

9. 쿼리를 생각해면 내가 필요한 컬럼은 몇 개가 안되지만, 내가 그 칼럼에 접근하려면 일단 그 ROW 자체를 접근해야 한다.

10. 인덱스를 설계하려고 해도 분석계 쿼리의 문제점인 "어떠한 관점으로 분석할 것인지 처음부터 명확하게 되고 있어 그 이외의 관점은 존재할 수 없다"는 점에서 패턴에 가져올 수 있는 것이 적다는 것이다.

11. 또 분석계 쿼리에서 검색에 인덱스가 사용되었다 하더라도 일치하는 데이터가 너무 많아 대량의 랜덤 액세스가 발생한다. 수만 건 수준에서 대량의 레코드가 매치되면 HDD의 랜덤 읽기로 인해 FULL SCAN보다 늦어지는 일이 발생한다.

해결법

1. 열 지향 데이터베이스(Column-Oriented Database) 사용하기

2. 말 그대로 row 가 아닌 col 기반의 데이터 처리를 하는 데이터베이스다.

장점

1. 필요한 열만 액세스 되기 때문에 I/O 효율이 높다.

2. 압축 효율이 좋다. 예를 들어  UNSIGNED INTEGER형인 경우에는 4바이트로 0~40억의 값을 취급할 수 있지만, "구입 가격"이라는 열이라면 1000원 ~ 20000원의 범위로 대다수가 해당되며 나머지는 약간만 존재할 것이다.

3. 로드 처리가 고속이다. B+Tree 인덱스 구조를 사용하지 않는 제품의 열 지향 데이터베이스의 경우 대량으로 데이터를 투입해도 업데이트 성능이 떨어지기 어렵다는 장점이 있다.

단점

1. 기본 키 검색 등 좁은 범위의 처리가 느리다. --> RDBMS와 상반된 점

2. 제품 자체가 보편적이지 않다(==성숙한 제품이 아니다), 유지 및 보수 기법이 좋지 못하다.

출처 및 참고문헌

<table class="tt-plugin-interpark" style="background: #fff; border: 1px solid #e0e0e0; width: 408px;" border="0" width="100%" cellspacing="0" data-darkreader-inline-bgimage="" data-darkreader-inline-bgcolor="" data-darkreader-inline-border-top="" data-darkreader-inline-border-right="" data-darkreader-inline-border-bottom="" data-darkreader-inline-border-left=""><tbody><tr><td style="vertical-align: top; padding: 10px 0 10px 10px;" width="70"><a href="http://book.interpark.com/blog/integration/product/itemDetail.rdo?prdNo=211422661&amp;refererType=8303&amp;bookblockname=bpmain_in&amp;booklinkname=wg_search_EFEB8364BC43711681CC6C69032386A3753E74A4F9E4F62B3FA06C4836C10BAB&amp;key=EFEB8364BC43711681CC6C69032386A3753E74A4F9E4F62B3FA06C4836C10BAB" target="_blank" rel="noopener"><img style="border: 0 none;" src="http://bimage.interpark.com/goods_image/2/6/6/1/211422661h.jpg" width="66" height="90" data-darkreader-inline-border-top="" data-darkreader-inline-border-right="" data-darkreader-inline-border-bottom="" data-darkreader-inline-border-left=""></a></td><td style="vertical-align: top; padding: 10px 10px 10px 15px;"><dl style="margin: 0; padding: 2px 0 0 0; list-style: none; font: 11px dotum, sans-serif; letter-spacing: -1px; color: #777;" data-darkreader-inline-color=""><dt style="padding: 0; margin: 0;"><a style="font-size: 12px; color: #444 !important; font-weight: bold; text-decoration: none !important;" href="http://book.interpark.com/blog/integration/product/itemDetail.rdo?prdNo=211422661&amp;refererType=8303&amp;bookblockname=bpmain_in&amp;booklinkname=wg_search_EFEB8364BC43711681CC6C69032386A3753E74A4F9E4F62B3FA06C4836C10BAB&amp;key=EFEB8364BC43711681CC6C69032386A3753E74A4F9E4F62B3FA06C4836C10BAB" target="_blank" rel="noopener" data-darkreader-inline-color="">데이터베이스를 지탱하는 기술</a></dt><dd style="padding: 7px 0 0 0; margin: 0; color: #a0a0a0;" data-darkreader-inline-color="">국내도서</dd><dd style="padding: 17px 0 0 0; margin: 0;">저자 : 마쯔노부 요시노리 / 정인식역</dd><dd style="padding: 4px 0 0 0; margin: 0;">출판 : 제이펍 <span style="letter-spacing: normal;">2012.11.18</span></dd></dl><a style="float: right; width: 44px; height: 11px; background: url('//t1.daumcdn.net/tistory_admin/static/images/icon_ipark_detail.gif') no-repeat; overflow: hidden; display: block; text-indent: -1000em;" href="http://book.interpark.com/blog/integration/product/itemDetail.rdo?prdNo=211422661&amp;refererType=8303&amp;bookblockname=bpmain_in&amp;booklinkname=wg_search_EFEB8364BC43711681CC6C69032386A3753E74A4F9E4F62B3FA06C4836C10BAB&amp;key=EFEB8364BC43711681CC6C69032386A3753E74A4F9E4F62B3FA06C4836C10BAB" target="_blank" rel="noopener" data-darkreader-inline-bgcolor="">상세보기</a></td></tr></tbody></table>