KR101465447B1 - 외부 병합 정렬 방법, 외부 병합 정렬 시스템 및 외부 병합 정렬을 위한 분산 처리 시스템 - Google Patents

외부 병합 정렬 방법, 외부 병합 정렬 시스템 및 외부 병합 정렬을 위한 분산 처리 시스템 Download PDF

Info

Publication number
KR101465447B1
KR101465447B1 KR20140037376A KR20140037376A KR101465447B1 KR 101465447 B1 KR101465447 B1 KR 101465447B1 KR 20140037376 A KR20140037376 A KR 20140037376A KR 20140037376 A KR20140037376 A KR 20140037376A KR 101465447 B1 KR101465447 B1 KR 101465447B1
Authority
KR
South Korea
Prior art keywords
merge
storage device
data
sorting
runs
Prior art date
Application number
KR20140037376A
Other languages
English (en)
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 KR20140037376A priority Critical patent/KR101465447B1/ko
Application granted granted Critical
Publication of KR101465447B1 publication Critical patent/KR101465447B1/ko
Priority to US14/570,210 priority patent/US20150278299A1/en

Links

Images

Classifications

    • 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/22Arrangements for sorting or merging computer data on continuous record carriers, e.g. tape, drum, disc
    • G06F7/36Combined merging and sorting

Abstract

외부 병합 정렬 방법(400)은 소스 데이터가 입력되는 단계(410), 컴퓨터 장치가 소스 데이터를 메모리 크기 단위로 나누어 각각 내부 정렬하고, 정렬된 런을 저장 장치(120)에 저장하는 단계(420), 저장 장치(120)가 복수의 런을 대상으로 병합 정렬을 수행하고, 정렬되는 데이터를 버퍼에 저장하는 단계(430), 저장 장치(120)가 버퍼에 있는 데이터를 컴퓨터 장치에 전달하는 단계(440) 및 컴퓨터 장치가 정렬된 데이터를 이용하는 단계(450)를 포함한다.

Description

