KR101795564B1 - 컬럼-인덱스 데이터 포맷을 이용하여 빅데이터를 효율적으로 처리 및 분석하는 시스템 및 방법 - Google Patents

컬럼-인덱스 데이터 포맷을 이용하여 빅데이터를 효율적으로 처리 및 분석하는 시스템 및 방법 Download PDF

Info

Publication number
KR101795564B1
KR101795564B1 KR1020170002861A KR20170002861A KR101795564B1 KR 101795564 B1 KR101795564 B1 KR 101795564B1 KR 1020170002861 A KR1020170002861 A KR 1020170002861A KR 20170002861 A KR20170002861 A KR 20170002861A KR 101795564 B1 KR101795564 B1 KR 101795564B1
Authority
KR
South Korea
Prior art keywords
data
column
dictionary
index
processing
Prior art date
Application number
KR1020170002861A
Other languages
English (en)
Other versions
KR20170007499A (ko
Inventor
장정호
강성구
하정수
Original Assignee
네이버 주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 네이버 주식회사 filed Critical 네이버 주식회사
Priority to KR1020170002861A priority Critical patent/KR101795564B1/ko
Publication of KR20170007499A publication Critical patent/KR20170007499A/ko
Application granted granted Critical
Publication of KR101795564B1 publication Critical patent/KR101795564B1/ko

Links

Images

Classifications

    • G06F17/30315
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/221Column-oriented storage; Management thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2219Large Object storage; Management thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/284Relational databases
    • G06F17/30318
    • G06F17/30321
    • G06F17/30595

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

컬럼-인덱스 데이터 포맷을 이용하여 빅데이터를 효율적으로 처리 및 분석하는 시스템 및 방법이 개시된다. 컴퓨터로 구현되는 처리 시스템에서 빅데이터를 처리하는 방법은, 상기 빅데이터의 컬럼(column) 단위로 데이터를 정렬하여 딕셔너리를 생성하는 단계, 상기 정렬된 데이터들을 데이터들의 크기에 따라 상기 딕셔너리마다 적어도 하나 이상의 데이터 블록들로 분류하는 단계, 상기 데이터 블록들마다의 첫 번째 데이터의 값들을 데이터 블록들의 순서에 따라 포함하는 인덱스를 상기 딕셔너리마다 생성하는 단계 및 상기 빅데이터의 로우 순서대로 컬럼 별 컬럼 아이디를 생성하는 단계를 포함할 수 있다.

Description

컬럼-인덱스 데이터 포맷을 이용하여 빅데이터를 효율적으로 처리 및 분석하는 시스템 및 방법{SYSTEM AND METHOD FOR PROCESSING AND ANALYSING BIG DATA PROVDING EFFICIENTLY USING COLUMNAR INDEX DATA FORMAT}
본 발명의 실시 예들은 컬럼-인덱스 데이터 포맷을 이용하여 빅데이터를 효율적으로 처리 및 분석하는 기술에 관한 것으로, 빅데이터의 빠른 처리와 분석을 위해 효율적인 컬럼-인덱스 파일 데이터 포맷을 통해 분산 환경에서의 다양한 질의 처리 성능을 높일 수 있는 처리 시스템 및 처리 방법에 관한 것이다.
최근 빅데이터에 대한 수집과 저장, 처리, 분석에 대한 수요가 급증하면서 다양한 빅데이터 솔루션들이 오픈 소스나 상업용 제품 형태로 시장에 출현하고 있다. 이러한 빅데이터 솔루션들을 통해 과거의 기술과 인프라로는 다룰 수 없었던 방대한 데이터를 오랜 기간 보관하고 이로부터 가치를 끌어낼 수 있었다는 것에는 누구도 부인할 수 없다. 병렬 프로세스를 이용한 데이터 풀 스캔(Full Scan)을 통해 사용자가 작성한 프로그램을 실행하는 종래기술의 기본 동작 방식은 기업의 다양한 요구 사항을 적용하는데 손색이 없다.
하지만 모든 소프트웨어 시스템에는 트레이드 오프(Trade-Off)가 존재한다. 종래기술의 풀 스캔 방식은 간단한 질의에 대해서도 상당히 많은 디스크와 네트워크 입출력(Input/Output)을 발생시키는 단점이 있다. 다시 말해, 필요한 데이터만 읽어 빠른 처리 시간(Low Latency)을 보장하는 질의에 굉장히 비효율적인 시스템이다. 또한 맵 리듀스(Map Reduce) 작업을 위한 실행 준비 시간이 많이 소요되는 특성 때문에, 종래기술의 방식은 빠른 응답을 위해서는 적합하지 않다. 빅데이터 솔루션 업체들에서는 이를 위해 다음의 두 질문에 대한 연구가 활발히 진행 중에 있다.
1. 빠른 응답 시간에 적합한 데이터 포맷은 무엇인가?
2. 종래기술의 맵 리듀스를 대체할 효율적인 분산 질의 엔진을 어떻게 만들 것인가?
분산 질의 엔진은 분산 환경에서 SQL(Structured Query Language)과 같은 질의를 효율적으로 처리하기 위한 핵심 엔진인 옵티마이저(Optimizer)를 통해 데이터 포맷의 특성을 고려한 최적의 실행 계획을 수립한다. 따라서 대부분의 분산 질의 엔진 개발 업체들은 질의 처리에 필요한 데이터만 읽어 디스크나 네트워크의 시스템 리소스 사용량을 줄이고 빠른 응답 시간을 보장할 수 있는 컬럼 형식의 데이터 포맷 설계를 진행하였다. 하지만 여전히 일부 풀 스캔 방식의 처리로 인해 기대만큼 빠른 성능을 보여주지 못하는 문제점이 있다.
다음은 종래기술의 데이터 포맷의 예다.
1. RC 파일(Record Columnar File)
2. ORC 파일(Optimized Record Columnar File)
3. 파킷(Parquet)
4. 파워드릴(PowerDrill) 데이터 포맷
도 1은 종래기술에 있어서, 로우 그룹과 컬럼 파티션의 구성 예를 도시한 도면이다. 위의 종래기술의 데이터 포맷들은 도 1의 표(100)를 통해 나타난 바와 같이, 공통적으로 데이터를 '1) 로우 그룹(Row Group)으로 먼저 나눈 뒤, 2) 컬럼 단위로 나눈다'라는 동일한 방식을 취하고 있다. 이러한 종래기술에서는 동일한 로우 그룹에 속하는 컬럼들을 디스크 상에 인접한 위치에 저장하도록 처리하여 효율적인 로우 재구성(Row Reconstruction)을 한다.
또한, 종래의 데이터 포맷들은 다음과 같은 공통된 목표를 가진다.
1. 빠른 데이터 로딩
2. 빠른 질의 처리
3. 고효율 저장 방식
4. 다양한 워크로드 패턴에 적합
빅데이터는 대량의 데이터를 처리해야 하는 작업이므로 프로덕션 환경에서 기본적으로 고속 데이터 로딩이 이루어지지 않는다면 이는 빅데이터 포맷으로 부적격하다. 예를 들어 매일 20TB 가량의 데이터가 유입될 때, 디스크와 네트워크 등의 자원 사용량이 굉장히 높아지는데, 이 때 분석 질의를 수행하기 위한 자원이 부족해 운영에 어려움이 생길 수 있다. 따라서 고성능 데이터 로딩은 필수이며 동시에 질의에 불필요한 로우 그룹/컬럼들은 제외하여 데이터 처리시 빠른 응답 시간을 보장해야 한다. 컬럼 내 데이터가 동일한 특성을 가진다는 점을 이용해 압축률을 높이고 디스크를 효율적으로 사용하여 일부 질의에만 최적화된 형태가 아닌 일반적으로 다양한 질의에 대해서도 빠르게 처리할 수 있도록 위 데이터 포맷들이 설계되었다.
이러한 공통적인 목표를 전제로, RC 파일은 로우 그룹들로 구성하고 각 로우 그룹을 컬럼으로 나눈 뒤, 질의 처리시 불필요한 컬럼은 제외할 수 있도록 설계하였다. 이러한 RC 파일을 기반으로 ORC 파일은 로우 그룹의 최소값, 최대값 등의 통계정보를 추가로 저장해 질의 처리에 사용되지 않는 로우 그룹을 제외해 처리 성능을 향상시켰다. 파킷은 JSON(JavaScript Object Notation)과 같은 중첩 데이터 모델(Nested Data Model)을 지원한다. 파워드릴은 추가로 글로벌/로컬 딕셔너리를 구축해 필드 값을 비트단위 정수로 표현해 데이터의 저장 용량을 줄였으며, 또한 처리 속도를 향상시켰다.
그러나, 이러한 포맷들이 가지는 공통된 로우 그룹/컬럼 쪼개기 방식은 다음과 같은 단점을 지니고 있다.
1. 로우 그룹 단위 필터링의 비효율성
2. 하나의 컬럼을 읽기 위해서 불필요한 시퀀셜 액세스(Sequential Access)나 램덤 액세스(Random Access)가 자주 발생
로우 그룹의 통계 정보로는 로우 그룹을 정확하게 걸러낼 수 없어 불필요한 로우 그룹들을 읽는 디스크 작업이 발생하며, 효율성 향상을 위해 글로벌 딕셔너리를 통한 필터링을 적용하면 이를 관리하기 위한 큰 비용이 발생한다. 글로벌 딕셔너리 방식은 컬럼 내 유니크 값의 개수가 전체 컬럼 데이터 대비 상대적으로 굉장히 적을 때, 다시 말해 시스템 메모리에서 처리 가능한 수준이 되어야 하는데, 보통 빅데이터에서 적용하기 힘든 데이터가 존재할 가능성이 크다. 그리고 로우 그룹 방식은 엄밀히 말해 로우 레이아웃과 컬럼 레이아웃이 혼합된 형태로 순수한 컬럼 분석에는 랜덤 액세스나 혹은 시퀀셜 읽기를 통해 불필요한 컬럼들을 제외해야 한다. 이러한 동작으로 인한 성능 저하는 심각한 수준이다. 따라서, 이러한 단점을 극복할 수 있는 새로운 데이터 포맷이 요구된다.
컬럼-인덱스 데이터 포맷을 이용하여 빅데이터를 효율적으로 처리 및 분석함으로써, 빅데이터 시대에 단순히 많은 양의 데이터를 저장만 하고 느린 검색/분석을 제공하고 있는 현 상황에서 다양한 관점으로 데이터를 빠르게 분석하고 시각화하여 많은 사람들이 인사이트를 얻고 가치를 창출해내는데 큰 도움을 줄 수 있는 처리 시스템 및 방법을 제공한다.
컴퓨터로 구현되는 처리 시스템에서 빅데이터를 처리하는 방법에 있어서, 상기 상기 빅데이터의 컬럼 단위로 데이터를 정렬하여 로컬 딕셔너리를 생성하는 단계; 상기 정렬된 데이터들을 데이터들의 크기에 따라 상기 딕셔너리마다 적어도 하나 이상의 데이터 블록들로 분류하는 단계; 및 상기 데이터 블록들마다의 첫 번째 데이터의 값들을 데이터 블록들의 순서에 따라 포함하는 인덱스를 상기 딕셔너리마다 생성하는 단계; 상기 빅데이터의 로우 순서대로 컬럼 별 컬럼 아이디를 생성하는 단계를 포함하는 것을 특징으로 하는 처리 방법을 제공한다. 이러한 컬럼 아이디는 로우 재구성이나 빠른 컬럼 스캔을 위해 이용될 수 있다.
컴퓨터로 구현되어 빅데이터를 처리하는 처리 시스템에 있어서, 상기 빅데이터의 컬럼 단위로 데이터를 정렬하여 로컬 딕셔너리를 생성하는 딕셔너리 생성부; 상기 정렬된 데이터들을 데이터들의 크기에 따라 상기 딕셔너리를 적어도 하나 이상의 데이터 블록들로 분류하는 데이터 분류부; 및 상기 데이터 블록들마다의 첫 번째 데이터의 값들을 데이터 블록들의 순서에 따라 포함하는 인덱스를 상기 딕셔너리마다 생성하는 인덱스 생성부; 상기 빅데이터의 로우 순서대로 컬럼 별 컬럼 아이디를 생성하는 컬럼 아이디 생성부를 포함하는 것을 특징으로 하는 처리 시스템을 제공한다.
컬럼-인덱스 데이터 포맷을 이용하여 빅데이터를 효율적으로 처리 및 분석함으로써, 빅데이터 시대에 단순히 많은 양의 데이터를 저장만 하고 느린 검색/분석을 제공하고 있는 현 상황에서 다양한 관점으로 데이터를 빠르게 분석하고 시각화하여 많은 사람들이 인사이트를 얻고 가치를 창출해내는데 큰 도움을 줄 수 있다.
도 1은 종래기술에 있어서, 로우 그룹과 컬럼 파티션의 구성 예를 도시한 도면이다.
도 2는 본 발명의 일실시예에 있어서, 컬럼-인덱스 데이터 포맷의 예를 도시한 도면이다.
도 3은 본 발명의 일실시예에 있어서, 빅데이터의 예를 도시한 도면이다.
도 4는 본 발명의 일실시예에 있어서, 딕셔너리 구성의 예를 도시한 도면이다.
도 5는 본 발명의 일실시예에 있어서, 인덱스 구성의 예를 도시한 도면이다.
도 6은 본 발명의 일실시예에 있어서, 컬럼 아이디의 구성의 예를 도시한 도면이다.
도 7은 본 발명의 일실시예에 있어서, 처리 시스템의 내부 구성을 설명하기 위한 블록도이다.
도 8 내지 도 11은 본 발명의 실시예들에 있어서, 처리 방법을 도시한 흐름도들이다.
이하, 본 발명의 실시예를 첨부된 도면을 참조하여 상세하게 설명한다.
RDBMS(Relational Database Management System)에서는 빠른 트랜잭션 처리를 위해 로우(Row) 형태의 레이아웃으로 데이터를 저장하거나 혹은 빠른 분석을 위해 컬럼(column) 형태로 데이터를 저장한다. 디스크 특성상 잦은 랜덤 액세스(Random Access)가 성능에 큰 악영향을 미치므로 이러한 악영향을 줄이기 위해 처리 시 동시에 읽어야 하는 데이터를 인접한 위치에 저장하기 위해 데이터를 컬럼 형태로 저장한 것이다. 다시 말해, 로우의 갱신이나 삭제와 같은 처리가 잦은 데이터베이스에서는 로우 단위로 데이터를 저장하고, 컬럼 별로 집계나 통계 데이터를 뽑을 때에는 컬럼 단위로 데이터를 저장한다. 빅데이터 분석을 위한 데이터 포맷에서도 로우 단위의 처리보다는 상대적으로 분석 위주의 작업이기 때문에 기본적으로 컬럼 형태로 저장할 수 있는 데이터 포맷을 설계할 수 있다.
본 발명의 실시예들을 통해 설명하고자 하는 컬럼-인덱스 파일(Columnar Index File, CI File)은 이러한 컬럼 포맷을 기본으로 하여 현업에서 데이터 분석가들이 자주 수행하는 작업을 살펴보고 느린 응답 시간으로 인해 발생하는 비용을 줄이고자 다음 두 가지 목표가 중점적으로 고려될 수 있다.
1. 인덱스를 통한 빠른 데이터 검색
2. 컬럼 레이아웃을 통한 빠른 집계 분석
컬럼형 인덱스 데이터 포맷은 하나의 컬럼에 대해 다음 세 가지 핵심 구성요소를 가질 수 있다.
1. 딕셔너리(dictionary)
하나의 딕셔너리는 하나의 컬럼에 대응할 수 있고, 정렬된 데이터 블록(Sorted Data Block)들로 구성될 수 있다. 딕셔너리 인코딩되어 유니크 값이 적은 컬럼에서는 압축률이 좋고, 각 값에 해당하는 로우를 재구성하기 위해 로우 아이디들을 가질 수 있다. 예를 들어, 데이터 블록의 데이터들이 정렬되어 있기 때문에 하나의 데이터 블록 내에서 값들의 순서가 로우의 순서를 나타내지는 못한다. 따라서, 각각의 값들은 원래의 로우를 알 수 있도록 로우 아이디들을 가질 수 있다. 또한 로우 아이디는 다변 정수(Variable Integer) 등과 같은 압축 기법으로 압축될 수 있다.
2. 인덱스
인덱스는 딕셔너리내에서 데이터를 빠르게 찾을 수 있도록 딕셔너리의 데이터 블록을 포인팅하는 오프셋으로 이루어질 수 있다. 인덱스는 메모리에 로딩되어 검색 시 데이터가 포함된 데이터 블록을 빠르게 찾기 위해 이용될 수 있다.
3. 컬럼 아이디
컬럼 아이디는 로우 순서대로 숫자 값이 저장되며 딕셔너리를 포인팅하거나 혹은 정수형 컬럼이라면 정수형 컬럼의 정수값을 그대로 가져 딕셔너리를 포인팅할 수 있다. 컬럼 아이디는 블록 단위로 필요에 따라 압축될 수 있다.
도 2는 본 발명의 일실시예에 있어서, 컬럼-인덱스 데이터 포맷의 예를 도시한 도면이다.
딕셔너리는 하나의 컬럼이 갖는 데이터들을 정렬된 복수의 데이터 블록들로 구성할 수 있다. 이렇게 나누어진 데이터는 분산 병렬 처리를 위해, 복수의 저장소에 저장될 수 있고, 복수의 저장소에 저장된 데이터를 이용하여 원하는 질의 결과가 빠르게 얻을 수 있다.
인덱스를 통해 딕셔너리가 포함하는 복수의 데이터 블록들 중 어떠한 데이터 블록이 찾고자 하는 값을 포함하고 있는지 알아낼 수 있다. 이를 위해, 인덱스는 각각의 데이터 블록들의 첫 번째 값들을 포함하도록 구성될 수 있다. 블록 내 정렬된 값들 사이에서 원하는 값이 어떠한 값들 사이에 포함되어 있는지 확인할 수 있으며, 이를 통해 원하는 데이터를 뽑아낼 수 있다.
컬럼 아이디는 로우 순서대로 숫자 값을 저장할 수 있다. 예를 들어, 컬럼 아이디 블록의 첫 번째 값은, 해당 컬럼에서 첫 번째 로우의 데이터의 딕셔너리에서의 위치를 나타낼 수 있다. 예를 들어, 해당 컬럼의 첫 번째 로우의 데이터가 딕셔너리에서의 정렬된 데이터들 중 10번 째 데이터임을 나타낼 수 있다.
만약, 해당 컬럼이 정수형 값들을 포함하는 컬럼이라면, 컬럼 아이디 블록의 값들은 로우 순서대로 해당 값들을 저장할 수 있다. 예를 들어, 컬럼 아이디 블록의 첫 번째 값이 5인 경우, 해당 컬럼의 첫 번째 로우의 데이터의 값이 5임을 바로 알 수 있다.
도 3은 본 발명의 일실시예에 있어서, 빅데이터의 예를 도시한 도면이다.
제1 점선박스(310)는 지역에 대응하는 컬럼을, 제2 점선박스(320)는 성별에 대응하는 컬럼을, 제3 점선박스(330)는 나이에 대응하는 컬럼을, 그리고 제4 점선박스(340)는 취미에 대응하는 컬럼을 각각 나타낼 수 있다. 이때, 각각의 컬럼들이 하나의 딕셔너리에 대응되도록 데이터베이스가 구성될 수 있다.
도 4는 본 발명의 일실시예에 있어서, 딕셔너리 구성의 예를 도시한 도면이다.
이때, 도 4는 앞서 설명한 도 3의 제1 점선박스(310)가 나타내는 지역에 대응하는 컬럼인 제1 딕셔너리가 제4 점선박스(410), 제5 점선박스(420) 및 제6 점선박스(430)에 나타난 바와 같이 세 개의 데이터 블록들로 구성된 예를 나타낼 수 있다. 예를 들어, 처리 시스템은 지역에 대응하는 컬럼의 데이터들을 값에 따라 정렬될 수 있으며, 정렬된 데이터들을 세 개의 데이터 블록들로 분류하여 세 개의 데이터 블록들을 갖는 제1 딕셔너리를 구성할 수 있다. 이때, 제1 딕셔너리에 포함된 데이터들 각각은 로우 아이디를 가질 수 있다. 예를 들어, "광주"에 대응하는 로우 아이디 "3"은 "광주"가 지역에 대응하는 컬럼에서 세 번째 로우의 데이터임을 나타낼 수 있다. 이러한 로우 아이디는 제1 딕셔너리를 통해 원래의 빅데이터의 로우를 재구성하기 위해 이용될 수 있다. 예를 들어, 전체 딕셔너리들에서 로우 아이디가 "3"인 데이터들만을 모아 컬럼 순서로 나열하면 도 3의 빅데이터에서의 세 번째 로우를 얻을 수 있다.
도 5는 본 발명의 일실시예에 있어서, 인덱스 구성의 예를 도시한 도면이다.
여기서, 도 5는 도 4를 통해 설명한 세 개의 데이터 블록들의 첫 번째 데이터 값들로 구성된 인덱스의 예를 나타내고 있다. 첫 번째 값(510)인 "광주"는 도 4에서 제4 점선박스(410)에 나타난 데이터 블록의 첫 번째 값을, 두 번째 값(520)인 "서울"은 도 4에서 제5 점선박스(420)에 나타난 데이터 블록의 첫 번째 값을, 세 번째 값(530)인 "인천"은 도 4에서 제6 점선박스(430)에 나타난 데이터 블록의 첫 번째 값을 각각 나타낼 수 있다. 일례로, "부"로 시작하는 지명을 검색하는 경우, "부"는 인덱스에서 첫 번째 값(510)인 "광주"와 두 번째 값(520)인 "서울"의 사이에 위치하기 때문에 처리 시스템은 "부"로 시작하는 지명이 도 4의 제4 점선박스(410)에 나타난 데이터 블록에 저장되어 있음을 바로 알 수 있게 된다. 이러한 인덱스는 메모리에 구성되기 때문에 처리 시스템은 매우 빠르게 원하는 데이터 블록을 통해 요청된 검색에 따른 결과를 제공할 수 있게 된다. 예를 들어, "부산에 사는 사용자의 수"라는 질의에 대해서도, 필요한 데이터 블록을 바로 찾을 수 있으며, 컬럼간의 이동이나 로우간의 이동 없이 하나의 데이터 블록에 포함된 연속적인 데이터들을 쭉 읽어드려 원하는 결과값을 매우 빠르게 얻어낼 수 있다.
또한, 이미 설명한 바와 같이 각각의 데이터들이 원래의 몇 번째 로우인가를 로우 아이디를 통해 바로 확인할 수 있기 때문에 로우 아이디를 통해 각 데이터들의 로우를 식별할 수도 있다.
도 6은 본 발명의 일실시예에 있어서, 컬럼 아이디의 구성의 예를 도시한 도면이다. 컬럼 아이디 블록(600)은 로우의 순서대로 숫자 값을 저장할 수 있다. 예를 들어 첫 번째 값(610) '5001'은 도 3의 빅데이터에서 지명에 대응하는 컬럼의 첫 번째 로우의 데이터인 '서울'이 딕셔너리의 어디에 위치하는가를 나타낼 수 있다. 예를 들어, 도 4의 데이터 블록들이 각각 5000개의 데이터를 포함한다고 가정할 때, '5001'이 나타내는 데이터가 제5 점선박스(620)에 나타난 데이터 블록의 첫 번째 데이터임을 바로 확인할 수 있다. 또한, 마지막 값(620) '5000'이 제4 점선박스(610)에 나타난 데이터 블록의 마지막 데이터임을 바로 확인할 수 있다. 이러한 컬럼 아이디를 통해 해당 컬럼에서 특정 로우의 데이터가 포함된 데이터 블록에 바로 접근하는 것이 가능해진다.
또한, 데이터의 값이 정수형인 컬럼에 대해서는 데이터의 값이 바로 컬럼 아이디 블록의 값들이 될 수 있다. 예를 들어, 도 3의 제3 점선박스(330)를 통해 나타난 나이에 대응하는 컬럼은 해당 컬럼이 바로 컬럼 아이디 블록이 될 수 있다. 보다 구체적인 예로, 컬럼 아이디 블록의 첫 번째 값은 해당 컬럼의 첫 번째 값인 '25'가 될 수 있다. 이 경우, 처리 시스템은 데이터 블록을 읽어드리지 않고도 컬럼 아이디 블록에서 원하는 로우의 값을 바로 검색할 수 있다.
도 7은 본 발명의 일실시예에 있어서, 처리 시스템의 내부 구성을 설명하기 위한 블록도이고, 도 8 내지 도 11은 본 발명의 실시예들에 있어서, 처리 방법을 도시한 흐름도들이다.
본 실시예에 따른 처리 시스템(700)은 빅데이터를 저장, 관리 및 처리하는 시스템일 수 있으며, 하나의 컴퓨터 장치로 구성될 수도 있으나, 복수의 컴퓨터 장치들로 구성될 수도 있다. 예를 들어, 빅데이터가 하나의 컴퓨터 장치에 저장될 수 없는 경우, 처리 시스템(700)은 딕셔너리별로 또는 딕셔너리의 데이터 블록별로 별도의 컴퓨터 장치들이 구성되어 서로 연계된 될 수 있다.
이때, 처리 시스템(700)은 도 7에 도시된 바와 같이, 딕셔너리 생성부(710), 데이터 분류부(720), 인덱스 생성부(730) 및 컬럼 아이디 생성부(740)를 포함할 수 있다. 이때, 딕셔너리 생성부(710), 데이터 분류부(720), 인덱스 생성부(730) 및 컬럼 아이디 생성부(740)는 도 8의 단계들(단계(810) 내지 단계(840))을 수행하도록 구현될 수 있다.
단계(810)에서 딕셔너리 생성부(710)는 빅데이터의 컬럼 단위로 데이터를 정렬하고 딕셔너리를 생성할 수 있다. 예를 들어, 한글은 가나다 순서로(또는 역순으로), 영문은 알파벳 순서로(또는 역순으로), 숫자는 오름차순(또는 내림차순)으로 각각 정렬할 수 있다. 딕셔너리는 빅데이터에서의 컬럼에 대응될 수 있고, 컬럼의 수만큼 생성될 수 있다. 빅데이터의 예는 도 3을 통해 설명하였으며, 딕셔너리의 예는 도 4와 5를 통해 설명하였다.
단계(820)에서 데이터 분류부(720)는 정렬된 데이터들을 데이터들의 크기에 따라 딕셔너리마다 적어도 하나 이상의 데이터 블록들로 분류할 수 있다. 빅데이터의 경우, 일반적으로 하나의 컬럼의 데이터들도 크기가 매우 커 하나의 저장소에 포함시키기 어려울 수 있다. 이 경우, 데이터 분류부(720)는 하나의 컬럼에 포함된 데이터들을 복수의 데이터 블록들로 분류할 수 있다. 이러한 데이터 블록들에 대해서는 도 5를 통해 설명하였다.
단계(830)에서 인덱스 생성부(730)는 데이터 블록들마다의 첫 번째 데이터의 값들을 데이터 블록들의 순서에 따라 포함하는 인덱스를 딕셔너리마다 생성할 수 있다. 다시 말해, 인덱스의 첫 번째 값은 해당 딕셔너리의 첫 번째 데이터 블록의 첫 번째 데이터의 값을 포함할 수 있다.
단계(840)에서 컬럼 아이디 생성부(740)는 빅데이터의 로우 순서대로 컬럼 별 컬럼 아이디를 생성할 수 있다. 컬럼 아이디는 딕셔너리를 포인팅하는 오프셋 값일 수 있다. 만약, 숫자 형 컬럼의 경우에는 각 컬럼의 실제 값들이 컬럼 아이디로서 저장될 수 있다. 예를 들어, 컬럼 아이디는 딕셔너리의 데이터들의 위치 또는 순서를 식별하기 위한 값으로, 컬럼 아이디 블록에 빅데이터에서의 로우 순서로 저장될 수 있다.
또한, 처리 시스템(700)은 다른 실시예에 있어서, 인덱스 로딩부(751), 데이터 블록 결정부(742) 및 응답 생성부(753)를 더 포함할 수 있다. 인덱스 로딩부(751), 데이터 블록 결정부(742) 및 응답 생성부(753)는, 처리 방법이 다른 실시예에 있어서 더 포함할 수 있는 도 9의 단계들(단계(910) 내지 단계(930))을 수행하도록 구현될 수 있다.
단계(910)에서 인덱스 로딩부(751)는 인덱스를 메모리에 로딩할 수 있다. 인덱스는 데이터 블록들의 첫 번째 데이터들만을 포함하기 때문에 그 크기가 빅데이터에 비하면 상대적으로 매우 작다. 처리 시스템(700)은 이러한 인덱스를 이용하여 원하는 데이터가 포함된 데이터 블록을 빠르게 찾을 수 있다.
단계(920)에서 데이터 블록 결정부(752)는 수신된 질의를 통해 결정된 데이터와 인덱스가 포함하는 데이터 블록들의 첫 번째 데이터들을 비교하여 결정된 데이터가 포함된 데이터 블록을 결정할 수 있다. 이미 설명한 바와 같이, 딕셔너리의 데이터들은 값에 따라 정렬되고, 인덱스는 데이터 블록들의 첫 번째 데이터들을 포함한다. 따라서, 데이터 블록 결정부(752)는 결정된 데이터가 인덱스의 어떤 데이터 혹은 어떤 데이터들의 사이에 포함되는 데이터인지 식별할 수 있다. 따라서, 데이터 블록 결정부(752)는 인덱스의 데이터가 특정되면, 해당 데이터를 첫 번째 데이터로 갖는 데이터 블록을 결정된 데이터가 포함된 데이터 블록으로 결정할 수 있다.
단계(930)에서 응답 생성부(753)는 결정된 데이터 블록을 읽어드리고, 데이터 블록을 이용하여 질의에 대한 응답을 생성할 수 있다. 빅데이터는 하드디스크와 같이 읽기 시간이 메모리에 비해 상대적으로 매우 오래 걸리는 스토리지를 통해 저장된다. 처리 시스템(700)은 이러한 빅데이터를 전체적으로 풀 스캔하지 않고, 필요한 데이터(결정된 데이터 블록의 데이터들)만을 읽어 빠른 처리 시간을 보장할 수 있다.
또한, 처리 시스템(700)은 또 다른 실시예에 있어서, 로우 재구성부(761)를 더 포함할 수 있다. 이러한 로우 재구성부(761)는 처리 방법이 또 다른 실시예에 있어서 더 포함할 수 있는 도 10의 단계(1010)를 수행하도록 구현될 수 있다.
우선, 본 실시예에서 딕셔너리에는 데이터 블록들에 포함된 데이터의 빅데이터에서의 로우(row) 순서를 식별하는 로우 아이디가 데이터들 각각과 연관하여 함께 저장될 수 있다.
이때, 단계(1010)에서 로우 재구성부(761)는 딕셔너리에 포함된 데이터들의 로우 아이디를 이용하여 빅데이터의 로우를 재구성할 수 있다. 예를 들어, 딕셔너리들에서 동일한 로우 아이디의 데이터들만을 추출하면, 하나의 로우가 재구성될 수 있다.
또한, 처리 시스템(700)은 또 다른 실시 예에 있어서, 데이터 추출부(771)를 더 포함할 수 있다. 데이터 추출부(771)는 처리 방법이 또 다른 실시예에 있어서 더 포함할 수 있는 도 11의 단계(1110)를 수행하도록 구현될 수 있다.
단계(1110)에서 데이터 추출부(772)는 수신된 질의에 대응하는 딕셔너리의 컬럼 아이디 블록에서 요청된 로우 순서의 컬럼 아이디를 추출하고, 상기 딕셔너리에서 추출된 컬럼 아이디가 식별하는 위치 또는 순서의 데이터를 추출할 수 있다.
도 7 및 도 8에서 생략된 사항은, 도 2 내지 도 6에 대한 설명을 참조할 수 있다.
이와 같이, 본 발명의 실시예들에 따르면, 컬럼-인덱스 데이터 포맷을 이용하여 빅데이터를 효율적으로 처리 및 분석함으로써, 빅데이터 시대에 단순히 많은 양의 데이터를 저장만 하고 느린 검색/분석을 제공하고 있는 현 상황에서 다양한 관점의 데이터를 빠르게 분석하고 시각화하여 많은 사람들이 인사이트를 얻고 가치를 창출해내는데 큰 도움을 줄 수 있다.
이상에서 설명된 장치는 하드웨어 구성요소, 소프트웨어 구성요소, 및/또는 하드웨어 구성요소 및 소프트웨어 구성요소의 조합으로 구현될 수 있다. 예를 들어, 실시예들에서 설명된 장치 및 구성요소는, 예를 들어, 프로세서, 콘트롤러, ALU(arithmetic logic unit), 디지털 신호 프로세서(digital signal processor), 마이크로컴퓨터, FPGA(field programmable gate array), PLU(programmable logic unit), 마이크로프로세서, 또는 명령(instruction)을 실행하고 응답할 수 있는 다른 어떠한 장치와 같이, 하나 이상의 범용 컴퓨터 또는 특수 목적 컴퓨터를 이용하여 구현될 수 있다. 처리 장치는 운영 체제(OS) 및 상기 운영 체제 상에서 수행되는 하나 이상의 소프트웨어 애플리케이션을 수행할 수 있다. 또한, 처리 장치는 소프트웨어의 실행에 응답하여, 데이터를 접근, 저장, 조작, 처리 및 생성할 수도 있다. 이해의 편의를 위하여, 처리 장치는 하나가 사용되는 것으로 설명된 경우도 있지만, 해당 기술분야에서 통상의 지식을 가진 자는, 처리 장치가 복수 개의 처리 요소(processing element) 및/또는 복수 유형의 처리 요소를 포함할 수 있음을 알 수 있다. 예를 들어, 처리 장치는 복수 개의 프로세서 또는 하나의 프로세서 및 하나의 콘트롤러를 포함할 수 있다. 또한, 병렬 프로세서(parallel processor)와 같은, 다른 처리 구성(processing configuration)도 가능하다.
소프트웨어는 컴퓨터 프로그램(computer program), 코드(code), 명령(instruction), 또는 이들 중 하나 이상의 조합을 포함할 수 있으며, 원하는 대로 동작하도록 처리 장치를 구성하거나 독립적으로 또는 결합적으로(collectively) 처리 장치를 명령할 수 있다. 소프트웨어 및/또는 데이터는, 처리 장치에 의하여 해석되거나 처리 장치에 명령 또는 데이터를 제공하기 위하여, 어떤 유형의 기계, 구성요소(component), 물리적 장치, 가상 장치(virtual equipment), 컴퓨터 저장 매체 또는 장치에 구체화(embody)될 수 있다. 소프트웨어는 네트워크로 연결된 컴퓨터 시스템 상에 분산되어서, 분산된 방법으로 저장되거나 실행될 수도 있다. 소프트웨어 및 데이터는 하나 이상의 컴퓨터 판독 가능 기록 매체에 저장될 수 있다.
실시예에 따른 방법은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 상기 매체는 컴퓨터로 실행 가능한 프로그램을 계속 저장하거나, 실행 또는 다운로드를 위해 임시 저장하는 것일 수도 있다. 또한, 매체는 단일 또는 수개 하드웨어가 결합된 형태의 다양한 기록수단 또는 저장수단일 수 있는데, 어떤 컴퓨터 시스템에 직접 접속되는 매체에 한정되지 않고, 네트워크 상에 분산 존재하는 것일 수도 있다. 매체의 예시로는, 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체, CD-ROM 및 DVD와 같은 광기록 매체, 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical medium), 및 ROM, RAM, 플래시 메모리 등을 포함하여 프로그램 명령어가 저장되도록 구성된 것이 있을 수 있다. 또한, 다른 매체의 예시로, 애플리케이션을 유통하는 앱 스토어나 기타 다양한 소프트웨어를 공급 내지 유통하는 사이트, 서버 등에서 관리하는 기록매체 내지 저장매체도 들 수 있다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다.
이상과 같이 실시예들이 비록 한정된 실시예와 도면에 의해 설명되었으나, 해당 기술분야에서 통상의 지식을 가진 자라면 상기의 기재로부터 다양한 수정 및 변형이 가능하다. 예를 들어, 설명된 기술들이 설명된 방법과 다른 순서로 수행되거나, 및/또는 설명된 시스템, 구조, 장치, 회로 등의 구성요소들이 설명된 방법과 다른 형태로 결합 또는 조합되거나, 다른 구성요소 또는 균등물에 의하여 대치되거나 치환되더라도 적절한 결과가 달성될 수 있다.
그러므로, 다른 구현들, 다른 실시예들 및 특허청구범위와 균등한 것들도 후술하는 특허청구범위의 범위에 속한다.

