KR102568662B1 - 복수의 스킵리스트를 병합하기 위한 지퍼 컴팩션 방법 및 장치 - Google Patents

복수의 스킵리스트를 병합하기 위한 지퍼 컴팩션 방법 및 장치 Download PDF

Info

Publication number
KR102568662B1
KR102568662B1 KR1020210009759A KR20210009759A KR102568662B1 KR 102568662 B1 KR102568662 B1 KR 102568662B1 KR 1020210009759 A KR1020210009759 A KR 1020210009759A KR 20210009759 A KR20210009759 A KR 20210009759A KR 102568662 B1 KR102568662 B1 KR 102568662B1
Authority
KR
South Korea
Prior art keywords
skip list
skip
zipper
tail
merging
Prior art date
Application number
KR1020210009759A
Other languages
English (en)
Other versions
KR20220106622A (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 KR1020210009759A priority Critical patent/KR102568662B1/ko
Publication of KR20220106622A publication Critical patent/KR20220106622A/ko
Application granted granted Critical
Publication of KR102568662B1 publication Critical patent/KR102568662B1/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/21Design, administration or maintenance of databases
    • G06F16/215Improving data quality; Data cleansing, e.g. de-duplication, removing invalid entries or correcting typographical errors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2282Tablespace storage structures; Management thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/25Integrating or interfacing systems involving database management systems

Landscapes

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

Abstract

본 발명은 복수의 스킵리스트를 병합하기 위한 지퍼 컴팩션 방법 및 장치에 관한 것으로, 본 발명의 일 실시예에 따른 복수의 스킵리스트를 병합하기 위한 지퍼 컴팩션 방법은, 제1 스킵리스트의 노드를 머리부터 꼬리까지 차례대로 제2 스킵리스트에 삽입할 위치를 찾아 위치 정보를 스택에 차례대로 저장하는 스캔 단계, 및 상기 저장된 위치 정보를 이용하여 상기 제1 스킵리스트의 노드를 꼬리부터 머리까지 제2 스킵리스트에 차례대로 병합하는 단계를 포함한다.

Description

복수의 스킵리스트를 병합하기 위한 지퍼 컴팩션 방법 및 장치{ZIPPER COMPACTION METHOD AND APPARATUS FOR COMPACTING THE PLURAL OF SKIPLISTS}
본 발명은 복수의 스킵리스트를 병합하기 위한 지퍼 컴팩션 방법 및 장치에 관한 것이다.
지퍼 데이터베이스(ZipperDB)는 영구 메모리(Persistent Memory, PM)의 높은 읽기/쓰기 성능(read/write performance)과 바이트 접근성(byte-addressability)을 이용하여 읽기 증폭(Write amplification)과 쓰기 중단(write stall) 문제를 줄이도록 디자인되었다.
지퍼 데이터베이스는 여러 개의 PM 풀세트(PM poolset)로 구성되어 있으며 각각의 풀(Pool)에는 여러 개의 레벨(Level)이 존재한다. 지퍼 데이터베이스는 SSTable(Sorted-String Table) 대신 스킵리스트(skiplist)로 데이터를 저장하며, 각각의 레벨은 하나의 영구 스킵리스트(persistent skiplist)로 이루어져 있다. 스킵리스트는 검색, 추가, 제거를 수행할 수 있는 정렬된 자료 구조를 나타낸다. 스킵리스트는 이진 검색 트리를 대체할 수 있으며, 스킵 포인터를 사용해서 빠르게 탐색할 수 있다. 각각의 영구 스킵리스트(persistent skiplist)는 libpmemobj를 통해 구현되었으며, 기존의 파일 메타데이터를 관리하는 메니페스트(manifest) 대신 각 레벨의 포인터를 가지고 있다.
본 발명의 실시예들은 복수의 스키리스트를 하나로 병합하기 위한, 지퍼 컴팩션 방법 및 장치를 제공하고자 한다.
본 발명의 실시예들은 복수의 스키리스트를 하나로 병합하는 동안에도 다른 트랜잭션들이 락(Lock)을 잡지 않고 복수의 스킵리스트를 락-프리(Lock-free)로 검색하기 위한, 복수의 스킵리스트를 병합하기 위한 지퍼 컴팩션 방법 및 장치를 제공하고자 한다.
다만, 본 발명의 해결하고자 하는 과제는 이에 한정되는 것이 아니며, 본 발명의 사상 및 영역으로부터 벗어나지 않는 범위의 환경에서도 다양하게 확장될 수 있을 것이다.
본 발명의 일 실시예에 따르면, 지퍼 컴팩션 장치에 의해 수행되는 지퍼 컴팩션 방법에 있어서, 제1 스킵리스트의 노드를 머리부터 꼬리까지 차례대로 제2 스킵리스트에 삽입할 위치를 찾아 위치 정보를 스택에 차례대로 저장하는 스캔 단계; 및 상기 저장된 위치 정보를 이용하여 상기 제1 스킵리스트의 노드를 꼬리부터 머리까지 제2 스킵리스트에 차례대로 병합하는 단계를 포함하는, 복수의 스킵리스트를 병합하기 위한 지퍼 컴팩션 방법이 제공될 수 있다.
상기 스캔 단계는, 최하단 계층 포인터를 따라 상기 제1 스킵리스트를 탐색하여 상기 제1 스킵리스트의 노드를 제2 스킵리스트에 삽입할 위치 정보를 스택에 저장할 수 있다.
상기 스캔 단계는, 상기 제1 스킵리스트를 탐색하면서 삽입할 노드에서 각 계층의 포인터가 업데이트가 필요하면, 삽입할 제1 스킵리스트의 노드와 포인터 정보를 스택에 저장할 수 있다.
상기 스캔 단계는, 제1 스킵리스트의 최하단 계층의 포인터를 따라 다음 노드를 방문하고 제2 스킵리스트에서 다음 노드를 삽입할 위치를 탐색할 수 있다.
상기 스캔 단계는, 이전에 검색한 노드의 키 값이 현재에 검색한 노드의 키 값 보다 작으면, 헤드에서부터 검색하는 대신 가장 높은 계층의 이전 노드부터 다시 검색할 수 있다.
상기 병합하는 단계는, 상기 스택에 저장된 위치 정보를 꺼내어 이용하여 상기 제1 스킵리스트의 노드를 최하단 포인터부터 제2 스킵리스트에 병합 할 수 있다.
상기 병합하는 단계는, 상기 제1 스킵리스트의 노드의 최하단 계층 포인터를 업데이트한 이후 상기 제1 스킵리스트의 노드의 상위 계층 포인터를 제2 스킵리스트의 노드를 가리키도록 업데이트할 수 있다.
상기 병합하는 단계는, 상기 제1 스킵리스트의 노드의 최상위 계층을 제2 스킵리스트의 꼬리 부분을 가리키도록 업데이트할 수 있다.
상기 방법은, 읽기 트랜잭션이 제1 스킵리스트를 검색하다가 일시적으로 중단되었고 다시 재개되면, 읽기 쓰레드는 현재 검색하는 스킵리스트를 제1 스킵리스트로 인지하고, 검색하는 노드를 찾지 못할 경우 병합이 진행중인 또는 병합이 끝난 제2 스킵리스트에서 탐색을 다시 시작하는 단계를 더 포함할 수 있다.
상기 방법은, 상기 제1 스킵리스트의 모든 노드를 제2 스킵리스트에 병합하면 상기 제1 스킵리스트는 머리 노드와 꼬리 노드만을 가진 빈 스킵리스트가 되어, 상기 제1 스킵리스트를 삭제하는 단계를 더 포함할 수 있다.
한편, 본 발명의 다른 실시예에 따르면, 제1 스킵리스트와 제2 스킵리스트를 저장하는 제1 메모리; 상기 영구 메모리에서 지퍼 컴팩션(Zipper Compaction)과 관련된 하나 이상의 프로그램을 저장하는 제2 메모리; 및 상기 저장된 하나 이상의 프로그램을 실행하는 프로세서를 포함하고, 상기 프로세서는, 상기 제1 메모리에서 제1 스킵리스트의 노드를 머리부터 꼬리까지 차례대로 제2 스킵리스트에 삽입할 위치를 찾아 위치 정보를 스택에 차례대로 저장하고, 상기 저장된 위치 정보를 이용하여 상기 제1 스킵리스트의 노드를 꼬리부터 머리까지 제2 스킵리스트에 차례대로 병합하는, 복수의 스킵리스트를 병합하기 위한 지퍼 컴팩션 장치가 제공될 수 있다.
상기 프로세서는, 최하단 계층 포인터를 따라 상기 제1 스킵리스트를 탐색하여 상기 제1 스킵리스트의 노드를 제2 스킵리스트에 삽입할 위치 정보를 스택에 저장할 수 있다.
상기 프로세서는, 상기 제1 스킵리스트를 탐색하면서 삽입할 노드에서 각 계층의 포인터가 업데이트가 필요하면, 삽입할 제1 스킵리스트의 노드와 포인터 정보를 스택에 저장할 수 있다.
상기 프로세서는, 제1 스킵리스트의 최하단 계층의 포인터를 따라 다음 노드를 방문하고 제2 스킵리스트에서 다음 노드를 삽입할 위치를 탐색할 수 있다.
상기 프로세서는, 이전에 검색한 노드의 키 값이 현재에 검색한 노드의 키 값 보다 작으면, 헤드에서부터 검색하는 대신 가장 높은 계층의 이전 노드부터 다시 검색할 수 있다.
상기 프로세서는, 상기 스택에 저장된 위치 정보를 꺼내어 이용하여 상기 제1 스킵리스트의 노드를 최하단 포인터부터 제2 스킵리스트에 병합할 수 있다.
상기 프로세서는, 상기 제1 스킵리스트의 노드의 최하단 계층 포인터를 업데이트한 이후 상기 제1 스킵리스트의 노드의 상위 계층 포인터를 제2 스킵리스트의 노드를 가리키도록 업데이트할 수 있다.
상기 프로세서는, 상기 제1 스킵리스트의 노드의 최상위 계층을 제2 스킵리스트의 꼬리 부분을 가리키도록 업데이트할 수 있다.
상기 프로세서는, 읽기 트랜잭션이 제1 스킵리스트를 검색하다가 일시적으로 중단되었고 다시 재개되면, 읽기 쓰레드는 현재 검색하는 스킵리스트를 제1 스킵리스트로 인지하고, 검색하는 노드를 찾지 못할 경우 병합이 진행중인 또는 병합이 끝난 제2 스킵리스트에서 탐색을 다시 시작할 수 있다.
상기 프로세서는, 상기 제1 스킵리스트의 모든 노드를 제2 스킵리스트에 병합하면 상기 제1 스킵리스트는 머리 노드와 꼬리 노드만을 가진 빈 스킵리스트가 되어, 상기 제1 스킵리스트를 삭제할 수 있다.
한편, 본 발명의 다른 실시예에 따르면, 프로세서에 의해 실행될 때, 상기 프로세서로 하여금 방법을 실행하게 하는 명령어들을 저장하기 위한 비일시적 컴퓨터 판독가능 저장 매체로서, 상기 방법은: 제1 스킵리스트의 노드를 머리부터 꼬리까지 차례대로 제2 스킵리스트에 삽입할 위치를 찾아 위치 정보를 스택에 차례대로 저장하는 스캔 단계; 및 상기 저장된 위치 정보를 이용하여 상기 제1 스킵리스트의 노드를 꼬리부터 머리까지 제2 스킵리스트에 차례대로 병합하는 단계를 포함하는, 비일시적 컴퓨터 판독 가능한 저장 매체가 제공될 수 있다.
개시된 기술은 다음의 효과를 가질 수 있다. 다만, 특정 실시예가 다음의 효과를 전부 포함하여야 한다거나 다음의 효과만을 포함하여야 한다는 의미는 아니므로, 개시된 기술의 권리범위는 이에 의하여 제한되는 것으로 이해되어서는 아니 될 것이다.
본 발명의 실시예들은 복수의 스키리스트를 하나로 병합할 수 있다.
본 발명의 실시예들은 복수의 스키리스트를 하나로 병합하는 동안에도 다른 트랜잭션들이 락(Lock)을 잡지 않고 복수의 스킵리스트를 락-프리(Lock-free)로 검색할 수 있다.
도 1은 본 발명의 일 실시예에 따른 지퍼 컴팩션 방법에서 스캔 과정을 나타낸 도면이다.
도 2 내지 도 8은 본 발명의 일 실시예에 따른 지퍼 컴팩션 방법에서 병합 과정을 나타낸 도면이다.
도 9는 본 발명의 일 실시예에 따른 지퍼 컴팩션 방법에서 지퍼 컴팩션이 완료된 이후의 스킵리스트를 나타낸 도면이다.
도 10은 본 발명의 일 실시예에 따른 복수의 스킵리스트를 병합하기 위한 지퍼 컴팩션 장치의 구성도이다.
도 11 및 도 12는 본 발명의 일 실시예에 따른 복수의 스킵리스트를 병합하기 위한 지퍼 컴팩션 방법에서의 스캔 단계와 병합 단계에 대한 순서도이다.
본 발명은 다양한 변환을 가할 수 있고 여러가지 실시예를 가질 수 있는 바, 특정 실시예들을 도면에 예시하고 상세한 설명에 구체적으로 설명하고자 한다. 그러나 이는 본 발명을 특정한 실시 형태에 대해 한정하려는 것이 아니며, 본 발명의 기술적 사상 및 기술 범위에 포함되는 모든 변환, 균등물 내지 대체물을 포함하는 것으로 이해될 수 있다. 본 발명을 설명함에 있어서 관련된 공지 기술에 대한 구체적인 설명이 본 발명의 요지를 흐릴 수 있다고 판단되는 경우 그 상세한 설명을 생략한다.
제1, 제2 등의 용어는 다양한 구성요소들을 설명하는데 사용될 수 있지만, 구성요소들이 용어들에 의해 한정되는 것은 아니다. 용어들은 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로만 사용된다.
본 발명에서 사용한 용어는 단지 특정한 실시예를 설명하기 위해 사용된 것으로, 본 발명을 한정하려는 의도가 아니다. 본 발명에서 사용한 용어는 본 발명에서의 기능을 고려하면서 가능한 현재 널리 사용되는 일반적인 용어들을 선택하였으나 이는 당 분야에 종사하는 기술자의 의도, 판례, 또는 새로운 기술의 출현 등에 따라 달라질 수 있다. 또한, 특정한 경우는 출원인이 임의로 선정한 용어도 있으며, 이 경우 해당되는 발명의 설명 부분에서 상세히 그 의미를 기재할 것이다. 따라서 본 발명에서 사용되는 용어는 단순한 용어의 명칭이 아닌, 그 용어가 가지는 의미와 본 발명의 전반에 걸친 내용을 토대로 정의되어야 한다.
단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 발명에서, "포함하다" 또는 "가지다" 등의 용어는 명세서상에 기재된 특징, 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
이하, 본 발명의 실시예들을 첨부 도면을 참조하여 상세히 설명하기로 하며, 첨부 도면을 참조하여 설명함에 있어, 동일하거나 대응하는 구성요소는 동일한 도면번호를 부여하고 이에 대한 중복되는 설명은 생략하기로 한다.
도 1은 본 발명의 일 실시예에 따른 지퍼 컴팩션 방법에서 스캔 과정을 나타낸 도면이다.
도 1은 지퍼 컴팩션이 진행될 레벨 K-1의 크기가 작은 스킵리스트와 레벨 K의 크기가 큰 스킵리스트를 보여준다. 레벨 K-1 의 크기가 작은 스킵리스트에는 노드 3, 노드 12 및 노드 14가 포함되고, 레벨 K 의 크기가 큰 스킵리스트에는 노드 7, 노드 10 및 노드 17이 포함된다. 여기서, 크기가 작은 스킵리스트가 크기가 큰 스킵리스트에 병합되는 경우를 가정하여 설명하기로 한다. 병합되는 스킵리스트는 크기로 한정되지 않고, 크기가 작은 스킵리스트가 크기가 큰 스킵리스트에 병합될 수 있다. 이때, 본 발명의 일 실시예에서 크기가 작은 스킵리스트는 제1 스킵리스트로 지정되고, 크기가 큰 스킵리스트는 제2 스킵리스트로 지정된다. 반대로 실시예에서 크기가 큰 스킵리스트는 제1 스킵리스트로 지정되고, 크기가 작은 스킵리스트는 제2 스킵리스트로 지정될 수 있다.
먼저, 지퍼 컴팩션 장치는 레벨 K-1 의 크기가 작은 스킵리스트와 레벨 K 의 크기가 큰 스킵리스트에 대한 컴팩션을 하기 위한 스캔 과정을 수행한다. 스캔 과정에서 변경이 필요한 노드는 스택(stack)에 푸시(push)하여 저장한다. 최하단 계층 포인터를 따라 레벨 K-1의 크기가 작은 스킵리스트를 탐색한다. 먼저, 처음 노드(노드 3)가 레벨 K 의 크기가 큰 스킵리스트를 검색하며 삽입할 위치를 찾는다. 또한, 레벨 K의 의 크기가 큰 스킵리스트를 검색하면서 노드 3에서 각 계층의 포인터가 업데이트가 필요한지 확인한다. 여기서 포인터의 값을 당장 변경하지 않고, 스택에 포인터 정보만을 저장한다. 도 1에서 레벨 K 의 크기가 큰 스킵리스트의 H0, H1은 노드 3을 가리키도록 업데이트해야 하기 때문에 노드 3과 함께 H0, H1을 스택에 저장한다.
①번 과정 이후, 레벨 K-1의 크기가 작은 스킵리스트의 최하단 계층의 포인터를 따라 다음 노드 12를 방문하고 레벨 K의 크기가 큰 스킵리스트에서 노드 12를 삽입할 위치를 찾는다. 또한, 각 계층에서 노드 12 바로 앞에 위치한 레벨 K의 노드 10은 스택에 노드 12와 함께 저장된다. 위 예에서 R3, R2, R1, R0은 노드 12와 함께 저장된다.
②번 과정 이후, 그 다음 노드 12의 최하단 계층 포인터를 따라 노드 14를 방문한다. 여기서 레벨 K-1의 크기가 작은 스킵리스트 노드와 연결될 레벨 K 의 크기가 큰 스킵리스트 노드를 매번 스킵리스트 헤드(head)에서부터 검색할 필요가 없는데, 그 이유는 이전에 검색한 키(12)값이 현재의 키(14)값보다 작기 때문이다. 그렇기 때문에 헤드부터 검색하는 대신 이전의 가장 높은 계층부터 검색을 다시 시작한다. 도 1에서는 노드 14를 검색할 때 레벨 K 의 크기가 큰 스킵리스트의 R3부터 검색을 한다.
도 2 내지 도 8은 본 발명의 일 실시예에 따른 지퍼 컴팩션 방법에서 병합 과정을 나타낸 도면이다.
도 1의 스캔 과정 이후, 지퍼 컴팩션 장치는 병합 과정에서는 스택에서 포인터를 빼내면서 해당 포인터의 업데이트를 진행하며, 스킵리스트의 꼬리부터 머리까지 차례대로 컴팩션을 진행한다.
도 2의 예시처럼, 노드 14의 최하단 계층의 포인터를 노드 17을 가리키도록 수정하고 clwb(cache line wite back)를 호출하여 지속성을 보장한다(S101). 노드 14의 최하단 계층이 노드 17에 연결되어있는 도 2의 상황에서, 노드 14의 상위 계층 포인터(next[1])는 노드 17을 가리키도록 수정하지 않는다. 이로 인해 검색(search)에 영향을 줄 수도 있을 것으로 생각할 수 있지만, 계층 0을 제외한 나머지 계층들은 다음 노드에 대한 확률적인 지름길이며, 올바른 검색 결과에 영향을 주지 않는다. 그렇기 때문에 계층 0을 제외한 나머지 계층들까지 원자적으로 업데이트할 필요는 없다.
노드 14의 하단 계층 포인터를 업데이트 한 도 2 이후에 도 3과 같이 노드 14의 상위 계층 포인터를 노드 17을 가리키도록 업데이트한다(S102).
이후, 스택에서 다음 노드인 노드 12를 꺼내 포인터를 업데이트한다(S103). 도 4에서 노드 12의 최상위 계층은 레벨 K의 꼬리부분을 가리키고, 그 다음 계층은 노드 17을 가리키도록 업데이트한다.
이후 과정인 도 5와 도 6에서는 도 4의 과정처럼 각 계층에서 가장 오른쪽에 있는 노드를 업데이트해준다. 도 5에서는 노드 10의 계층 포인터를 노드 12를 가리키도록 업데이트한다(S104 및 S105). 도 6에서는 노드 7의 계층 포인터를 노드 12를 가리키도록 업데이트한다(S106).
다음으로 도 7과 도 8에서와 같이, 스택에서 노드 3을 꺼내고 노드 3의 포인터와 각 계층의 가장 오른쪽 노드를 업데이트한다. 도 7에서는 노드 3의 최하단 포인터를 노드 7을 가리키도록 업데이트하고(S107), 레벨 K 의 크기가 큰 스킵리스트의 H0를 노드 3을 가리키도록 업데이트한다(S108). 그리고 도 8에서는 노드 3의 상단 포인터를 노드 7을 가리키도록 업데이트하고(S107), 레벨 K 스킵리스트의 H1을 노드 3을 가리키도록 업데이트한다(S108). 이후, 레벨 K-1의 헤드 부분은 사용되지 않는다.
도 9는 본 발명의 일 실시예에 따른 지퍼 컴팩션 방법에서 지퍼 컴팩션이 완료된 이후의 스킵리스트를 나타낸 도면이다.
도 9는 지퍼 컴팩션이 완료된 이후의 스킵리스트를 보여준다.
지퍼 컴팩션 알고리즘에서 사용하는 실패 원자적 8바이트 저장(failure-atomic 8byte store) 명령은 두 개의 스킵리스트를 병합하는 동안에도 동시에 읽기 쓰레드가 올바른 데이터를 찾는 것을 보장한다. 예를 들면, 읽기 쓰레드는 도 1 내지 도 9까지의 그림들에 표현된 어떤 상태의 스킵리스트에 동시에 접근하더라도 올바른 결과를 반환하는 것을 보장한다.
반대로, 백그라운드 컴팩션 쓰레드가 지퍼 컴팩션을 진행하는 동안 읽기 트랜잭션이 일시 중단 되는 경우를 생각해보자. 읽기 트랜잭션이 낮은 레벨인 레벨 K-1의 크기가 작은 스킵리스트를 검색하다가 일시적으로 중단되었고 다시 재개되면, 기존 레벨 K-1의 크기가 작은 스킵리스트는 레벨 K 또는 더 높은 레벨의 크기가 큰 스킵리스트로 컴팩션 되고 있을 수 있다. 이때, 읽기 쓰레드는 중간에 스킵리스트의 레벨이 변경되었는지 알 수 없다. 기존의 방식처럼 읽기 쓰레드가 키(Key)를 검색하면 레벨 K-1, 레벨 K 혹은 그 이상 레벨의 스킵리스트의 꼬리 노드로 이동할 수도 있다. 하지만 읽기 쓰레드는 현재 검색하는 스킵리스트를 레벨 K-1로 인지하고 있기 때문에 레벨 K-1의 검색을 마친 후, 검색하는 노드를 찾지 못했다면, 컴팩션이 진행중인 레벨 K의 스킵리스트에서 탐색을 다시 시작한다. 본 발명의 일 실시예는 읽기 트랜잭션이 이미 방문한 노드를 여러 번 다시 방문할 수도 있긴 하지만, 올바른 검색 결과를 반환하는 것을 보장한다.
도 10은 본 발명의 일 실시예에 따른 복수의 스킵리스트를 병합하기 위한 지퍼 컴팩션 장치의 구성도이다.
도 10에 도시된 바와 같이, 본 발명의 일 실시예에 따른 복수의 스킵리스트를 병합하기 위한 지퍼 컴팩션 장치(100)는 제1 메모리(110), 제2 메모리(120) 및 프로세서(130)를 포함한다. 그러나 도시된 구성요소 모두가 필수 구성요소인 것은 아니다. 도시된 구성요소보다 많은 구성요소에 의해 복수의 스킵리스트를 병합하기 위한 지퍼 컴팩션 장치(100)가 구현될 수도 있고, 그보다 적은 구성요소에 의해서도 복수의 스킵리스트를 병합하기 위한 지퍼 컴팩션 장치(100)가 구현될 수 있다.
이하, 도 10의 복수의 스킵리스트를 병합하기 위한 지퍼 컴팩션 장치(100)의 각 구성요소들의 구체적인 구성 및 동작을 설명한다.
제1 메모리(110)는 크기가 작은 스킵리스트와 크기가 큰 스킵리스트를 저장한다. 제1 메모리(110)는 특정 메모리로 한정되지 않으며, 비휘발성 메모리 또는 휘발성 메모리로 구현될 수 있다.
제2 메모리(120)는 제1 메모리(110)에서 지퍼 컴팩션(Zipper Compaction)과 관련된 하나 이상의 프로그램을 저장한다.
프로세서(130)는 제2 메모리(120)에 저장된 하나 이상의 프로그램을 실행한다. 프로세서(130)는 크기가 작은 스킵리스트의 노드를 머리부터 꼬리까지 차례대로 크기가 큰 스킵리스트에 삽입할 위치 정보를 스택에 저장하여 스킵리스트를 스캔하고, 저장된 위치 정보를 이용하여 크기가 작은 스킵리스트의 노드를 꼬리부터 머리까지 차례대로 크기가 큰 스킵리스트에 병합한다.
실시예들에 따르면, 프로세서(130)는 최하단 계층 포인터를 따라 크기가 작은 스킵리스트를 탐색하여 크기가 작은 스킵리스트의 노드를 크기가 큰 스킵리스트에 삽입할 위치 정보를 스택에 저장할 수 있다.
실시예들에 따르면, 프로세서(130)는 크기가 작은 스킵리스트를 탐색하면서 삽입할 노드에서 각 계층의 포인터가 업데이트가 필요하면, 삽입할 크기가 작은 스킵리스트의 노드와 포인터 정보를 스택에 저장할 수 있다.
실시예들에 따르면, 프로세서(130)는 크기가 작은 스킵리스트의 최하단 계층의 포인터를 따라 다음 노드를 방문하고 크기가 큰 스킵리스트에서 다음 노드를 삽입할 위치를 탐색할 수 있다.
실시예들에 따르면, 프로세서(130)는 이전에 검색한 노드의 키 값이 현재에 검색한 노드의 키 값 보다 작으면, 헤드에서부터 검색하는 대신 이전의 가장 높은 계층부터 다시 검색할 수 있다.
실시예들에 따르면, 프로세서(130)는 스택에 저장된 위치 정보 꺼내어 이용하여 크기가 작은 스킵리스트의 노드를 최하단 포인터부터 크기가 큰 스킵리스트에 병합할 수 있다.
실시예들에 따르면, 프로세서(130)는 크기가 작은 스킵리스트의 노드의 최하단 계층 포인터를 업데이트한 이후 크기가 작은 스킵리스트의 노드의 상위 계층 포인터를 크기가 큰 스킵리스트의 노드를 가리키도록 업데이트할 수 있다.
실시예들에 따르면, 프로세서(130)는 크기가 작은 스킵리스트의 노드의 최상위 계층을 크기가 큰 스킵리스트의 꼬리 부분을 가리키도록 업데이트할 수 있다.
실시예들에 따르면, 프로세서(130)는 읽기 트랜잭션이 크기가 작은 스킵리스트를 검색하다가 일시적으로 중단되었고 다시 재개되면, 읽기 쓰레드는 현재 검색하는 스킵리스트를 크기가 작은 스킵리스트로 인지하고, 검색하는 노드를 찾지 못하면, 컴팩션이 진행중인 크기가 큰 스킵리스트에서 탐색을 다시 시작할 수 있다.
실시예들에 따르면, 프로세서(130)는 크기가 작은 스킵리스트의 모든 노드를 크기가 큰 스킵리스트에 병합하면 머리 노드와 꼬리 노드만 가지고 있는 크기가 작은 스킵리스트를 삭제할 수 있다.
도 11 및 도 12는 본 발명의 일 실시예에 따른 복수의 스킵리스트를 병합하기 위한 지퍼 컴팩션 방법에서의 스캔 단계와 병합 단계에 대한 순서도이다.
도 11 및 도 12에 도시된 복수의 스킵리스트를 병합하기 위한 지퍼 컴팩션 방법은 지퍼 컴팩션 장치(100)에 의해 수행된다. 도 11에 도시된 스캔 단계(Scan Phase)를 설명하고, 도 12에 도시된 병합 단계(Merge Phase)를 설명하기로 한다.
단계 S201에서, 지퍼 컴팩션 장치(100)는 스캔 단계를 시작한다. 여기서, 단계 S201에서, lowSkipList와 lowNode는 레벨 K-1의 크기가 작은 스킵리스트와 노드를 가리키고, upperSkipList와 upperNode는 레벨 K의 크기가 큰 스킵리스트와 노드를 가리킨다.
단계 S202에서, 지퍼 컴팩션 장치(100)는 (1) lowNode = lowSkipList.head.next, (2) Rightmost[] = upperSkipList.head.next, (3) curLayer = MaxLayer, (4) upperNode = upperSkipList.head 와 같이 설정한다.
단계 S203에서, 지퍼 컴팩션 장치(100)는 lowNode가 NULL인지를 확인한다.
단계 S204에서, 지퍼 컴팩션 장치(100)는 lowNode가 NULL이 아니면, curLayer이 0이 아니거나 upperNode의 다음 노드의 키(key)가 lowNode의 키(Key)보다 작거나 같은지를 확인한다.
단계 S205에서, 지퍼 컴팩션 장치(100)는 curLayer가 0이 아니거나 upperNode의 다음 노드의 키(key)가 lowNode의 키(Key)보다 작거나 같으면, upperNode의 다음 노드가 꼬리(tail)이거나 upperNode의 다음 노드의 키(key)가 lowNode의 키(key)보다 큰지를 확인한다.
단계 S206에서, 지퍼 컴팩션 장치(100)는 upperNode의 다음 노드가 꼬리(tail)이거나 upperNode의 다음 노드의 키(key)가 lowNode의 키(key)보다 크지 않으면, (1) upperNode = upperNode.next[curLayer] 와 같이 upperSkipList의 다음 노드를 방문하고, (2) rightmost[curLayer] = upperNode 와 같이 현재 계층에서 upperNode를 가리켜야 하는 포인터를 rightmost 배열에 저장한다. 그리고 지퍼 컴팩션 장치(100)는 단계 S204를 수행한다.
단계 S207에서, 지퍼 컴팩션 장치(100)는 upperNode의 다음 노드가 꼬리(tail)이거나 upperNode의 다음 노드의 키(key)가 lowNode의 키(key)보다 크면, curLayer = curLayer - 1 과 같이 다음 계층을 탐색한다. 그리고 지퍼 컴팩션 장치(100)는 단계 S204를 수행한다.
한편, 단계 S208에서, 지퍼 컴팩션 장치(100)는 curLayer가 0이 아니거나 upperNode의 다음 노드의 키(key)가 lowNode의 키(Key)보다 크면, lowNode와 lowNode를 가리켜야 하는 rightmost[] 포인터들을 스택에 저장한다.
단계 S209에서, 지퍼 컴팩션 장치(100)는 (1) lowNode = lowNode.next[0] 와 같이 lowNode의 다음 노드를 lowNode로 지정하고, (2) upperNode = rightmost[MaxLayer] 와 같이 upperNode 를 최상위 계층으로 설정하고, (3) curLayer = MaxLayer 와 같이 현재 레벨을 최상위 계층으로 설정한다. 그리고 지퍼 컴팩션 장치(100)는 단계 S203을 수행한다.
이후, 단계 S204에서, 지퍼 컴팩션 장치(100)는 lowNode가 NULL이면, 도 12에 도시된 병합 단계(Merge Phase)를 수행한다.
한편, 도 12에 도시된 바와 같이, 단계 S301에서, 지퍼 컴팩션 장치(100)는 병합 단계를 시작한다.
단계 S302에서, 지퍼 컴팩션 장치(100)는 스택이 비어 있는지를 확인한다.
단계 S303에서, 지퍼 컴팩션 장치(100)는 스택이 비어 있지 않으면, (1) (lowNode, rightmost[]) 를 스택에서 꺼내고, (2) h (계층)을 가장 낮은 계층 0으로 설정한다.
단계 S304에서, 지퍼 컴팩션 장치(100)는 h가 lowNode의 최상위 계층인지를 확인한다.
단계 S305에서, 지퍼 컴팩션 장치(100)는 h가 lowNode의 최상위 계층이 아니면, rightmost[h]의 다음 노드의 키가 lowNode의 다음 노드의 키보다 작은 지를 확인한다. 지퍼 컴팩션 장치(100)는 h가 lowNode의 최상위 계층이면, 단계 S302를 수행한다.
단계 S306에서, 지퍼 컴팩션 장치(100)는 rightmost[h]의 다음 노드의 키가 lowNode의 다음 노드의 키보다 작으면, (1) lowNode.next[h] = rightmost[h].next, (2) Rightmost[h].next = lowNode, (3) h=h+1 와 같이 수행하고, 단계 S304를 수행한다. 지퍼 컴팩션 장치(100)는 rightmost[h]의 다음 노드의 키가 lowNode의 다음 노드의 키보다 작지 않으면, 단계 S304를 수행한다.
한편, 단계 S307에서, 지퍼 컴팩션 장치(100)는 스택이 비어 있으면, 병합 단계를 종료한다.
한편, 프로세서에 의해 실행될 때, 상기 프로세서로 하여금 방법을 실행하게 하는 명령어들을 저장하기 위한 비일시적 컴퓨터 판독가능 저장 매체로서, 상기 방법은: 제1 스킵리스트의 노드를 머리부터 꼬리까지 차례대로 제2 스킵리스트에 삽입할 위치를 찾아 위치 정보를 스택에 차례대로 저장하는 스캔 단계; 및 상기 저장된 위치 정보를 이용하여 상기 제1 스킵리스트의 노드를 꼬리부터 머리까지 제2 스킵리스트에 차례대로 병합하는 단계를 포함하는, 비일시적 컴퓨터 판독 가능한 저장 매체가 제공될 수 있다.
한편, 본 발명의 일 실시예에 따르면, 이상에서 설명된 다양한 실시예들은 기기(machine)(예: 컴퓨터)로 읽을 수 있는 저장 매체(machine-readable storage media)에 저장된 명령어를 포함하는 소프트웨어로 구현될 수 있다. 기기는, 저장 매체로부터 저장된 명령어를 호출하고, 호출된 명령어에 따라 동작이 가능한 장치로서, 개시된 실시예들에 따른 전자 장치(예: 전자 장치(A))를 포함할 수 있다. 명령이 프로세서에 의해 실행될 경우, 프로세서가 직접, 또는 프로세서의 제어 하에 다른 구성요소들을 이용하여 명령에 해당하는 기능을 수행할 수 있다. 명령은 컴파일러 또는 인터프리터에 의해 생성 또는 실행되는 코드를 포함할 수 있다. 기기로 읽을 수 있는 저장매체는, 비일시적(non-transitory) 저장매체의 형태로 제공될 수 있다. 여기서, '비일시적'은 저장매체가 신호(signal)를 포함하지 않으며 실재(tangible)한다는 것을 의미할 뿐 데이터가 저장매체에 반영구적 또는 임시적으로 저장됨을 구분하지 않는다.
또한, 본 발명의 일 실시예에 따르면, 이상에서 설명된 다양한 실시예들에 따른 방법은 컴퓨터 프로그램 제품(computer program product)에 포함되어 제공될 수 있다. 컴퓨터 프로그램 제품은 상품으로서 판매자 및 구매자 간에 거래될 수 있다. 컴퓨터 프로그램 제품은 기기로 읽을 수 있는 저장 매체(예: compact disc read only memory (CD-ROM))의 형태로, 또는 어플리케이션 스토어(예: 플레이 스토어TM)를 통해 온라인으로 배포될 수 있다. 온라인 배포의 경우에, 컴퓨터 프로그램 제품의 적어도 일부는 제조사의 서버, 어플리케이션 스토어의 서버, 또는 중계 서버의 메모리와 같은 저장 매체에 적어도 일시 저장되거나, 임시적으로 생성될 수 있다.
또한, 본 발명의 일 실시예에 따르면, 이상에서 설명된 다양한 실시예들은 소프트웨어(software), 하드웨어(hardware) 또는 이들의 조합을 이용하여 컴퓨터(computer) 또는 이와 유사한 장치로 읽을 수 있는 기록 매체 내에서 구현될 수 있다. 일부 경우에 있어 본 명세서에서 설명되는 실시예들이 프로세서 자체로 구현될 수 있다. 소프트웨어적인 구현에 의하면, 본 명세서에서 설명되는 절차 및 기능과 같은 실시예들은 별도의 소프트웨어 모듈들로 구현될 수 있다. 소프트웨어 모듈들 각각은 본 명세서에서 설명되는 하나 이상의 기능 및 동작을 수행할 수 있다.
한편, 상술한 다양한 실시예들에 따른 기기의 프로세싱 동작을 수행하기 위한 컴퓨터 명령어(computer instructions)는 비일시적 컴퓨터 판독 가능 매체(non-transitory computer-readable medium)에 저장될 수 있다. 이러한 비일시적 컴퓨터 판독 가능 매체에 저장된 컴퓨터 명령어는 특정 기기의 프로세서에 의해 실행되었을 때 상술한 다양한 실시예에 따른 기기에서의 처리 동작을 특정 기기가 수행하도록 한다. 비일시적 컴퓨터 판독 가능 매체란 레지스터, 캐쉬, 메모리 등과 같이 짧은 순간 동안 데이터를 저장하는 매체가 아니라 반영구적으로 데이터를 저장하며, 기기에 의해 판독(reading)이 가능한 매체를 의미한다. 비일시적 컴퓨터 판독 가능 매체의 구체적인 예로는, CD, DVD, 하드 디스크, 블루레이 디스크, USB, 메모리카드, ROM 등이 있을 수 있다.
또한, 상술한 다양한 실시예들에 따른 구성 요소(예: 모듈 또는 프로그램) 각각은 단수 또는 복수의 개체로 구성될 수 있으며, 전술한 해당 서브 구성 요소들 중 일부 서브 구성 요소가 생략되거나, 또는 다른 서브 구성 요소가 다양한 실시예에 더 포함될 수 있다. 대체적으로 또는 추가적으로, 일부 구성 요소들(예: 모듈 또는 프로그램)은 하나의 개체로 통합되어, 통합되기 이전의 각각의 해당 구성 요소에 의해 수행되는 기능을 동일 또는 유사하게 수행할 수 있다. 다양한 실시예들에 따른, 모듈, 프로그램 또는 다른 구성 요소에 의해 수행되는 동작들은 순차적, 병렬적, 반복적 또는 휴리스틱하게 실행되거나, 적어도 일부 동작이 다른 순서로 실행되거나, 생략되거나, 또는 다른 동작이 추가될 수 있다.
이상에서는 본 발명의 바람직한 실시예에 대하여 도시하고 설명하였지만, 본 발명은 상술한 특정의 실시예에 한정되지 아니하며, 청구범위에서 청구하는 본 발명의 요지를 벗어남이 없이 당해 개시에 속하는 기술분야에서 통상의 지식을 가진 자에 의해 다양한 변형실시가 가능한 것은 물론이고, 이러한 변형실시들은 본 발명의 기술적 사상이나 전망으로부터 개별적으로 이해되어져서는 안될 것이다.
100: 지퍼 컴팩션 장치
110: 제1 메모리
120: 제2 메모리
130: 프로세서

Claims (21)

  1. 지퍼 컴팩션 장치에 의해 수행되는 지퍼 컴팩션 방법에 있어서,
    제1 스킵리스트의 노드를 머리부터 꼬리까지 차례대로 제2 스킵리스트에 삽입할 위치를 찾아 위치 정보를 스택에 차례대로 저장하는 스캔 단계; 및
    상기 저장된 위치 정보를 이용하여 상기 제1 스킵리스트의 노드를 꼬리부터 머리까지 제2 스킵리스트에 차례대로 병합하는 단계를 포함하고,
    상기 스캔 단계에서, 최하단 계층 포인터를 따라 상기 제1 스킵리스트를 탐색하여 상기 제1 스킵리스트의 노드를 제2 스킵리스트에 삽입할 위치 정보를 스택에 저장하는, 복수의 스킵리스트를 병합하기 위한 지퍼 컴팩션 방법.
  2. 삭제
  3. 지퍼 컴팩션 장치에 의해 수행되는 지퍼 컴팩션 방법에 있어서,
    제1 스킵리스트의 노드를 머리부터 꼬리까지 차례대로 제2 스킵리스트에 삽입할 위치를 찾아 위치 정보를 스택에 차례대로 저장하는 스캔 단계; 및
    상기 저장된 위치 정보를 이용하여 상기 제1 스킵리스트의 노드를 꼬리부터 머리까지 제2 스킵리스트에 차례대로 병합하는 단계를 포함하고,
    상기 스캔 단계는, 상기 제1 스킵리스트를 탐색하면서 삽입할 노드에서 각 계층의 포인터가 업데이트가 필요하면, 삽입할 제1 스킵리스트의 노드와 포인터 정보를 스택에 저장하는, 복수의 스킵리스트를 병합하기 위한 지퍼 컴팩션 방법.
  4. 지퍼 컴팩션 장치에 의해 수행되는 지퍼 컴팩션 방법에 있어서,
    제1 스킵리스트의 노드를 머리부터 꼬리까지 차례대로 제2 스킵리스트에 삽입할 위치를 찾아 위치 정보를 스택에 차례대로 저장하는 스캔 단계; 및
    상기 저장된 위치 정보를 이용하여 상기 제1 스킵리스트의 노드를 꼬리부터 머리까지 제2 스킵리스트에 차례대로 병합하는 단계를 포함하고,
    상기 스캔 단계는, 제1 스킵리스트의 최하단 계층의 포인터를 따라 다음 노드를 방문하고 제2 스킵리스트에서 다음 노드를 삽입할 위치를 탐색하는, 복수의 스킵리스트를 병합하기 위한 지퍼 컴팩션 방법.
  5. 지퍼 컴팩션 장치에 의해 수행되는 지퍼 컴팩션 방법에 있어서,
    제1 스킵리스트의 노드를 머리부터 꼬리까지 차례대로 제2 스킵리스트에 삽입할 위치를 찾아 위치 정보를 스택에 차례대로 저장하는 스캔 단계; 및
    상기 저장된 위치 정보를 이용하여 상기 제1 스킵리스트의 노드를 꼬리부터 머리까지 제2 스킵리스트에 차례대로 병합하는 단계를 포함하고,
    상기 스캔 단계는, 이전에 검색한 노드의 키 값이 현재에 검색한 노드의 키 값 보다 작으면, 헤드에서부터 검색하는 대신 가장 높은 계층의 이전 노드부터 다시 검색하는, 복수의 스킵리스트를 병합하기 위한 지퍼 컴팩션 방법.
  6. 지퍼 컴팩션 장치에 의해 수행되는 지퍼 컴팩션 방법에 있어서,
    제1 스킵리스트의 노드를 머리부터 꼬리까지 차례대로 제2 스킵리스트에 삽입할 위치를 찾아 위치 정보를 스택에 차례대로 저장하는 스캔 단계; 및
    상기 저장된 위치 정보를 이용하여 상기 제1 스킵리스트의 노드를 꼬리부터 머리까지 제2 스킵리스트에 차례대로 병합하는 단계를 포함하고,
    상기 병합하는 단계는, 상기 스택에 저장된 위치 정보를 꺼내어 이용하여 상기 제1 스킵리스트의 노드를 최하단 포인터부터 제2 스킵리스트에 병합하는, 복수의 스킵리스트를 병합하기 위한 지퍼 컴팩션 방법.
  7. 지퍼 컴팩션 장치에 의해 수행되는 지퍼 컴팩션 방법에 있어서,
    제1 스킵리스트의 노드를 머리부터 꼬리까지 차례대로 제2 스킵리스트에 삽입할 위치를 찾아 위치 정보를 스택에 차례대로 저장하는 스캔 단계; 및
    상기 저장된 위치 정보를 이용하여 상기 제1 스킵리스트의 노드를 꼬리부터 머리까지 제2 스킵리스트에 차례대로 병합하는 단계를 포함하고,
    상기 병합하는 단계는, 상기 제1 스킵리스트의 노드의 최하단 계층 포인터를 업데이트한 이후 상기 제1 스킵리스트의 노드의 상위 계층 포인터를 제2 스킵리스트의 노드를 가리키도록 업데이트하는, 복수의 스킵리스트를 병합하기 위한 지퍼 컴팩션 방법.
  8. 지퍼 컴팩션 장치에 의해 수행되는 지퍼 컴팩션 방법에 있어서,
    제1 스킵리스트의 노드를 머리부터 꼬리까지 차례대로 제2 스킵리스트에 삽입할 위치를 찾아 위치 정보를 스택에 차례대로 저장하는 스캔 단계; 및
    상기 저장된 위치 정보를 이용하여 상기 제1 스킵리스트의 노드를 꼬리부터 머리까지 제2 스킵리스트에 차례대로 병합하는 단계를 포함하고,
    상기 병합하는 단계는, 상기 제1 스킵리스트의 노드의 최상위 계층을 제2 스킵리스트의 꼬리 부분을 가리키도록 업데이트하는, 복수의 스킵리스트를 병합하기 위한 지퍼 컴팩션 방법.
  9. 지퍼 컴팩션 장치에 의해 수행되는 지퍼 컴팩션 방법에 있어서,
    제1 스킵리스트의 노드를 머리부터 꼬리까지 차례대로 제2 스킵리스트에 삽입할 위치를 찾아 위치 정보를 스택에 차례대로 저장하는 스캔 단계; 및
    상기 저장된 위치 정보를 이용하여 상기 제1 스킵리스트의 노드를 꼬리부터 머리까지 제2 스킵리스트에 차례대로 병합하는 단계를 포함하고,
    읽기 트랜잭션이 제1 스킵리스트를 검색하다가 일시적으로 중단되었고 다시 재개되면, 읽기 쓰레드는 현재 검색하는 스킵리스트를 제1 스킵리스트로 인지하고, 검색하는 노드를 찾지 못할 경우 병합이 진행중인 또는 병합이 끝난 제2 스킵리스트에서 탐색을 다시 시작하는 단계를 더 포함하는, 복수의 스킵리스트를 병합하기 위한 지퍼 컴팩션 방법.
  10. 지퍼 컴팩션 장치에 의해 수행되는 지퍼 컴팩션 방법에 있어서,
    제1 스킵리스트의 노드를 머리부터 꼬리까지 차례대로 제2 스킵리스트에 삽입할 위치를 찾아 위치 정보를 스택에 차례대로 저장하는 스캔 단계; 및
    상기 저장된 위치 정보를 이용하여 상기 제1 스킵리스트의 노드를 꼬리부터 머리까지 제2 스킵리스트에 차례대로 병합하는 단계를 포함하고,
    상기 제1 스킵리스트의 모든 노드를 제2 스킵리스트에 병합하면 상기 제1 스킵리스트는 머리 노드와 꼬리 노드만을 가진 빈 스킵리스트가 되어, 상기 제1 스킵리스트를 삭제하는 단계를 더 포함하는, 복수의 스킵리스트를 병합하기 위한 지퍼 컴팩션 방법.
  11. 제1 스킵리스트와 제2 스킵리스트를 저장하는 제1 메모리;
    영구 메모리에서 지퍼 컴팩션(Zipper Compaction)과 관련된 하나 이상의 프로그램을 저장하는 제2 메모리; 및
    상기 저장된 하나 이상의 프로그램을 실행하는 프로세서를 포함하고,
    상기 프로세서는, 상기 제1 메모리에서 제1 스킵리스트의 노드를 머리부터 꼬리까지 차례대로 제2 스킵리스트에 삽입할 위치를 찾아 위치 정보를 스택에 차례대로 저장하고,
    상기 저장된 위치 정보를 이용하여 상기 제1 스킵리스트의 노드를 꼬리부터 머리까지 제2 스킵리스트에 차례대로 병합하고,
    최하단 계층 포인터를 따라 상기 제1 스킵리스트를 탐색하여 상기 제1 스킵리스트의 노드를 제2 스킵리스트에 삽입할 위치 정보를 스택에 저장하는, 복수의 스킵리스트를 병합하기 위한 지퍼 컴팩션 장치.
  12. 삭제
  13. 제1 스킵리스트와 제2 스킵리스트를 저장하는 제1 메모리;
    영구 메모리에서 지퍼 컴팩션(Zipper Compaction)과 관련된 하나 이상의 프로그램을 저장하는 제2 메모리; 및
    상기 저장된 하나 이상의 프로그램을 실행하는 프로세서를 포함하고,
    상기 프로세서는, 상기 제1 메모리에서 제1 스킵리스트의 노드를 머리부터 꼬리까지 차례대로 제2 스킵리스트에 삽입할 위치를 찾아 위치 정보를 스택에 차례대로 저장하고,
    상기 저장된 위치 정보를 이용하여 상기 제1 스킵리스트의 노드를 꼬리부터 머리까지 제2 스킵리스트에 차례대로 병합하는, 복수의 스킵리스트를 병합하고,
    상기 제1 스킵리스트를 탐색하면서 삽입할 노드에서 각 계층의 포인터가 업데이트가 필요하면, 삽입할 제1 스킵리스트의 노드와 포인터 정보를 스택에 저장하는, 복수의 스킵리스트를 병합하기 위한 지퍼 컴팩션 장치.
  14. 제1 스킵리스트와 제2 스킵리스트를 저장하는 제1 메모리;
    영구 메모리에서 지퍼 컴팩션(Zipper Compaction)과 관련된 하나 이상의 프로그램을 저장하는 제2 메모리; 및
    상기 저장된 하나 이상의 프로그램을 실행하는 프로세서를 포함하고,
    상기 프로세서는, 상기 제1 메모리에서 제1 스킵리스트의 노드를 머리부터 꼬리까지 차례대로 제2 스킵리스트에 삽입할 위치를 찾아 위치 정보를 스택에 차례대로 저장하고,
    상기 저장된 위치 정보를 이용하여 상기 제1 스킵리스트의 노드를 꼬리부터 머리까지 제2 스킵리스트에 차례대로 병합하는, 복수의 스킵리스트를 병합하고,
    제1 스킵리스트의 최하단 계층의 포인터를 따라 다음 노드를 방문하고 제2 스킵리스트에서 다음 노드를 삽입할 위치를 탐색하는, 복수의 스킵리스트를 병합하기 위한 지퍼 컴팩션 장치.
  15. 제1 스킵리스트와 제2 스킵리스트를 저장하는 제1 메모리;
    영구 메모리에서 지퍼 컴팩션(Zipper Compaction)과 관련된 하나 이상의 프로그램을 저장하는 제2 메모리; 및
    상기 저장된 하나 이상의 프로그램을 실행하는 프로세서를 포함하고,
    상기 프로세서는, 상기 제1 메모리에서 제1 스킵리스트의 노드를 머리부터 꼬리까지 차례대로 제2 스킵리스트에 삽입할 위치를 찾아 위치 정보를 스택에 차례대로 저장하고,
    상기 저장된 위치 정보를 이용하여 상기 제1 스킵리스트의 노드를 꼬리부터 머리까지 제2 스킵리스트에 차례대로 병합하는, 복수의 스킵리스트를 병합하고,
    이전에 검색한 노드의 키 값이 현재에 검색한 노드의 키 값 보다 작으면, 헤드에서부터 검색하는 대신 가장 높은 계층의 이전 노드부터 다시 검색하는, 복수의 스킵리스트를 병합하기 위한 지퍼 컴팩션 장치.
  16. 제1 스킵리스트와 제2 스킵리스트를 저장하는 제1 메모리;
    영구 메모리에서 지퍼 컴팩션(Zipper Compaction)과 관련된 하나 이상의 프로그램을 저장하는 제2 메모리; 및
    상기 저장된 하나 이상의 프로그램을 실행하는 프로세서를 포함하고,
    상기 프로세서는, 상기 제1 메모리에서 제1 스킵리스트의 노드를 머리부터 꼬리까지 차례대로 제2 스킵리스트에 삽입할 위치를 찾아 위치 정보를 스택에 차례대로 저장하고,
    상기 저장된 위치 정보를 이용하여 상기 제1 스킵리스트의 노드를 꼬리부터 머리까지 제2 스킵리스트에 차례대로 병합하는, 복수의 스킵리스트를 병합하고,
    상기 스택에 저장된 위치 정보를 꺼내어 이용하여 상기 제1 스킵리스트의 노드를 최하단 포인터부터 제2 스킵리스트에 병합하는, 복수의 스킵리스트를 병합하기 위한 지퍼 컴팩션 장치.
  17. 제1 스킵리스트와 제2 스킵리스트를 저장하는 제1 메모리;
    영구 메모리에서 지퍼 컴팩션(Zipper Compaction)과 관련된 하나 이상의 프로그램을 저장하는 제2 메모리; 및
    상기 저장된 하나 이상의 프로그램을 실행하는 프로세서를 포함하고,
    상기 프로세서는, 상기 제1 메모리에서 제1 스킵리스트의 노드를 머리부터 꼬리까지 차례대로 제2 스킵리스트에 삽입할 위치를 찾아 위치 정보를 스택에 차례대로 저장하고,
    상기 저장된 위치 정보를 이용하여 상기 제1 스킵리스트의 노드를 꼬리부터 머리까지 제2 스킵리스트에 차례대로 병합하는, 복수의 스킵리스트를 병합하고,
    상기 제1 스킵리스트의 노드의 최하단 계층 포인터를 업데이트한 이후 상기 제1 스킵리스트의 노드의 상위 계층 포인터를 제2 스킵리스트의 노드를 가리키도록 업데이트하는, 복수의 스킵리스트를 병합하기 위한 지퍼 컴팩션 장치.
  18. 제1 스킵리스트와 제2 스킵리스트를 저장하는 제1 메모리;
    영구 메모리에서 지퍼 컴팩션(Zipper Compaction)과 관련된 하나 이상의 프로그램을 저장하는 제2 메모리; 및
    상기 저장된 하나 이상의 프로그램을 실행하는 프로세서를 포함하고,
    상기 프로세서는, 상기 제1 메모리에서 제1 스킵리스트의 노드를 머리부터 꼬리까지 차례대로 제2 스킵리스트에 삽입할 위치를 찾아 위치 정보를 스택에 차례대로 저장하고,
    상기 저장된 위치 정보를 이용하여 상기 제1 스킵리스트의 노드를 꼬리부터 머리까지 제2 스킵리스트에 차례대로 병합하는, 복수의 스킵리스트를 병합하고,
    상기 제1 스킵리스트의 노드의 최상위 계층을 제2 스킵리스트의 꼬리 부분을 가리키도록 업데이트하는, 복수의 스킵리스트를 병합하기 위한 지퍼 컴팩션 장치.
  19. 제1 스킵리스트와 제2 스킵리스트를 저장하는 제1 메모리;
    영구 메모리에서 지퍼 컴팩션(Zipper Compaction)과 관련된 하나 이상의 프로그램을 저장하는 제2 메모리; 및
    상기 저장된 하나 이상의 프로그램을 실행하는 프로세서를 포함하고,
    상기 프로세서는, 상기 제1 메모리에서 제1 스킵리스트의 노드를 머리부터 꼬리까지 차례대로 제2 스킵리스트에 삽입할 위치를 찾아 위치 정보를 스택에 차례대로 저장하고,
    상기 저장된 위치 정보를 이용하여 상기 제1 스킵리스트의 노드를 꼬리부터 머리까지 제2 스킵리스트에 차례대로 병합하는, 복수의 스킵리스트를 병합하고,
    읽기 트랜잭션이 제1 스킵리스트를 검색하다가 일시적으로 중단되었고 다시 재개되면, 읽기 쓰레드는 현재 검색하는 스킵리스트를 제1 스킵리스트로 인지하고, 검색하는 노드를 찾지 못할 경우 병합이 진행중인 또는 병합이 끝난 제2 스킵리스트에서 탐색을 다시 시작하는, 복수의 스킵리스트를 병합하기 위한 지퍼 컴팩션 장치.
  20. 제1 스킵리스트와 제2 스킵리스트를 저장하는 제1 메모리;
    영구 메모리에서 지퍼 컴팩션(Zipper Compaction)과 관련된 하나 이상의 프로그램을 저장하는 제2 메모리; 및
    상기 저장된 하나 이상의 프로그램을 실행하는 프로세서를 포함하고,
    상기 프로세서는, 상기 제1 메모리에서 제1 스킵리스트의 노드를 머리부터 꼬리까지 차례대로 제2 스킵리스트에 삽입할 위치를 찾아 위치 정보를 스택에 차례대로 저장하고,
    상기 저장된 위치 정보를 이용하여 상기 제1 스킵리스트의 노드를 꼬리부터 머리까지 제2 스킵리스트에 차례대로 병합하는, 복수의 스킵리스트를 병합하고,
    상기 제1 스킵리스트의 모든 노드를 제2 스킵리스트에 병합하면 상기 제1 스킵리스트는 머리 노드와 꼬리 노드만을 가진 빈 스킵리스트가 되어, 상기 제1 스킵리스트를 삭제하는, 복수의 스킵리스트를 병합하기 위한 지퍼 컴팩션 장치.
  21. 프로세서에 의해 실행될 때, 상기 프로세서로 하여금 방법을 실행하게 하는 명령어들을 저장하기 위한 비일시적 컴퓨터 판독가능 저장 매체로서, 상기 방법은:
    제1 스킵리스트의 노드를 머리부터 꼬리까지 차례대로 제2 스킵리스트에 삽입할 위치를 찾아 위치 정보를 스택에 차례대로 저장하는 스캔 단계; 및
    상기 저장된 위치 정보를 이용하여 상기 제1 스킵리스트의 노드를 꼬리부터 머리까지 제2 스킵리스트에 차례대로 병합하는 단계를 포함하고,
    상기 스캔 단계에서, 최하단 계층 포인터를 따라 상기 제1 스킵리스트를 탐색하여 상기 제1 스킵리스트의 노드를 제2 스킵리스트에 삽입할 위치 정보를 스택에 저장하는, 비일시적 컴퓨터 판독 가능한 저장 매체.
KR1020210009759A 2021-01-22 2021-01-22 복수의 스킵리스트를 병합하기 위한 지퍼 컴팩션 방법 및 장치 KR102568662B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020210009759A KR102568662B1 (ko) 2021-01-22 2021-01-22 복수의 스킵리스트를 병합하기 위한 지퍼 컴팩션 방법 및 장치

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020210009759A KR102568662B1 (ko) 2021-01-22 2021-01-22 복수의 스킵리스트를 병합하기 위한 지퍼 컴팩션 방법 및 장치

Publications (2)

Publication Number Publication Date
KR20220106622A KR20220106622A (ko) 2022-07-29
KR102568662B1 true KR102568662B1 (ko) 2023-08-22

Family

ID=82606763

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020210009759A KR102568662B1 (ko) 2021-01-22 2021-01-22 복수의 스킵리스트를 병합하기 위한 지퍼 컴팩션 방법 및 장치

Country Status (1)

Country Link
KR (1) KR102568662B1 (ko)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120136871A1 (en) 2009-06-18 2012-05-31 Canon Kabushiki Kaisha Skip list generation
CN108182151A (zh) 2018-01-24 2018-06-19 北京百度网讯科技有限公司 顺序流缓存与检测的方法、装置、存储介质及终端设备
US20200067713A1 (en) 2015-06-02 2020-02-27 ALTR Solutions, Inc. Using a tree structure to segment and distribute records across one or more decentralized, acyclic graphs of cryptographic hash pointers
CN111221773A (zh) 2020-01-15 2020-06-02 华东师范大学 一种基于rmda高速网络和跳表的数据存储架构方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100892406B1 (ko) * 2007-05-16 2009-04-10 엔에이치엔(주) 정보 검색 방법 및 그 시스템
US9612975B2 (en) * 2014-11-20 2017-04-04 Samsung Electronics Co., Ltd. Page cache device and method for efficient mapping

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120136871A1 (en) 2009-06-18 2012-05-31 Canon Kabushiki Kaisha Skip list generation
US20200067713A1 (en) 2015-06-02 2020-02-27 ALTR Solutions, Inc. Using a tree structure to segment and distribute records across one or more decentralized, acyclic graphs of cryptographic hash pointers
CN108182151A (zh) 2018-01-24 2018-06-19 北京百度网讯科技有限公司 顺序流缓存与检测的方法、装置、存储介质及终端设备
CN111221773A (zh) 2020-01-15 2020-06-02 华东师范大学 一种基于rmda高速网络和跳表的数据存储架构方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
STANISLAWSKI Jerzy, et al, "Machine learning methods can replace 3D profile method in classification of amyloidogenic hexapeptides", BMC Bioinformatics 2013 1부.*

Also Published As

Publication number Publication date
KR20220106622A (ko) 2022-07-29

Similar Documents

Publication Publication Date Title
CN110287044B (zh) 无锁共享内存处理方法、装置、电子设备及可读存储介质
CN1026631C (zh) 利用索引树对数据库记录进行并发存取的方法
JP5339507B2 (ja) 木構造を探索する方法
US8666952B2 (en) Optimized deletion and insertion for high-performance resizable RCU-protected hash tables
US8239343B2 (en) Database reorganization technique
CN110990404A (zh) 一种索引数据的处理方法、装置及电子设备
US8682941B2 (en) Database apparatus
CN111316255B (zh) 数据存储系统以及用于提供数据存储系统的方法
JP4825719B2 (ja) 高速ファイル属性検索
US20070255771A1 (en) Method and system for renewing an index
CN113392089B (zh) 一种数据库索引优化方法及可读存储介质
US20140320498A1 (en) Terminal device, information processing method, and computer program product
KR102568662B1 (ko) 복수의 스킵리스트를 병합하기 위한 지퍼 컴팩션 방법 및 장치
US20140325271A1 (en) Terminal device, information processing method, and computer program product
US11625386B2 (en) Fast skip list purge
US20060224600A1 (en) Traversal of empty regions in a searchable data structure
JP4279346B2 (ja) データベース管理装置及びプログラム
TWI852325B (zh) 資訊處理裝置及資訊處理方法
US20230237035A1 (en) Fast Skip-List Scan and Insert
JP2007323153A (ja) インデックスファイル検索装置、検索方法、検索プログラム及びこれを記録した記録媒体
JP3622443B2 (ja) T木インデックス構築方法及び装置及びt木インデックス構築プログラムを格納した記憶媒体
JP3016255B2 (ja) データベース管理システム
JP2604787B2 (ja) 二次元データ格納方式
JP2008015810A (ja) 複数列の表データにおけるインデクス分割管理方法
CN117667860A (zh) 一种对象存储中清空桶的方法、装置、设备及存储介质

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
AMND Amendment
E601 Decision to refuse application
AMND Amendment
X701 Decision to grant (after re-examination)
GRNT Written decision to grant