외부 병합 정렬 방법, 외부 병합 정렬 시스템 및 외부 병합 정렬을 위한 분산 처리 시스템{METHOD FOR EXTERNAL MERGE SORT, SYSTEM FOR EXTERNAL MERGE SORT AND DISTRIBUTED PROCESSING SYSTEM FOR EXTERNAL MERGE SORT}
이하 설명하는 기술은 외부 병합 정렬 방법 및 외부 병합 정렬을 수행하는 장치에 관한 것이다.
대용량 자료를 처리하는 하둡(Hadoop) 같은 분산 처리 시스템, 대용량 자료를 관리하는 데이터베이스 시스템 등에서는 관리하는 데이터를 정렬(sorting)하기 위하여 외부 병합 정렬 기법을 사용하곤 한다.
시스템이 다루는 데이터량은 기하급수적으로 증가하고 있지만, 일반적으로 이를 처리하는 메모리 용량은 한정되기 때문에 외부 병합 정렬 기법을 사용하는 것이다.
외부 병합 정렬을 수행하는 시스템은 외부 병합 정렬의 과정을 제어하는 호스트 장치 및 정렬 과정에서 생성되는 데이터를 저장하는 저장 장치를 포함한다.
한국공개특허 10-2013-0119276호 일본공개특허 1996-305657호
이하 설명하는 기술은 외부 병합 정렬 과정을 호스트 장치와 저장 장치에 분산 처리하는 기법 및 장치를 제공하고자 한다.
이하 설명하는 기술의 해결과제는 이상에서 언급된 것들에 한정되지 않으며, 언급되지 아니한 다른 해결과제들은 아래의 기재로부터 당업자에게 명확하게 이해될 수 있을 것이다.
상기 과제를 해결하기 위한 외부 병합 정렬 방법은 컴퓨터 장치가 소스 데이터를 메모리에서 처리 가능한 크기로 나누어 각각 내부 정렬한 복수의 런 (run)들을 저장 장치에 저장하는 단계, 저장 장치가 임베디드 소프트웨어를 이용하여 저장된 런들을 저장 장치 내부에서 병합 정렬하는 단계 및 컴퓨터 장치가 병합 정렬된 데이터에 접근하는 단계를 포함한다.
외부 병합 정렬 방법은 병합 정렬하는 단계 전에 컴퓨터 장치가 런들 각각에 대한 저장 위치 및 파일 크기를 포함하는 런 정보를 저장 장치에 전달하는 단계를 더 포함할 수 있다.
병합 정렬하는 단계는 저장 장치가 컴퓨터 장치로부터 소스 데이터에 대한 읽기 명령을 전달받는 경우, 저장 장치가 컴퓨터 장치로부터 병합 명령을 전달받는 경우 또는 저장 장치가 병합 정렬을 수행할 수 있는 유휴(遊休) 상태에서 수행될 수 있다.
저장 장치는 병합 정렬하는 단계에서 저장 장치의 버퍼에 정렬되는 데이터를 버퍼의 크기 단위로 저장하고, 접근하는 단계에서 컴퓨터 장치는 버퍼에 저장되는 데이터를 크기 단위로 전달받을 수 있다.
저장 장치는 병합 정렬하는 단계에서 저장 장치의 주 저장 매체에 정렬되는 데이터를 모두 저장하고, 접근하는 단계에서 컴퓨터 장치는 주 저장 매체에 저장된 데이터를 읽을 수도 있다.
외부 병합 정렬 시스템은 소스 데이터를 메모리에서 처리 가능한 크기인 기준 세그먼트 크기 단위로 내부 정렬을 수행한 복수의 런(RUN)들을 저장 장치에 저장하고, 복수의 런들에 대한 병합 정렬 명령을 저장 장치에 전달하는 호스트 장치 및 병합 정렬 명령을 수신하고, 복수의 런들에 대한 병합 정렬을 수행하여 정렬된 데이터를 호스트 장치에 전달하는 저장 장치를 포함한다.
저장 장치는 런들이 저장되는 주 저장부, 정렬된 데이터는 저장하는 버퍼부, 버퍼부에 저장되는 정렬된 데이터를 호스트 장치에 전달하는 인터페이스부 및 런들에 포함된 레코드들을 각 레코드의 키 값 및 정렬 기준에 따라 순차적으로 버퍼부에 저장하고, 버퍼부에 저장된 데이터를 호스트 장치에 전달하도록 인터페이스부를 제어하는 제어부를 포함한다.
저장 장치는 병합 정렬을 수행하면서 정렬된 데이터를 버퍼에 저장하고, 버퍼에 저장된 데이터를 호스트 장치에 전달하거나, 병합 정렬을 수행하면서 정렬된 데이터를 저장 장치의 주 저장 매체에 저장한 후 호스트 장치의 요청이 있으면 주 저장 매체에 저장된 데이터를 호스트 장치에 전달한다.
외부 병합 정렬을 위한 분산 처리 시스템은 각 제1 병합 정렬 장치에서 소스 데이터가 제1 분할되어 전달되면 제1 분할된 소스 데이터를 각 제1 병합 정렬 장치의 메모리에서 처리 가능한 크기 단위로 내부 정렬하고, 크기 단위의 정렬된 런(RUN)들을 각 제1 병합 정렬 장치의 제1 저장 장치에 저장하고, 런들에 대한 제1 병합 정렬을 수행하여 정렬된 데이터를 제2 병합 정렬 장치에 전달하는 복수 개의 제1 병합 정렬 장치 및 복수 개의 제1 병합 정렬 장치 각각에서 제1 병합 정렬된 데이터를 전달받고, 각각의 제1 병합 정렬된 데이터에 대한 제2 병합 정렬을 수행하여 제2 병합 정렬 장치의 제2 저장 장치에 저장하는 제2 병합 정렬 장치를 포함한다.
제1 병합 정렬 장치는 런들에 대한 제1 병합 정렬을 수행하면서 정렬된 결과를 제1 병합 정렬 장치의 버퍼에 저장하고, 버퍼에 저장된 데이터를 제2 병합 정렬 장치에 전달하거나, 런들에 대한 제1 병합 정렬을 수행한 결과를 제1 저장 장치에 모두 저장하고, 정렬이 완료되면 제2 병합 정렬 장치에 정렬된 데이터를 전달할 수 있다.
호스트 컴퓨터 장치는 런들 각각에 대한 저장 위치, 파일 크기, 런에 포함된 데이터의 레코드 크기, 키 값의 위치, 키 값의 길이 또는 레코드의 타입 중 적어도 하나의 정보를 포함하는 런 정보를 제1 병합 정렬 장치에 전달하고, 제1 병합 정렬 장치는 런 정보를 이용하여 제1 병합 정렬을 독립적으로 수행할 수 있다.
제2 병합 정렬 장치는 호스트 컴퓨터 장치이고, 호스트 컴퓨터 장치가 제1 병합 정렬된 데이터를 제2 저장 장치에 저장하고, 제2 저장 장치에 저장된 제1 병합 정렬된 데이터를 이용하여 제2 병합 정렬을 수행할 수 있다.
이하 설명하는 기술은 외부 병합 정렬을 호스트 장치와 저장 장치에 분산 처리하여 호스트 장치의 오버 헤드를 줄이고, 외부 병합 정렬을 효과적으로 수행할 수 있다.
나아가 이하 설명하는 기술은 외부 병합 정렬 과정에서 저장 장치의 읽고 쓰는 횟수를 줄여서 저장 장치의 수명을 증가시킨다. 특히 저장 장치로 플래시 메모리로 구성되는 SSD(Solid-state Drive)를 사용하는 경우 SSD의 수명이 두 배 증가할 수 있다.
이하 설명하는 기술의 효과는 이상에서 언급된 것들에 한정되지 않으며, 언급되지 아니한 다른 효과들은 아래의 기재로부터 당업자에게 명확하게 이해될 수 있을 것이다.
도 1은 종래 외부 병합 정렬이 수행되는 과정을 예시한 블록도이다.
도 2는 외부 병합 정렬이 수행되는 다른 과정을 예시한 블록도이다.
도 3은 외부 병합 정렬이 수행되는 또 다른 과정을 예시한 블록도이다.
도 4는 외부 병합 정렬 방법에 대한 순서도의 예이다.
도 5는 외부 병합 정렬 방법에 대한 순서도의 다른 예이다.
도 6은 외부 병합 정렬 시스템의 구성을 도시한 블록도의 예이다.
도 7은 외부 병합 정렬을 위한 분산 처리 시스템의 구성을 도시한 블록도의 예이다.
도 8은 외부 병합 정렬을 위한 분산 처리 시스템의 구성을 도시한 블록도의 다른 예이다.
이하 설명하는 기술은 다양한 변경을 가할 수 있고 여러 가지 실시예를 가질 수 있는 바, 특정 실시예들을 도면에 예시하고 상세하게 설명하고자 한다. 그러나, 이는 이하 설명하는 기술을 특정한 실시 형태에 대해 한정하려는 것이 아니며, 이하 설명하는 기술의 사상 및 기술 범위에 포함되는 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다.
제1, 제2, A, B 등의 용어는 다양한 구성요소들을 설명하는데 사용될 수 있지만, 해당 구성요소들은 상기 용어들에 의해 한정되지는 않으며, 단지 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로만 사용된다. 예를 들어, 이하 설명하는 기술의 권리 범위를 벗어나지 않으면서 제1 구성요소는 제2 구성요소로 명명될 수 있고, 유사하게 제2 구성요소도 제1 구성요소로 명명될 수 있다. 및/또는 이라는 용어는 복수의 관련된 기재된 항목들의 조합 또는 복수의 관련된 기재된 항목들 중의 어느 항목을 포함한다.
본 명세서에서 사용되는 용어에서 단수의 표현은 문맥상 명백하게 다르게 해석되지 않는 한 복수의 표현을 포함하는 것으로 이해되어야 하고, "포함한다" 등의 용어는 설시된 특징, 개수, 단계, 동작, 구성요소, 부분품 또는 이들을 조합한 것이 존재함을 의미하는 것이지, 하나 또는 그 이상의 다른 특징들이나 개수, 단계 동작 구성요소, 부분품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 배제하지 않는 것으로 이해되어야 한다.
도면에 대한 상세한 설명을 하기에 앞서, 본 명세서에서의 구성부들에 대한 구분은 각 구성부가 담당하는 주기능 별로 구분한 것에 불과함을 명확히 하고자 한다. 즉, 이하에서 설명할 2개 이상의 구성부가 하나의 구성부로 합쳐지거나 또는 하나의 구성부가 보다 세분화된 기능별로 2개 이상으로 분화되어 구비될 수도 있다. 그리고 이하에서 설명할 구성부 각각은 자신이 담당하는 주기능 이외에도 다른 구성부가 담당하는 기능 중 일부 또는 전부의 기능을 추가적으로 수행할 수도 있으며, 구성부 각각이 담당하는 주기능 중 일부 기능이 다른 구성부에 의해 전담되어 수행될 수도 있음은 물론이다. 따라서, 본 명세서를 통해 설명되는 각 구성부들의 존재 여부는 기능적으로 해석되어야 할 것이며, 이러한 이유로 이하 설명하는 기술의 외부 병합 정렬 시스템(100), 외부 병합 정렬을 위한 분산 처리 시스템(200) 및 외부 병합 정렬을 위한 분산 처리 시스템(300)에 따른 구성부들의 구성은 이하 설명하는 기술의 목적을 달성할 수 있는 한도 내에서 대응하는 도면과는 상이해질 수 있음을 명확히 밝혀둔다.
또, 방법 또는 동작 방법을 수행함에 있어서, 상기 방법을 이루는 각 과정들은 문맥상 명백하게 특정 순서를 기재하지 않은 이상 명기된 순서와 다르게 일어날 수 있다. 즉, 각 과정들은 명기된 순서와 동일하게 일어날 수도 있고 실질적으로 동시에 수행될 수도 있으며 반대의 순서대로 수행될 수도 있다.
외부 병합 정렬에서 정렬의 대상은 특정한 데이터이다. 데이터 종류 또는 타입은 다양할 수 있으나 각 데이터는 정렬이 가능한 기준값을 갖고 있어야 한다. 데이터 자체가 크기값을 갖는 형태일 수 있고, 데이터는 크기값이 없는 주(main) 데이터 및 주 데이터에 대응되는 크기값을 포함한 형태일 수도 있다. 정렬 대상이 되는 데이터는 해당 분야의 통상의 지식을 가진 자가 사용할 수 있는 다양한 형태 및 종류의 데이터가 사용될 수 있음은 자명한다.
이하 명세서에서는 설명의 편의를 위하여 정렬 대상이 되는 데이터는 레코드(record) 형태를 갖는다고 전제한다. 레코드는 가변적인 길이를 갖는 키(key)와 상기 키에 저장되는 키값(value)으로 구성된다. 결국 정렬은 상기 키를 기준으로 수행된다.
먼저 종래의 외부 병합 정렬 방법이 수행되는 예를 간략하게 설명하고자 한다. 도 1은 종래 외부 병합 정렬이 수행되는 과정을 예시한 블록도이다. 정렬은 정렬에 대한 연산 및 제어를 수행하는 호스트 장치(110) 및 정렬 과정에서 생기는 데이터를 저장하는 저장 장치(120)에서 수행된다.
먼저 정렬 대상이 되는 소스 데이터가 필요하다. 소스 데이터는 저장 장치(120)에 사전에 저장된 데이터이거나, 저장 장치(120) 외에 다른 보조 저장 장치(USB, 하드디스크, SSD 등) 또는 네트워크를 통해 전달되는 데이터일 수도 있다.
호스트 장치(110)는 소스 데이터를 호스트 장치(110)의 메모리에서 처리 가능한 크기로 나눈다. 호스트 장치(110)는 사전에 소스 데이터를 메모리에서 처리 가능한 크기로 구분할 수도 있고, 소스 데이터를 메모리에 읽어오면서 실시간으로 처리할 수도 있다. 메모리 크기는 장치마다 다를 수 있고, 장착된 메모리 크기와 내부 정렬이 가능한 데이터 크기는 다소 다를 수도 있다. 소스 데이터가 구분되는 단위를 메모리 크기 단위라고 명명한다. 정확하게는 가용한 메모리의 크기 단위가 될 것이다. 도 1에서는 호스트 장치(110)의 메모리 등과 같은 구성을 도시하지 않았다.
호스트 장치(110)는 메모리에 입력된 소스 데이터를 내부 정렬한다. 내부 정렬 기법은 알려진 다양한 기법이 사용될 수 있다. 내부 정렬 기법은 버블 정렬(bubble sort), 삽입 정렬(insertion sort), 퀵 정렬(quick sort) 등과 같은 다양한 기법이 존재한다. 호스트 장치(110)가 내부 정렬을 완료한 메모리 크기 단위의 소스 데이터는 하나의 런(RUN)이 된다. 소스 데이터에서 메모리 크기 단위로 정렬된 부분을 일반적으로 런이라고 명명한다. 호스트 장치(110)는 소스 데이터를 메모리 크기 단위로 일정한 순서에 따라 각각 내부 정렬하고, 정렬된 복수의 런을 저장 장치(120)에 저장한다. 도 1에서는 저장 장치에 5개의 런들(RUN1, RUN2, RUN3, RUN4 및 RUN5)이 저장된 예를 도시한다.
모든 소스 데이터에 대해 메모리 크기 단위로 내부 정렬이 완료되면, 호스트 장치(110)는 저장 장치(120)에 저장된 복수의 런들을 참조하여 하나의 데이터(파일)로 병합을 수행한다. 복수의 런들을 하나의 정렬된 데이터로 병합하는 과정은 다양한 기법이 사용될 수 있다. 예컨대, m원 병합(m-way merge)이 사용될 수도 있고, 복수의 런들을 모두 참조하면서 정렬 기준(오름 차순 또는 내림 차순)에 따라 가장 우선순위가 높은 레코드를 하나씩 읽어들이면서 하나의 파일을 만들 수도 있다. m원 병합은 저장 장치에서 읽기 및 쓰기가 수행되는 횟수가 증가하게 되므로, 이하 복수의 런들을 모두 참조하여 하나의 파일을 만드는 방식을 사용한다고 가정한다. 최종적인 결과 데이터(정렬 데이터)는 저장 장치(120)에 저장된다.
호스트 장치(110)에서 수행되는 병합 과정은 정렬 기준에 따라 복수의 런을 참조하여 호스트 장치(110)의 메모리에 레코드를 하나씩 불러오고, 메모리에서 가용한 부분에 정렬된 데이터가 차게되면 해당 데이터를 저장 장치(120)에 저장하는 방식이다.
저장 장치(120)에 소스 데이터가 모두 정렬된 순서로 저장되고 난 후 호스트 장치(110)는 필요에 따라 정렬 데이터를 읽어들여 이용하게 된다.
상기 외부 병합 정렬 과정 및 정렬된 데이터를 활용하는 단계는 호스트 장치(110)가 복수의 런들을 저장 장치에 저장하는 단계(①Write), 호스트 장치(110)가 복수의 런들을 병합하기 위해 데이터를 읽는 단계(②Read), 호스트 장치(110)가 병합되어 정렬 데이터를 저장 장치에 저장하는 단계(③Write ) 및 호스트 장치(110)가 정렬 데이터를 이용하기 위하여 정렬 데이터를 읽는 단계(④Read)를 포함한다. 상기 과정에서 모두 2회의 쓰기 및 2회의 읽기가 수행된다.
최초 소스 데이터가 저장 장치(120)에 저장되어 있는 경우라면, 읽기 1회가 추가될 수도 있지만, 이하 소스 데이터가 입력되는 과정은 생략하고 설명하고자 한다.
이하에서는 도면을 참조하면서 외부 병합 정렬 방법(400, 500), 외부 병합 정렬 시스템(100), 외부 병합 정렬을 위한 분산 처리 시스템(200) 및 외부 병합 정렬을 위한 분산 처리 시스템(300)에 관하여 구체적으로 설명하겠다. 도 1에 도시된 종래 기술에서 대응되는 구성은 동일한 도면 부호를 사용할 수 있음을 미리 알려둔다.
도 2는 외부 병합 정렬이 수행되는 다른 과정을 예시한 블록도이다. 도 3은 외부 병합 정렬이 수행되는 또 다른 과정을 예시한 블록도이다. 도 2 및 도 3은 이하 설명하는 기술의 아이디어를 설명하기 위한 것이다.
도 2를 살펴보면, 호스트 장치(110)가 소스 데이터를 메모리 크기 단위로 내부 정렬하여 복수의 런들을 저장 장치(120)에 저장하는 과정까지는 도 1과 동일하다.
이하 설명하는 기술은 저장 장치(120)에 병합 정렬 과정의 일부를 분산시킨다. 저장 장치(120)는 복수의 런들을 참조하여 하나의 정렬된 데이터 또는 런을 만든 병합 과정을 수행한다. 이를 위해 저장 장치(120)는 병합 과정을 수행하기 위한 프로세서 등이 필요할 것이다. 저장 장치(120)는 병합 과정을 위한 임베디드 소프트웨어가 설치된 칩을 포함할 수도 있다.
이를 위해서 호스트 장치(110)는 복수의 런들 저장 장치(120)에 저장하면서 또는 적어도 저장 장치(120)가 병합 과정을 수행하기 전에 병합에 필요한 정보를 전달해야 할 것이다. 이때 필요한 정보는 저장장치 내부의 데이터 위치, 파일 크기 등이 있다. 또한 레코드 크기나 key의 길이 및 타입 등에 대한 정보도 저장장치로 넘겨 줄 수 있다. 이하 병합 과정에 필요한 정보를 "런 정보"라고 명명한다.
저장 장치(120)가 복수의 런들을 병합하는 단계는 호스트 장치(110)로부터 소스 데이터(정렬된 소스 데이터)에 대한 읽기 명령이 전달되면 수행될 수 있다. 또는 복수의 런들을 병합하는 단계는 호스트 장치(110)로부터 별도의 병합 명령이 전달되는 경우 수행될 수도 있다. 나아가 복수의 런들을 병합하는 단계는 저장 장치(120)가 병합 과정을 수행할 수 있는 상태에 있을 때마다 자동으로 수행될 수도 있다. 즉, 저장 장치(120)가 유휴(遊休,idle) 상태에 있을 때 수행될 수도 있다.
도 2는 저장 장치(120)가 복수의 런을 병합하여 자신의 저장소에 저장하지 않고, 버퍼(buffer)에 저장하였다가 버퍼가 차면 버퍼에 저장된 내용을 호스트 장치(110)에 전달하는 예를 도시한다. 도 2에서는 저장 장치(120)의 버퍼 등과 같은 구성을 별도로 도시하지 않았다.
이후 호스트 장치(110)는 병합되어 정렬된 데이터를 이용하게 된다.
도 2와 같은 외부 병합 정렬 기법을 사용하게 되면 저장 장치(120)에서는 쓰기 한 번(①Write)과 읽기 한 번(②Read)이 수행된다. 저장 장치(120)의 읽기 및 쓰기 횟수가 줄어들게 되면, 외부 병합 정렬이 보다 빠르게 진행될 수 있고, 나아가 저장 장치(120)의 수명이 늘어나게 된다.
SSD는 알려진 바와 같이 쓰기가 읽기보다 느리다. 따라서 SSD 경우 쓰기 과정이 1회 줄어들면 더욱 빠르게 병합 정렬이 수행될 수 있다. 나아가 SSD와 같이 수명 제한이 있는 플래시 메모리를 저장 매체로 사용하는 저장 장치(120) 경우, 도 2와 같은 방식을 사용하게 되면 수명이 매우 늘어나게 된다.
도 3은 도 2와는 다른 외부 병합 정렬의 예를 도시한다. 도 3에서는 저장 장치(120)가 복수의 런들을 병합한 결과인 정렬 데이터를 저장 장치(120)에 저장한다. 이후 호스트 장치(110)가 정렬된 소스 데이터가 필요한 경우 저장 장치(120)에 저장된 정렬 데이터를 읽어 사용한다.
도 3에 도시된 외부 병합 정렬 기법은 종래 기법과 같이 2회의 읽기 및 2회의 쓰기를 사용한다. 따라서 쓰기 및 읽기 횟수가 줄어드는 효과는 없다. 다만 호스트 장치(110)가 복수의 런들을 병합하는 과정을 처리하지 않기 때문에 호스트 장치(110)의 에너지 소비를 줄일 수 있다는 장점이 있다. 물론 도 2에 도시된 외부 병합 정렬 기법도 호스트 장치(110)의 오버 헤드 또는 에너지 소비를 줄인다는 효과가 있다.
호스트 장치(110)가 최종적인 정렬 데이터를 반복적으로 사용한다면 저장 장치(120)에 정렬 데이터를 저장하는 방식을 사용하는 것이 바람직하다.
도 4는 외부 병합 정렬 방법(400)에 대한 순서도의 예이다.
외부 병합 정렬 방법(400)은 소스 데이터가 입력되는 단계(410), 컴퓨터 장치가 소스 데이터를 메모리 크기 단위로 나누어 각각 내부 정렬하고, 정렬된 런을 저장 장치(120)에 저장하는 단계(420), 저장 장치(120)가 복수의 런을 대상으로 병합 정렬을 수행하고, 정렬되는 데이터를 버퍼에 저장하는 단계(430), 저장 장치(120)가 버퍼에 있는 데이터를 컴퓨터 장치에 전달하는 단계(440) 및 컴퓨터 장치가 정렬된 데이터를 이용하는 단계(450)를 포함한다.
컴퓨터 장치는 정렬된 데이터를 이용하는 장치에 해당하고, 전술한 호스트 장치(110)에 대응되는 구성이다. 저장 장치(120)는 비휘발성 메모리, 플래시 메모리로 구성되는 저장 매체일 수 있다. 예컨대, SSD와 같은 저장 매체가 사용될 수 있다. 물론 전통적인 하드디스크와 같은 저장 매체가 사용될 수도 있다.
저장 장치(120)가 복수의 런에 대한 병합 정렬을 수행하기 전에 컴퓨터 장치가 런들 각각에 대한 저장 위치 및 파일 크기를 포함하는 런 정보를 저장 장치에 전달할 수 있다. 예컨대, 컴퓨터 장치가 메모리 크기 단위의 소스 데이터를 내부 정렬하고 정렬된 메모리 크기 단위의 데이터를 저장 장치(120)에 저장하는 과정에서 상기 런 정보를 전달할 수도 있다. 또한 런 정보는 런에 포함된 데이터의 레코드 크기, 키 값의 위치, 키 값의 길이 또는 레코드의 타입 중 적어도 하나의 정보를 더 포함할 수도 있다.
저장 장치(120)가 복수의 런에 대한 병합 정렬을 수행하기 위해서는 데이터에 접근할 수 있어야 하므로 기본적으로 런들이 위치하는 위치 및 런들의 크기가 필요하다. 나아가 런들을 병합하기 위해서는 런을 구성하는 레코드의 크기가 필요하고, 별도의 키값이 있다면 데이터에서 키 값의 위치 및/또는 키값의 길이 정보 등이 필요할 수도 있다. 키와 레코드 크기가 가변적일 경우, 레코드에 헤더(header)를 추가하는 방식을 사용하여 키와 레코드에 접근할 수 있다.
외부 병합 정렬 방법(400)에서 저장 장치(120)는 복수의 런들을 병합하면서 각 레코드의 키 값 및 정렬 기준에 따라 순차적으로 정렬된 결과를 버퍼에 저장하고(430), 버퍼에 데이터가 차게되면 버퍼에 저장된 데이터를 컴퓨터 장치에 전달한다(440). 저장 장치(120)는 저장 장치(120)의 버퍼 크기 단위로 데이터를 저장 및 전달하게 된다.
정렬되는 데이터를 버퍼에 저장하는 단계(430)는 저장 장치(120)가 컴퓨터 장치로부터 소스 데이터에 대한 읽기 명령을 전달받는 경우(제1 모드), 저장 장치(120)가 컴퓨터 장치로부터 병합 명령을 전달받는 경우(제2 모드) 또는 저장 장치(120)가 병합 정렬을 수행할 수 있는 유휴(遊休) 상태(제3 모드)에서 수행될 수 있다.
컴퓨터 장치가 정렬된 데이터가 필요한 경우 소스 데이터에 대한 읽기 명령을 저장 장치(120)에 전달하고, 저장 장치(120)는 실시간으로 정렬된 데이터를 컴퓨터 장치에 제공할 수 있다(제1 모드).
컴퓨터 장치가 정렬된 데이터가 필요한 경우 또는 정렬된 데이터에 대한 준비가 필요한 경우에 별도의 병합 명령을 저장 장치(120)에 전달할 수 있다(제2 모드). 사실 제1 모드는 읽기 명령을 하나의 병합 명령으로 사용한 예이다.
나아가 저장 장치(120)는 자신이 병합 정렬을 수행할 수 있는 유휴 상태일때 병합을 수행할 수도 있다(제3 모드). 다만 제3 모드는 컴퓨터 장치가 제어의 주체가 되는 것이 바람직할 것이다. 따라서, 제3 모드는 컴퓨터 장치가 저장 장치(120)가 유휴 상태인 경우 별도의 병합 정렬 명령을 내리는 제2 모드에 해당할 수도 있다.
도 5는 외부 병합 정렬 방법(500)에 대한 순서도의 다른 예이다. 도 4의 외부 병합 정렬 방법(400)과 다른 점은 저장 장치(120)가 복수의 런들을 병합한 데이터를 저장 장치(120)의 저장소에 저장한다는 점이다. 이를 제외한 나머지 단계 및 구성은 도 4와 동일하다.
외부 병합 정렬 방법(500)은 소스 데이터가 입력되는 단계(510), 컴퓨터 장치가 소스 데이터를 메모리 크기 단위로 나누어 각각 내부 정렬하고, 정렬된 런을 저장 장치(120)에 저장하는 단계(520), 저장 장치(120)가 복수의 런을 대상으로 병합 정렬을 수행하고, 정렬되는 데이터를 저장 장치(120)의 주 저장소에 저장하는 단계(530), 컴퓨터 장치로부터 읽기 명령이 전달되면 저장 장치(120)가 정렬된 데이터를 컴퓨터 장치에 전달하는 단계(540) 및 컴퓨터 장치가 정렬된 데이터를 이용하는 단계(450)를 포함한다.
저장 장치는 런들에 포함된 레코들을 각 레코드의 키 값 및 정렬 기준에 따라 순차적으로 저장 장치의 주 저장소에 저장한다(530). 주 저장소는 SSD 경우 낸드 플래시 메모리에 해당할 것이다. 다만 복수의 런들을 병합하여 저장하는 과정(530)은 컴퓨터 장치의 읽기 명령에 관계없이 사전에 저장 장치(120)에서 수행하는 것이 바람직할 것이다. 소스 데이터의 크기가 큰 경우 컴퓨터 장치의 읽기 명령을 받고 저장 장치(120)가 런들을 병합하면 일정한 지연(delay)가 발생할 수 있기 때문이다. 따라서, 컴퓨터 장치가 읽기 명령이 아닌 별도의 병합 명령을 전달한 경우(제2 모드) 또는 저장 장치(120)가 유휴 상태에 있는 경우에 상기 530 단계를 수행하는 것이 바람직하다.
도 4의 외부 병합 정렬 방법(400) 및 도 5의 외부 병합 정렬 방법(500)에서 저장 장치(120)가 복수의 런들을 병합하고, 병합된 데이터를 저장하는 과정은 저장 장치(120)가 독립적으로 수행하는 것이다. 따라서 저장 장치(120)는 복수의 런들을 병합하고 저장하는 과정에 대한 제어 구성이 필요하다. 저장 장치(120)는 임베디드 소프트웨어가 설치된 메모리 또는 칩과 같은 구성을 이용할 수 있다.
도 6은 외부 병합 정렬 시스템(100)의 구성을 도시한 블록도의 예이다.
외부 병합 정렬 시스템(100)은 소스 데이터를 메모리에서 처리 가능한 크기인 기준 세그먼트 크기 단위로 내부 정렬을 수행한 복수의 런(RUN)들을 저장 장치에 저장하고, 복수의 런들에 대한 병합 정렬 명령을 저장 장치(120)에 전달하는 호스트 장치(110) 및 병합 정렬 명령을 수신하고, 복수의 런들에 대한 병합 정렬을 수행하여 정렬된 데이터를 호스트 장치(110)에 전달하는 저장 장치(120)를 포함한다.
호스트 장치(110)는 호스트 장치(110)의 제어 및 저장 장치(120)에 대한 제어를 수행하는 프로세서(111), 연산 과정에서 데이터를 처리하기 위한 메모리(112), 네트워크를 통해 데이터를 송수신하는 통신 모듈(113) 및 사용자로부터 데이터 내지 명령을 입력받는 입력 인터페이스(114))를 포함한다. 도 6은 기술의 설명에 필요한 구성만을 도시하였고, 나머지 구성은 생략하였다.
저장 장치(120)는 런들 및 데이터를 저장하는 주 저장부(123), 정렬된 데이터를 저장하는 버퍼부(122), 버퍼부(122)에 저장되는 정렬된 데이터를 호스트 장치(110)에 전달하는 인터페이스부(124) 및 런들에 포함된 레코드들을 각 레코드의 키 값 및 정렬 기준에 따라 순차적으로 버퍼부(122)에 저장하고, 버퍼부(122)에 저장된 데이터를 호스트 장치(110)에 전달하도록 인터페이스부(124)를 제어하는 제어부(121)를 포함한다.
최초 소스 데이터는 인터페이스부(124)를 통해 저장 장치(120)로부터 호스트 장치에 전달되거나, 입력 인터페이스(114)를 통해 별도의 저장 장치(20)로부터 전달되거나, 통신 모듈(113)을 통해 원격지에 있는 저장 장치(50)로부터 전달될 수도 있다. 인터페이스부(124)는 저장 장치(120)와 호스트 장치(110) 사이에서 데이터 및 신호 송수신을 담당하는 구성이므로 호스트 장치(110)와 저장 장치(120)에 모두 포함된 구성이라고 보는 것이 바람직하다.
호스트 장치(110)는 프로세서(111)를 이용하여 메모리 크기 단위로 메모리(112)에 저장되는 소스 데이터를 내부 정렬한다. 내부 정렬된 런(RUN)은 인터페이스부(124)를 통해 저장 장치(120)의 주 저장부(123)에 저장된다.
호스트 장치(110)는 런들 각각에 대한 저장 위치, 파일 크기, 런에 포함된 데이터의 레코드 크기, 키 값의 위치, 키 값의 길이 또는 레코드의 타입 중 적어도 하나의 정보를 포함하는 런 정보를 저장 장치(120)에 전달한다.
이 과정에서 런(파일) 정보를 전달해 주기 위해 다양한 방법을 사용할 수 있다. 명령어를 새로 만들거나, 현재 사용하고 있는 SATA와 같은 명령어의 예약필드(reserved field)에 해당 정보를 실어서 보내줄 수도 있다. 또는 저장 장치(120)의 특정 영역에 정보를 적어서(쓰기 명령을 통해) 보내주는 방법이 있다. 또는 저장 장치(120)가 오브젝트 기반 인터페이스(object-based interface)를 지원한다면, 저장 장치(120) 내부에서 파일을 관리하기 때문에 손쉽게 파일 정보를 알아낼 수 있다.
이후 저장 장치(120)는 런 정보를 이용하여 병합 정렬을 수행한다. 여기서 병합 정렬은 전술한 바와 같이 복수의 런들을 모두 참조하여 정렬 기준에 따라 가장 우선순위가 높은 레코드를 선택하여 저장하는 것을 말한다.
저장 장치(120) 내부의 병합 단계를 빠르게 처리하기 위해 데이터를 주 저장부(123)로부터 읽는 작업과 레코드들의 키값을 비교하는 연산을 병렬로 처리할 수 있다. 그리고 키값의 분포에 따라 특정 파일에서 계속 레코드를 복사해야 하는 상황이 생길 수도 있다. 이를 위해 미리 일정 개수의 레코드를 읽어 놓는 것이 필요할 수도 있다.
호스트 장치(110)는 저장 장치(120)에 저장된 소스 데이터에 대한 접근이 필요한 경우 또는 호스트 장치(110) 내지 저장 장치(120)가 유휴(遊休) 상태에 있는 경우 병합 정렬 명령을 저장 장치에 전달할 수 있다.
저장 장치(120)는 병합 정렬을 수행하면서 정렬된 데이터를 버퍼부(122)에 저장하고, 버퍼부(122)에 저장된 데이터를 인터페이스부(124)를 통해 호스트 장치(110)에 전달하거나, 병합 정렬을 수행하면서 정렬된 데이터를 저장 장치(120)의 주 저장부(123)에 저장한 후 호스트 장치(110)의 요청이 있으면 주 저장부(123)에 저장된 데이터를 호스트 장치(110)에 전달할 수 있다.
저장 장치(120)가 버퍼부(122)에 저장된 데이터를 실시간으로 호스트 장치(110)에 전달하는 경우, 호스트 장치(110)는 모든 데이터를 다 읽을 때까지 기다릴 필요 없이 바로 해당 데이터를 사용할 수 있다. 반면 종래의 외부 병합 정렬 기법에서는 에러나 전원 꺼짐 등의 상황에 대비하기 위해 정렬된 데이터를 모두 저장장치에 기록한 뒤 사용할 수 있다.
도 7은 외부 병합 정렬을 위한 분산 처리 시스템(200)의 구성을 도시한 블록도의 예이다.
외부 병합 정렬을 위한 분산 처리 시스템(200)은 각 제1 병합 정렬 장치에서 소스 데이터가 제1 분할되어 전달되면 제1 분할된 소스 데이터를 각 제1 병합 정렬 장치의 메모리에서 처리 가능한 크기 단위로 내부 정렬하고, 크기 단위의 정렬된 런(RUN)들을 각 제1 병합 정렬 장치의 제1 저장 장치에 저장하고, 런들에 대한 제1 병합 정렬을 수행하여 정렬된 데이터를 제2 병합 정렬 장치에 전달하는 복수 개의 제1 병합 정렬 장치(210) 및 복수 개의 제1 병합 정렬 장치 각각에서 제1 병합 정렬된 데이터를 전달받고, 각각의 제1 병합 정렬된 데이터에 대한 제2 병합 정렬을 수행하여 제2 병합 정렬 장치의 제2 저장 장치에 저장하는 제2 병합 정렬 장치(220)를 포함한다.
도 7에 도시한 외부 병합 정렬을 위한 분산 처리 시스템(200)은 소스 데이터를 병합하는 과정을 복수 개의 병합 정렬 장치에 분산시킨 것이다. 외부 병합 정렬을 위한 분산 처리 시스템(200)은 매우 큰 데이터를 빠르게 처리하기 위하여 사용될 것이다.
도 7에 도시한 외부 병합 정렬을 위한 분산 처리 시스템(200)에서 제1 병합 정렬 장치(210) 및 제2 병합 정렬 장치(220)는 도 6에서 설명한 저장 장치(120)에 해당하는 구성이다. 도 7 및 도 8에서는 각 병합 정렬 장치에 대해 자세한 구성을 생략하였다.
최초 소스 데이터는 별도의 저장 장치에 저장되고, 각 제1 병합 정렬 장치(210)에서 처리 가능한 크기로 제1 분할되어 각 제1 병합 정렬 장치(210)에 전달된다. 상기 제1 분할은 호스트 장치(230)가 수행할 수도 있다.
제1 병합 정렬 장치 210a, 210b, 210c 및 210d 각각은 제1 분할되어 전달된 소스 데이터를 자신의 메모리 크기 단위로 내부 정렬하고, 정렬된 런들을 자신의 주 저장부에 저장한다. 예컨대, 제1 병합 정렬 장치 210a는 RUN1, RUN2, RUN3 및 RUN4를 저장하고, 210b는 RUN5, RUN6, RUN7 및 RUN8을 저장하고, 210c는 RUN9, RUN10, RUN11 및 RUN12를 저장하고, 210d는 RUN13, RUN14, RUN15 및 RUN16을 저장한다.
이후 제1 병합 정렬 장치(210) 각각은 자신이 저장하고 있는 복수의 런들을 병합하는 과정(제1 병합)을 수행한다. 제1 병합 정렬 장치(210)는 런들에 대한 제1 병합 정렬을 수행하면서 정렬된 결과를 제1 병합 정렬 장치의 버퍼에 저장하고, 실시간으로 버퍼에 저장된 데이터를 제2 병합 정렬 장치(220)에 전달할 수 있다. 또는 제1 병합 정렬 장치(210)는 런들에 대한 제1 병합 정렬을 수행한 결과를 제1 저장 장치에 모두 저장하고, 정렬이 완료되면 제2 병합 정렬 장치(220)에 정렬된 데이터를 전달할 수도 있다.
제1 병합 정렬을 위해서 제1 병합 정렬 장치(210)는 런들 각각에 대한 저장 위치, 파일 크기, 런에 포함된 데이터의 레코드 크기, 키 값의 위치, 키 값의 길이 또는 레코드의 타입 중 적어도 하나의 정보를 포함하는 런 정보를 확보해야 한다. 호스트 장치(230)가 제1 분할된 소스 데이터를 전달하면서 상기 런 정보를 제1 병합 정렬 장치(210)에 전달할 수도 있다.
제2 병합 정렬 장치(220)는 하나의 저장 장치에 해당한다. 제2 병합 정렬 장치(220)는 제1 병합 정렬 장치(210)에서 전달한 모든 데이터를 저장해야 한다. 도 7에는 제2 병합 정렬 장치(220)에 제1 병합 정렬 장치 210a, 210b, 210c 및 210d가 각각 전달한 런인 RUNa, RUNb, RUNc 및 RUNd가 도시되었다. 제2 병합 정렬 장치(220)는 제1 병합 정렬 장치(210)와 달리 내부 정렬을 수행하지 않고, 전달된 복수의 런들을 병합(제2 병합)하는 기능만을 담당한다.
제2 병합 정렬 장치(220)는 제2 병합 정렬을 위해 전달되는 런들(도 7에서는 RUNa, RUNb, RUNc 및 RUNd) 각각에 대한 런 정보를 확보해야한다. 호스트 장치(230)가 전달할 수도 있겠지만, 직접 런을 전달하는 제1 병합 정렬 장치(210)가 제2 병합 정렬 장치(220)에 해당 런 정보를 전달할 수도 있다.
제2 병합 정렬 장치(220)는 복수의 런들에 대한 제2 병합 정렬을 수행하면서 정렬된 결과를 제2 병합 정렬 장치의 버퍼에 저장하고, 실시간으로 버퍼에 저장된 데이터를 호스트 장치(230)에 전달할 수 있다. 또는 제2 병합 정렬 장치(220)는 런들에 대한 제2 병합 정렬을 수행한 결과를 제2 저장 장치에 모두 저장하고, 정렬이 완료되면 호스트 장치(220)에 정렬된 데이터를 전달할 수도 있다.
호스트 장치(230)는 소스 데이터의 제1 분할, 제1 병합 정렬, 런들의 전달 또는 제2 병합 정렬 중 적어도 하나를 제어할 수도 있을 것이다. 나아가 제1 병합 정렬 장치(210)가 내부 정렬을 수행한다고 설명하였는데, 내부 정렬은 호스트 장치(230)가 수행하여 내부 정렬이 수행된 런들을 제1 병합 정렬 장치(210)에 저장할 수도 있을 것이다. 이 경우 제1 병합 정렬 장치(210)는 도 6에서 설명한 저장 장치(120)와 동일한 구성 및 기능을 수행하게 된다.
도 8은 외부 병합 정렬을 위한 분산 처리 시스템(200)의 구성을 도시한 블록도의 다른 예이다. 도 8의 외부 병합 정렬을 위한 분산 처리 시스템(200)은 제2 병합 정렬을 호스트 장치(321)가 수행하는 형태이다.
외부 병합 정렬을 위한 분산 처리 시스템(200)은 각 제1 병합 정렬 장치에서 소스 데이터가 제1 분할되어 전달되면 제1 분할된 소스 데이터를 각 제1 병합 정렬 장치의 메모리에서 처리 가능한 크기 단위로 내부 정렬하고, 크기 단위의 정렬된 런(RUN)들을 각 제1 병합 정렬 장치의 제1 저장 장치에 저장하고, 런들에 대한 제1 병합 정렬을 수행하여 정렬된 데이터를 제2 병합 정렬 장치에 전달하는 복수 개의 제1 병합 정렬 장치(310) 및 복수 개의 제1 병합 정렬 장치 각각에서 제1 병합 정렬된 데이터를 전달받고, 각각의 제1 병합 정렬된 데이터에 대한 제2 병합 정렬을 수행하여 제2 저장 장치에 저장하는 제2 병합 정렬 장치(320)를 포함한다.
제2 병합 정렬 장치(320)는 제2 병합 정렬을 수행하는 호스트 장치(321) 및 병합 정렬 대상인 런들을 저장하는 제2 저장 장치(320)를 포함한다.
나아가 제1 병합 정렬 장치(310)가 내부 정렬을 독자적으로 수행하지 않고, 호스트 장치(321)가 내부 정렬을 수행하여 복수의 런들을 제1 병합 정렬 장치(310)에 저장할 수도 있다. 이 경우 제1 병합 정렬 장치(310)는 도 6에서 설명한 저장 장치(120)와 동일한 구성 및 기능을 수행하게 된다.
전술한 제1 저장 장치 또는 제2 저장 장치 중 적어도 하나는 비휘발성 메모리 또는 플래시 메모리로 구성되는 저장 매체를 사용할 수 있다.
전술한 외부 병합 정렬 시스템(100) 또는 외부 병합 정렬을 위한 분산 처리 시스템(200)은 Hadoop 시스템, 데이터 베이스 시스템 등과 같은 대용량의 데이터를 처리하는 시스템에 사용될 수 있다.
본 실시예 및 본 명세서에 첨부된 도면은 전술한 기술에 포함되는 기술적 사상의 일부를 명확하게 나타내고 있는 것에 불과하며, 전술한 기술의 명세서 및 도면에 포함된 기술적 사상의 범위 내에서 당업자가 용이하게 유추할 수 있는 변형 예와 구체적인 실시예는 모두 전술한 기술의 권리범위에 포함되는 것이 자명하다고 할 것이다.
20 : 외부 저장 장치 50 : 외부 저장 장치
100 : 외부 병합 정렬 시스템 110 : 호스트 장치
111 : 프로세서 112 : 메모리
113 : 통신 모듈 114 : 입력 인터페이스
120 : 저장 장치 121 : 제어부
122 : 버퍼부 123 : 주 저장부
200 : 외부 병합 정렬을 위한 분산 처리 시스템
210 : 제1 병합 정렬 장치 220 : 제2 병합 정렬 장치
230 : 호스트 장치
300 : 외부 병합 정렬을 위한 분산 처리 시스템
310 : 제1 병합 정렬 장치 320 : 제2 병합 정렬 장치
321 : 호스트 장치 322 : 제2 저장 장치