Claims (5)

  1. 컴퓨터로 구현되는 처리 시스템에서 빅데이터를 처리하는 방법에 있어서,
    상기 빅데이터의 컬럼(column) 단위로 데이터를 정렬하여 딕셔너리를 생성하는 단계;
    상기 정렬된 데이터들을 데이터들의 크기에 따라 상기 딕셔너리마다 적어도 하나 이상의 데이터 블록들로 분류하는 단계;
    상기 데이터 블록들마다의 첫 번째 데이터의 값들을 상기 데이터 블록들의 순서에 따라 포함하는 인덱스를 상기 딕셔너리마다 생성하는 단계; 및
    상기 빅데이터의 로우 순서대로 컬럼 별 컬럼 아이디를 생성하는 단계
    를 포함하는 것을 특징으로 하는 처리 방법.
  2. 제1항에 있어서,
    상기 인덱스를 메모리에 로딩하는 단계;
    수신된 질의를 통해 결정된 데이터와 상기 인덱스가 포함하는 데이터 블록들의 첫 번째 데이터들을 비교하여 상기 결정된 데이터가 포함된 데이터 블록을 결정하는 단계; 및
    상기 결정된 데이터 블록을 읽어드리고, 상기 데이터 블록을 이용하여 상기 질의에 대한 응답을 생성하는 단계
    를 더 포함하는 것을 특징으로 하는 처리 방법.
  3. 제1항 또는 제2항의 방법을 실행하기 위한 프로그램이 기록되어 있는 것을 특징으로 하는 컴퓨터에서 판독 가능한 기록 매체.
  4. 컴퓨터로 구현되어 빅데이터를 처리하는 처리 시스템에 있어서,
    상기 빅데이터의 컬럼(column) 단위로 데이터를 정렬하여 딕셔너리를 생성하는 딕셔너리 생성부;
    상기 정렬된 데이터들을 데이터들의 크기에 따라 상기 딕셔너리를 적어도 하나 이상의 데이터 블록들로 분류하는 데이터 분류부;
    상기 데이터 블록들마다의 첫 번째 데이터의 값들을 상기 데이터 블록들의 순서에 따라 포함하는 인덱스를 상기 딕셔너리마다 생성하는 인덱스 생성부; 및
    상기 빅데이터의 로우 순서대로 컬럼 별 컬럼 아이디를 생성하는 컬럼 아이디 생성부
    를 포함하는 것을 특징으로 하는 처리 시스템.
  5. 제4항에 있어서,
    상기 인덱스를 메모리에 로딩하는 인덱스 로딩부;
    수신된 질의를 통해 결정된 데이터와 상기 인덱스가 포함하는 데이터 블록들의 첫 번째 데이터들을 비교하여 상기 결정된 데이터가 포함된 데이터 블록을 결정하는 데이터 블록 결정부; 및
    상기 결정된 데이터 블록을 읽어드리고, 상기 데이터 블록을 이용하여 상기 질의에 대한 응답을 생성하는 응답 생성부
    를 더 포함하는 것을 특징으로 하는 처리 시스템.
