[BIGDATA] 2-2 열 지향 스토리지에 의한 고속화
빅데이터의 탐색
열 지향 스토리지에 의한 고속화
메모리에 다 올라가지 않을 정도의 대량의 데이터를 신속하게 집계하려면, 미리 데이터를 집계에 적합한 형태로 변환하는 것이 필요하다.
데이터베이스의 지연을 줄이기
데이터양이 증가함에 따라 집계에 걸리는 시간은 길어진다.
대기 시간이 늘어나면 작업을 멈추거나 대기 후에 여러 작업을 병행하게 되어 다른 생각을 못 하게 되므로 모든 작업이 느려진다.
초 단위로 데이터를 집계하려면 처음부터 그것을 예상해서 시스템을 마련해야 한다.
원 데이터는 용량적인 제약이 적어서 대량의 데이터를 처리할 수 있는 데이터 레이크와 데이터 웨어하우스에 저장한다.
거기에서 원하는 데이터를 추출하여 데이터 마트를 구축하고 여기에서는 항상 초 단위의 응답을 얻을 수 있도록 한다.
데이터 처리의 지연 (지연이 적은 데이터 마트 작성을 위한 기초 지식)
일반적으로 데이터 처리의 응답이 빠르다는 표현을 ‘대기 시간(latency)이 적다’ 또는 ‘지연이 적다’고 한다.
데이터 마트를 만들 때는 가급적 지연이 적은 데이터베이스가 있어야 하는데, 거기에는 크게 두 가지 선택이 있다.
가장 간단한 방법은 모든 데이터를 메모리에 올리는 것이다.
만일 한 레코드 크기가 500바이트라고 하면 천만 레코드의 경우 5GB가 된다.
그 정도의 데이터양이라면 MySQL이나 PostgreSQL 등의 일반적인 RDB가 데이터 마트에 적합하다.
RDB는 원래 지연이 적고, 많은 수의 클라이언트가 동시 접속해도 성능이 나빠지지 않으므로 많은 사용자가 사용하는 실제 운영 환경의 데이터 마트로 특히 우수하다.
한편, RDB는 메모리가 부족하면 급격히 성능이 저하된다.
수억 레코드를 초과하는 데이터 집계에서는 항상 디바이스 I/O가 발생한다고 가정하고 그것을 어떻게 효율화할 것인지가 중요한 열쇠가 된다.
‘압축’과’분산’에 의해 지연 줄이기 (MPP 기술)
고속화를 위해 사용되는 기법이 ‘압축’과 ‘분산’이다.
데이터를 가능한 한 작게 압축하고 그것을 여러 디스크에 분산함으로써 데이터의 로드에 따른 지연을 줄인다.
분산된 데이터를 읽어 들이려면 멀티 코어를 활용하면서 디스크 I/O를 병렬 처리하는 것이 효과적이다.
이러한 아키텍처를 ‘MPP(massive parallel processing: 대규모 병렬 처리)’라고 부르며, 대량의 데이터를 분석하기 위해 데이터베이스에서 널리 사용되고 있다.
예를 들어, Amazon Redshift 및 Google BigQuery(구글 빅쿼리) 등이 있다.
MPP는 데이터의 집계에 최적화되어 있으며, 데이터 웨어하우스와 데이터 분석용의 데이터베이스에서 특히 많이 사용된다.
이제는 MPP의 기술을 데이터 마트에도 활용하는 것을 가정하여 그 기본적인 구조를 간단하게 설명하겠다.
열 지행 데이터베이스 접근 - 칼럼을 압축하여 디스크 I/O를 줄이기
데이터의 압축을 고려한 후에 알아두어야 할 것이 ‘열 지향(column-oriented)’ 개념이다.
빅데이터로 취급되는 데이터 대부분은 디스크 상에 있기 때문에 쿼리에 필요한 최소한의 데이터만은 가져옴으로써 지연이 줄어들게 된다.
이를 위해 사용되는 방법이 ‘칼럼 단위로의 데이터 압축’이다. r 일반적으로 업무 시스템 등에서 사용되는 데이터베이스는 레코드 단위의 읽고 쓰기에 최적화되어 있으며, 이를 ‘행 지향 데이터베이스(row-orinted database)’라고 부른다.
예를 들어, Oracle Database와 MySQL과 같은 일반적인 RDB는 모두 행 지향 데이터베이스다.
이에 반해 데이터 분석에 사용되는 데이터베이스는 칼럼 단위의 집계에 최적화되어 있으며, ‘열 지향 데이터베이스(column-oriented database)’ 또는 ‘칼럼 지향 데이터베이스(columnar database)’라고 한다.
Teradata(테라데이터)와 Amazon Redshift 등이 여러 지향 데이터베이스의 예다.
처리량과 지연 시간
데이터 처리의 성능은 두 종류 숫자로 자주 표시된다.
하나는 '일정 시간에 처리할 수 있는 데이터의 양'(=처리량, throughput)으로 이것은 주로 배치 처리 등의 대규모 데이터처리에서 중요시된다.
또 하나는 '데이터 처리가 끝날 때까지의 대기 시간'(=지연)으로 이것은 주로 애드 혹 데이터 분석 등에서 중시된다.
데이터 웨어하우스나 데이터 레이크는 대량의 데이터를 처리하기 위해 주로 처리량을 중시하는 설계로 되어 있다.
한편, 데이터 마트에 요구되는 것은 지연 시간의 단축이다.
그러기 위해서는 충분한 메모리를 준비하거나 디스크 I/O 절감이 필수적이다.
행 지향 데이터베이스 (각 행이 디스크 상에 일련의 데이터로 기록된다.)
행 지향 데이터베이스에서는 테이블의 각 행을 하나의 덩어리로 디스크에 저장한다.
그러면 새 레코드를 추가할 때 파일의 끝에 데이터를 쓸 뿐이므로 빠르게 추가할 수 있다.
매일 발생하는 대량의 트랜잭션을 지연 없이 처리하기 위해 데이터 추가를 효율적으로 할 수 있도록 하는 것이 행 지향 데이터베이스의 특징이다.
행 지향 데이터베이스에서는 데이터 검색을 고속화하기 위해 ‘인덱스(index)’를 만든다.
만약 인덱스가 없다면, 저장되는 모든 데이터를 로드해야 원하는 레코드를 찾을 수 있으므로 많은 디스크 I/O가 발생해서 성능이 저하된다.
따라서, 적절한 인덱스가 사용되도록 튜닝하는 것이 중요하다.
필연적으로 대량의 데이터 분석은 항상 디스크 I/O를 동반한다.
따라서, 인덱스에 의지하지 않는 고속화 기술이 필요하다.
열 지향 데이터베이스 (칼럼마다 데이터를 모아 두기)
열 지향 데이터베이스에서 데이터를 미리 칼럼 단위로 정리해 둠으로써 필요한 칼럼만을 로드하여 디스크 I/O를 줄인다.
열 지향 데이터베이스는 데이터의 압축 효율도 우수하다.
데이터의 종류에 따라 다르지만, 열 지향 데이터베이스는 압축되지 않은 행 지향 데이터베이스와 비교하면 1/10 이하로 압축할 수 있다.
MPP 데이터베이스의 접근 방식 - 병렬화에 의해 멀티 코어 활용하기
쿼리 지연을 줄일 또 다른 방법은 MPP 아키텍처에 의한 데이터 처리의 병렬화다.
행 지향 데이터베이스에서는 보통 하나의 쿼리는 하나의 스레드에서 실행된다.
각 쿼리는 충분히 짧은 시간에 끝나는 것으로 생각하므로, 하나의 쿼리를 분산 처리하는 상황은 가정하지 않는다.
한편, 열 지향 데이터베이스에서는 디스크에서 대량의 데이터를 읽기 때문에 1번의 쿼리 실행 시간이 길어진다.
또한, 압축된 데이터의 전개 등으로 CPU 리소스를 필요로 하므로 멀티 코어를 활용하여 고속화하는 것이 좋다.
MPP에서는 하나의 쿼리를 다수의 작은 태스크로 분해하고 이를 가능한 한 병렬로 실행한다.
MPP에 의한 분산 처리
MPP 데이터베이스에서는 여러 디스크에 분산된 데이터가 서로 다른 CPU 코어에 의해 읽혀 부분적인 쿼리 실행이 이루어진다.
그 결과들은 한 곳에 모이고 최종적인 결과가 출력된다.
이러한 일련의 처리는 가능한 한 동시에 병렬로 실행된다.
MPP 데이터베이스와 대화형 쿼리 엔진
쿼리가 잘 병렬화할 수 있다면, MPP를 사용한 데이터의 집계는 CPU 코어 수에 비례하여 고속화된다.
단, 디스크로부터의 로드가 병목 현상이 발생하지 않도록 데이터가 고르게 분산되어 있어야 한다.
MPP는 그 구조상, 고속화를 위해 CPU와 디스크 모두를 균형 있게 늘려야 한다.
따라서, 일부 제품은 하드웨어와 스프트웨어가 통합된 제품으로 제공된다.
이처럼 하드웨어 수준에서 데이터 집계에 최적화된 데이터베이스를 ‘MPP 데이터베이스’FKRH GKSEK.
MPP의 아키텍처는 Hadoop과 함께 사용되는 대화형 쿼리 엔진으로도 채택되고 있다.
이 경우 데이터를 저장하는 것은 분산 스토리지의 역할이다.
‘MPP 데이터베이스’와 ‘대화형 쿼리 엔진’ 중 어느 쪽을 선택할지는 때에 따라 다르다
시스템의 안정성과 서포트 체제 등의 측면에서는 상용 MPP 데이터베이스가 오랜 실적이 있지만, Hadoop과의 궁합을 고려하면 편리성은 대화형 쿼리 엔진 쪽이 탁월하다.
어쨌든, 수억 레코드를 초과하는 데이터 마트의 지연을 작게 유지하기 위해서는 데이터를 열 지향의 스토리지 형식으로 저장해야 한다.
| 집계 시스템 종류 | 스토리지의 종류 | 최적의 레코드 수 |
|---|---|---|
| RDB | 행 지향 | ~수천만 정도 |
| MPP 데이터베이스 | 열 지향(하드웨어 일체형) | 수억~ |
| 대화형 쿼리 엔진 | 열 지향(분산 스토리지에 보관) | 수억~ |