Claims (20)

  1. 컴퓨터 장치의 외부 병합 정렬 방법에 있어서,
    상기 컴퓨터 장치가 소스 데이터를 메모리에서 처리 가능한 크기로 나누어 각각 내부 정렬한 복수의 런(run)들을 저장 장치에 저장하는 단계;
    상기 저장 장치가 임베디드 소프트웨어를 이용하여 상기 저장된 런들을 상기 저장 장치 내부에서 병합 정렬하는 단계; 및
    상기 컴퓨터 장치가 상기 병합 정렬된 데이터에 접근하는 단계를 포함하는 외부 병합 정렬 방법.
  2. 제1항에 있어서,
    상기 병합 정렬하는 단계 전에
    상기 컴퓨터 장치가 상기 런들 각각에 대한 저장 위치 및 파일 크기를 포함하는 런 정보를 상기 저장 장치에 전달하는 단계를 더 포함하는 외부 병합 정렬 방법.
  3. 제2항에 있어서,
    상기 런 정보는 상기 런에 포함된 데이터의 레코드 크기, 키 값의 위치, 키 값의 길이 또는 레코드의 타입 중 적어도 하나의 정보를 더 포함하는 외부 병합 정렬 방법.
  4. 제1항에 있어서,
    상기 병합 정렬하는 단계에서
    상기 저장 장치는 상기 런들에 포함된 레코들을 각 레코드의 키 값 및 정렬 기준에 따라 순차적으로 상기 저장 장치의 버퍼에 저장하거나, 상기 저장 장치의 주 저장 매체에 저장하는 외부 병합 정렬 방법.
  5. 제1항에 있어서,
    상기 병합 정렬하는 단계는
    상기 저장 장치가 상기 컴퓨터 장치로부터 상기 소스 데이터에 대한 읽기 명령을 전달받는 경우, 상기 저장 장치가 상기 컴퓨터 장치로부터 병합 명령을 전달받는 경우 또는 상기 저장 장치가 상기 병합 정렬을 수행할 수 있는 유휴(遊休) 상태에서 수행되는 외부 병합 정렬 방법.
  6. 제1항에 있어서,
    상기 병합 정렬하는 단계에서 상기 저장 장치는 상기 저장 장치의 버퍼에 정렬되는 데이터를 상기 버퍼의 크기 단위로 저장하고,
    상기 접근하는 단계에서 상기 컴퓨터 장치는 상기 버퍼에 저장되는 데이터를 상기 크기 단위로 전달받는 외부 병합 정렬 방법.
  7. 제1항에 있어서,
    상기 병합 정렬하는 단계에서 상기 저장 장치는 상기 저장 장치의 주 저장 매체에 정렬되는 데이터를 모두 저장하고,
    상기 접근하는 단계에서 상기 컴퓨터 장치는 상기 주 저장 매체에 저장된 데이터를 읽는 외부 병합 정렬 방법.
  8. 제1항에 있어서,
    상기 저장 장치는 비휘발성 메모리 또는 플래시 메모리로 구성되는 저장 매체인 외부 병합 정렬 방법.
  9. 외부 병합 정렬 시스템에 있어서,
    소스 데이터를 메모리에서 처리 가능한 크기인 기준 세그먼트 크기 단위로 내부 정렬을 수행한 복수의 런(RUN)들을 저장 장치에 저장하고, 상기 복수의 런들에 대한 병합 정렬 명령을 상기 저장 장치에 전달하는 호스트 장치; 및
    상기 병합 정렬 명령을 수신하고, 상기 복수의 런들에 대한 병합 정렬을 수행하여 정렬된 데이터를 상기 호스트 장치에 전달하는 저장 장치를 포함하는 외부 병합 정렬 시스템.
  10. 제9항에 있어서,
    상기 호스트 장치는
    상기 저장 장치, 별도의 저장 장치 또는 네트워크로 연결된 저장 장치로부터 상기 소스 데이터를 전달받는 외부 병합 정렬 시스템.
  11. 제9항에 있어서,
    상기 호스트 장치는 상기 런들 각각에 대한 저장 위치, 파일 크기, 상기 런에 포함된 데이터의 레코드 크기, 키 값의 위치, 키 값의 길이 또는 레코드의 타입 중 적어도 하나의 정보를 포함하는 런 정보를 상기 저장 장치에 전달하고,
    상기 저장 장치는 상기 런 정보를 이용하여 상기 병합 정렬을 수행하는 외부 병합 정렬 시스템.
  12. 제9항에 있어서,
    상기 저장 장치는
    상기 런들이 저장되는 주 저장부;
    상기 정렬된 데이터를 저장하는 버퍼부;
    상기 버퍼부에 저장되는 정렬된 데이터를 상기 호스트 장치에 전달하는 인터페이스부; 및
    상기 런들에 포함된 레코드들을 각 레코드의 키 값 및 정렬 기준에 따라 순차적으로 상기 버퍼부에 저장하고, 상기 버퍼부에 저장된 데이터를 상기 호스트 장치에 전달하도록 상기 인터페이스부를 제어하는 제어부를 포함하는 외부 병합 정렬 시스템.
  13. 제9항에 있어서,
    상기 호스트 장치는 상기 저장 장치에 저장된 소스 데이터에 대한 접근이 필요한 경우 또는 상기 호스트 장치 내지 상기 저장 장치가 유휴(遊休) 상태에 있는 경우 상기 병합 정렬 명령을 상기 저장 장치에 전달하는 외부 병합 정렬 시스템.
  14. 제9항에 있어서,
    상기 저장 장치는
    상기 병합 정렬을 수행하면서 정렬된 데이터를 버퍼에 저장하고, 상기 버퍼에 저장된 데이터를 상기 호스트 장치에 전달하거나,
    상기 병합 정렬을 수행하면서 정렬된 데이터를 상기 저장 장치의 주 저장 매체에 저장한 후 상기 호스트 장치의 요청이 있으면 상기 주 저장 매체에 저장된 데이터를 상기 호스트 장치에 전달하는 외부 병합 정렬 시스템.
  15. 각 제1 병합 정렬 장치에서 소스 데이터가 제1 분할되어 전달되면 상기 제1 분할된 소스 데이터를 상기 각 제1 병합 정렬 장치의 메모리에서 처리 가능한 크기 단위로 내부 정렬하고, 상기 크기 단위의 정렬된 런(RUN)들을 상기 각 제1 병합 정렬 장치의 제1 저장 장치에 저장하고, 상기 런들에 대한 제1 병합 정렬을 수행하여 정렬된 데이터를 제2 병합 정렬 장치에 전달하는 복수 개의 제1 병합 정렬 장치; 및
    상기 복수 개의 제1 병합 정렬 장치 각각에서 제1 병합 정렬된 데이터를 전달받고, 상기 각각의 제1 병합 정렬된 데이터에 대한 제2 병합 정렬을 수행하여 제2 병합 정렬 장치의 제2 저장 장치에 저장하는 제2 병합 정렬 장치를 포함하는 외부 병합 정렬을 위한 분산 처리 시스템.
  16. 제15항에 있어서,
    상기 제1 병합 정렬 장치는 상기 런들에 대한 제1 병합 정렬을 수행하면서 정렬된 결과를 상기 제1 병합 정렬 장치의 버퍼에 저장하고, 상기 버퍼에 저장된 데이터를 상기 제2 병합 정렬 장치에 전달하거나,
    상기 런들에 대한 제1 병합 정렬을 수행한 결과를 제1 저장 장치에 모두 저장하고, 정렬이 완료되면 상기 제2 병합 정렬 장치에 정렬된 데이터를 전달하는 외부 병합 정렬을 위한 분산 처리 시스템.
  17. 제15항에 있어서,
    상기 소스 데이터의 제1 분할, 상기 제1 병합 정렬, 상기 런들의 전달 또는 상기 제2 병합 정렬 중 적어도 하나를 제어하는 호스트 장치를 더 포함하는 외부 병합 정렬을 위한 분산 처리 시스템.
  18. 제17항에 있어서,
    상기 호스트 장치는 상기 런들 각각에 대한 저장 위치, 파일 크기, 상기 런에 포함된 데이터의 레코드 크기, 키 값의 위치, 키 값의 길이 또는 레코드의 타입 중 적어도 하나의 정보를 포함하는 런 정보를 상기 제1 병합 정렬 장치에 전달하고,
    상기 제1 병합 정렬 장치는 상기 런 정보를 이용하여 상기 제1 병합 정렬을 독립적으로 수행하는 외부 병합 정렬을 위한 분산 처리 시스템.
  19. 제15항에 있어서,
    상기 제2 병합 정렬 장치는 호스트 장치이고, 상기 호스트 장치가 상기 제1 병합 정렬된 데이터를 상기 제2 저장 장치에 저장하고, 상기 제2 저장 장치에 저장된 상기 제1 병합 정렬된 데이터를 이용하여 상기 제2 병합 정렬을 수행하는 외부 병합 정렬을 위한 분산 처리 시스템.
  20. 제15항에 있어서,
    상기 제1 저장 장치 또는 상기 제2 저장 장치 중 적어도 하나는 비휘발성 메모리 또는 플래시 메모리로 구성되는 저장 매체인 외부 병합 정렬을 위한 분산 처리 시스템.
