ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [빅데이터의 축적] 3. 시계열 데이터의 최적화
    책/빅데이터를 지탱하는 기술 2022. 4. 2. 11:04
    반응형

    이 글은 빅데이터를 지탱하는 기술을 읽고 정리한 글입니다.


     

     

     

     

    1. 프로세스 시간과 이벤트 시간


     

    클라이언트 상에서 메시지가 생성된 시간을 이벤트 시간, 서버가 처리하는 시간을 프로세스 시간이라고 한다. 이때 이벤트 시간과 프로세스 시간이 같으면 제일 좋겠지만, 보통 여러가지 사정에 의해 이벤트 시간과 프로세스 시간이 차이가 나는 편이다. 데이터 분석에 필요한 것은 이벤트 시간이기 때문에 이 차이를 잘 처리해주어야 한다.

     

    프로세스 시간에 의한 분할과 문제점

    만약 모바일 앱의 활동 사용자 수를 집계한다고 가정하면, 서버에 늦게 도달하는 데이터가 있을 경우 실제 집계 결과와 조금씩 차이가 난다는 것을 의미한다. 그래서 실제와 가까운 집계를 얻기 위해서는 이벤트 시간보다 며칠 정도 지난 시점에서 소급해 집계해야 한다.

     

     

    분산 스토리지에 데이터를 저장할 때에는 보통 파일 이름을 프로세스 시간으로 사용하고, 파일 내부에 이벤트 시간의 값들을 넣어둔다. 이렇게 된다면 파일을 하나하나 열어보고 정리하니 비교적 정확한 결과를 얻을 수 있지만, 파일 안에 수십만개의 데이터가 있고, 파일도 수십만개라면 특정 일의 데이터만을 찾는 것은 매우 많은 시간과 자원을 낭비하는 것이다. 이렇게 다수의 파일내에 각각의 데이터를 모두 검색하는 쿼리를 풀 스캔이라고 부르고, 이것은 시스템의 부하를 크게 높이는 요인이 된다.


     

     

     

    2. 이벤트 시간에 의한 집계의 효율화


    풀 스캔보다 최적화를 할 수 있는 방법은 데이터를 정렬해보는 것이다.

     

    1. 이벤트 시간에 대해 시계열 인덱스를 만드는 방법

    Cassandra와 같은 시계열 인덱스에 대응하는 분산 데이터베이스를 이용하면 처음부터 인덱스 시간으로 인덱스 된 테이블을 얻을 수 있다. 이 경우에는 짧은 범위의 특정 시간 데이터를 빠르게 찾을 수 있다. 하지만 장기간에 걸쳐서 대량의 데이터를 가져오는 데에는 분산 데이터베이스가 그렇게 효율적이지는 않다. 이 경우에는 집계 효율이 높은 열 지향 스토리지를 지속적으로 만들어야 한다.

     

    2. 조건절 푸쉬다운

    열 지향 스토리지에서는 RDB와 동등한 인덱스를 만들 수 없지만, 처음에 데이터를 정렬할 수 있다. 그래서 이벤트 시간으로 데이터를 정렬한 후에 열 지향 스토리지로 변환을 하도록 한다.

    열 지향 스토리지는 칼럼 단위의 통계 정보를 이용하여 최적화가 이루어지는데, 이때 이 통게를 이용하여 필요한 최소한의 데이터만을 읽도록 하는 최적화를 조건절 푸쉬 다운이라고 한다. 이렇게 데이터를 정렬해두면 원하는 시간 범위의 데이터만 가져올 수 있으므로 풀 스캔을 피할 수 있게 된다.

     

    이것만 해도 시간적 도움을 얻을 수 있겠지만 더 효율적으로 할 수 있는 방법이 존재한다.


     

     

     

    3. 이벤트 시간에 의한 분할


    이벤트 시간으로 데이터를 정렬하는 것은 각각의 파일 내부에서 일어나는 일이기 때문에 결국엔 프로세스 시간으로 파일을 나누고 있는 한, 매우 많은 파일을 열어봐야 한다는 단점이 존재한다. 이 점을 해결하려면 프로세스 시간을 넘기고 이벤트 시간을 사용하여 테이블을 분할하는 방법이 필요하다. (테이블 파티셔닝 설명)

    테이블 파티셔닝중에서 시간을 이용하여 분할된 테이블을 시계열 테이블이라고 한다. 하지만 이것도 문제가 있는데, 시계열 테이블을 구성하는 각 파티션에는 매일 조금씩 데이터가 추가되는데, 결과적으로 분산 스토리지에 대량의 작은 파일이 생기게 되어 쿼리 성능이 안좋아진다. 그래서 이런 방식을 사용한다면 분산 데이터베이스를 사용하거나, 오래된 데이터를 버리는 아이디어가 필요하다.


     

     

     

    4. 데이터 마트를 이벤트 시간으로 정렬하기


    3번에 있던 문제를 해결한 방식이다. 데이터 마트만이 이벤트 시간에 의한 정렬을 하는 것인데, 이러면 데이터 수집 단계에는 프로세스 시간만을 활용하여 데이터를 저장하고, 데이터 마트에서 데이터를 보낼 때 이벤트 시간에 의한 정렬을 함께 하도록 한다. 이러면 파일이 조각나는 경우도 없고, 항상 최적의 데이터 마트를 유지할 수 있다.


     

     

    반응형

    댓글

Designed by Tistory.