KR102551277B1 - 병합 조인 시스템 및 병합 조인 방법 - Google Patents

병합 조인 시스템 및 병합 조인 방법 Download PDF

Info

Publication number
KR102551277B1
KR102551277B1 KR1020170171505A KR20170171505A KR102551277B1 KR 102551277 B1 KR102551277 B1 KR 102551277B1 KR 1020170171505 A KR1020170171505 A KR 1020170171505A KR 20170171505 A KR20170171505 A KR 20170171505A KR 102551277 B1 KR102551277 B1 KR 102551277B1
Authority
KR
South Korea
Prior art keywords
partitions
partition
search
join
value
Prior art date
Application number
KR1020170171505A
Other languages
English (en)
Other versions
KR20190070709A (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 KR1020170171505A priority Critical patent/KR102551277B1/ko
Priority to US16/193,419 priority patent/US11275741B2/en
Publication of KR20190070709A publication Critical patent/KR20190070709A/ko
Application granted granted Critical
Publication of KR102551277B1 publication Critical patent/KR102551277B1/ko

Links

Images

Classifications

    • 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/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24553Query execution of query operations
    • G06F16/24558Binary matching operations
    • G06F16/2456Join operations
    • 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/24Querying
    • G06F16/245Query processing
    • G06F16/2458Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/06Arrangements for sorting, selecting, merging, or comparing data on individual record carriers
    • G06F7/14Merging, i.e. combining at least two sets of record carriers each arranged in the same ordered sequence to produce a single set having the same ordered sequence

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Computational Linguistics (AREA)
  • Fuzzy Systems (AREA)
  • Mathematical Physics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

데이터베이스를 포함하는 병합 조인 시스템의 병합 조인 방법이 제공된다. 병합 조인 시스템은 데이터베이스에서 병합 조인에 참여하는 조인 열의 현재 위치 이후의 데이터를 불균등하게 2보다 큰 K개의 파티션으로 파티셔닝하고, K개의 파티션 중 첫 번째 파티션을 제외한 나머지 파티션의 첫 번째 값과 병합 조인을 위해 찾고자 하는 값이 특정 조건을 만족하는지 비교하고, 비교의 결과에 기초해서 찾고자 하는 값이 존재할 것으로 예상되는 파티션을 결정하고, 결정한 파티션에 k-ary 탐색을 적용한다.

Description

병합 조인 시스템 및 병합 조인 방법{SYSTEM AND METHOD FOR MERGE-JOIN}
본 발명은 병합 조인 시스템 및 병합 조인 방법에 관한 것이다.
조인은 하나 이상의 테이블로부터 하나 이상의 열에 대해 어떤 선택 조건(selection condition)을 만족하는 데이터를 얻어오는 연산이다. 조인에 선택 조건을 나타내는데 사용되는 열을 조인 열(join column)이라고 한다. 조인 조건을 만족하는 테이블의 행의 카티즌 프로덕트(Cartesian Product)로 조인 연산의 결과가 생성된다. 조인 연산은 데이터베이스 관리 시스템에서 데이터 관리를 위해 빈번히 사용되며, 계산과 입출력 시간 측면에서 가장 많은 비용이 드는 연산으로 데이터 관리의 성능 관점에서 가장 중요한 연산 중 하나이다. 조인 연산은 그 방법에 따라 병합 조인(merge join)과 해시 조인(hash join) 등으로 분류할 수도 있다. 병합 조인은 데이터의 양이 많을 때 많이 이용되는 조인으로, 정렬된 데이터를 앞에서부터 순차적으로 탐색하며 조인을 진행한다.
병합 조인 과정에서는 특정 조건을 만족하는 데이터를 찾는 일이 빈번히 발생하고 있고, 이에 대한 처리를 얼마나 효과적으로 하는지가 매우 중요하다고 할 수 있다. 종래의 병합 조인 과정에서는 특정 값보다 크거나 같은 값을 찾거나 특정 값과 동일한 값으로 구성된 서브셋을 생성하기 위해 많은 비교를 하게 된다. 비교는 조건문으로 표현되는데, 실행시 조건문 분기 예측 실패는 명령어 파이프라인 스톨(pipeline stall)을 일으키고 이는 전체 성능을 저하시키는 주요 원인이 된다. 또한 병합 조인에서는 정렬된 데이터를 앞에서부터 순차적으로 따라가면서 처리하므로 찾고자 하는 데이터는 현재 위치에 근접한 곳에 있을 가능성이 높다. 그러나 종래의 병합 조인 기술은 조인에 참여하는 서브셋을 구성할 때 유사한 값이 근접한 곳에 저장되는 정렬된 데이터의 특성을 충분히 활용하지는 못하고 있다. 이에 따라 종래의 병합 조인 기술은 병합 조인을 빠르게 진행하지 못하고 있다.
또한 컴퓨팅 기술이 발전함에 따라 보편적으로 사용되는 프로세서에서도 벡터 레지스터와 벡터 레지스터를 이용할 수 있는 명령어 집합을 제공함으로써 스칼라 기반 처리뿐 아니라 벡터 기반 처리를 지원하고 있다. 또한, 프로세서의 마이크로아키텍처가 진화하면서 가용한 벡터 레지스터들의 크기는 계속 증가하고 있다. 예를 들면, 인텔에서는 512비트 크기의 벡터 레지스터를 가진 스카이레이크 마이크로아키텍처의 CPU(central processing unit)가 출시되어 사용되고 있다. 32비트 크기를 가진 데이터에 대한 연산을 한다고 할 때, 스칼라 방식으로 하나를 처리하는 동안에 512비트의 벡터 레지스터를 활용하는 AVX512 명령어를 이용하면 동시에 16개를 처리할 수 있다. 그러나 종래의 병합 조인 기술은 이러한 벡터 처리를 지원하는 프로세서가 장착된 시스템 상에서 동작할 때 벡터 레지스터를 활용한 병렬 처리 기능도 제대로 활용하지 못하므로, 시스템 성능에 비해 병합 조인을 빠르게 진행하지 못하고 있다.
본 발명이 이루고자 하는 과제는 병합 조인을 빠르게 진행할 수 있는 병합 조인 시스템 및 병합 조인 방법을 제공하는 것이다.
본 발명의 한 실시예에 따르면, 데이터베이스를 포함하는 병합 조인 시스템의 병합 조인 방법이 제공된다. 상기 병합 조인 방법은, 상기 데이터베이스에서 병합 조인에 참여하는 조인 열의 현재 위치 이후의 데이터를 2보다 큰 K개의 파티션으로 불균등하게 파티셔닝하는 단계, 상기 K개의 파티션 중 첫 번째 파티션을 제외한 나머지 파티션의 첫 번째 값과 병합 조인을 위해 찾고자 하는 값이 특정 조건을 만족하는지 비교하는 단계, 상기 비교의 결과에 기초해서 상기 찾고자 하는 값이 존재할 것으로 예상되는 파티션을 결정하는 단계, 그리고 상기 결정한 파티션에 k-ary 탐색을 적용하는 단계를 포함한다.
상기 K개의 파티션 중 첫 번째부터 (K-1)번째 파티션의 파티션 크기는 동일한 제1 크기를 가지며, 마지막 파티션의 파티션 크기는 상기 제1 크기보다 큰 제2 크기를 가질 수 있다.
상기 결정한 파티션이 상기 마지막 파티션인 경우, 상기 병합 조인 방법은 다음 탐색에 사용할 상기 파티션 크기를 제3 크기로 증가시키는 단계를 더 포함할 수 있다.
이때, 상기 제3 크기는 상기 제1 크기의 K배일 수 있다.
상기 k-ary 탐색을 적용하는 단계는, 상기 마지막 파티션을 불균등하게 K개의 파티션으로 파티셔닝하는 단계, 상기 K개의 새 파티션 중 첫 번째 파티션을 제외한 나머지 파티션의 첫 번째 값과 상기 찾고자 하는 값이 상기 특정 조건을 만족하는지 비교하는 단계, 상기 비교의 결과에 기초해서 상기 찾고자 하는 값이 존재할 것으로 예상되는 파티션을 결정하는 단계, 그리고 상기 결정한 파티션에 k-ary 탐색을 적용하는 단계를 포함할 수 있다.
상기 병합 조인 방법은,
Figure 112017124336887-pat00001
를 상기 제1 크기로 결정하는 단계를 더 포함할 수 있다. 여기서, 상기 ceil() 함수는 소수점 이하를 올림하는 함수이며, 상기 Rate는 상기 조인 열의 데이터 개수와 상기 병합 조인에 참여하는 다른 열의 데이터 개수 중 큰 수를 작은 수로 나눈 값이다.
상기 k-ary 탐색을 적용하는 단계는, 상기 결정한 파티션의 데이터를 균등하게 K개의 파티션으로 파티셔닝하는 k-ary 탐색을 수행하는 단계를 포함할 수 있다.
상기 비교하는 단계는, 제1 벡터 레지스터에 상기 나머지 파티션의 첫 번째 값을 차례로 로딩하는 단계, 제2 벡터 레지스터에 상기 찾고자 하는 값을 중복하여 로딩하는 단계, 그리고 상기 제1 벡터 레지스터와 상기 제2 벡터 레지스터를 벡터 비교하여 비교 결과 마스크를 생성하는 단계를 포함할 수 있다. 이때, 상기 결정하는 단계는, 상기 비교 결과 마스크에 기초해서 상기 찾고자 하는 값이 존재할 것으로 예상되는 파티션을 결정하는 단계를 포함할 수 있다.
상기 비교 결과 마스크를 생성하는 단계는, 상기 제1 벡터 레지스터와 상기 제2 벡터 레지스터의 각 요소의 비교 결과의 최상위 비트 값을 이용하여 상기 비교 결과 마스크를 생성하는 단계를 포함할 수 있다.
본 발명의 다른 실시예에 따르면, 데이터베이스를 포함하는 병합 조인 시스템의 병합 조인 방법이 제공된다. 상기 병합 조인 방법은, 변형된 k-ary 탐색을 포함하는 복수의 탐색 중에서 상기 데이터베이스에서 병합 조인에 참여하는 조인 열의 현재 위치에서 사용할 탐색을 선택하는 단계, 그리고 상기 변형된 k-ary 탐색을 선택한 경우, 상기 변형된 k-ary 탐색을 수행하는 단계를 포함한다. 상기 변형된 k-ary 탐색을 수행하는 단계는, 상기 조인 열의 현재 위치 이후의 데이터를 2보다 큰 K개의 파티션으로 불균등하게 파티셔닝하는 단계, 상기 K개의 파티션 중 첫 번째 파티션을 제외한 나머지 파티션의 첫 번째 값과 병합 조인을 위해 찾고자 하는 값이 특정 조건을 만족하는지 비교하는 단계, 상기 비교의 결과에 기초해서 상기 찾고자 하는 값이 존재할 것으로 예상되는 파티션을 결정하는 단계, 그리고 상기 결정한 파티션에 k-ary 탐색을 적용하는 단계를 포함한다.
상기 선택하는 단계는, 상기 현재 위치에서 각 탐색에 필요한 비교 횟수에 기반하여 비용을 추정하는 단계, 그리고 상기 복수의 탐색 중 상기 비용이 적게 드는 탐색을 선택하는 단계를 포함할 수 있다.
상기 복수의 탐색은 순차 탐색을 더 포함할 수 있다. 이 경우, 상기 선택하는 단계는, k-ary 탐색에 필요한 비교 횟수를 계산하는 단계, 상기 현재 위치에서 상기 비교 횟수만큼 떨어진 곳의 값이 상기 특정 조건을 만족하는지를 체크하는 단계, 그리고 상기 값이 상기 특정 조건을 만족하면 상기 순차 탐색을 선택하고, 상기 값이 상기 특정 조건을 만족하지 않으면 상기 변형된 k-ary 탐색을 선택하는 단계를 포함할 수 있다.
상기 비교 횟수는
Figure 112017124336887-pat00002
로 결정될 수 있다. 여기서, 상기 ceil() 함수는 소수점 이하를 올림하는 함수이며, 상기 PartSize는 불균등하게 상기 K개의 파티션으로 파티셔닝할 때 사용하는 파티션 크기이다.
상기 K개의 파티션 중 첫 번째부터 (K-1)번째 파티션의 파티션 크기는 상기 PartSize이며, 마지막 파티션의 파티션 크기는 상기 PartSize보다 클 수 있다.
본 발명의 또 다른 실시예에 따르면, 데이터베이스를 저장하는 저장 장치와 프로세서를 포함하는 병합 조인 시스템이 제공된다. 상기 프로세서는, 변형된 k-ary 탐색을 사용하는 경우, 상기 데이터베이스에서 병합 조인에 참여하는 조인 열의 현재 위치 이후의 데이터를 2보다 큰 K개의 파티션으로 불균등하게 파티셔닝하고, 상기 K개의 파티션 중 첫 번째 파티션을 제외한 나머지 파티션의 첫 번째 값과 병합 조인을 위해 찾고자 하는 값이 특정 조건을 만족하는지 비교하고, 상기 비교의 결과에 기초해서 상기 찾고자 하는 값이 존재할 것으로 예상되는 파티션을 결정하고, 상기 결정한 파티션에 k-ary 탐색을 적용한다.
상기 K개의 파티션 중 첫 번째부터 (K-1)번째 파티션의 파티션 크기는 동일한 제1 크기를 가지며, 마지막 파티션의 파티션 크기는 상기 제1 크기보다 큰 제2 크기를 가질 수 있다.
상기 프로세서는, 상기 결정한 파티션이 상기 마지막 파티션인 경우, 다음 탐색에 사용할 상기 파티션 크기를 상기 제1 크기의 K배로 증가시킬 수 있다.
상기 프로세서는
Figure 112017124336887-pat00003
를 상기 제1 크기로 결정할 수 있다. 여기서, 상기 ceil() 함수는 소수점 이하를 올림하는 함수이며, 상기 Rate는 상기 조인 열의 데이터 개수와 상기 병합 조인에 참여하는 다른 열의 데이터 개수 중 큰 수를 작은 수로 나눈 값이다.
상기 프로세서는, 제1 벡터 레지스터에 상기 나머지 파티션의 첫 번째 값을 차례로 로딩하고, 제2 벡터 레지스터에 상기 찾고자 하는 값을 중복하여 로딩하고, 상기 제1 벡터 레지스터와 상기 제2 벡터 레지스터를 벡터 비교하여 비교 결과 마스크를 생성하고, 상기 비교 결과 마스크에 기초해서 상기 찾고자 하는 값이 존재할 것으로 예상되는 파티션을 결정할 수 있다.
상기 프로세서는, 상기 변형된 k-ary 탐색을 포함하는 복수의 탐색 중에서, 상기 현재 위치에서 각 탐색에 필요한 비교 횟수에 기반하여 추정한 비용이 적게 드는 탐색을 선택할 수 있다.
본 발명의 한 실시예에 따르면, 정렬된 데이터가 가지는 데이터의 지역성을 활용하여 탐색 범위를 줄임으로써 병합 조인에 참여할 서브셋을 정하기 위한 비교 횟수를 줄일 수 있다.
도 1은 본 발명의 한 실시예에 따른 병합 조인 시스템의 개략적인 블록도이다.
도 2는 본 발명의 한 실시예에 따른 병합 조인 시스템의 한 예를 나타내는 도면이다.
도 3은 전형적인 병합 조인 방법을 나타내는 흐름도이다.
도 4는 본 발명의 한 실시예에 따른 병합 조인 시스템의 데이터 탐색부의 개략적인 블록도이다.
도 5는 본 발명의 한 실시예에 따른 병합 조인 방법에서의 불균등 파티셔닝의 한 예를 나타내는 도면이다.
도 6은 본 발명의 한 실시예에 따른 병합 조인 방법에서의 변형된 k-ary 탐색 방법을 나타내는 흐름도이다.
도 7은 본 발명의 한 실시예에 따른 병합 조인 방법에서 최초 파티셔닝을 위한 파티션 크기를 결정하는 한 예를 나타내는 도면이다.
도 8은 본 발명의 한 실시예에 따른 병합 조인 방법에서의 탐색 선택 방법을 나타내는 흐름도이다.
아래에서는 첨부한 도면을 참고로 하여 본 발명의 실시예에 대하여 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있도록 상세히 설명한다. 그러나 본 발명은 여러 가지 상이한 형태로 구현될 수 있으며 여기에서 설명하는 실시예에 한정되지 않는다. 그리고 도면에서 본 발명을 명확하게 설명하기 위해서 설명과 관계없는 부분은 생략하였으며, 명세서 전체를 통하여 유사한 부분에 대해서는 유사한 도면 부호를 붙였다.
도 1은 본 발명의 한 실시예에 따른 병합 조인 시스템의 개략적인 블록도이며, 도 2는 본 발명의 한 실시예에 따른 병합 조인 시스템의 한 예를 나타내는 도면이다.
도 1을 참고하면, 본 발명의 한 실시예에 따른 병합 조인 시스템(100)은 병합 조인 제어부(110), 데이터 탐색부(120), 서브셋 생성부(130) 및 조인 결과 생성부(140)를 포함한다.
병합 조인 제어부(110)는 병합 조인 과정을 제어하고, 데이터 탐색부(120)는 테이블의 열에서 특정 조건을 만족하는 데이터의 위치를 찾는다. 서브셋 생성부(130)는 조인에 참여할 서브셋을 구성하고, 조인 결과 생성부(140)는 조인에 참여하는 두 서브셋에 대해 카티즌 프로덕트(Cartesian Product)를 수행하여 조인 결과를 생성한다.
어떤 실시예에서, 병합 조인 시스템은 예를 들면 컴퓨팅 장치로 구현될 수 있다. 이 경우, 도 2에 도시한 것처럼, 컴퓨팅 장치로 구현된 병합 조인 시스템(100)의 한 예는 프로세서(210), 메모리(220), 저장 장치(230) 및 프로세서와 저장 장치를 연결하는 인터커넥트(240)를 포함할 수 있다.
프로세서(210)는 메모리(220)나 저장 장치(230)에 저장된 명령어를 로드하여서 실행하며, 데이터를 메모리(220)나 저장 장치(230)에 저장하거나 로드한다. 프로세서는 이와 같이 명령어를 실행함으로써, 병합 조인 제어부(110), 데이터 탐색부(120), 서브셋 생성부(130) 및 조인 결과 생성부(140)를 구현할 수 있다. 프로세서(210)는 CPU(central processing unit), GPU(graphic processing unit), 가속기 등의 프로세서일 수 있으며, 단일 또는 다중 프로세서일 수 있다. 저장 장치(230)는 병합 조인의 대상이 되는 테이블을 포함하는 데이터베이스를 저장한다. 인터커넥트(240)는 명령어 및 데이터를 프로세서(210), 메모리(220) 및 저장 장치(230) 사이에서 전달하며, 다양한 버스로 형성될 수 있다.
다음, 병합 조인 시스템에서의 전형적인 병합 조인 방법에 대해서 도 3을 참고로 하여 설명한다.
도 3은 전형적인 병합 조인 방법을 나타내는 흐름도이다. 도 3의 병합 조인 방법은 두 테이블에 대해 동일 조인(equi-join)을 수행하는 방법을 나타낸다. 도 3에서는 설명의 편의를 위해 조인에 참여하는 두 테이블(릴레이션)(Left, Right)는 하나의 열을 가지며, 테이블 Left의 열 LeftC와 테이블 Right의 열 RightC의 데이터는 모두 오름차순으로 정렬되어 있는 것으로 가정한다. 그러나 도 3을 참고로 하여 설명하는 방법은 이러한 예시에 한정되지 않고, 각 테이블은 여러 개의 열을 가지는 경우, 각 열의 데이터가 다른 형태로 정렬되어 있는 경우에도 적용될 수 있다. 아래에서는 설명의 편의상, 테이블 Left 의 열 LeftC를 왼쪽 열(LeftC)이라 하고, 테이블 Right의 열 RightC를 오른쪽 열(RightC)이라 한다.
도 3을 참고하면, 병합 조인 시스템은 조인에 참여하는 두 열(LeftC, RightC)의 데이터를 입력으로 받아서 조인 결과(Output)를 생성한다. 병합 조인 제어부(110)는 먼저 오른쪽 열(RightC)의 첫 번째 값을 RightKey로 한다(S300). 병합 조인 제어부(110)는 데이터 탐색부(120)를 활용하여 왼쪽 열(LeftC)의 현재 위치(LeftPos) 이후에서 RightKey보다 크거나 같은 첫 번째 값을 찾아 LeftKey로 하고, 서브셋 생성부(130)를 이용하여 왼쪽 열(LeftC)의 현재 위치(LeftPos) 이후에서 LeftKey와 동일한 값을 가지는 행으로 구성된 서브셋(LeftSubset)을 구한다(S310). 단계 S310에서 조건을 만족하는 키 값이 없는 경우에 서브셋(LeftSubset)은 아무 값도 없는 빈 상태(empty)가 된다. 병합 조인 제어부(110)는 데이터 탐색부(120)를 활용하여 오른쪽 열(RightC)의 현재 위치(RightPos) 이후에서 LeftKey보다 크거나 같은 첫 번째 값을 찾아 RightKey로 하고, 서브셋 생성부(130)를 이용하여 오른쪽 열(RightC)의 현재 위치(RightPos) 이후에서 RightKey와 동일한 값을 가지는 행으로 구성된 서브셋(RightSubset)을 구한다(S320). 단계 S320에서 조건을 만족하는 키 값이 없는 경우에 서브셋(RightSubset)은 아무 값도 없는 빈 상태가 된다.
한편, 도 3에서는 RightKey로 설정된 값의 위치가 오른쪽 열(RightC)의 현재 위치로 되고, LeftKey로 설정된 값의 위치가 왼쪽 열(LeftC)의 현재 위치로 된다.
다음 병합 조인 제어부(110)는 두 서브셋(LeftSubset, RightSubset) 중 빈 것이 있는지 체크한다(S330). 만약 두 서브셋(LeftSubset, RightSubset) 중 빈 것이 있으면, 데이터를 끝까지 스캔했음에도 더 이상 조인 열의 값이 동일한 것이 없는 경우이므로, 병합 조인 제어부(110)는 병합 조인을 종료한다.
두 서브셋(LeftSubset, RightSubset)이 모두 비어 있지 않은 경우, 즉 두 서브 셋(LeftSubset, RightSubset)이 모두 구성된 경우에, 병합 조인 제어부(110)는 LeftKey와 RightKey를 비교한다(S340).
비교 결과 RightKey가 LeftKey보다 크면, 병합 조인 제어부(110)는 데이터 탐색부(120)를 활용하여 왼쪽 열(LeftC)의 현재 위치(LeftPos) 이후에서 RightKey보다 크거나 같은 첫 번째 값을 찾아 새로운 LeftKey로 하고, 서브셋 생성부(130)를 이용하여 LeftKey와 동일한 값을 가지는 행으로 구성된 서브셋(LeftSubset)을 구성한 후에(S350), 단계 S330의 처리를 다시 수행한다.
단계 S340의 비교 결과, LeftKey가 RightKey보다 크면, 병합 조인 제어부(110)는 데이터 탐색부(120)를 이용하여 오른쪽 열(RightC)의 현재 위치(RightPos) 이후에서 LeftKey보다 크거나 같은 첫 번째 값을 찾아 새로운 RightKey로 하고, 서브셋 생성부(130)을 이용하여 RightKey와 동일한 값을 가지는 행으로 구성된 서브셋(RightSubset)을 구성한 후에(S360), 단계 S330의 처리를 다시 수행한다.
단계 S340의 비교 결과, LeftKey와 RightKey가 같으면, 병합 조인 제어부(110)는 조인 결과 생성부(140)를 이용하여 두 서브셋(LeftSubset, RightSubset)의 카티즌 프로덕트를 조인 결과에 삽입한다(S370). 그리고 병합 조인 제어부(110)는 데이터 탐색부(120)를 활용하여 왼쪽 열(LeftC)의 현재 위치(LeftPos) 이후에서 RightKey보다 크거나 같은 첫 번째 값을 찾아 새로운 LeftKey로 하고, 서브셋 생성부(130)를 이용하여 LeftKey와 동일한 값을 가지는 행으로 구성된 서브셋(LeftSubset)을 구성한다(S380). 또한 병합 조인 제어부(110)는 데이터 탐색부(120)를 활용하여 오른쪽 열(RightC)의 현재 위치(RightPos) 이후에서 LeftKey보다 크거나 같은 첫 번째 값을 찾아서 새로운 RightKey로 하고, 서브셋 생성부(130)를 이용하여 RightKey와 동일한 값을 가지는 행으로 구성된 서브셋(RightSubset)을 구성한 후에(S390), 단계 S330의 처리를 다시 수행한다.
도 3에서는 설명의 편의를 위해 서브셋을 구한 후에(S310, S320) 조인 열의 값을 비교하는(S340) 것으로 예를 들었지만, 이와는 달리 조인 열(LeftC, RightC)의 현재 위치(LeftPos, RightPos)의 값을 비교한 후 같은 경우에만 각각에 대해 서브셋을 구할 수 있다.
도 3을 참고로 하여 설명한 것처럼, 전형적인 병합 조인 과정에서는 특정 조건을 만족하는 데이터나 데이터의 위치를 찾는 일이 빈번히 발생한다. 즉, 전형적인 병합 조인 시스템에서 조인 과정에서 특정 값보다 크거나 같은 값을 찾거나 특정 값과 동일한 값으로 구성된 서브셋을 생성하기 위해 많은 비교를 수행한다. 또한 이를 위한 비교는 조건문으로 표현되는데, 실행시 조건문 분기 예측 실패는 명령어 파이프라인 스톨(pipeline stall)을 일으키고 이는 전체 성능을 저하시키는 주요 원인이 될 수 있다. 따라서, 비교를 위한 조건문을 최소로 사용하는 것이 좋다.
일반적으로, 분석용 데이터베이스는 구성하는 데이터의 수가 많고, 대부분의 경우에 중복된 값을 허용하고 있으며 중복의 정도가 크다. 따라서 정렬된 데이터에 대해서 특정 조건을 만족하는 데이터를 찾는데 있어서 순차 탐색에 비해 빨리 찾을 수 있는 이진 탐색을 사용할 수 있다. 병합 조인에서는 정렬된 데이터를 앞에서부터 순차적으로 따라가면서 처리하므로 찾고자 하는 데이터는 현재 위치에 근접한 곳에 있을 가능성이 높다. 즉, 정렬된 데이터는 유사한 데이터들이 서로 근접한 곳에 위치하는 지역성을 가지고 있다. 따라서, 항상 이진 탐색이 순차 탐색보다 조건을 만족하는 데이터를 빨리 찾을 수 있는 것은 아니다. 특정 조건을 만족하는 데이터를 찾는데 있어서 순차 탐색과 이진 탐색 중 더 좋은 방법은 데이터의 분포에 따라 달라질 수 있다. 그러므로 실행 시간에 비교 횟수에 기반한 비용을 추정해 보고 순차 탐색과 이진 탐색 중 비용이 더 적게 드는 탐색을 선택할 수 있다.
그러나 이러한 병합 조인 방법은 조인에 참여하는 서브셋을 구성하는데 있어서 유사한 값이 근접한 곳에 저장되는 정렬된 데이터의 특성을 충분히 활용하지는 못하고 있을 뿐만 아니라, 벡터 처리를 지원하는 프로세서가 장착된 시스템 상에서 동작할 때도 벡터 레지스터를 활용한 병렬 처리 기능을 제대로 활용하지 못할 수 있다. 이로 인해 조인 연산을 제공하는 시스템에 대한 사용자 만족도가 낮아질 수 있다.
도 4는 본 발명의 한 실시예에 따른 병합 조인 시스템의 데이터 탐색부의 개략적인 블록도이다.
본 발명의 한 실시예에 따른 병합 조인 시스템의 데이터 탐색부(120)는 특정 조건을 만족하는 데이터를 정렬된 데이터의 지역성을 고려한 변형된 k-ary 탐색으로 찾는다. k-ary 탐색에서 사용하는 K는 2보다 큰 정수이다. 예를 들어, 실수 타입(64비트)의 정렬된 데이터로부터 특정 조건을 만족하는 데이터를 찾는 경우에 256비트 벡터 레지스터를 활용한 벡터 처리를 지원하는 프로세서가 장착된 시스템에서는 K가 5인 k-ary 탐색을 활용할 수 있다.
병합 조인에서는 조인을 위한 입력 데이터가 정렬되어 있으므로, 정렬된 데이터의 지역성으로 인해 순차 탐색이 다른 방법보다 느리지 않은 경우도 있을 수 있다. 어떤 실시예에서, 데이터 탐색부(120)는 순차 탐색과 k-ary 탐색 중 비용이 적게 드는 탐색 방법을 결정할 수 있다. 이를 위해서, 도 4에 도시한 것처럼, 데이터 탐색부(120)는 탐색 제어 모듈(121), 순차 탐색 모듈(122) 및 k-ary 탐색 모듈(123)을 포함한다.
탐색 제어 모듈(121)은 데이터 탐색 과정에 대한 흐름을 제어하며, 비교 횟수에 기반한 비용 추정을 통해 순차 탐색과 k-ary 탐색 중 비용이 적게 드는 탐색 방법을 결정한다. 순차 탐색 모듈(122)은 특정 조건을 만족하는 데이터(즉, 값)를 순차 탐색으로 찾으며, k-ary 탐색 모듈(123)은 특정 조건을 만족하는 데이터(즉, 값)를 정렬된 데이터의 지역성을 고려한 변형된 k-ary 탐색으로 찾는다.
이와 같이, k-ary 탐색 모듈(123)은 병합 조인에 참여하는 새로운 데이터를 찾거나 서브셋 생성을 위해 특정 조건을 만족하는 데이터를 찾을 때 순차 탐색이나 이진 탐색 대신 k-ary 탐색을 이용할 수 있다. 이진 탐색에서는 탐색 범위의 중간 지점을 기준으로 탐색하는 데이터의 범위를 1/2로 줄여 가면서 탐색을 하지만, k-ary 탐색에서는 탐색 범위를 K개로 나누고 경계가 되는 (K-1)개의 데이터를 비교함으로써 탐색하는 데이터의 범위를 1/K로 줄여 가면서 탐색을 할 수 있다. 정렬된 N개의 데이터로부터 이진 탐색으로 원하는 데이터를 찾는데 대략 (log2N)번의 비교가 필요하지만 k-ary 탐색으로는 대략 (logkN)번의 비교가 필요하다. 따라서, k-ary 탐색을 이용하면 비교 횟수가 현격히 감소하게 되어 이진 탐색보다 원하는 값을 빨리 찾을 수 있다. 또한 병합 조인에서는 특정 조건을 만족하는 데이터를 찾는 데이터 탐색이 성능에 큰 영향을 미치므로, 데이터 탐색이 빨라진다는 것은 병합 조인이 빨라진다는 것을 의미한다.
한편, 병합 조인에서는 조인을 위한 입력 데이터가 정렬되어 있으므로, 대부분의 경우에 병합 조인을 처리하는 과정에서 찾고자 하는 데이터는 현재 위치에서 그리 멀지 않은 곳에 있다. k-ary 탐색 모듈(123)은 현재 위치의 데이터에서부터 마지막 데이터까지를 동일한 크기의 파티션으로 나누어서 k-ary 탐색을 하는 것이 아니라, 정렬된 데이터의 지역성을 고려하여 동일하지 않은 크기의 파티션으로 나누는 불균등 파티셔닝에 기반하여 탐색을 한다. 불균등 파티셔닝의 한 실시예에 대해서 도 5를 참고로 하여 설명한다.
도 5는 본 발명의 한 실시예에 따른 병합 조인 방법에서의 불균등 파티셔닝의 한 예를 나타내는 도면이다. 도 5에서는 설명의 편의상 K가 5인 경우의 k-ary 탐색을 위해 동일하지 않은 크기로 파티션을 나누는 불균등 파티셔닝의 한 예를 도시하였지만, K는 5에 한정되지 않는다.
도 5에 도시한 것처럼, 전체 데이터(510)가 N개 있으며 현재 위치를 Pos로 가정한다. k-ary 탐색 모듈(123)은 현재 위치(Pos)에서 가까운 (K-1)개의 파티션(P1, P2, P3, P4)은 동일한 m개의 데이터를 가지도록, 마지막 파티션(P5)은 나머지 모든 데이터, 즉 (N-Pos-4*m)개의 데이터를 가지도록 현재 위치(Pos) 이후의 데이터를 파티셔닝할 수 있다(520).
도 6은 본 발명의 한 실시예에 따른 병합 조인 방법에서의 변형된 k-ary 탐색 방법을 나타내는 흐름도이다.
도 6을 참고하면, k-ary 탐색 모듈(123)은 먼저 현재 위치(Pos) 이후의 데이터로 PartSize개씩 k개의 파티션을 구성할 수 있는지를 체크한다(S600). 즉, k-ary 탐색 모듈(123)은 현재 위치(Pos) 이후의 데이터의 개수가 PartSize*K개 이상인지를 판단한다(S600).
체크 결과 PartSize개씩 K개의 파티션을 구성할 수 없으면, k-ary 탐색 모듈(123)은 현재 위치(Pos) 이후의 데이터 전체를 하나의 파티션으로 간주하여(S610), 파티션의 전체 데이터를 동일한 크기의 K개의 파티션으로 나누어 탐색하는 균등 파티셔닝에 기반한 전형적인 k-ary 탐색을 한다(S690).
체크 결과 PartSize개씩 k개의 파티션을 구성할 수 있으면, k-ary 탐색 모듈(123)은 불균등 파티셔닝에 기반한 k-ary 탐색을 한다(S620-S660). 먼저, k-ary 탐색 모듈(123)은 현재 위치(Pos)에서 시작하여 PartSize개씩 데이터를 가지는 (K-1)개의 파티션을 구성한다(S620). k-ary 탐색 모듈(123)은 (K-1)개의 파티션을 구성하고 남은 데이터 모두를 마지막 파티션으로 한다(S625).
k-ary 탐색 모듈(123)은 복수의 파티션 각각의 첫 번째 값과 찾고자 하는 키 값(FindKey)을 비교하여 데이터가 존재할 것으로 예상되는 파티션을 결정한다(S630-S660). 즉, 비교 결과가 변경되는 파티션이 데이터가 존재할 것으로 예상되는 파티션으로 결정될 수 있다. 열이 오름차순으로 정렬되어 있는 경우, 첫 번째 값이 찾고자 하는 키 값(FindKey)보다 크거나 같은지 비교될 수 있다. 한 실시예에서, 복수의 파티션은 첫 번째 파티션을 제외한 나머지 파티션일 수 있다.
어떤 실시예에서, k-ary 탐색 모듈(123)은 첫 번째 파티션을 제외한 나머지 파티션의 첫 번째 값을 하나의 벡터 레지스터 vS에 차례로 로딩한다(S630). 즉, 벡터 레지스터 vS에는 [p2 p3 ... pK]가 저장된다(여기서, pi는 i번째 파티션의 첫 번째 값이다). k-ary 탐색 모듈(123)은 찾고자 하는 키 값(FindKey)을 벡터 레지스터 vV에 중복하여 로딩한다(S640). 벡터 레지스터 vV에는 [FindKey FindKey ... FindKey]가 저장된다. k-ary 탐색 모듈(123)은 두 벡터 레지스터(vS, vV)에 대해 벡터 비교(요소 단위(element-wise) 비교)를 하여 각 요소의 비교 결과를 대응하는 요소로 가지는 비교 결과 마스크를 생성하고(S650), 비교 결과 마스크를 이용하여 데이터가 존재할 것으로 예상되는 파티션을 결정할 수 있다(S660). 한 실시예에서, 벡터 레지스터 vS의 각 요소가 벡터 레지스터 vV의 대응 요소(FindKey)보다 크거나 같으면 비교 결과를 '1'로, 작으면 비교 결과를 '0'으로 설정하여서 비교 결과 마스크를 생성할 수 있다. 이 경우, 비교 결과 마스크의 값이 변경되는 요소(즉, '0'에서 '1'로 변경되는 요소)로부터 데이터가 존재할 것으로 예상되는 파티션을 결정할 수 있다. 한 실시예에서, 벡터 레지스터로 복수의 n비트의 레지스터가 사용되는 경우, 연산을 간단하기 하기 위해서, 두 벡터 레지스터(vV, vS)의 각 요소의 비교 결과의 최상위 비트 값을 비교 결과 마스크의 대응하는 요소로 생성해서 연산량을 줄일 수 있다.
k-ary 탐색 모듈(123)은 데이터가 존재할 것으로 예상되는 파티션에 대해 균등 파티셔닝에 기반한 전형적인 k-ary 탐색을 한다(S690). 전형적인 k-ary 탐색으로 예를 들면 벤자민 등(Benjamin et al.)의 논문("k-ary search on modern processors", Proceedings of the Fifth International Workshop on Data Management on New Hardware, 2009, Pages 52~60)에 기재된 k-ary 탐색이 사용될 수 있다.
어떤 실시예에서, k-ary 탐색 모듈(123)은 데이터가 존재할 것으로 예상되는 파티션이 마지막 파티션인지를 체크할 수 있다(S670). 체크 결과 마지막 파티션에 존재할 것으로 예상되면, k-ary 탐색 모듈(123)은 파티션 크기(PartSize) 값을 K배 증가시킬 수 있다(S680).
도 6을 참고로 하여 설명한 것처럼, 한 실시예에서, k-ary 탐색 모듈(123)은 첫 번째 라운드(즉, 탐색 범위를 축소하는 라운드)(S610-S660)에서는 동일하지 않은 크기로 파티션을 나누는 불균등 파티셔닝을 수행하고, 그 이후 라운드(S690)에서는 동일한 크기로 파티션을 나누는 균등 파티셔닝을 할 수 있다.
다른 실시예에서, k-ary 탐색 모듈(123)은 첫 번째 라운드뿐만 아니라 이후의 라운드에서도 계속 불균등 파티셔닝에 기반한 k-ary 탐색을 수행할 수도 있다.
불균등 파티셔닝하는 경우, 첫 번째 탐색 범위 축소 시에 마지막 파티션이 선택된 경우에(S670에서 "예"), 다른 파티션이 선택된 경우보다 단계 S690에서 더 많은 비교가 반복 수행될 수 있다. 따라서, 다음 데이터 탐색 요청에서 이러한 가능성을 줄이기 위해, 앞서 설명한 것처럼 k-ary 탐색 모듈(123)은 파티션 크기(PartSize)를 현재의 K배로 확장하여 저장소에 유지할 수 있다(S680). 이와 같이, 병합 조인 실행 중에 파티션의 크기를 데이터 분포에 따라 갱신하고 이를 활용함으로써, 데이터 분포가 반영된 불균등 파티셔닝에 기반한 k-ary 탐색을 수행할 수 있다.
어떤 실시예에서, 탐색 제어 모듈(121)은 k-ary 탐색을 위한 최초 파티셔닝을 위한 파티션의 크기(PartSize)를 조인에 참여하는 두 열의 데이터 개수의 비율과 k-ary 탐색의 비교 횟수를 고려하여 결정할 수 있다. 아래에서는 이러한 실시예에 대해서 도 7을 참고로 하여 설명한다.
도 7은 본 발명의 한 실시예에 따른 병합 조인 방법에서 최초 파티셔닝을 위한 파티션 크기를 결정하는 한 예를 나타내는 도면이다.
도 7에서, 병합 조인에 참여하는 두 열(LeftC, RightC)의 데이터의 개수를 각각 LeftNum과 RightNum이라 한다. 도 7을 참고하면, 탐색 제어 모듈(121)은 병합 조인에 참여하는 두 열(LeftC, RightC)의 데이터의 개수(LeftNum, RightNum)를 비교하여(S710), 큰 수를 작은 수로 나누어서 데이터 개수의 비율(Rate)을 구한다(S720, S730). 즉, 탐색 제어 모듈(121)은 LeftNum이 RightNum보다 크면 LeftNum/RightNum을 비율(Rate)로 결정하고(S730), LeftNum이 RightNum보다 크지 않으면 RightNum/LeftNum을 비율(Rate)로 결정한다(S720).
다음, 탐색 제어 모듈(121)은 k-ary 탐색을 할 때 데이터의 개수가 Rate개인 경우와 동일한 비교 횟수로 탐색을 완료할 수 있는 데이터의 개수 중 가장 큰 수를 파티션 크기(PartSize)로 정한다(S740). 이에 따라, 최소 비교로 최대 데이터 범위에서 원하는 데이터가 있는지 탐색할 수 있다. 한 실시예에서, 파티션의 크기 PartSize는 수학식 1에 의해 정해질 수 있다.
Figure 112017124336887-pat00004
수학식 1에서, Rate는 데이터 개수의 비율이고, ceil()는 입력의 소수점 이하를 올림 처리하는 함수이다.
예를 들어, K가 5인 k-ary 탐색을 하는 경우, 조인 열(LeftC)의 데이터 개수가 1000이고 조인 열(RightC)의 데이터 개수가 15000이라고 가정한다. 그러면 데이터 개수의 비율(Rate)은 15가 되고, 파티션의 크기(PartSize)는 수학식 1에 의해 수학식 2와 같이 25로 결정된다.
Figure 112017124336887-pat00005
탐색 제어 모듈(121)은 PartSize의 (K-1)배의 범위에서 찾고자 하는 값이 존재하지 않는 것으로 판단한 경우(즉, 마지막 파티션에 찾고자 하는 값이 존재하는 것으로 판단한 경우)에, PartSize를 K배 증가시킨 값을 다음 데이터 탐색에서의 파티션의 크기로 이용할 수 있다. 앞에서 예시한 것처럼, PartSize가 25일 때, 마지막 파티션에 찾고자 하는 데이터가 존재하는 것으로 판단된 경우에, 탐색 제어 모듈(121)은 다음 라운드에서는 25*5(=125)를 파티션 크기(PartSize)로 설정해서 k-ary 탐색을 할 수 있다. 이에 따라, 데이터의 분포에 적응하여 최소의 비교로 k-ary 탐색이 가능해질 수 있다.
다른 실시예에서는 진행 중인 이번 탐색이 아니라 다음 번에 찾고자 하는 데이터에 대한 탐색에서부터 변경된 파티션 크기를 사용하여 불균등 파티셔닝에 기반한 k-ary 탐색을 수행할 수도 있다.
다음 본 발명의 한 실시예에 따른 병합 조인 방법에서 순차 탐색과 변형된 k-ary 탐색을 선택하는 방법에 대해서 도 8을 참고로 하여 설명한다.
도 8은 본 발명의 한 실시예에 따른 병합 조인 방법에서의 탐색 선택 방법을 나타내는 흐름도이다.
데이터 탐색부(120)의 탐색 제어 모듈(121)은 비교 횟수에 기반하여 추정한 비용을 비교한 후에 순차 탐색과 k-ary 탐색 중 비용이 더 적게 드는 방법을 선택할 수 있다.
앞서 설명한 것처럼, k-ary 탐색 모듈(123)은 탐색 범위를 K개의 파티션으로 나누고 경계가 되는 (K-1)개의 데이터에 대해 벡터 비교를 이용하여 한꺼번에 비교함으로써, 탐색하는 데이터의 범위를 1/K로 줄여 가면서 탐색을 한다. 이 경우, 정렬된 데이터의 지역성으로 대부분의 경우에 (K-1)*PartSize 이내에서 찾고자 하는 데이터가 있을 것으로 가정한다. 따라서, 변형된 k-ary 탐색의 비교 횟수(NumCmp)는 마지막 파티션이 아닌 앞의 (k-1)개의 파티션에 찾고자 하는 데이터가 있을 것으로 가정하여 정하며, 예를 들면 아래 수학식 3과 같이 계산될 수 있다.
Figure 112017124336887-pat00006
따라서 현재 위치로부터 NumCmp번째 이내에 찾고자 하는 데이터가 존재하는 경우에는, 순차 탐색의 비용이 변형된 k-ary 탐색의 비용보다 낮을 수 있다. 어떤 실시예에서, 도 8에 도시한 것처럼, 탐색 제어 모듈(121)은 현재 위치에서 변형된 k-ary 탐색에 필요한 비교 횟수(NumCmp)를 계산하고(S810), 현재 위치에서 NumCmp만큼 떨어진 곳의 데이터가 특정 조건을 만족하는지(예를 들면, 해당 데이터가 찾고자 하는 데이터의 값보다 크거나 같은지)를 체크할 수 있다(S820). 탐색 제어 모듈(121)은 특정 조건을 만족하면 순차 탐색을 선택하고(S830), 만족하지 않으면 변형된 k-ary 탐색을 선택할 수 있다(S840). 이에 따라 비교 횟수를 줄일 수 있다.
이와 같이, 본 발명의 한 실시예에 따르면 데이터가 가지는 데이터의 지역성을 활용하여 탐색 범위를 줄임으로써 병합 조인에 참여할 서브셋을 정하기 위한 비교 횟수를 줄일 수 있다. 또한 벡터 비교를 함으로써 비교 횟수를 더 줄일 수 있다.
따라서, 병합 조인을 빠르게 진행하여 질의에 대한 데이터베이스의 처리 속도를 증가시키고, 또한 벡터 처리를 지원하는 프로세서에서의 벡터 레지스터를 활용한 병렬 처리 기능을 활용할 수 있다. 이에 따라, 컴퓨팅 장치의 기능 중에서 데이터베이스 또는 프로세서의 기능을 향상시킬 수 있다.
이상에서 본 발명의 실시예에 대하여 상세하게 설명하였지만 본 발명의 권리범위는 이에 한정되는 것은 아니고 다음의 청구범위에서 정의하고 있는 본 발명의 기본 개념을 이용한 당업자의 여러 변형 및 개량 형태 또한 본 발명의 권리범위에 속하는 것이다.

Claims (20)

  1. 데이터베이스를 포함하는 병합 조인 시스템의 병합 조인 방법으로서,
    상기 데이터베이스에서 병합 조인에 참여하는 조인 열의 현재 위치에서 시작하여 상기 조인 열의 데이터를 파티셔닝하여 상기 현재 위치 이후에 위치하는 (K-1)개의 파티션과 마지막 파티션을 포함하는 K개의 파티션을 구성함으로써 불균등 파티셔닝을 수행하는 단계,
    상기 K개의 파티션 중 첫 번째 파티션을 제외한 나머지 파티션의 첫 번째 값과 병합 조인을 위해 찾고자 하는 값이 특정 조건을 만족하는지 비교하는 단계,
    상기 비교의 결과에 기초해서 상기 찾고자 하는 값이 존재할 것으로 예상되는 파티션을 결정하는 단계, 그리고
    상기 결정한 파티션에 k-ary 탐색을 적용하는 단계
    를 포함하며,
    상기 K는 2보다 크고,
    상기 마지막 파티션은, 상기 (K-1)개의 파티션을 구성한 후에 상기 조인 열에 남아 있는 데이터로서 상기 (K-1)개의 파티션에 포함되지 않는 데이터를 포함하며,
    상기 (K-1)개의 파티션은 각각 동일한 제1 크기를 가지고, 상기 마지막 파티션은 상기 제1 크기와 다른 제2 크기를 가지는
    병합 조인 방법.
  2. 제1항에서,
    상기 제2 크기는 상기 제1 크기보다 큰 병합 조인 방법.
  3. 제2항에서,
    상기 결정한 파티션이 상기 마지막 파티션인 경우, 다음 탐색에 사용할 상기 파티션 크기를 제3 크기로 증가시키는 단계를 더 포함하는 병합 조인 방법.
  4. 제3항에서,
    상기 제3 크기는 상기 제1 크기의 K배인 병합 조인 방법.
  5. 제3항에서,
    상기 k-ary 탐색을 적용하는 단계는,
    상기 마지막 파티션을 불균등하게 K개의 파티션으로 파티셔닝하는 단계,
    상기 K개의 새 파티션 중 첫 번째 파티션을 제외한 나머지 파티션의 첫 번째 값과 상기 찾고자 하는 값이 상기 특정 조건을 만족하는지 비교하는 단계,
    상기 비교의 결과에 기초해서 상기 찾고자 하는 값이 존재할 것으로 예상되는 파티션을 결정하는 단계, 그리고
    상기 결정한 파티션에 k-ary 탐색을 적용하는 단계
    를 포함하는 병합 조인 방법.
  6. 제2항에서,
    Figure 112017124336887-pat00007
    를 상기 제1 크기로 결정하는 단계를 더 포함하며,
    상기 ceil() 함수는 소수점 이하를 올림하는 함수이며,
    상기 Rate는 상기 조인 열의 데이터 개수와 상기 병합 조인에 참여하는 다른 열의 데이터 개수 중 큰 수를 작은 수로 나눈 값인
    병합 조인 방법.
  7. 제1항에서,
    상기 k-ary 탐색을 적용하는 단계는, 상기 결정한 파티션의 데이터를 균등하게 K개의 파티션으로 파티셔닝하는 k-ary 탐색을 수행하는 단계를 포함하는 병합 조인 방법.
  8. 제1항에서,
    상기 비교하는 단계는,
    제1 벡터 레지스터에 상기 나머지 파티션의 첫 번째 값을 차례로 로딩하는 단계,
    제2 벡터 레지스터에 상기 찾고자 하는 값을 중복하여 로딩하는 단계, 그리고
    상기 제1 벡터 레지스터와 상기 제2 벡터 레지스터를 벡터 비교하여 비교 결과 마스크를 생성하는 단계를 포함하며,
    상기 결정하는 단계는, 상기 비교 결과 마스크에 기초해서 상기 찾고자 하는 값이 존재할 것으로 예상되는 파티션을 결정하는 단계를 포함하는
    병합 조인 방법.
  9. 제8항에서,
    상기 비교 결과 마스크를 생성하는 단계는, 상기 제1 벡터 레지스터와 상기 제2 벡터 레지스터의 각 요소의 비교 결과의 최상위 비트 값을 이용하여 상기 비교 결과 마스크를 생성하는 단계를 포함하는 병합 조인 방법.
  10. 데이터베이스를 포함하는 병합 조인 시스템의 병합 조인 방법으로서,
    변형된 k-ary 탐색을 포함하는 복수의 탐색 중에서 상기 데이터베이스에서 병합 조인에 참여하는 조인 열의 현재 위치에서 사용할 탐색을 선택하는 단계, 그리고
    상기 변형된 k-ary 탐색을 선택한 경우, 상기 변형된 k-ary 탐색을 수행하는 단계를 포함하며,
    상기 변형된 k-ary 탐색을 수행하는 단계는,
    상기 조인 열의 현재 위치에서 시작하여 상기 조인 열의 데이터를 파티셔닝하여 상기 현재 위치 이후에 위치하는 (K-1)개의 파티션과 마지막 파티션을 포함하는 K개의 파티션을 구성함으로써 불균등 파티셔닝을 수행하는 단계,
    상기 K개의 파티션 중 첫 번째 파티션을 제외한 나머지 파티션의 첫 번째 값과 병합 조인을 위해 찾고자 하는 값이 특정 조건을 만족하는지 비교하는 단계,
    상기 비교의 결과에 기초해서 상기 찾고자 하는 값이 존재할 것으로 예상되는 파티션을 결정하는 단계, 그리고
    상기 결정한 파티션에 k-ary 탐색을 적용하는 단계
    를 포함하며,
    상기 K는 2보다 크고,
    상기 마지막 파티션은, 상기 (K-1)개의 파티션을 구성한 후에 상기 조인 열에 남아 있는 데이터로서 상기 (K-1)개의 파티션에 포함되지 않는 데이터를 포함하며,
    상기 (K-1)개의 파티션은 각각 동일한 제1 크기를 가지고, 상기 마지막 파티션은 상기 제1 크기와 다른 제2 크기를 가지는
    병합 조인 방법.
  11. 제10항에서,
    상기 선택하는 단계는,
    상기 현재 위치에서 각 탐색에 필요한 비교 횟수에 기반하여 비용을 추정하는 단계, 그리고
    상기 복수의 탐색 중 상기 비용이 적게 드는 탐색을 선택하는 단계
    를 포함하는 병합 조인 방법.
  12. 제10항에서,
    상기 복수의 탐색은 순차 탐색을 더 포함하며,
    상기 선택하는 단계는,
    k-ary 탐색에 필요한 비교 횟수를 계산하는 단계,
    상기 현재 위치에서 상기 비교 횟수만큼 떨어진 곳의 값이 상기 특정 조건을 만족하는지를 체크하는 단계, 그리고
    상기 값이 상기 특정 조건을 만족하면 상기 순차 탐색을 선택하고, 상기 값이 상기 특정 조건을 만족하지 않으면 상기 변형된 k-ary 탐색을 선택하는 단계
    를 포함하는 병합 조인 방법.
  13. 제12항에서,
    상기 비교 횟수는
    Figure 112017124336887-pat00008
    로 결정되며,
    상기 ceil() 함수는 소수점 이하를 올림하는 함수이며,
    상기 PartSize는 불균등하게 상기 K개의 파티션으로 파티셔닝할 때 사용하는 파티션 크기인
    병합 조인 방법.
  14. 제13항에서,
    상기 K개의 파티션 중 첫 번째부터 (K-1)번째 파티션의 파티션 크기는 상기 PartSize이며, 마지막 파티션의 파티션 크기는 상기 PartSize보다 큰 병합 조인 방법.
  15. 데이터베이스를 저장하는 저장 장치, 그리고
    변형된 k-ary 탐색을 사용하는 경우, 상기 데이터베이스에서 병합 조인에 참여하는 조인 열의 현재 위치에서 시작하여 상기 조인 열의 데이터를 파티셔닝하여 상기 현재 위치 이후에 위치하는 (K-1)개의 파티션과 마지막 파티션을 포함하는 K개의 파티션을 구성함으로써 불균등 파티셔닝을 수행하고, 상기 K개의 파티션 중 첫 번째 파티션을 제외한 나머지 파티션의 첫 번째 값과 병합 조인을 위해 찾고자 하는 값이 특정 조건을 만족하는지 비교하고, 상기 비교의 결과에 기초해서 상기 찾고자 하는 값이 존재할 것으로 예상되는 파티션을 결정하고, 상기 결정한 파티션에 k-ary 탐색을 적용하는 프로세서
    를 포함하며,
    상기 K는 2보다 크고,
    상기 마지막 파티션은, 상기 (K-1)개의 파티션을 구성한 후에 상기 조인 열에 남아 있는 데이터로서 상기 (K-1)개의 파티션에 포함되지 않는 데이터를 포함하며,
    상기 (K-1)개의 파티션은 각각 동일한 제1 크기를 가지고, 상기 마지막 파티션은 상기 제1 크기와 다른 제2 크기를 가지는
    병합 조인 시스템.
  16. 제15항에서,
    상기 제2 크기는 상기 제1 크기보다 큰 병합 조인 시스템.
  17. 제16항에서,
    상기 프로세서는, 상기 결정한 파티션이 상기 마지막 파티션인 경우, 다음 탐색에 사용할 상기 파티션 크기를 상기 제1 크기의 K배로 증가시키는 병합 조인 시스템.
  18. 제16항에서,
    상기 프로세서는
    Figure 112017124336887-pat00009
    를 상기 제1 크기로 결정하고,
    상기 ceil() 함수는 소수점 이하를 올림하는 함수이며,
    상기 Rate는 상기 조인 열의 데이터 개수와 상기 병합 조인에 참여하는 다른 열의 데이터 개수 중 큰 수를 작은 수로 나눈 값인
    병합 조인 시스템.
  19. 제15항에서,
    상기 프로세서는, 제1 벡터 레지스터에 상기 나머지 파티션의 첫 번째 값을 차례로 로딩하고, 제2 벡터 레지스터에 상기 찾고자 하는 값을 중복하여 로딩하고, 상기 제1 벡터 레지스터와 상기 제2 벡터 레지스터를 벡터 비교하여 비교 결과 마스크를 생성하고, 상기 비교 결과 마스크에 기초해서 상기 찾고자 하는 값이 존재할 것으로 예상되는 파티션을 결정하는, 병합 조인 시스템.
  20. 제15항에서,
    상기 프로세서는, 상기 변형된 k-ary 탐색을 포함하는 복수의 탐색 중에서, 상기 현재 위치에서 각 탐색에 필요한 비교 횟수에 기반하여 추정한 비용이 적게 드는 탐색을 선택하는, 병합 조인 시스템.
KR1020170171505A 2017-12-13 2017-12-13 병합 조인 시스템 및 병합 조인 방법 KR102551277B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020170171505A KR102551277B1 (ko) 2017-12-13 2017-12-13 병합 조인 시스템 및 병합 조인 방법
US16/193,419 US11275741B2 (en) 2017-12-13 2018-11-16 Merge join system and method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020170171505A KR102551277B1 (ko) 2017-12-13 2017-12-13 병합 조인 시스템 및 병합 조인 방법

Publications (2)

Publication Number Publication Date
KR20190070709A KR20190070709A (ko) 2019-06-21
KR102551277B1 true KR102551277B1 (ko) 2023-07-04

Family

ID=66696921

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020170171505A KR102551277B1 (ko) 2017-12-13 2017-12-13 병합 조인 시스템 및 병합 조인 방법

Country Status (2)

Country Link
US (1) US11275741B2 (ko)
KR (1) KR102551277B1 (ko)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20190156214A1 (en) 2017-11-18 2019-05-23 Neuralmagic Inc. Systems and methods for exchange of data in distributed training of machine learning algorithms
US11449363B2 (en) 2018-05-31 2022-09-20 Neuralmagic Inc. Systems and methods for improved neural network execution
US10832133B2 (en) 2018-05-31 2020-11-10 Neuralmagic Inc. System and method of executing neural networks
US11636343B2 (en) 2018-10-01 2023-04-25 Neuralmagic Inc. Systems and methods for neural network pruning with accuracy preservation
US11544559B2 (en) 2019-01-08 2023-01-03 Neuralmagic Inc. System and method for executing convolution in a neural network
WO2021026225A1 (en) * 2019-08-08 2021-02-11 Neuralmagic Inc. System and method of accelerating execution of a neural network
US11556757B1 (en) 2020-12-10 2023-01-17 Neuralmagic Ltd. System and method of executing deep tensor columns in neural networks
CN113626250A (zh) * 2021-07-08 2021-11-09 华中科技大学 一种基于纠删码的条带合并方法及系统
US11960982B1 (en) 2021-10-21 2024-04-16 Neuralmagic, Inc. System and method of determining and executing deep tensor columns in neural networks

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160078031A1 (en) * 2014-09-17 2016-03-17 International Business Machines Corporation Sort-merge-join on a large architected register file

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6185557B1 (en) 1998-07-31 2001-02-06 Unisys Corporation Merge join process
US9824128B1 (en) * 2012-08-01 2017-11-21 The United States Of America As Represented By The Administrator Of Nasa System for performing single query searches of heterogeneous and dispersed databases
KR102071335B1 (ko) 2015-06-11 2020-03-02 한국전자통신연구원 워크플로우 모델 생성 방법과 워크플로우 모델 실행 방법 및 장치
KR20170109119A (ko) 2016-03-17 2017-09-28 한국전자통신연구원 분산 질의 엔진에서의 질의 최적화 방법 및 장치

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160078031A1 (en) * 2014-09-17 2016-03-17 International Business Machines Corporation Sort-merge-join on a large architected register file

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
B. Schlegal et al., k-Ary Search on Modern Processors, Proceedings of the Fifth International Workshop on Data Management on New Hardware(2009)*

Also Published As

Publication number Publication date
US20190179818A1 (en) 2019-06-13
US11275741B2 (en) 2022-03-15
KR20190070709A (ko) 2019-06-21

Similar Documents

Publication Publication Date Title
KR102551277B1 (ko) 병합 조인 시스템 및 병합 조인 방법
Lu et al. SpWA: An efficient sparse winograd convolutional neural networks accelerator on FPGAs
Breß et al. Efficient co-processor utilization in database query processing
KR102011671B1 (ko) 이종 계산 장치 기반의 질의 처리 방법 및 장치
Inoue et al. Faster set intersection with SIMD instructions by reducing branch mispredictions
US20190095818A1 (en) Gradient-based auto-tuning for machine learning and deep learning models
US10268454B2 (en) Methods and apparatus to eliminate partial-redundant vector loads
US20130166516A1 (en) Apparatus and method for comparing a first vector of data elements and a second vector of data elements
US11372929B2 (en) Sorting an array consisting of a large number of elements
JP2009116854A (ja) スキャン演算を遂行するシステム、方法、及びコンピュータ・プログラムプロダクト
US20200319919A1 (en) Systems and methods for scheduling neural networks by varying batch sizes
CN112540849A (zh) 一种分布式计算作业的参数配置优化方法及系统
Karnagel et al. Local vs. Global Optimization: Operator Placement Strategies in Heterogeneous Environments.
Smutnicki et al. A new approach for multi-criteria scheduling
US11599540B2 (en) Query execution apparatus, method, and system for processing data, query containing a composite primitive
WO2018192479A1 (en) Adaptive code generation with a cost model for jit compiled execution in a database system
Kim et al. List intersection for web search: Algorithms, cost models, and optimizations
Zhu et al. A methodology for characterizing sparse datasets and its application to simd performance prediction
JP2008525905A (ja) ベイズ・ネットワーク構造学習のデータ分割及びクリティカル・セクション
US6963823B1 (en) Programmatic design space exploration through validity filtering and quality filtering
Sinha et al. DSIM: Distributed sequence matching on near-dram accelerator for genome assembly
KR20230069763A (ko) 신경망 네트워크의 셀프 어텐션 연산을 가속하는 장치
US11144428B2 (en) Efficient calculation of performance data for a computer
US20110283294A1 (en) Determining multi-programming level using diminishing-interval search
dos Santos et al. Advancing Database System Operators with Near-Data Processing

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application
X091 Application refused [patent]
AMND Amendment
X701 Decision to grant (after re-examination)
GRNT Written decision to grant