KR20140037376A 2014-03-31 2014-03-31 외부 병합 정렬 방법, 외부 병합 정렬 시스템 및 외부 병합 정렬을 위한 분산 처리 시스템 KR101465447B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR20140037376A KR101465447B1 (ko) 2014-03-31 2014-03-31 외부 병합 정렬 방법, 외부 병합 정렬 시스템 및 외부 병합 정렬을 위한 분산 처리 시스템
US14/570,210 US20150278299A1 (en) 2014-03-31 2014-12-15 External merge sort method and device, and distributed processing device for external merge sort

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR20140037376A KR101465447B1 (ko) 2014-03-31 2014-03-31 외부 병합 정렬 방법, 외부 병합 정렬 시스템 및 외부 병합 정렬을 위한 분산 처리 시스템

Publications (1)

Publication Number Publication Date
KR101465447B1 true KR101465447B1 (ko) 2014-12-10

Family

ID=52676830

Family Applications (1)

Application Number Title Priority Date Filing Date
KR20140037376A KR101465447B1 (ko) 2014-03-31 2014-03-31 외부 병합 정렬 방법, 외부 병합 정렬 시스템 및 외부 병합 정렬을 위한 분산 처리 시스템

Country Status (2)

Country Link
US (1) US20150278299A1 (ko)
KR (1) KR101465447B1 (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101772955B1 (ko) 2016-07-12 2017-08-31 성균관대학교산학협력단 맵리듀스 기반의 분산 처리 시스템에서 인덱스를 이용하여 레코드를 처리하는 방법
KR101827395B1 (ko) 2017-02-20 2018-02-08 성균관대학교 산학협력단 확장성 있는 gpu기반의 대용량 obj 파일 처리 방법 및 장치

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10824554B2 (en) * 2016-12-14 2020-11-03 Via Technologies, Inc. Method and apparatus for efficiently sorting iteration with small sorting set
US11803509B1 (en) * 2022-05-23 2023-10-31 Apple Inc. Parallel merge sorter circuit

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08221254A (ja) * 1995-02-16 1996-08-30 Fujitsu Ltd マージソート方法及びマージソート装置
JP2007133576A (ja) * 2005-11-09 2007-05-31 Hitachi Information & Communication Engineering Ltd ソート処理方法及びプログラム
KR20090007926A (ko) * 2007-07-16 2009-01-21 한양대학교 산학협력단 플래시 메모리에 저장된 데이터의 인덱스 정보 관리 장치및 방법
KR20090099390A (ko) * 2008-03-17 2009-09-22 한양대학교 산학협력단 단계적 인덱싱을 위한 파일 시스템, 메인 기억장치 및플래시 기억장치 그리고 상기 단계적 인덱싱을 통한 데이터관리 방법

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3774324B2 (ja) * 1998-08-03 2006-05-10 株式会社日立製作所 ソート処理システムおよびソート処理の方法
JP2005190047A (ja) * 2003-12-25 2005-07-14 Hitachi Ltd データソート機能を持つストレージシステム
US7454420B2 (en) * 2004-11-08 2008-11-18 Sas Institute Inc. Data sorting method and system
US20100191717A1 (en) * 2009-01-28 2010-07-29 Goetz Graefe Optimization of query processing with top operations

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08221254A (ja) * 1995-02-16 1996-08-30 Fujitsu Ltd マージソート方法及びマージソート装置
JP2007133576A (ja) * 2005-11-09 2007-05-31 Hitachi Information & Communication Engineering Ltd ソート処理方法及びプログラム
KR20090007926A (ko) * 2007-07-16 2009-01-21 한양대학교 산학협력단 플래시 메모리에 저장된 데이터의 인덱스 정보 관리 장치및 방법
KR20090099390A (ko) * 2008-03-17 2009-09-22 한양대학교 산학협력단 단계적 인덱싱을 위한 파일 시스템, 메인 기억장치 및플래시 기억장치 그리고 상기 단계적 인덱싱을 통한 데이터관리 방법

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101772955B1 (ko) 2016-07-12 2017-08-31 성균관대학교산학협력단 맵리듀스 기반의 분산 처리 시스템에서 인덱스를 이용하여 레코드를 처리하는 방법
KR101827395B1 (ko) 2017-02-20 2018-02-08 성균관대학교 산학협력단 확장성 있는 gpu기반의 대용량 obj 파일 처리 방법 및 장치

Also Published As

Publication number Publication date
US20150278299A1 (en) 2015-10-01

Similar Documents

Publication Publication Date Title
US11029853B2 (en) Dynamic segment allocation for write requests by a storage system
US20230145212A1 (en) Switch Device for Interfacing Multiple Hosts to a Solid State Drive
US11947837B2 (en) Memory system and method for controlling nonvolatile memory
US9021178B2 (en) High performance path for command processing
US10374792B1 (en) Layout-independent cryptographic stamp of a distributed dataset
US9135190B1 (en) Multi-profile memory controller for computing devices
KR101624007B1 (ko) 비휘발성 메모리를 갖는 시스템에 대한 효율적인 버퍼링
US11487666B2 (en) Timed data transfer between a host system and a memory sub-system
CN105068953A (zh) 用于对等高速外围组件互联存储传输的系统和方法
CN105190567A (zh) 用于管理存储系统快照的系统和方法
EP3511814A1 (en) Storage device storing data in order based on barrier command
US10789167B2 (en) Information processing apparatus and method for controlling storage device
KR101465447B1 (ko) 외부 병합 정렬 방법, 외부 병합 정렬 시스템 및 외부 병합 정렬을 위한 분산 처리 시스템
US9558124B2 (en) Data storage system with passive partitioning in a secondary memory
CN104866428A (zh) 数据存取方法和数据存取装置
US11157212B2 (en) Virtual controller memory buffer
CN110007852A (zh) 基于逻辑区域的流分类
KR20210055875A (ko) 저장 장치와 저장 장치 시스템 그리고 그 동작 방법
US9176675B1 (en) Fast-zeroing in a file system
US20170017427A1 (en) Optical cold storage
US9558112B1 (en) Data management in a data storage device
US20200004676A1 (en) Staggered garbage collection unit (gcu) allocation across dies
US20220113912A1 (en) Heterogeneous in-storage computation
US11513691B2 (en) Systems and methods for power and performance improvement through dynamic parallel data transfer between device and host
US11775188B2 (en) Communications to reclaim storage space occupied by proof of space plots in solid state drives

Legal Events

Date Code Title Description
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20171027

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20180917

Year of fee payment: 5