KR1020170002861A 2017-01-09 2017-01-09 컬럼-인덱스 데이터 포맷을 이용하여 빅데이터를 효율적으로 처리 및 분석하는 시스템 및 방법 KR101795564B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020170002861A KR101795564B1 (ko) 2017-01-09 2017-01-09 컬럼-인덱스 데이터 포맷을 이용하여 빅데이터를 효율적으로 처리 및 분석하는 시스템 및 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020170002861A KR101795564B1 (ko) 2017-01-09 2017-01-09 컬럼-인덱스 데이터 포맷을 이용하여 빅데이터를 효율적으로 처리 및 분석하는 시스템 및 방법

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020150023663A Division KR101696338B1 (ko) 2015-02-16 2015-02-16 컬럼-인덱스 데이터 포맷을 이용하여 빅데이터를 효율적으로 처리 및 분석하는 시스템 및 방법

Publications (2)

Publication Number Publication Date
KR20170007499A KR20170007499A (ko) 2017-01-18
KR101795564B1 true KR101795564B1 (ko) 2017-11-09

Family

ID=57992664

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020170002861A KR101795564B1 (ko) 2017-01-09 2017-01-09 컬럼-인덱스 데이터 포맷을 이용하여 빅데이터를 효율적으로 처리 및 분석하는 시스템 및 방법

