KR101238381B1 - 다중범위 스캔에서의 n 정렬 질의를 최적으로 처리하기 위한 방법 및 장치 - Google Patents

다중범위 스캔에서의 n 정렬 질의를 최적으로 처리하기 위한 방법 및 장치 Download PDF

Info

Publication number
KR101238381B1
KR101238381B1 KR1020110054384A KR20110054384A KR101238381B1 KR 101238381 B1 KR101238381 B1 KR 101238381B1 KR 1020110054384 A KR1020110054384 A KR 1020110054384A KR 20110054384 A KR20110054384 A KR 20110054384A KR 101238381 B1 KR101238381 B1 KR 101238381B1
Authority
KR
South Korea
Prior art keywords
buffer
scan
data
query
record
Prior art date
Application number
KR1020110054384A
Other languages
English (en)
Other versions
KR20120135588A (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 KR1020110054384A priority Critical patent/KR101238381B1/ko
Priority to JP2012092668A priority patent/JP5558514B2/ja
Priority to US13/474,382 priority patent/US8990226B2/en
Publication of KR20120135588A publication Critical patent/KR20120135588A/ko
Application granted granted Critical
Publication of KR101238381B1 publication Critical patent/KR101238381B1/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/2453Query optimisation
    • G06F16/24534Query rewriting; Transformation
    • G06F16/24547Optimisations to support specific applications; Extensibility of optimisers
    • 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

Abstract

본 발명은 데이터베이스 관리 시스템에서 특수한 형태의 질의인 다중 범위 스캔에서의 N 정렬 질의를 최적으로 처리하기 위한 방법 및 장치에 관한 것이다. 본 발명의 일 태양에 따르면, 버퍼 할당부에 의해, 질의에 포함된 추출 레코드 수에 기초하여 버퍼를 할당하는 단계, 스캔부에 의해, 상기 질의에 포함된 제1 리스트 중 제1속성에 관련된 제1 데이터를 상기 버퍼에 저장하는 단계, 상기 스캔부에 의해, 상기 질의에 포함된 제1 리스트 중 추출되지 않은 제1속성에 관련된 제2 데이터를 추출하는 단계, 및 상기 스캔부에 의해, 상기 버퍼에 저장된 데이터들 및 상기 제2 데이터의 비교를 통해 상기 질의를 만족하도록 상기 버퍼를 갱신하는 단계를 포함하며, 상기 질의는 제1속성 및 제2속성에 기초하여 정렬된 하나 이상의 레코드에 대한 다중 범위 스캔에서의 N 정렬 질의이다.

Description

다중범위 스캔에서의 N 정렬 질의를 최적으로 처리하기 위한 방법 및 장치{METHOD AND DEVICE TO PROVIDE THE MOST OPTIMAL PROCESS OF N SORT QUERIES IN MULTI-RANGE SCAN}
본 발명은 질의를 최적으로 처리하기 위한 방법 및 장치에 관한 것으로, 더욱 상세하게는 다중범위 스캔에서의 N 정렬(N sort) 질의를 최소의 시간 비용과 최소의 메모리 공간 비용으로, 즉 최적으로 처리하기 위한 방법 및 장치에 관한 것이다. 본 발명에서 상세히 개시되는 기술은 데이터베이스 관리 시스템(Database Management System: 이하 'DBMS'라 한다)을 포함하여 색인(index)을 통해 범위 스캔(range scan) 기능을 제공하는 모든 데이터 저장 시스템들에 적용이 가능하다.
인터넷의 발달과 더불어, 인터넷을 이용한 다양한 SNS가 각광을 받고 있다. SNS는 온라인상에서 지인과의 인간 관계를 강화시키고 불특정 타인과 새로운 인간관계를 맺을 수 있는 서비스를 통칭하는 의미로 SK커뮤니케이션즈사의 싸이월드를 필두로 페이스북(Facebook) 등 그 특성에 따른 다양한 종류의 SNS들이 계속하여 개발 및 서비스되고 있다.
이러한 SNS의 한 분야로서, 마이크로 블로그(Microblog) 역시 최근에 많은 사용자들에 의해 사용되고 있다. 마이크로 블로그란 한두 문장 정도의 짧은 메시지를 이용하여 여러 사람과 소통할 수 있는 블로그의 한 종류로, 미니블로그(miniblog)라고도 불리운다. 마이크로 블로그의 특징은, 짧은 텍스트를 통하여 이용자들이 서로 소식을 주고받기 때문에 실시간으로 정보가 업데이트되는 특성을 지니며, 사진이나 동영상 등을 올릴 수도 있다. 즉, 마치 블로그와 메신저를 결합한 것과 같은 형태로서, 이용자들은 채팅을 하는 것 같은 느낌을 받으며, 개개인의 소소한 일상과 평소 머릿속에 떠오르는 생각이나 느낌, 감정, 소식 등을 짧은 텍스트로 작성하여 교류하기 때문에 글쓰기 또는 읽기에 대한 부담감 없이 간편하게 사용할 수 있다는 장점이 있으므로 많은 인기를 끌고 있으며, 마이크로 블로그의 대표적인 예로서는 트위터(twitter), 그리고 국내에서는 미투데이(me2day) 등을 들 수 있다.
SNS, 특히 마이크로 블로그의 경우에는 수많은 이용자들이 주고받는 소식들로 인해 거의 실시간으로 정보가 갱신되며, 이 중에서 이용자 본인이나 이용자와 관계를 맺고 있는 타 이용자들(이하 '친구'들이라 한다) - 적게는 수명에서 많게는 수천 또는 수만명 이상 될 수도 있다 - 이 주고받는 정보 중에서 최신 정보의 일부만을 추출하여 이용자 본인 또는 친구들에게 보여주는 방식의 질의가 매우 빈번하게 사용되게 되었다. 예를 들어, 친구들이 작성한 글들 중에 가장 최근에 작성한 소정 개수(예를 들어, N(N은 자연수) 개)의 글들 또는 어느 특정 시점 이후에 작성된 N 개의 글들만을 추출하는 질의가 빈번하게 사용되게 되었다. 이러한 질의에 대한 처리는 각 친구에 대해 특정 시점 이후에 그 친구가 작성한 글들을 범위 스캔하는 작업을 모든 친구들에 대해 반복 수행하는 다중 범위 스캔(multi-range scan) 형태로 수행하여야 하며, 이러한 다중 범위 스캔을 통해 접근하게 되는 친구 글들 중에 가장 최신 또는 어느 시점 이후의 N개 글들만을 정렬된 순서로 추출(이하, 이러한 추출에 이용되는 질의를 'N 정렬 질의'라 한다)하기 위한 작업이 수행되어야 한다. 하지만, 종래의 DBMS를 포함한 대부분 데이터 저장 시스템들은 SNS 등에서 주로 사용되고 있는 다중 범위 스캔에서의 N 정렬 질의에 대해 최적화 처리를 고려하고 있지 않은 상태이다. 일례로, 기존 DBMS에서는 다중 범위 스캔을 통해 접근되는 친구들의 모든 글들을 중간 결과로 추출한 다음, 이들 글들을 생성 시간의 역순으로 정렬하여야 하므로, 그 처리 속도가 매우 느리고 중간 결과를 저장하기 위한 막대한 저장 공간을 필요로 하는 결함이 있었다. 이로 인해, 기존 DBMS의 기능만으로는 SNS 등에서 자주 수행되는 질의를 잘 처리하기에는 부족한 면이 많았다.
이와 같은 종래의 처리 방식은 각 이용자 별로 작성한 글의 수가 많아질수록, 그리고 친구들의 수가 많아질수록 DBMS가 스캔해야 하는 전체 레코드의 수는 기하급수적으로 늘어날 수 있고, 이 경우 정렬을 위해 필요한 중간 레코드 셋을 담아두기 위한 메모리 공간이 많이 필요하고 그 많은 수의 레코드들을 정렬하기 위한 수행 부담을 가지게 되므로 질의 처리에 소요되는 시간 및 공간의 낭비가 심했다.
따라서, SNS 등에서 빈번하게 사용되는 다중 범위 스캔에서의 N 정렬 질의를 수신한 경우, 스캔 대상이 되는 친구들의 글들의 수를 최소화하면서도 한정된 크기의 저장 공간만을 사용하여 해당 질의 처리를 수행해 낼 수 있는 방식 즉, 시간 및 공간적인 비용 측면에서 최적의 질의 처리 방식에 대한 요청이 대두되었다.
더욱이, 이러한 질의 처리 방식은 기존 DBMS 뿐만 아니라 DBMS의 앞 단에서 범위 스캔 기능을 제공하는 고속의 데이터 저장소 즉, 메모리에서만 데이터를 저장 관리하면서 그러한 데이터들의 콜렉션(collection)에 대한 색인을 통해 범위 스캔을 제공하는 고속의 데이터 저장소에도 그 필요성이 대두되고 있다. 예를 들어, 최근에 많이 거론되고 있는 NoSQL 데이터베이스 즉, SQL 인터페이스를 통한 질의 처리 기능을 제공하는 DBMS가 아니라 새로운 인터페이스를 제공하면서 처리 성능 또는 시스템 확장성에 중점을 두고 있는 데이터베이스 유형에 이러한 고속의 데이터 저장소가 포함되어 있다.
본 발명의 목적은 위에서 언급한 종래 기술의 문제점을 해결하는 것이다.
본 발명의 일 목적은 다중 범위 스캔에서의 N 정렬 질의를 수신한 경우, 스캔 대상이 되는 레코드들의 수를 최소화하면서 스캔 과정 중에 정렬된 결과를 바로 구하도록 함으로써 질의 처리에 소요되는 시간을 최소화하면서도 적은 메모리 공간만을 사용하도록 하는 것이다.
본 발명의 다른 목적은 이러한 질의 처리 기술을 DBMS 또는 고속의 데이터 저장소에 구현하고 SNS 등 다중 범위 스캔에서의 N 정렬 질의를 많이 사용하는 환경에서 사용할 수 있게 함으로써 SNS 등의 서비스시 질의 처리 성능을 극대화하도록 하는 것이다. 본 발명의 또 다른 목적은 개발자가 종래의 DBMS에서 효과적인 질의 처리를 위해 각 DBMS 별로 다중 범위 스캔에서의 N 정렬 질의가 어떻게 처리되는지 내부적인 처리 방식을 파악하고, 이에 따라 각 DBMS 별로 최적화하도록 질의를 수정할 필요가 없이 종래의 질의를 그대로 이용하여도 최적의 방식으로 N 정렬 질의가 처리되므로 SNS 등의 설계 및 개발 등에 있어 그 편의성 및 개발 속도 향상을 도모하도록 하는 것이다.
상기한 바와 같은 본 발명의 목적을 달성하고, 후술하는 본 발명의 특유의 효과를 달성하기 위한, 본 발명의 특징적인 구성은 하기와 같다.
본 발명의 일 태양에 따른 질의 처리 방법은, 버퍼 할당부에 의해, 질의에 포함된 추출 레코드 수에 기초하여 버퍼를 할당하는 단계, 스캔부에 의해, 상기 질의에 포함된 제1 리스트 중 제1속성에 관련된 제1 데이터를 추출하고 상기 버퍼에 저장하는 단계, 상기 스캔부에 의해, 상기 질의에 포함된 제1 리스트 중 추출되지 않은 제1속성에 관련된 제2 데이터를 추출하는 단계, 및 상기 스캔부에 의해, 상기 버퍼에 저장된 데이터들 및 상기 제2 데이터의 비교를 통해 상기 질의를 만족하도록 상기 버퍼를 갱신하는 단계를 포함하며, 상기 질의는 제1 속성 및 제2 속성에 기초하여 정렬된 하나 이상의 레코드에 대한 다중 범위 스캔에서의 N 정렬 질의이다.
이 중 버퍼에 저장하는 단계는, 상기 제1 속성이 동일한 레코드를 상기 추출 레코드 수 및 상기 제1속성에 관련된 모든 레코드의 개수 중 적은 수만큼 추출하는 단계, 및 상기 추출된 레코드들을 상기 제1데이터로서 상기 버퍼에 저장하는 단계로 구성되는 것이 바람직하다.
또한, 버퍼를 갱신하는 단계는, 상기 제2데이터를 상기 버퍼에 저장된 데이터들과 대비하여 소정 조건을 만족하는지 비교하는 단계 및 상기 제2데이터가 소정 조건을 만족하는 경우 상기 제2데이터가 상기 버퍼에 저장되도록 상기 버퍼를 갱신하는 단계로 구성되고, 상기 갱신된 버퍼는 상기 질의를 만족하는 것이 바람직하다.
여기서, 상기 소정 조건은 상기 제2 데이터의 제2 속성이 상기 버퍼에 저장된 데이터들의 제2속성 중 적어도 어느 하나보다 앞서는 조건인 것이 바람직하다.
한편, 상기 제2데이터가 상기 버퍼에 저장되도록 상기 버퍼를 갱신하는 단계는 상기 버퍼가 가득 찬 경우 상기 버퍼에 저장된 데이터들 중 제2속성이 가장 늦은 레코드를 상기 버퍼로부터 삭제하는 단계 및 상기 제2데이터를 포함하여 상기 버퍼 내에 저장된 데이터들이 상기 제2 속성이 앞서는 순으로 정렬될 수 있도록 상기 제2 데이터를 상기 버퍼의 소정 위치에 삽입하는 단계로 구성되는 것이 바람직하다.
그리고, 상기 제2데이터가 상기 버퍼에 저장된 데이터들과 대비하여 상기 소정 조건을 만족하거나 상기 제2데이터가 존재할 때까지 상기 제1속성이 동일한 제2데이터를 순차적으로 하나씩 추출하여 상기 버퍼 갱신 단계를 반복할 수 있다.
또한, 상기 질의에 포함된 제1 리스트에 남아있는 모든 제1 속성에 대해 상기 제2 데이터 추출 단계 및 버퍼 갱신 단계를 반복할 수 있다.
한편, 상기 버퍼를 할당하는 단계는 상기 추출 레코드 수에 기초하여 제2 버퍼를 더 할당하고, 상기 버퍼는 레코드를 가리키는 스캔 정보를 저장하는 스캔 버퍼이며 상기 제2버퍼는 레코드를 저장하는 로우 버퍼일 수 있다.
이 경우, 상기 버퍼를 갱신하는 단계는, 상기 제2 데이터인 스캔 정보가 가리키는 레코드가 상기 버퍼에 저장된 데이터들인 스캔 정보들이 가리키는 레코드들과 대비하여 소정 조건을 만족하는지 비교하는 단계 및 상기 소정 조건을 만족하는 경우 상기 제2데이터가 상기 버퍼에 저장되도록 상기 버퍼를 갱신하는 단계로 구성되고, 상기 갱신된 버퍼는 상기 질의를 만족하는 것이 바람직하다.
이 경우, 상기 소정 조건은 상기 제2 데이터인 스캔 정보가 가리키는 레코드의 제2속성이 상기 버퍼에 저장된 데이터들인 스캔 정보들이 가리키는 레코드들의 제2속성 중 적어도 어느 하나보다 앞서는 조건인 것이 바람직하다.
이 경우, 상기 제2데이터가 상기 버퍼에 저장되도록 상기 버퍼를 갱신하는 단계는 상기 버퍼가 가득 찬 경우 상기 버퍼에 저장된 데이터들인 스캔 정보들이 가리키는 레코드들 중 제2속성이 가장 늦은 레코드를 가리키는 스캔 정보를 상기 버퍼로부터 삭제하는 단계 및 상기 제2데이터를 포함하여 상기 버퍼 내에 저장된 데이터들이 가리키는 레코드들의 제2 속성이 앞서는 순으로 정렬될 수 있도록 상기 제2 데이터를 상기 버퍼의 소정 위치에 삽입하는 단계로 구성되는 것이 바람직하다.
이 경우, 상기 제1데이터는 상기 제1 속성을 갖는 최초 레코드를 가리키는 스캔 정보인 것이 바람직하다.
이 경우, 상기 질의에 포함된 제1 리스트에 남아있는 모든 제1 속성에 대해 상기 제2 데이터 추출 단계 및 버퍼 갱신 단계를 반복할 수 있다.
이 경우, 상기 제2 데이터 추출 단계 및 버퍼 갱신 단계의 반복 완료 후, 상기 스캔부에 의해, 상기 버퍼의 정렬된 스캔 정보들 중 가장 앞서는 스캔 정보가 가리키는 레코드를 상기 제2 버퍼의 비어있는 위치 중 맨 앞에 저장하는 단계, 상기 스캔부에 의해, 상기 스캔 정보를 상기 스캔 정보가 가리키는 레코드가 갖는 제1속성과 동일하며 상기 제2속성이 앞서는 순으로 정렬된 레코드들 중 다음 레코드를 가리키도록 이동하는 단계, 및 상기 스캔부에 의해, 상기 이동된 스캔 정보를 포함하여 상기 버퍼에 저장된 데이터들인 스캔 정보들이 가리키는 레코드들의 제2 속성이 앞서는 순으로 상기 버퍼를 정렬하는 단계를 더 포함할 수 있다.
이 경우, 상기 제2 데이터 추출 단계 및 버퍼 갱신 단계의 반복 완료 후 수행되는 상기 저장하는 단계, 이동하는 단계 및 정렬하는 단계는 상기 제2 버퍼가 가득 찰 때까지 반복될 수 있다.
한편, 본 발명의 일 태양에 따른 질의 처리 방법은 질의 해석부에 의해, 상기 질의가 제1 속성 및 제2 속성에 기초하여 정렬된 하나 이상의 레코드에 대한 다중 범위 스캔에서의 N 정렬 질의인지 여부를 판단하는 단계를 더 포함하며, 상기 판단 결과 N 정렬 질의인 경우에 한하여 상기 버퍼 할당 단계, 상기 버퍼 저장 단계, 상기 제2 데이터 추출 단계 및 상기 버퍼 갱신단계가 수행될 수 있다.
본 발명의 일 태양에 따른 질의 처리 방법에서 상기 제1 속성은 이용자 ID이고, 상기 제2 속성은 타임 스탬프일 수 있으나 반드시 이에 한정되는 것은 아니다.
본 발명의 다른 태양에 따른 질의 처리 장치는, 질의에 포함된 추출 레코드 수 에 기초하여 버퍼를 할당하는 버퍼 할당부, 및 상기 질의에 포함된 제1 리스트 중 하나의 제1속성에 관련된 제1 데이터를 추출하여 상기 버퍼에 저장하고, 상기 질의에 포함된 제1 리스트 중 추출되지 않은 제1속성에 관련된 제2 데이터를 추출하며, 상기 버퍼에 저장된 데이터들 및 및 상기 제2 데이터의 비교를 통해 상기 질의를 만족하도록 상기 버퍼를 갱신하는 스캔부를 포함하며, 상기 질의는 제1 속성 및 제2 속성에 기초하여 정렬된 하나 이상의 레코드에 대한 다중 범위 스캔에서의 N 정렬 질의이다.
이 외에도, 본 발명을 구현하기 위한 상기 방법을 수행하기 위한 컴퓨터 프로그램을 기록하는 컴퓨터 판독 가능한 기록 매체가 더 제공된다.
상술한 바와 같이 본 발명에 따르면, 다중 범위 스캔에서의 N 정렬 질의를 수신한 경우, 스캔 대상이 되는 레코드들의 수를 최소화하면서 스캔 과정 중에 정렬된 결과를 바로 구하도록 함으로써 질의 처리에 소요되는 시간을 최소화하면서도 적은 메모리 공간만을 사용할 수 있다.
또한, 본 발명에 따르면 이러한 질의 처리 기술을 DBMS 또는 고속의 데이터 저장소에 구현하고 SNS 등 다중 범위 스캔에서의 N 정렬 질의를 많이 사용하는 환경에서 사용할 수 있게 함으로써 SNS 등의 서비스시 질의 처리 성능을 극대화할 수 있다.
또한, 본 발명에 따르면 개발자가 종래의 DBMS에서 효과적인 질의 처리를 위해 각 DBMS 별로 다중 범위 스캔에서의 N 정렬 질의가 어떻게 처리되는지 내부적인 처리 방식을 파악하고, 이에 따라 각 DBMS 별로 최적화하도록 질의를 수정할 필요가 없이 종래의 질의를 그대로 이용하여도 최적의 방식으로 N 정렬 질의가 처리되므로 SNS 등의 설계 및 개발 등에 있어 그 편의성 및 개발 속도 향상을 도모할 수 있다.
도 1은 본 발명의 일 실시예에 따른 DBMS가 다중 범위 스캔에서의 N 정렬 질의 처리시 색인(index)를 통해 스캔하게 되는 범위들을 나타내기 위한 도면이다.
도 2는 본 발명의 제1 실시예와 제2 실시예에 따라 다중 범위 스캔에서의 N 정렬 질의를 처리하는 질의 처리 장치의 세부 구성도이다.
도 3은 본 발명의 제1 실시예에 따라 스캔부에서 수행되는 다중 범위 스캔에서의 N 정렬 질의의 처리 방법을 도시한 흐름도이다.
도 4 및 도 5는 본 발명의 제2 실시예에 따라 스캔부에서 수행되는 다중 범위 스캔에서의 N 정렬 질의의 처리 방법을 도시한 흐름도이다.
도 6은 본 발명의 제1 실시예에 따라 다중 범위 스캔에서의 N 정렬 질의의 처리 방법 중 로우 버퍼 갱신 단계를 설명하는 도면이다.
도 7a 내지 도 7d는 본 발명의 제2 실시예에 따라 다중 범위 스캔에서의 N 정렬 질의의 처리 방법 중 스캔 버퍼 및 로우 버퍼의 형태와 이들 버퍼의 갱신 단계를 설명하는 도면이다.
후술하는 본 발명에 대한 상세한 설명은, 본 발명이 실시될 수 있는 특정 실시예를 예시로서 도시하는 첨부 도면을 참조한다. 이들 실시예는 당업자가 본 발명을 실시할 수 있기에 충분하도록 상세히 설명된다. 본 발명의 다양한 실시예는 서로 다르지만 상호 배타적일 필요는 없음이 이해되어야 한다. 예를 들어, 여기에 기재되어 있는 특정 형상, 구조 및 특성은 일 실시예에 관련하여 본 발명의 정신 및 범위를 벗어나지 않으면서 다른 실시예로 구현될 수 있다. 또한, 각각의 개시된 실시예 내의 개별 구성요소의 위치 또는 배치는 본 발명의 정신 및 범위를 벗어나지 않으면서 변경될 수 있음이 이해되어야 한다. 따라서, 후술하는 상세한 설명은 한정적인 의미로서 취하려는 것이 아니며, 본 발명의 범위는 적절하게 설명된다면 그 청구항들이 주장하는 것과 균등한 모든 범위와 더불어 첨부된 청구항에 의해서만 한정된다. 도면에서 유사한 참조부호는 여러 측면에 걸쳐서 동일하거나 유사한 기능을 지칭한다.
이하, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자가 본 발명을 용이하게 실시할 수 있도록 하기 위하여, 본 발명의 바람직한 실시예들에 관하여 첨부된 도면을 참조하여 상세히 설명하기로 한다.
[본 발명의 바람직한 실시예]
본원 발명의 일 실시예에 따른 질의 처리시 스캔 범위
도 1은 본원 발명의 일 실시예에 따른 DBMS가 다중 범위 스캔에서의 N 정렬 질의 처리시 색인(index)을 통해 스캔하게 되는 범위들을 나타내는 도면이다.
다중 범위 스캔에서의 N 정렬 질의를 이용하는 서비스 또는 시스템에서 이용자들이 작성하는 글들의 저장과 검색 대상이 되는 데이터베이스는 다양한 방식으로 구현될 수 있지만, 일반적으로 글을 작성한 이용자의 ID, 작성한 시간 정보를 나타내는 타임 스탬프(Time Stamp), 작성된 글의 내용, 그리고 부가적인 정보들에 대한 속성들을 더 가질 수 있다. 설명의 편의성을 위해 DBMS와 SQL(Structured Query Language)를 기반으로 설명한다. DBMS에서 이용자의 ID를 userid로, 타임 스탬프를 ts로, 작성된 글의 내용을 contents로 명명한 테이블을 이하의 표 1과 같이 나타낼 수 있으며, 설명의 편의성을 위해 표 1에 도시된 테이블의 이름을 posts라 가정한다.
Figure 112011042354307-pat00001
한편, 상기 표 1과 같은 posts 테이블에서 어느 한 이용자의 친구들 전체를 대상으로 가장 최근에 작성된, 또는 특정 시점으로부터 가장 가까운 시기에 작성된 글들로부터 특정 개수의 글만을 추출하기 위한 다중 범위 스캔에서의 N 정렬 질의는 다양한 방식으로 작성될 수 있지만 일반적으로 이하와 같은 예시적인 SQL 문장과 같이 구현될 수 있다.
SELECT ts, userid
FROM posts
WHERE userid IN (friends_list) AND ts < sysdate()
ORDER BY ts DESC
LIMIT N;
(여기서 friends_list는 소정 이용자의 친구들의 이용자 ID 리스트만을 포함할 수도 있고, 소정 이용자를 포함하여 친구들의 이용자 ID 리스트를 포함할 수 있으며, 이는 해당 질의를 수행하는 특정 서비스 또는 시스템 에서 어떤 이용자들의 글들을 모아 볼 것인지에 따라 달라진다. 또한, N은 추출할 글의 개수를 의미한다.)
상기 SQL 문장을 효율적으로 처리하기 위하여, posts 테이블에 대해 이용자 ID의 순서로, 그 내부에서 타임 스탬프의 역순으로 레코드 검색을 빠르게 하기 위한 색인이 필요하다. 이를 위해, userid 에 대해 오름차순이며 ts에 대해 내림차순의 키(key)를 가지는 색인을 일반적으로 생성하게 되며, 이러한 색인을 설명의 편의상 posts_userid_ts_index 라고 가정한다.
색인은 테이블에 있는 각 레코드에 대해 대응하는 하나의 키를 가지며, 여기서 하나의 키는 키 값과 그 키 값을 가지는 레코드의 식별자로 구성된다. 예를 들어, 도 1에서 범위 1의 첫 번째 키는 키 값으로 A와 2010-12-01 14:30:02를 가지고, 그 키 값을 가지는 레코드의 식별자로 R4를 가진다. 또는, 메모리에 모든 데이터를 상주시키는 메인 메모리 데이터베이스(Main-Memory DBMS: MMDBMS)의 경우엔, 키 값을 가지는 레코드가 항상 메모리에 상주하고 있어서 키의 레코드 식별자를 통해 그 키 값을 직접 접근할 수도 있다. 따라서, MMDBMS에서 색인의 키는 일반적으로 레코드 식별자 만을 가진다. 따라서, 도 1에서 표현한 색인에서의 키들은 키 값과 레코드 식별자를 모두 가지는 일반적인 디스크 DBMS를 가정하여 표현한 것이며, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자들에 있어 색인에서의 키 구성이 도 1에 도시된 바와 같이 한정되는 것이 아닌, 데이터 저장소의 구현 특성에 따라 색인에서의 키 구성은 달라질 수 있음은 자명할 것이다. 앞서 설명한 표 1과 같이 레코드들이 임의의 순서로 저장된, 도 1의 우측에서 보이는 post 테이블로부터 상기 SQL 문장을 수행하기 위해서는 도 1의 좌측에 도시된 바와 같이 상기 post 테이블과 연관된 posts_userid_ts_index 색인이 구비되는 것이 전제된다. 구비된 posts_userid_ts_index 색인을 기초로 본원 발명의 실시예들에 의해 상기 SQL 문장과 같은 다중 범위 스캔에서의 N 정렬 질의를 수행하기 위한 구체적인 절차에 대해서는 도 6 내지 7을 참조하여 이하에 더욱 상세히 설명하기로 한다.
본 발명의 일 실시예에 따른 장치
도 2는 본 발명의 일 실시예에 따라 다중 범위 스캔에서의 N 정렬 질의를 처리하는 질의 처리 장치의 세부 구성도이다.
도 2를 참조하면, 본 발명의 일 실시예에 따른 질의 처리 장치(100)는 크게 질의 해석부(110)와 질의 실행부(120)로 구분할 수 있으며, 질의 실행부(120)는 그 내부에 버퍼 할당부(121), 스캔부(122), 및 제공부(123)를 포함할 수 있다.
본 발명의 일 실시예에 따른 질의 해석부(110)는 특정 형식에 의한 질의를 수신하고 이를 해석하여, 수신된 질의가 다중 범위 스캔에서의 N 정렬 질의인지 여부를 판단한다. 질의 해석부(110)로 특정 형식에 의한 질의를 전송하는 개체는 질의 처리 장치(100)와의 통신을 통해 질의 처리 장치(100)에 접근하여 데이터를 요청할 수 있는 적합한 장치 또는 구성요소를 모두 의미하는 광의의 개념이다. 질의 처리 장치(100)에 대한 질의 전송은, 전송 개체와 질의 처리 장치(100)간의 인증 등의 절차를 통해 전송 개체가 질의 처리 장치(100)에 질의를 통해 특정 데이터를 요청할 수 있는 합당한 권한이 있는지 여부를 미리 확인한 후에 이루어질 수 있으며, 인증 절차는 공지의 DBMS 액세스(access)시 사용되는 인증 절차를 이용할 수 있다. 질의 해석부(110)가 수신한 특정 형식에 의한 질의는 공지의 SQL을 이용한 SQL 구문일 수 있으며 질의 해석부(110)는 파싱(parsing) 기능을 이용하여 수신된 질의가 다중 범위 스캔에서의 N 정렬 질의인지 여부를 판단할 수 있다.
본 발명의 일 실시예에 따른 질의 해석부(110)는 단순히 다중 범위 스캔에서의 N 정렬 질의인지 여부만을 판단하는 것이 아닌, 수신한 질의를 구체적으로 해석하고 추출되어야 하는 레코드의 개수, 스캔 대상이 되는 이용자 ID들 및 정렬의 기준이 되는 타임 스탬프 값 등에 대한 정보를 더 해석하고 추출하는 기능을 더 포함할 수 있다.
본 발명의 일 실시예에 따른 질의 실행부(120)는 질의 해석부(110)에 의해 해석된 정보를 바탕으로 질의를 실행한다. 질의 실행부(120)는 그 내부에 여러 요소들을 가질 수 있으나, 다중 범위 스캔에서의 N 정렬 질의에 대한 효율적인 처리 방식에 초점을 맞추면서 그 설명을 용이하게 하기 위하여, 버퍼 할당부(121), 스캔부(122), 제공부(123)를 가지는 것으로 표현할 수 있다. 먼저 본 발명의 일 실시예에 따른 버퍼 할당부(121)는 질의 해석부(110)에 의해 수신된 질의가 다중 범위 스캔에서의 N 정렬 질의라고 판단된 경우, 메모리 상에 스캔을 위한 임시 저장 공간인 버퍼를 할당한다. 할당되는 버퍼의 크기는 앞서 질의 해석부(110)에 의해 해석된 정보 중 추출되어야 하는 레코드의 개수에 대응된다. 예를 들어, 추출되어야 하는 레코드의 개수가 N개라면, 버퍼 할당부(121)는 후술할 스캔부(122)의 스캔 방식에 따라 N개의 정렬을 할 수 있는 로우 버퍼(row buffer), 또는 N개의 스캔 버퍼(scan buffer)와 로우 버퍼(row buffer)를 할당할 수 있다. 여기서 로우 버퍼는 색인 스캔을 통해 추출하게 되는 레코드의 키 값과 식별자를 저장하거나 또는 레코드의 식별자만을 저장할 수 있는 메모리 영역을 의미하고, 스캔 버퍼는 여러 이용자들에 대한 색인 스캔들 중 가장 최신의 레코드를 스캔하고 있는 색인 스캔들의 식별자 정보를 저장할 수 있는 메모리 영역을 의미한다. 다음으로, 본 발명의 일 실시예에 따른 스캔부(122)는 버퍼 할당부(121)에 의해 할당된 한정된 수의 버퍼를 이용하고 최소한도의 색인스캔을 통해서 질의 해석부(110)에 의해 해석된 다중 범위 스캔에서 최상위 N 정렬 질의를 수행한다. 본 발명의 바람직한 실시예들에 따른 스캔부(122)의 구체적인 질의 수행 절차에 대해서는 후술하도록 한다.
마지막으로, 본 발명의 일 실시예에 따른 제공부(123)는 스캔부(122)의 동작에 의해 수행된 질의에 따른 결과로서, 버퍼 할당부(121)에 의해 할당된 로우 버퍼에 저장된 특정 개수의 레코드들을 질의에 대한 결과로서 질의를 요청한 특정 개체로 전송한다.
도 2에서의 질의 해석부(110), 버퍼 할당부(120), 스캔부(130) 및 제공부(140)는 물리적으로 하나의 기계 내에 구현될 수도 있고 일부 또는 그 각각이 물리적으로 다른 기계에 구현될 수도 있거나, 동일한 기능을 하는 물리적으로 복수 개 존재하는 기계가 병렬적으로 존재할 수도 있다. 이렇듯 본 발명은 각 구성부가 설치된 기계 또는 데이터베이스의 물리적인 개수 및 위치에 한정되지 않고 다양한 방식으로 설계 변경될 수 있음은 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 있어 자명하다.
도 2의 각 구성요소는 본 발명을 설명하는데 필요한 필수 구성요소에 한정되어 개시되고 설명되었으므로, 각 구성요소는 본 발명에서 설명되지 않은 공지의 다른 기능을 수행하거나, 또는 도 2에 도시되지 않은, 공지의 다른 기능을 수행하기 위한 별도의 구성요소가 질의 처리 장치(100) 내에 추가될 수 있음은 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 있어 자명하다.
다중 범위 스캔에서 N 정렬 질의의 처리
다음으로, 도 3과 도 4 내지 도 5를 참조하여 본 발명의 선호되는 실시예들에 따라 스캔부(122)에서 수행되는 다중 범위 스캔에서의 N 정렬 질의의 처리 방법에 대해 상세히 설명하도록 한다.
먼저, 본 발명의 제1 실시예에 따르면 버퍼 할당부(121)는 추출되어야 하는 레코드의 개수(이하 'N'개라고 한다)만큼의 로우 버퍼를 할당하고 있는 것을 가정한다. 도 3에 도시된 본 발명의 제1 실시예에 따르면, 질의 처리 장치(100)의 스캔부(122)는 앞서 가정한 posts_userid_ts_index 색인을 기반으로 각 이용자에 대해 최신의, 또는 특정 시점 이후의 글들만을 검색하기 위한 색인 스캔을 시작한다(S110). 색인 스캔은 색인을 루트(root) 노드에서부터 최하위 노드인 리프(leaf)노드까지 탐색해 내려오면서, 검색 조건을 만족하는 첫째 레코드를 검색한다(S120). 검색 조건을 만족하는 첫째 레코드를 발견하지 못했다면(S130), 현재 이용자가 특정 시점 이후에 작성된 글들이 존재하지 않는다는 것이므로, 현재의 색인 스캔을 종료한다(S190). 검색 조건을 만족하는 첫째 레코드가 존재한다면(S130), 스캔부(122)는 로우 버퍼에 현재 레코드 정보를 저장하기 위한 작업을 이하와 같이 수행한다. 즉, 먼저 N 크기의 로우 버퍼가 full 상태인지를 확인한다(S140). 로우 버퍼가 full 상태가 아니라면(S140), 레코드 정보를 저장할 공간이 로우 버퍼에 남아있는 상태이므로, 현재 검색한 레코드의 타임 스탬프 값과 로우 버퍼에 저장된 레코드들의 타임 스탬프 값들을 비교하여 타임 스탬프 역순이 유지되도록 로우 버퍼에 삽입할 위치를 찾아 그 위치에 현재 레코드 정보를 기록한다(S170). 이러한 방식으로, 로우 버퍼 내에 저장된 레코드 정보들은 항상 그 타임 스탬프의 역순으로 정렬되어 있다. 로우 버퍼가 full 상태라면(S140), 현재 검색한 레코드의 타임 스탬프 값과 로우 버퍼에 저장된 마지막 레코드 즉, 타임 스탬프의 역순으로 정렬된 로우 버퍼에서 가장 작은 타임 스탬프 값을 가지는 레코드의 타임스탬프 값을 비교하여 현재 검색한 레코드를 로우 버퍼에 삽입할 수 있는 지를 확인한다(S150). 현재 레코드의 타임 스탬프 값이 로우 버퍼에 있는 마지막 레코드의 타임 스탬프 값보다 작거나 같다면(S150), 현재 이용자가 작성한 글들은 이미 다른 이용자들이 작성했던, 즉 로우 버퍼 내에 저장된 레코드 정보들에 대응되는 N개의 글들보다 오래된 글이라는 것이 자명하므로, 현재 이용자에 대해 검색한 레코드를 로우 버퍼에 삽입할 필요가 없으며, 현재 이용자의 다음 레코드들을 검색할 필요도 없게 된다. 따라서, 현재 이용자의 글들을 스캔하는 작업을 중지한다(S190). 현재 레코드의 타임 스탬프 값이 로우 버퍼에 있는 마지막 레코드의 타임 스탬프 값보다 크다면(S150), 로우 버퍼에서 마지막 레코드를 제거하고 나서(S160), 로우 버퍼에 현재 레코드를 삽입한다(S170). 이 경우에도 로우 버퍼에 기록된 레코드들은 타임 스탬프 역순으로의 정렬이 유지되도록 현재 레코드의 적절한 삽입 위치를 찾아 삽입한다(S170). 본 발명의 제1실시예에 따라 로우 버퍼에서의 레코드 삽입에 따른 로우 버퍼 갱신을 도식화한 도 6을 참조하면, 스캔부(122)가 이미 N개의 레코드가 저장되어 있는 로우 버퍼에 이용자 C가 작성한 레코드를 추출하여 로우 버퍼 내에 삽입하고자 하는 것을 알 수 있다. 삽입되고자 하는, 이용자 C가 작성한 레코드의 타임 스탬프는 "2010-12-01 13:57:26"으로 로우 버퍼에 저장된 마지막 레코드의 타임 스탬프인 "2010-11-29 23:48:01" 보다 최신이다. 그리고, 2번째로 위치한 타임 스탬프가 "2010-12-01 14:07:09"인 레코드보다는 최신이 아니지만, 3번째로 위치한 타임 스탬프가 "2010-12-01 13:46:52"인 레코드보다는 최신이므로 그 사이에 위치해야 한다. 따라서, 스캔부(122)는 로우 버퍼의 마지막 위치에 있는 레코드(식별자가 R44인 레코드)를 제거하고 로우 버퍼의 3번째 위치에 현재 레코드를 저장한다. 따라서, 종래의 로우 버퍼에서 3번째 위치로부터 N-1번째 위치까지 저장된 레코드들은 이용자 C가 작성한 레코드의 삽입에 따라 하나씩 밀려서 저장되며, 따라서 삽입 후의 로우 버퍼에 저장된 마지막 레코드는 종래의 N-1번째 위치에 저장된 레코드와 동일한, 식별자로서 R62을 갖는 레코드임을 알 수 있다.
다시 도 2로 돌아와서, 로우 버퍼에 현재 검색한 레코드를 삽입한 경우에는 현재 색인 스캔을 통해 다음 레코드를 검색하고(S180), 다음 레코드의 존재 여부에 따라(S130) 위에 기술한 처리 과정을 반복한다.
현재 이용자에 대한 색인 스캔에서 검색할 레코드가 더 이상 없거나(S130) 검색한 레코드의 타임 스탬프가 로우 버퍼에 기록된 레코드들의 최소 타임 스탬프 값보다 작거나 같다면(S150), 현재 이용자에 대한 스캔을 더 이상 진행할 필요가 없기 때문에 앞서 기술한 바와 같이 현재 이용자에 대한 색인 스캔을 종료한다(S190).
현재 이용자에 대한 스캔을 종료하였으면, 다음 이용자가 있는 지를 확인한다(S200). 다음 이용자가 있다면(S200) 그 이용자에 대한 색인 스캔을 시작하여(S110), 앞서 기술한 처리 과정을 반복한다. 다음 이용자가 없다면(S200), 로우 버퍼에 있는 레코드들이 최종 질의 결과가 되는 것이므로(S210), 전체 처리 과정을 종료한다. 여기서 이용자들은 N 정렬 결과를 구하는 질의를 이용하는 서비스 또는 시스템의 설계 또는 개발 특성에 따라 소정 이용자 본인을 포함하거나 포함하지 아니한 소정 이용자의 친구들을 의미한다.
도 3에 도시된 본 발명의 제1 실시예의 모든 절차를 수행하고 완료한 경우, 버퍼 할당부(121)에 의해 할당된 N개의 로우 버퍼에 저장된 N개의 레코드들은 질의 해석부(110)에 의해 해석된 다중 범위 스캔에서의 N 정렬 질의의 수행 결과로서 소정 이용자의 친구들 (소정 이용자가 포함될 수도 있고 포함되지 않을 수도 있음)이 작성한 모든 글을 대상으로 하여 가장 최신 또는 특정 시점 이후에 작성된 N개의 글을 담고 있음을 알 수 있다.
도 4 및 도 5는 본 발명의 제2 실시예에 따라 스캔부(122)가 다중 범위 스캔에서의 N 정렬 질의를 수행하는 절차를 나타낸 흐름도이다.
본 발명의 제2실시예에 대한 설명에 앞서, 먼저 DBMS 또는 다른 데이터 저장소에서 색인 스캔을 통해 특정 범위에 있는 레코드들을 검색하는 경우 발생하는 기술적인 절차를 세부적으로 살펴보면, 색인 접근시 스캔 대상이 되는 테이블과 색인을 접근하기 위한 정보를 가져와서 색인 스캔 정보를 담는 구조체에 담아두고 그 정보를 바탕으로 해당 색인을 접근한다. 예를 들어, 색인의 루트(root) 노드 식별자 등이 이에 해당한다. 또한, 색인을 통해 검색할 키들의 범위 및 범위 내의 각 키 또는 레코드에 대해 적용할 필터링 정보 등을 보관하며, 이를 가지고 검색 범위에 있는 키 또는 레코드들을 스캔할 때 검색 조건에 맞는 레코드를 찾아간다. 그 외에도 색인에서 현재 접근하고 있는 키의 위치 정보와 그 키를 소유하는 레코드의 식별자를 유지한다. 이러한 정보는 처음 NULL로 설정되고, 첫째 레코드를 포함하여 다음 레코드를 찾아갈 때마다 현재의 키와 현재의 레코드 정보로 갱신 된다. 색인 스캔을 통해 스캔 범위를 벗어나게 되면, 스캔 정보를 담고 있는 구조체를 반환하는 등의 색인 스캔의 종료 작업을 진행한다.
다음으로, 본 발명의 제2실시예에서 스캔 버퍼는 각 색인 스캔이 현재 가리키고 있는 레코드의 타임 스탬프 기준으로 가장 최신의 타임 스탬프를 가진 레코드를 가리키는 색인 스캔들의 식별자 정보를 저장하는 버퍼이다. 색인 스캔의 식별자로는 색인 스캔 정보를 가진 구조체의 주소(address)가 될 수도 있고, 색인 스캔 정보를 가진 구조체가 배열(array) 형태로 유지된다면 그 배열에서의 위치 값이 될 수도 있다. 또는 DBMS가 아닌 다른 데이터 저장소에서는 테이블 개념이 없이 실제 레코드의 데이터가 색인의 키 내에 모두 포함되어 있을 수 있으며, 스캔의 현재 키 위치 정보만을 가지고 스캔을 진행할 수도 있다. 예를 들어, 스캔 시작 시에, 현재 키의 위치 정보는 루트 노드로 설정된 후에, 첫째 키 또는 다음 키를 찾아갈 때마다 현재 키의 위치 정보는 실제 키의 위치 정보로 설정될 수 있다. 이 경우, 키의 위치 정보의 크기가 크지 않으므로 이러한 키의 위치 정보 자체를 스캔 버퍼에 기록할 수도 있다. 따라서, 스캔 버퍼에 기록되는 정보는 색인 스캔 기능을 제공하는 해당 데이터 저장소의 실제 내부 구현 방식에 따라 달라질 수 있음은 당업자에게 있어 자명할 것이다.
본 발명의 제2 실시예에 따르면 버퍼 할당부(120)는 추출되어야 하는 레코드의 개수(이하 'N'개라고 한다)만큼의 스캔 버퍼 및 로우 버퍼를 할당하고 있는 것을 가정한다. 도 4를 참조하고, 앞서 설명된 특정 레코드 추출 절차 및 가정 사항을 참조하여 본 발명의 제2 실시예를 설명하면, 질의 처리 장치(100)의 스캔부(122)는 앞서 설명한 posts_userid_ts_index 색인을 이용해 각 이용자에 대해 최신, 또는 특정 시점 이후의 글들만을 검색하기 위한 색인 스캔을 시작한다(S310). 색인 스캔은 해당 색인을 탐색하여 검색 조건을 만족하는 첫째 레코드를 검색한다(S320). 검색 조건을 만족하는 첫째 레코드가 존재하지 않는다면(S330), 현재 이용자가 특정 시점 이후에 작성된 글들이 존재하지 않는다는 것이므로, 현재의 색인 스캔을 종료한다(S380). 검색 조건을 만족하는 첫째 레코드가 존재한다면(S330), 스캔 버퍼에 현재의 색인 스캔 정보를 저장하기 위한 작업을 수행한다. 이를 위해, 먼저 N 크기의 스캔 버퍼가 full 상태인지를 확인한다(S340). 스캔 버퍼가 full 상태가 아니라면(S340), 색인 스캔 정보를 저장할 공간이 스캔 버퍼에 남아있는 상태이므로, 현재 색인 스캔이 가리키는 레코드의 타임 스탬프 값과 스캔 버퍼에 기록된 색인 스캔들이 가리키는 레코드들의 타임 스탬프 값들을 비교하여, 타임 스탬프의 역순으로 정렬되도록 스캔 버퍼에 삽입할 위치를 찾아 해당 위치에 현재의 색인 스캔 정보를 기록한다(S370). 이러한 방식으로, 스캔 버퍼 내에 저장된 색인 스캔 정보들은 각각의 색인 스캔이 가리키는 레코드의 타임 스탬프가 역순으로 정렬되어 있다. 스캔 버퍼가 full 상태라면(S340), 현재 색인 스캔이 가리키는 레코드의 타임 스탬프 값과 각각의 색인 스캔이 가리키는 레코드의 타임 스탬프 역순으로 정렬된 스캔 버퍼에 저장된 마지막 색인 스캔이 가리키는 레코드의 타임스탬프 값을 비교하여 현재의 색인 스캔을 스캔 버퍼에 삽입할 수 있는 지를 확인한다(S350). 현재의 색인 스캔이 가리키는 레코드의 타임 스탬프 값이 스캔 버퍼에 기록된 마지막 색인 스캔이 가리키는 레코드의 타임 스탬프 값보다 작거나 같다면(S350), 이는 현재 색인 스캔의 검색 대상이 되는 이용자가 작성한 글보다 더 최신의 글을 작성한 이용자들에 대한 색인 스캔들이 이미 스캔 버퍼에 N개 등록되어 있는 상태임을 나타내므로, 현재 이용자에 대한 색인 스캔을 더 이상 진행할 필요가 없게 된다. 따라서, 현재 이용자에 대한 색인 스캔 작업을 중지한다(S380). 현재 색인 스캔이 가리키는 레코드의 타임 스탬프 값이 스캔 버퍼에 기록된 마지막 색인 스캔이 가리키는 레코드의 타임 스탬프 값보다 크다면(S350), 스캔부(122)는 각각의 색인 스캔이 가리키는 레코드의 타임 스탬프 역순으로 정렬된 스캔 버퍼에서 가장 오래된 타임 스탬프를 가진 레코드를 가리키는 색인 스캔인 마지막 색인 스캔 정보를 스캔 버퍼에서 제거하고 그 스캔을 종료시킨 후에(S360), 현재 색인 스캔의 정보를 스캔 버퍼에 삽입한다(S370). 이 경우에도 스캔 버퍼에서 색인 스캔들이 가리키는 레코드들의 타임 스탬프 역순으로 그 색인 스캔들의 저장 순서가 유지되어야 하므로, 현재 색인 스캔의 적절한 삽입 위치를 찾아 삽입한다. 현재 이용자에 대한 색인 스캔에서 검색할 첫째 레코드가 없는 경우(S330), 현재 색인 스캔이 검색한 첫째 레코드의 타임 스탬프가 스캔 버퍼에 기록된 마지막 색인 스캔이 가리키는 레코드의 최소 타임 스탬프 값보다 작거나 같은 경우(S350), 현재 이용자에 대한 스캔을 더 이상 진행할 필요가 없기 때문에 앞서 기술한 바와 같이 현재 이용자에 대한 색인 스캔을 종료하고 나서(S380), 다음 이용자가 존재하는 지를 확인하는 단계(S390)로 간다. 그 외에, 현재의 색인 스캔을 스캔 버퍼에 등록한 경우에도(S370), 그 색인 스캔을 종료하지 않은 상태에서 다음 이용자가 존재하는 지를 확인하는 단계(S390)로 간다. 다음 이용자가 있다면(S390), 그 이용자에 대한 색인 스캔을 시작하여(S310), 앞서 기술한 처리 과정을 반복한다. 다음 이용자가 없다면(S390), 스캔 버퍼에는 최신 또는 특정 시점 이후에 작성된 N개의 레코드들을 추출하기에 적합한 색인 스캔들이 등록된 상태인 것이다.
이러한 단계를 거치면서 얻게 되는 스캔 버퍼의 일 예는 도 7a에 도시되어 있다. 우측의 스캔 버퍼에 저장된 이용자 A에 대한 색인 스캔은 좌측의 posts_userid_ts_index 색인 중 이용자 A에 의한 레코드 중 가장 타임 스탬프가 최신인 레코드를 가리키고 있으며, 이용자 C와 F에 대한 색인 스캔 역시 각각 이용자 C와 F에 의한 레코드 중 가장 타임 스탬프가 최신인 레코드를 가리키고 있다. 그리고, 각 색인 스캔이 가리키는 레코드의 타임 스탬프 역순으로 이들 색인 스캔들의 위치가 순서화되어 있다.
다음으로, 가리키는 레코드의 타임 스탬프 역순으로 정렬된, 스캔 버퍼에 담긴 색인 스캔들을 바탕으로 최신 또는 특정 시점 이후에 작성된 N개 글들만을 추출하기 위한 절차를 도 5를 참조하여 상세히 설명한다. 스캔부(122)는 먼저 스캔 버퍼에 기록된 색인 스캔이 존재하는 지를 확인한다(S410). 색인 스캔이 존재한다면(S410), 스캔 버퍼에 있는 첫 번째 색인 스캔이 가리키는 레코드, 즉 가장 최신의 타임 스탬프를 가진 레코드를 추출한 다음(S420), 그 레코드를 로우 버퍼에 기록하는 작업을 수행한다. 여기서 스캔 버퍼에 저장된 색인 스캔들은 그들이 각각 가리키고 있는 레코드들의 타임 스탬프의 역순, 즉 가장 최신인 순으로 정렬되어 있으므로, 단계 S420에서 추출되는 레코드는 스캔 버퍼 중 가장 앞에 있는 색인 스캔이 가리키는 레코드에 해당한다. 이 작업은 로우 버퍼가 full인지를 먼저 확인하여 수행한다(S430). 로우 버퍼가 full이 아니라면(S430), 로우 버퍼에 비어 있는 가장 앞쪽 공간에 그 레코드를 삽입한다(S440). 그리고 나서, 현재 색인 스캔에서 다음 레코드를 검색하고(S450), 다음 레코드가 존재하는 지를 확인한다(S460). 다음 레코드가 존재하지 않는다면(S460), 현재의 색인 스캔을 스캔 버퍼에서 제거하고 그 색인 스캔을 종료한다(S470). 그리고 나서, 스캔 버퍼에 색인 스캔들이 남아있는 지를 확인하는 단계(S410)로 넘어간다. 다음 레코드가 존재한다면(S460), 현재 색인 스캔이 가리키는 레코드가 다음 레코드로 변경되었으므로, 그 레코드의 타임 스탬프 값을 기준으로 스캔 버퍼에서 현재 색인 스캔의 위치를 재조정한다(S480). 이 경우에도 마찬가지로 레코드들의 타임 스탬프 역순으로 정렬된 색인 스캔들의 순서가 유지되도록 적절한 위치에 색인 스캔 정보를 삽입하는 방식으로 스캔 버퍼에서 위치 재조정을 한다. 색인 스캔의 위치를 재조정하는 경우 스캔 버퍼에 색인 스캔이 남아 있다는 것이 보장되고 또한 스캔 버퍼에 저장된 색인 스캔들 역시 각각이 가리키는 레코드의 타임 스탬프 역순으로 정렬된 순서가 유지되므로, 스캔 버퍼에서 가장 앞에 있는, 즉 가장 타임 스탬프가 최신인 레코드를 가리키는 색인 스캔에서 현재 레코드를 추출하는 단계(S420)로 가서, 앞서 기술한 절차를 반복한다.
이러한 수행 절차와 같이 스캔 버퍼에서 첫 번째에 있는 색인 스캔이 가리키는 레코드를 추출하는 과정을 반복한다면, 추출하는 레코드들의 순서 역시 타임 스탬프가 가장 최신인 순서가 된다. 따라서, 이러한 레코드를 로우 버퍼에 삽입할 경우에, 로우 버퍼에 삽입할 위치를 찾기 위해 별도의 이진 탐색 또는 다른 방식의 재조정 등이 필요 없으며, 단지 로우 버퍼의 앞 쪽에서 비어 있는 공간 순서대로 레코드를 첨가(append)하여 로우 버퍼를 채워 넣으면 로우 버퍼 내의 레코드들의 순서는 타임 스탬프 역순으로 정렬된 순서가 유지되는 것이다.
한편, 스캔부(122)가 스캔 버퍼에 있는 첫째 색인 스캔이 가리키는 레코드를 추출하여 로우 버퍼에 저장하고자 할 때 로우 버퍼가 이미 full이라면(S430), 이는 이미 최신 순서의 N개 레코드를 모두 찾은 상태가 되는 것을 의미하는 것이다. 따라서, 더 이상의 스캔을 진행할 필요가 없으므로 스캔 버퍼에 있는 모든 색인 스캔들을 종료시킨다(S490). 그리고, 로우 버퍼에 있는 N개 레코드가 최종 결과가 되는 것이므로(S500), 전체 처리 과정을 종료한다.
위의 절차를 수행하는 과정 중에 스캔 버퍼에 색인 스캔이 존재하지 않는 경우가 있을 수 있다(S410), 이 경우에는 이미 로우 버퍼에 0개 이상의 레코드들이 존재하고 있는 상태이며, 로우 버퍼에 있는 그 레코드들이 최종 결과가 되는 것이므로, 스캔부(122)는 전체 처리 과정을 종료한다. 참고로, 로우 버퍼에 있는 레코드들의 수가 0이라면, 이는 질의의 검색 조건을 만족하는 레코드가 없다는 것이다. 즉, 여러 이용자들이 작성한 글들 중에 특정 시점 이후에 작성된 글은 없다는 것을 의미하는 것이며, 이 결과가 정상적인 수행 결과가 되는 것이다.
본 발명의 제2실시예에 따라 스캔 버퍼로부터 레코드를 추출하여 로우 버퍼에 삽입 또는 첨가하는 일부 수행 과정을 도식화하면, 도 7b, 7c, 7d와 같다. 도 7b를 참조하여, 가장 최신 레코드를 가리키는 색인 스캔들이 스캔 버퍼에 등록되어 있고 로우 버퍼는 비어 있는 상태에서 시작한다. 스캔부(122)는 먼저 첫 번째 색인 스캔인 A 스캔에서 키의 위치 정보인 K4544를 통해 현재 키 또는 현재 레코드를 접근하여 그 레코드를 로우 버퍼의 가장 앞에 삽입한다. 그리고, A 스캔의 다음 키인 K4545로 이동하고 해당 키가 가리키는 레코드의 타임 스탬프 기준으로 스캔 버퍼에서 A 스캔의 위치를 재조정한다. 키의 위치 정보인 K4545가 가리키는 레코드의 타임 스탬프 값은 "2010-12-01 14:07:09"로서 스캔 버퍼에 있는 두 번째 스캔인 C 스캔의 현재 키의 위치 정보인 K5122가 가리키는 레코드의 타임 스탬프인 "2010-12-01 13:57:26"보다 최신이므로 A 스캔에 대해 스캔 버퍼에서 첫째 위치를 그대로 유지한다. 다음으로 두 번째 레코드를 찾기 위해 도 7c를 참조하면, 앞서와 마찬가지로 스캔부(122)는 스캔 버퍼에 있는 첫째 색인 스캔인 A 스캔이 K4545를 통해 현재 가리키는 키를 접근하여 그 키의 레코드를 로우 버퍼에서 비어 있는 가장 앞, 즉 두 번째 위치,에 삽입한다. 그리고, A 스캔의 다음 키인 K4546으로 이동하고 그 키가 가리키는 그 레코드의 타임 스탬프 기준으로 스캔 버퍼에서 A 스캔의 위치를 재조정한다. 이 경우, A 스캔의 현재 레코드의 타임 스탬프("2010-12-01 13:46:52")가 C 스캔의 현재 레코드의 타임 스탬프("2010-12-01 13:57:26")보다 최신이 아니기 때문에, 스캔 버퍼에서 C 스캔이 가장 앞에 그리고 A 스캔이 두 번째 위치로 위치하도록 스캔 버퍼의 위치를 재조정한다. 도 7d를 참조하여 그 다음 레코드를 추출하는 과정을 계속하여 살펴보면, 스캔부(122)는 스캔 버퍼에서 첫째 색인 스캔인 C 스캔의 현재 레코드를 추출하여 로우 버퍼에 삽입하고, C 스캔의 다음 키인 K5123으로 이동하고, 스캔 버퍼에서 위치 조정한다. 이 경우에도, C 스캔의 키 K5123가 가리키는 레코드의 타임 스탬프("2010-11-27 10:22:25")가 A 스캔의 키 K4546이 가리키는 레코드의 타임 스탬프("2010-12-01 13:46:52")보다 최신이 아니므로 각각의 키가 가리키는 레코드의 타임 스탬프 역순으로 정렬되도록 스캔 버퍼 내에 저장된 색인 스캔들의 위치가 재조정 된다. 이러한 과정을 N회 수행하게 되면, 로우 버퍼에는 타임 스탬프가 최신인 순서로 N개 레코드가 저장되는 것이다.
앞서 살펴본 본 발명의 제1 실시예 및 제2 실시예는 다음과 같은 점에서 그 수행 단계상의 공통점을 갖고 있는 것을 확인할 수 있다.
먼저, 질의 실행부의 버퍼 할당부는 질의에 포함된 추출 레코드 수(예를 들어, N개)에 기초하여 버퍼를 할당한다. 제1 실시예의 경우에는 N개의 로우 버퍼가, 제2 실시예의 경우에는 N개의 스캔 버퍼 및 로우 버퍼가 할당될 것이다. 다음으로, 이용자의 ID 순서 및 타임 스탬프의 역순으로 색인되어 정렬된 하나 이상의 레코드에 대한 다중 범위 스캔에서의 N 정렬 질의로 질의 해석부에 의해 해석된 질의에 기초하여, 질의 실행부의 스캔부는 하나의 이용자 ID에 대한 레코드를 추출해서 제1 실시예의 경우 로우 버퍼에, 제2 실시예의 경우에는 스캔 버퍼에 저장한다. 이후, 앞서 추출되지 않았던 이용자 ID에 대한 레코드를 추출한 후 버퍼에 저장된, 앞서 추출된 레코드들과의 타임 스탬프를 비교하여 질의의 내용인 다중 범위 스캔에서의 N 정렬 질의를 만족하기 위해 그 타임 스탬프의 역순을 유지하도록 제1 실시예의 경우 로우 버퍼를, 제2 실시예의 경우 스캔 버퍼를 갱신한다.
전술한 바와 같은 본 발명의 수행 단계상의 공통점에, 앞서 각 도면 등을 통해 상세히 설명한 제1 실시예 및 제2 실시예 특유의 추가적인 수행 단계가 유기적으로 접목되어 본 발명의 제1 실시예 및 제2 실시예가 실시될 수 있다.
종래 기술 대 본 발명의 시간 비용 대비
본 발명의 제1 실시예 및 제2 실시예에 의해 다중 범위 스캔에서 최상위 N 정렬 질의를 수행하는 경우 종래 기술에 비해 얻을 수 있는 속도상의 효과를 이하에 계산하는 시간 비용을 통해 확인하여 본다.
먼저, 각 수행 방식의 시간 비용 계산을 위해 아래와 같은 변수들을 가정한다.
N: 검색하고자 하는 레코드의 개수
Us: 특정 이용자의 친구들의 수
Kt: 해당 색인에서 전체 키들의 수 (해당 테이블에서 전체 레코드들의 수와 동일함)
Ku: 해당 색인에서 각 이용자별 평균 키들의 수(해당 테이블에서 각 이용자별 평균 레코드들의 수와 동일함)
Ks: 본 발명의 제1 실시예에서 각 이용자별 색인을 통해 스캔하게 되는 평균 키들의 수
각 색인 스캔에서는 검색 조건을 만족하는 첫째 레코드를 찾는 get_first_row 연산이 1회 수행되고, 다음 레코드를 찾는 get_next_row 연산이 검색 조건에 맞는 모든 레코드들을 찾을 때까지 반복수행 된다. 전체 키들의 개수가 Kt인 색인에서 get_first_row 연산은 일반적으로 이진 탐색(binary search) 방법으로 Kt개 키들 중에 검색 조건을 만족하는 첫째 키를 찾아내어 레코드를 접근하므로 log2(Kt)의 비용이 소용되며, get_next_row 연산은 현재 키에서 다음 키를 바로 찾아가서 레코드를 접근할 수 있으므로, 1의 비용이 소용된다고 볼 수 있다.
get_first_row: log2 (Kt)
get_next_row: 1
종래 기술에 의한 수행 방식에서는 친구 이용자들 각각에 대해 색인 스캔이 이루어져야 하므로 Us회의 색인 스캔이 이루어지며, 각 색인 스캔시 Ku개의 레코드를 추출하여 중간 레코드 셋으로 저장한다. 결국, 1회의 log2(Kt) 비용과 Ku 회의 1 비용을 가진 색인 스캔이 Us회 수행되는 것이다. 그리고 저장된 중간 레코드 셋을 타임 스탬프가 최신인 순으로 정렬하는 작업은 전체 레코드들의 수가 (Us*Ku)인 중간 레코드 셋에 대해 수행하므로, 이러한 정렬 비용은 (Us*Ku) * log2(Us*Ku)으로 볼 수 있다. 따라서, 종래 기술에 의한 수행 방식에 따라 발생하는 수행 시간 비용을 수식으로 나타내면 이하의 수학식 1과 같다.
Figure 112011042354307-pat00002
한편, 본 발명의 제1 실시예에 의한 수행 방식 역시 친구 이용자들 각각에 대하여 색인 스캔이 이루어져야 하므로 Us회의 색인 스캔이 수행되는 것은 같으나, 각 색인 스캔시에 Ks개의 레코드만을 추출하게 되고 추출된 레코드를 N개의 로우 버퍼에 정렬된 순서대로 담게 된다. 즉, (log2(Kt) + Ks)의 스캔 비용을 가지면서, 추출한 Ks개 레코드를 N 크기의 로우 버퍼에서 타임스탬프 역순 상의 삽입 위치를 이진 탐색으로 찾아 삽입하기 위하여 (Ks*log2(N)) 비용을 가지는 색인 스캔이 Us회 수행된다. 따라서, 본 발명의 제1 실시예에 의한 수행 방식에 따라 발생하는 수행 시간 비용을 수식으로 나타내면 이하의 수학식 2와 같다.
Figure 112011042354307-pat00003
또한, 본 발명의 제2 실시예에 의한 수행방식의 경우 Us회의 색인 스캔을 수행하면서, get_first_row 연산으로 찾은 첫째 레코드의 타임 스탬프를 기준으로 비교하여, 가장 최신의 레코드를 가리키고 있는 색인 스캔 정보 N개를 저장하는 스캔 버퍼에 삽입하기 위한 작업을 수행한다. 따라서, Us 회의 색인 스캔 각각에 대해 첫째 레코드를 찾기 위한 log2(Kt)의 비용과 스캔 버퍼에 담기 위한 log2(N)의 비용이 소요되므로, 전체 비용은 (Us * (log2(Kt) + log2(N))이 된다. 그 후, 스캔 버퍼에 저장된 N개의 색인 스캔들을 이용하여 정렬-병합(sort-merge) 방식으로 최신의 레코드들을 추출하면서 최종적으로 N개의 로우 버퍼에 최신 순으로 레코드들을 담게 된다. 이를 자세히 보면, 스캔 버퍼에 있는 첫째 색인 스캔에서 현재 레코드를 추출하여 로우 버퍼에 담는 비용은 1이 들고, 그 색인 스캔의 다음 레코드를 얻기 위한 get_next_row 수행 비용도 1이 들며, 그리고 그 색인 스캔의 새로운 현재 레코드의 타임 스탬프를 기준으로 스캔 버퍼에서 그 색인 스캔을 재위치시키기 위하여 log2(N) 비용이 든다. 그리고, 이러한 작업이 최대 N회 수행되는 것이므로, 전체 비용은 (N * (log2(N)+2))이 비용이 들게 된다. 따라서, 본 발명의 제2 실시예에 의한 수행 방식에 따라 발생하는 수행 시간 비용을 수식으로 나타내면 이하의 수학식 3과 같다.
Figure 112011042354307-pat00004
앞서 가정한 각 변수들에 이하와 같은 값들을 대입하여 수학식 1, 2, 3으로 계산된 수행 시간 비용의 구체적인 값은 이하의 표 2에 계산되어 있다.
N: 20
Us: 100,000
Kt: 100,000,000
Ku: 1,000
Ks: 5
종래 기술 제1 실시예 제2 실시예
수행 시간 비용 =100,000*(26.58+1,000*(1+26.58)= 2,760,658,000 =100,000*(26.58+5*(1+4.32))=5,318,000 =100,000*(26.58+4.32)+20*(4.32+2) = 3,090,126
수행 시간 비율 100% 0.19% 0.11%
상기 표 2를 통해 계산된 바와 같이, 본 발명의 제1 실시예에 따르면 종래 기술에 비해 대략 500배의 속도 성능 향상이, 제2 실시예에 따르면 종래 기술에 비해 대략 900배의 속도 성능 향상이 이루어짐을 알 수 있다.
또한, 질의 수행시 사용되는 공간 비용 측면에서 살펴보면, 종래 기술의 경우 Us*Ku개의 레코드를 중간 레코드 셋으로 추출하여 정렬하기 위한 버퍼가 필요하다. 이 정도의 버퍼를 할당할 수 있는 공간이 메모리 내에 존재하지 않다면 메모리가 아닌 디스크를 이용해서 버퍼를 할당해야 하므로 메모리와 디스크의 액세스(access) 속도상의 차이에 따른 속도상의 손실이 발생한다. 이에 반해, 본 발명의 제1 실시예에 따르면 N개의 로우 버퍼가 할당되고, 제2 실시예에 따르면 N개의 스캔 버퍼 및 N개의 로우 버퍼만 할당되면 되므로 그 공간 비용은 종래 기술에 비해 무시할 만큼 작다고 할 수 있다.
여기서의 비용 계산은 하나의 색인에 모든 이용자들의 키들이 존재하는 일반적인 DBMS에서의 상황을 가정한 것이다. 색인 기능을 제공하는 다른 데이터 저장소의 경우엔, 각 이용자 별로 작은 크기의 색인을 별도로 만들어 사용하는 경우도 있다. 이 경우엔, 각 색인이 가지는 키들의 수가 Kt가 아니라 Ku가 되며, 이 경우의 색인 탐색 비용은 log2(Kt)가 아니라 log2(Ku)가 된다.
본 발명에 따른 실시예들은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 매체에 기록되는 프로그램 명령은 본 발명을 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(magnetic media), CD-ROM, DVD와 같은 광기록 매체(optical media), 플롭티컬 디스크(Floptical disk)와 같은 자기-광 매체(megneto-optical media) 및 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다. 상기된 하드웨어 장치는 본 발명의 동작을 수행하기 위해 하나 이상의 소프트웨어 모듈로서 작동되도록 구성될 수 있으며, 그 역도 마찬가지다.
이상과 같이 본 발명에서는 구체적인 구성 요소 등과 같은 특정 사항들과 한정된 실시예 및 도면에 의해 설명되었으나 이는 본 발명의 보다 전반적인 이해를 돕기 위해서 제공된 것일 뿐, 본 발명은 상기의 실시예에 한정되는 것은 아니며, 본 발명이 속하는 분야에서 통상적인 지식을 가진 자라면 이러한 기재로부터 다양한 수정 및 변형이 가능하다.
따라서, 본 발명의 사상은 설명된 실시예에 국한되어 정해져서는 아니되며, 후술하는 특허청구범위뿐 아니라 이 특허청구범위와 균등하거나 등가적 변형이 있는 모든 것들은 본 발명 사상의 범주에 속한다고 할 것이다.

Claims (20)

  1. 버퍼 할당부에 의해, 질의에 포함된 추출 레코드 수에 기초하여 버퍼를 할당하는 단계,
    스캔부에 의해, 상기 질의에 포함된 제1 리스트 중 제1 사용자 ID에 대응되는 제1 데이터를 추출하고 상기 버퍼에 저장하는 단계,
    상기 스캔부에 의해, 상기 질의에 포함된 제1 리스트 중 상기 제1 사용자 ID와 상이한 제2 사용자 ID에 대응되는 제2 데이터를 추출하는 단계, 및
    상기 스캔부에 의해, 상기 버퍼에 저장된 데이터들 및 상기 제2 데이터의 비교를 통해 상기 질의를 만족하도록 상기 버퍼를 갱신하는 단계
    를 포함하고,
    상기 질의는 사용자 ID 및 타임 스탬프에 기초하여 정렬된 하나 이상의 레코드에 대한 다중 범위 스캔에서의 N 정렬 질의인, 질의 처리 방법.
  2. 청구항 1에 있어서,
    상기 버퍼에 저장하는 단계는,
    상기 제1 사용자 ID가 동일한 레코드를 상기 추출 레코드 수 및 상기 제1 사용자 ID에 대응되는 모든 레코드의 개수 중 적은 수만큼 추출하는 단계, 및
    상기 추출된 레코드들을 상기 제1데이터로서 상기 버퍼에 저장하는 단계로 구성되는, 질의 처리 방법.
  3. 삭제
  4. 청구항 1에 있어서,
    상기 버퍼를 갱신하는 단계는,
    상기 제2데이터를 상기 버퍼에 저장된 데이터들과 대비하여 소정 조건을 만족하는지 비교하는 단계,
    상기 제2데이터가 소정 조건을 만족하는 경우 상기 제2데이터가 상기 버퍼에 저장되도록 상기 버퍼를 갱신하는 단계로 구성되고,
    상기 갱신된 버퍼는 상기 질의를 만족하는, 질의 처리 방법.
  5. 청구항 4에 있어서,
    상기 소정 조건은 상기 제2 데이터의 타임 스탬프에 기재된 시간이 상기 버퍼에 저장된 데이터들의 타임 스탬프에 기재된 시간들 중 적어도 어느 하나보다 앞서는 조건인, 질의 처리 방법.
  6. 청구항 5에 있어서,
    상기 제2데이터가 상기 버퍼에 저장되도록 상기 버퍼를 갱신하는 단계는 상기 버퍼가 가득 찬 경우 상기 버퍼에 저장된 데이터들 중 타임 스탬프에 기재된 시간이 가장 늦은 레코드를 상기 버퍼로부터 삭제하는 단계, 및
    상기 제2데이터를 포함하여 상기 버퍼 내에 저장된 데이터들이 타임 스탬프에 기재된 시간이 앞서는 순으로 정렬될 수 있도록 상기 제2 데이터를 상기 버퍼의 소정 위치에 삽입하는 단계로 구성되는, 질의 처리 방법.
  7. 청구항 4에 있어서,
    상기 제2데이터가 상기 버퍼에 저장된 데이터들과 대비하여 상기 소정 조건을 만족하거나 상기 제2데이터가 존재할 때까지 상기 제2 사용자 ID가 동일한 제2데이터를 순차적으로 하나씩 추출하여 상기 버퍼 갱신 단계를 반복하는, 질의 처리 방법.
  8. 청구항 7에 있어서,
    상기 질의에 포함된 제1 리스트에 남아있는 모든 사용자 ID에 대해 상기 제2 데이터 추출 단계 및 버퍼 갱신 단계를 반복하는, 질의 처리 방법.
  9. 청구항 1에 있어서,
    상기 버퍼를 할당하는 단계는 상기 추출 레코드 수에 기초하여 제2 버퍼를 더 할당하고,
    상기 버퍼는 레코드를 가리키는 스캔 정보를 저장하는 스캔 버퍼이며 상기 제2버퍼는 레코드를 저장하는 로우 버퍼인, 질의 처리 방법.
  10. 청구항 9에 있어서,
    상기 버퍼를 갱신하는 단계는,
    상기 제2 데이터인 스캔 정보가 가리키는 레코드가 상기 버퍼에 저장된 데이터들인 스캔 정보들이 가리키는 레코드들과 대비하여 소정 조건을 만족하는지 비교하는 단계,
    상기 소정 조건을 만족하는 경우 상기 제2데이터가 상기 버퍼에 저장되도록 상기 버퍼를 갱신하는 단계로 구성되고,
    상기 갱신된 버퍼는 상기 질의를 만족하는, 질의 처리 방법.
  11. 청구항 10에 있어서,
    상기 소정 조건은 상기 제2 데이터인 스캔 정보가 가리키는 레코드의 타임 스탬프에 기재된 시간이 상기 버퍼에 저장된 데이터들인 스캔 정보들이 가리키는 레코드들의 타임 스탬프에 기재된 시간들 중 적어도 어느 하나보다 앞서는 조건인, 질의 처리 방법.
  12. 청구항 11에 있어서,
    상기 제2데이터가 상기 버퍼에 저장되도록 상기 버퍼를 갱신하는 단계는 상기 버퍼가 가득 찬 경우 상기 버퍼에 저장된 데이터들인 스캔 정보들이 가리키는 레코드들 중 타임 스탬프에 기재된 시간이 가장 늦은 레코드를 가리키는 스캔 정보를 상기 버퍼로부터 삭제하는 단계, 및
    상기 제2데이터를 포함하여 상기 버퍼 내에 저장된 데이터들이 가리키는 레코드들이 타임 스탬프에 기재된 시간이 앞서는 순으로 정렬될 수 있도록 상기 제2 데이터를 상기 버퍼의 소정 위치에 삽입하는 단계로 구성되는, 질의 처리 방법.
  13. 청구항 9에 있어서,
    상기 제1데이터는 상기 제1 사용자 ID를 갖는 최초 레코드를 가리키는 스캔 정보인, 질의 처리 방법.
  14. 청구항 12에 있어서,
    상기 질의에 포함된 제1 리스트에 남아있는 모든 사용자 ID에 대해 상기 제2 데이터 추출 단계 및 버퍼 갱신 단계를 반복하는, 질의 처리 방법.
  15. 청구항 14에 있어서,
    상기 제2 데이터 추출 단계 및 버퍼 갱신 단계의 반복 완료 후,
    상기 스캔부에 의해, 상기 버퍼의 정렬된 스캔 정보들 중 가장 앞서는 스캔 정보가 가리키는 레코드를 상기 제2 버퍼의 비어있는 위치 중 맨 앞에 저장하는 단계,
    상기 스캔부에 의해, 상기 스캔 정보를 상기 스캔 정보가 가리키는 레코드가 갖는 사용자 ID와 동일하며 타임 스탬프에 기재된 시간이 앞서는 순으로 정렬된 레코드들 중 다음 레코드를 가리키도록 이동하는 단계, 및
    상기 스캔부에 의해, 상기 이동된 스캔 정보를 포함하여 상기 버퍼에 저장된 데이터들인 스캔 정보들이 가리키는 레코드들의 타임 스탬프에 기재된 시간이 앞서는 순으로 상기 버퍼를 정렬하는 단계를 더 포함하는, 질의 처리 방법.
  16. 청구항 15에 있어서,
    상기 제2 데이터 추출 단계 및 버퍼 갱신 단계의 반복 완료 후 수행되는 상기 저장하는 단계, 이동하는 단계 및 정렬하는 단계는 상기 제2 버퍼가 가득 찰 때까지 반복되는, 질의 처리 방법.
  17. 청구항 1에 있어서,
    질의 해석부에 의해, 상기 질의가 사용자 ID 및 타임 스탬프에 기초하여 정렬된 하나 이상의 레코드에 대한 다중 범위 스캔에서의 N 정렬 질의인지 여부를 판단하는 단계를 더 포함하며, 상기 판단 결과 N 정렬 질의인 경우에 한하여 상기 버퍼 할당 단계, 상기 버퍼 저장 단계, 상기 제2 데이터 추출 단계 및 상기 버퍼 갱신단계가 수행되는, 질의 처리 방법.
  18. 삭제
  19. 청구항 1 내지 2, 4 내지 17 중 어느 한 항에 기재된 방법의 각 단계를 컴퓨터 상에서 수행하기 위한 프로그램을 기록한 컴퓨터 판독 가능한 기록매체.
  20. 질의에 포함된 추출 레코드 수 에 기초하여 버퍼를 할당하는 버퍼 할당부, 및
    상기 질의에 포함된 제1 리스트 중 제1 사용자 ID에 대응되는 제1 데이터를 추출하여 상기 버퍼에 저장하고, 상기 질의에 포함된 제1 리스트 중 상기 제1 사용자 ID와 상이한 제2 사용자 ID에 대응되는 제2 데이터를 추출하며, 상기 버퍼에 저장된 데이터들 및 상기 제2 데이터의 비교를 통해 상기 질의를 만족하도록 상기 버퍼를 갱신하는 스캔부를 포함하며,
    상기 질의는 사용자 ID 및 타임 스탬프에 기초하여 정렬된 하나 이상의 레코드에 대한 다중 범위 스캔에서의 N 정렬 질의인, 질의 처리 장치.
KR1020110054384A 2011-06-07 2011-06-07 다중범위 스캔에서의 n 정렬 질의를 최적으로 처리하기 위한 방법 및 장치 KR101238381B1 (ko)

Priority Applications (3)

Application Number Priority Date Filing Date Title
KR1020110054384A KR101238381B1 (ko) 2011-06-07 2011-06-07 다중범위 스캔에서의 n 정렬 질의를 최적으로 처리하기 위한 방법 및 장치
JP2012092668A JP5558514B2 (ja) 2011-06-07 2012-04-16 多重範囲スキャンでのnソートクエリを最適に処理する方法及び装置
US13/474,382 US8990226B2 (en) 2011-06-07 2012-05-17 Method and apparatus for processing N sort queries in multi-range scan

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020110054384A KR101238381B1 (ko) 2011-06-07 2011-06-07 다중범위 스캔에서의 n 정렬 질의를 최적으로 처리하기 위한 방법 및 장치

Publications (2)

Publication Number Publication Date
KR20120135588A KR20120135588A (ko) 2012-12-17
KR101238381B1 true KR101238381B1 (ko) 2013-02-28

Family

ID=47294039

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020110054384A KR101238381B1 (ko) 2011-06-07 2011-06-07 다중범위 스캔에서의 n 정렬 질의를 최적으로 처리하기 위한 방법 및 장치

Country Status (3)

Country Link
US (1) US8990226B2 (ko)
JP (1) JP5558514B2 (ko)
KR (1) KR101238381B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20150128562A (ko) 2014-05-08 2015-11-18 주식회사 알티베이스 하이브리드 메모리 테이블 클러스터

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140236648A1 (en) * 2013-02-21 2014-08-21 Bank Of America Corporation Data Communication and Analytics Platform
CN103559307A (zh) * 2013-11-18 2014-02-05 中国农业银行股份有限公司 一种查询的缓存方法及装置
US10108649B2 (en) 2014-02-25 2018-10-23 Internatonal Business Machines Corporation Early exit from table scans of loosely ordered and/or grouped relations using nearly ordered maps
US9600517B2 (en) * 2014-05-29 2017-03-21 Sybase, Inc. Convert command into a BULK load operation
US9665612B2 (en) 2014-05-29 2017-05-30 Sybase, Inc. Run-time decision of bulk insert for massive data loading
CN105138928B (zh) * 2015-08-14 2018-06-26 重庆邮电大学 一种基于缓存机制的社交网络隐私保护方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20020036969A (ko) * 2002-02-06 2002-05-17 (주) 세이프아이 온라인을 이용한 자동업데이트 시스템
KR100396826B1 (ko) 2000-05-31 2003-09-02 주식회사 지식정보 정보검색에서 질의어 처리를 위한 단어 클러스터 관리장치 및 그 방법
KR20090067825A (ko) * 2007-12-21 2009-06-25 (주)큐브리드 데이터베이스 관리 방법 및 시스템
KR20090085869A (ko) * 2008-02-05 2009-08-10 엔에이치엔(주) 데이터베이스 관리 방법 및 시스템

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63301358A (ja) * 1987-06-01 1988-12-08 Hitachi Ltd 電子ファイリングシステムの入出力方式
JPH08255170A (ja) * 1995-03-15 1996-10-01 Oki Electric Ind Co Ltd ソート付き検索処理装置
KR100449497B1 (ko) * 2000-12-21 2004-09-21 주식회사 매직아이 실시간 정보 제공 장치 및 그 처리 방법
JP2003099304A (ja) * 2001-09-20 2003-04-04 Fujitsu Ltd 複数の場所に登録された情報を管理するシステムおよび方法
US20050076018A1 (en) * 2003-10-07 2005-04-07 Neidecker-Lutz Burkhard K. Sorting result buffer
US7343367B2 (en) * 2005-05-12 2008-03-11 International Business Machines Corporation Optimizing a database query that returns a predetermined number of rows using a generated optimized access plan
JP5377897B2 (ja) * 2007-10-29 2013-12-25 株式会社日立製作所 ストリームデータのランキングクエリ処理方法およびランキングクエリ処理機構を有するストリームデータ処理システム
JP2009239855A (ja) * 2008-03-28 2009-10-15 Mitsubishi Electric Corp メタデータ管理装置
US8832676B2 (en) * 2009-09-30 2014-09-09 Zynga Inc. Apparatuses, methods and systems for a social networking application updater

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100396826B1 (ko) 2000-05-31 2003-09-02 주식회사 지식정보 정보검색에서 질의어 처리를 위한 단어 클러스터 관리장치 및 그 방법
KR20020036969A (ko) * 2002-02-06 2002-05-17 (주) 세이프아이 온라인을 이용한 자동업데이트 시스템
KR20090067825A (ko) * 2007-12-21 2009-06-25 (주)큐브리드 데이터베이스 관리 방법 및 시스템
KR20090085869A (ko) * 2008-02-05 2009-08-10 엔에이치엔(주) 데이터베이스 관리 방법 및 시스템

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20150128562A (ko) 2014-05-08 2015-11-18 주식회사 알티베이스 하이브리드 메모리 테이블 클러스터

Also Published As

Publication number Publication date
US8990226B2 (en) 2015-03-24
JP5558514B2 (ja) 2014-07-23
US20120317128A1 (en) 2012-12-13
JP2012256318A (ja) 2012-12-27
KR20120135588A (ko) 2012-12-17

Similar Documents

Publication Publication Date Title
KR101238381B1 (ko) 다중범위 스캔에서의 n 정렬 질의를 최적으로 처리하기 위한 방법 및 장치
US11238098B2 (en) Heterogenous key-value sets in tree database
CN106227800B (zh) 一种高度关联大数据的存储方法及管理系统
CN103020204B (zh) 一种对分布式顺序表进行多维区间查询的方法及其系统
CN107818115B (zh) 一种处理数据表的方法及装置
CN103177058B (zh) 存储为行存储和列存储二者的混合数据库表
US8924365B2 (en) System and method for range search over distributive storage systems
US8924373B2 (en) Query plans with parameter markers in place of object identifiers
US20140317117A1 (en) Method, device and computer storage media for user preferences information collection
TWI549009B (zh) 資料庫管理方法、資料庫管理系統,以及資料庫樹狀結構
CN105320775A (zh) 数据的存取方法和装置
CN103049568A (zh) 对海量文档库的文档分类的方法
JP5199317B2 (ja) データベース処理方法、データベース処理システム及びデータベースサーバ
CN108846021B (zh) 一种基于用户访问偏好模型的海量小文件存储方法
US7783589B2 (en) Inverted index processing
KR101358793B1 (ko) 인덱스 파일 생성방법, 사전 인덱스 파일을 이용한 데이터 검색 방법 및 데이터 관리 시스템, 기록매체
US10019483B2 (en) Search system and search method
CN107169065B (zh) 一种特定内容的去除方法和装置
CN113779286B (zh) 管理图数据的方法及装置
CN109388641A (zh) 一种检索键值数据库中键的共同前缀的方法、设备、介质
CN110990394B (zh) 分布式面向列数据库表的行数统计方法、装置和存储介质
Pokorný et al. Graph patterns indexes: their storage and retrieval
KR101642072B1 (ko) 하이브리드스토리지장치 및 방법
KR102013839B1 (ko) 데이터베이스 관리 방법, 시스템 및 데이터베이스 트리 구조
CN115809268B (zh) 一种基于分片索引的自适应查询方法和装置

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20151223

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20170117

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20180102

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20190102

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20200102

Year of fee payment: 8