열 지향 스토리에 의한 고속화
데이터베이스의 지연을 줄이기
데이터양이 증가함에 따라 집계에 시간은 길어집니다. 데이터 집계에 몇 분 이상의 시간이 소모된다면 다음 작업에 영향을 주게 되고 대기 시간이 늘어나 전반적으로 작업이 느려지는 상황이 나오게 됩니다.
짧은 시간안에 데이터를 집계하려면 아래의 시스템을 만들어 적용해야 합니다.
메모리를 초과하는 대량의 데이터를 짧은 시간에 집계하려면 데이터를 미리 집계에 적합한 형태로 변경해야합니다.
수집한 대량의 데이터를 처리할 수 있는 데이터 레이크 혹은 데이터 웨어하우스에 적재를 하고 원하는 데이터를 추출하여 데이터를 집계합니다. 그리고 데이터 마트를 구축하여 짧은 시간에 응답을 얻을 수 있도록 합니다.
데이터 처리의 지연
일반적으로 데이터 처리의 응답이 빠르다는 표현을 '대기 시간(latency)가 적다' 혹은 '지연이 적다'라고 합니다.
데이터 마트를 구축할 때 지연이 적은 데이터베이스로 구축을 해야합니다.
컴퓨터가 많은 메모리를 가지고 있다면 모든 데이터를 메모리에 올려 지연이 발생하지 않게 데이터베이스를 구축하고 사용할 수 있습니다.
천만건 정도의 데이터의 크기가 5GB라고 한다면 MySQL, PostgreSQL과 같은 일반적인 RDB를 사용할 수 있지만 수억 혹은 그 이상의 데이터를 가지고 있다면 다른 방법을 찾아야 할 것입니다.
실제로 많은 회사들은 하루에 수억건에 데이터를 적재하고 있다고 하고 회사에 들어가면 수억건이상의 빅데이터를 다루게 될텐데 어떤방법으로 수억건의 빅데이터를 효율적으로 다룰 수 있는지 알아보겠습니다.
'압축'과 '분산'에 의해 지연 줄이기 (MPP 기술)
빅데이터를 다루는 효율적이고 고속화를 위하여 사용하는 기법이 '압축'과 '분산'입니다.
데이터를 작게 압축하고 그것을 여러 디스크에 분산하면서 지연시간을 줄이게 됩니다.
분산된 데이터를 읽어 들이려면 멀티 코어를 활용하면서 디스크 I/O를 병렬 처리하는 것이 효과적입니다.
이러한 아키텍처를 MPP(massive parallel processing : 대규모 병렬 처리)라고 부릅니다. 대표적으로 Amozon Redshift, Google BigQuery가 있습니다.
MPP는 데이터 집계에 최적화 되어 있으며 데이터 웨어하우스와 데이터 분석용 데이터베이스에 많이 사용됩니다.
어떻게 데이터를 '압축'하는 것이 효과적인 알아보겠습니다.
행 지향 데이터 베이스
우리가 일반적으로 알고있는 Oracle Database, MySQL과 같은 RDB는 모두 행 지향 데이터 베이스입니다.
행 지향 데이터베이스는 테이블의 각 행을 하나의 덩어리로 디스크에 저장합니다.
새로운 데이터를 추가할 때 파일의 끝부분에 데이터가 쓰여지면서 빠르게 추가, 삭제할 수 있습니다.
매일 발생하는 대량의 트랜잭션을 지연 없이 처리할 때 사용하기 좋은 기술이 행 지향 데이터베이스입니다.
또한 데이터를 검색할때 인덱스(Index)를 기반으로 빠르게 데이터를 검색할 수 있는데 데이터 분석에서는 어떤 컬럼이 분석에 사용되는지 미리 알 수 없기 때문에 인덱스가 큰 도움이 되지 않습니다.
열 지향 데이터 베이스
데이터 분석에서는 특정 컬럼만을 사용해서 데이터를 집계합니다. 예를 들어 매장의 총 매출액을 알고 싶다면 매출액에 관련한 컬럼만 사용하면 되고 고객정보와 같은 컬럼은 사용하지 않습니다.
위에서 이야기한 행 지향 데이터베이스는 레코드 단위로 데이터가 저장이 되어있어서 모든 데이터를 디스크에 올려서 데이터를 집계하기 때문에 고객정보와 같은 불필요한 컬럼까지 디스크로 로드됩니다.
열 지향 데이터 베이스는 데이터를 미리 컬럼 단위로 압축하여 디스크에 저장하기 때문에 필요한 컬럼만을 로드하면서 디스크 I/O를 줄이게 됩니다.
또한 같은 칼럼에는 상품 A,B와 같이 유사한 데이터들이 있기 때문에 열 지향 데이터 베이스에서는 같은 문자열의 반복을 매우 작게 압축할 수 있고 압축의 효율 또한 우수합니다.
MPP 데이터베이스의 접근 방식
MPP 아키텍처가 어떻게 '분산'처리를 하는지 알아보겠습니다.
행 지향 데이터베이스 같은 경우에는 보통 하나의 쿼리를 하나의 스레드에서 실행하며 여러 쿼리가 실행이 되더라도 분산처리를 하지 않습니다. 각 쿼리는 짧은 시간에 끝나는 것으로 가정합니다. 아마 오랜시간 걸리는 쿼리는 열 지향 데이터베이스를 이용하고 각자 활용하는 영역이 다른것 같습니다.
열 지향 데이터 베이스는 디스크에서 대량의 데이터를 읽기 때문에 1번의 쿼리의 실행시간이 길어집니다. 그리고 CPU 자원을 사용하기 때문에 멀티 코어를 활용하는 것이 지연을 줄이는데 효과적입니다.
MPP는 하나의 쿼리를 다수의 작은 태스크로 분해하고 병렬로 실행합니다.
예를들어 1억개의 행으로 이루어진 테이블에 합계(SUM)를 계산하면 10만 행으로 구분하고 1000개의 태스크로 나누어서 처리하게됩니다. 각 태스크는 10만행의 합계를 계산하고 집계하여 마지막에 모든 결과를 모아서 총합계를 구하여 반환하게 됩니다.
'데이터 엔지니어링' 카테고리의 다른 글
[빅데이터를 지탱하는 기술] 대규모 분산 처리의 프레임워크 # 1 (0) | 2023.05.18 |
---|---|
[빅데이터를 지탱하는 기술] 빅데이터의 탐색 # 3 (0) | 2023.05.17 |
[빅데이터를 지탱하는 기술] 빅데이터의 탐색 # 1 (0) | 2023.05.16 |
[빅데이터를 지탱하는 기술] 빅데이터 시대의 데이터 분석 # 2 (0) | 2023.04.18 |
[빅데이터를 지탱하는 기술] 빅데이터 시대의 데이터 분석 # 1 (0) | 2023.04.11 |