Country Status (1)

Country Link
KR (1) KR101795564B1 (ko)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004362040A (ja) * 2003-06-02 2004-12-24 Mitsubishi Electric Corp データ管理装置及びデータ管理プログラム
KR101255639B1 (ko) * 2012-01-18 2013-04-16 홍익대학교 산학협력단 컬럼 기반 데이터베이스 시스템 및 데이터베이스 시스템의 조인 인덱스를 이용한 조인 처리 방법
WO2015017361A1 (en) * 2013-07-29 2015-02-05 Amazon Technologies, Inc. Generating a multi-column index for relational databases by interleaving data bits for selectivity

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004362040A (ja) * 2003-06-02 2004-12-24 Mitsubishi Electric Corp データ管理装置及びデータ管理プログラム
KR101255639B1 (ko) * 2012-01-18 2013-04-16 홍익대학교 산학협력단 컬럼 기반 데이터베이스 시스템 및 데이터베이스 시스템의 조인 인덱스를 이용한 조인 처리 방법
WO2015017361A1 (en) * 2013-07-29 2015-02-05 Amazon Technologies, Inc. Generating a multi-column index for relational databases by interleaving data bits for selectivity

Also Published As

Publication number Publication date
KR20170007499A (ko) 2017-01-18

Similar Documents

Publication Publication Date Title
KR101696338B1 (ko) 컬럼-인덱스 데이터 포맷을 이용하여 빅데이터를 효율적으로 처리 및 분석하는 시스템 및 방법
US11762882B2 (en) System and method for analysis and management of data distribution in a distributed database environment
CN106030573B (zh) 半结构化数据作为第一等级数据库元素的实现
US11347740B2 (en) Managed query execution platform, and methods thereof
US10380269B2 (en) Sideways information passing
CN107408114B (zh) 基于事务访问模式识别联结关系
US8108411B2 (en) Methods and systems for merging data sets
US10565201B2 (en) Query processing management in a database management system
CN104756107A (zh) 采用位置信息剖析数据
Whitman et al. Distributed spatial and spatio-temporal join on apache spark
KR100898465B1 (ko) 웹로그의 시계열 분석을 위한 데이터 저장 및 조회 방법그리고 상기 방법을 수행하는 시스템
Pita et al. A Spark-based Workflow for Probabilistic Record Linkage of Healthcare Data.
Nikitopoulos et al. DiStRDF: Distributed Spatio-temporal RDF Queries on Spark.
Chambi et al. Optimizing druid with roaring bitmaps
Visheratin et al. Peregreen–modular database for efficient storage of historical time series in cloud environments
Thacker et al. Performance of elasticsearch in cloud environment with ngram and non-ngram indexing
US11520763B2 (en) Automated optimization for in-memory data structures of column store databases
US20180349443A1 (en) Edge store compression in graph databases
KR101795564B1 (ko) 컬럼-인덱스 데이터 포맷을 이용하여 빅데이터를 효율적으로 처리 및 분석하는 시스템 및 방법
Guzun et al. A two-phase mapreduce algorithm for scalable preference queries over high-dimensional data
CN115658680A (zh) 数据存储方法、数据查询方法和相关装置
Zhang et al. PARROT: pattern-based correlation exploitation in big partitioned data series
Munir et al. ATUN-HL: Auto tuning of hybrid layouts using workload and data characteristics
Munir et al. A cost-based storage format selector for materialization in big data frameworks
WO2018048350A1 (en) Cohort data analysis methods and systems and data structures for performing cohort data analysis

Legal Events

Date Code Title Description
A107 Divisional application of patent
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant