KR102404174B1 - 비관계형 데이터베이스 관리 시스템의 메모리 자료구조, 노드를 삽입하는 방법 및 범위 질의를 처리하는 방법 - Google Patents

비관계형 데이터베이스 관리 시스템의 메모리 자료구조, 노드를 삽입하는 방법 및 범위 질의를 처리하는 방법 Download PDF

Info

Publication number
KR102404174B1
KR102404174B1 KR1020190162974A KR20190162974A KR102404174B1 KR 102404174 B1 KR102404174 B1 KR 102404174B1 KR 1020190162974 A KR1020190162974 A KR 1020190162974A KR 20190162974 A KR20190162974 A KR 20190162974A KR 102404174 B1 KR102404174 B1 KR 102404174B1
Authority
KR
South Korea
Prior art keywords
node
key
parent
child
data structure
Prior art date
Application number
KR1020190162974A
Other languages
English (en)
Other versions
KR102404174B9 (ko
KR20210072554A (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 KR1020190162974A priority Critical patent/KR102404174B1/ko
Publication of KR20210072554A publication Critical patent/KR20210072554A/ko
Application granted granted Critical
Publication of KR102404174B1 publication Critical patent/KR102404174B1/ko
Publication of KR102404174B9 publication Critical patent/KR102404174B9/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9024Graphs; Linked lists
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures

Landscapes

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

Abstract

본 발명의 일 실시예에 따른 비관계형 데이터베이스 관리 시스템의 메모리 자료구조는, 헤드 노드; 테일 노드; 헤드 노드와 테일 노드 사이에 배치되고, 각각 고유한 키를 갖고, 키에 따라 정렬되는 복수개의 부모 노드; 및 상기 부모 노드와 동일한 키를 갖고 부모 노드 앞에 배치되는 자식 노드를 포함하고, 상기 부모 노드 및 자식 노드는 각각 다음 진행 노드를 가리키는 하나 이상의 넥스트 포인터를 포함하고, 상기 자식 노드는 부모 노드를 가리키는 스트라이드 포인터(stride point)를 포함하는 것을 특징으로 한다.

Description

비관계형 데이터베이스 관리 시스템의 메모리 자료구조, 노드를 삽입하는 방법 및 범위 질의를 처리하는 방법{DATA STRUCTURES FOR NOSQL, INSERTING METHOD FOR NODES, AND PROCESSING METHOD FOR RANGE QUERIES}
본 발명은 비관계형 데이터베이스 관리 시스템의 메모리 자료구조, 노드를 삽입하는 방법 및 범위 질의를 처리하는 방법에 관한 것이다.
IT기술이 사회 전 분야에 깊숙이 침투함에 따라 최근 다양한 형태의 데이터가 급속도로 발생하고 있다. 기존의 데이터 저장 시스템은 정형화된 데이터 처리를 위해 설계되어, 동영상, 텍스트, 이미지 등 다양한 형태로 등장하고 있는 최근의 데이터를 관리하기에는 적절하지 않다. 이에 데이터를 단순한 구조로 저장하는 NoSQL 시스템에 최근 각광을 받고 있다.
이러한 NoSQL 시스템에서 메모리 자료 구조로 활용되는 스킵 리스트는 특정(max) 값까지의 레벨 속성을 갖는 정렬된 리스트들(sorted linked lists)로 구성되는데, 신규 노드(node)가 추가될 때 임의의 레벨(level) 값을 부여하고 상기 레벨 값에 해당하는 리스트와 하위 레벨의 리스트(들)에 신규 노드를 추가하는 방법으로 데이터를 관리한다. 상기와 같이 관리된 리스트들을 통해, 스킵 리스트 자료구조는, 노드의 삽입 순서와 관계없이, 밸런싱된 트리기반 자료구조와 유사한 검색 속도를 확률적으로 보장한다.
또한 스킵 리스트 및 여타 자료구조들을 실제 구현하여, 스킵 리스트 자료구조가 다른 트리 기반 자료구조들과 유사하거나 앞선 (검색/삽입/삭제) 성능을 보여준다고 한다. 스킵 리스트 자료구조의 가장 큰 장점은 알고리즘 구현이 다른 알고리즘에 비해 월등히 쉬우면서도 괜찮은 성능을 제공할 수 있다는 것이다.
그러나, 현재 데이터 저장 시스템에서 활용되는 스킵 리스트는 다중 버전 동시실행성 제어(Multi-version Concurrency Control)을 지원하고자 업데이트 발생 시 기존 데이터를 덮어쓰지 않고 새로운 데이터를 추가적으로 삽입하는데 이러한 구조적인 특성 때문에 범위 질의(Range Query) 나 스캔(Scan) 연산에서 데이터의 업데이트가 다수 발생할 때 성능이 현저하게 저하된다는 문제점이 있다.
상기의 문제점을 해결하기 위해 본 발명에서는 스킵 리스트 자료구조보다 탐색 속도가 향상된 새로운 자료구조를 제공하는데 있다.
본 발명이 해결하고자 하는 과제는 이상에서 언급한 과제로 제한되지 않으며, 언급되지 않은 또 다른 과제(들)은 아래의 기재로부터 당업자에게 명확하게 이해될 수 있을 것이다.
상술한 목적을 달성하기 위한 본 발명의 일 실시예에 따른 비관계형 데이터베이스 관리 시스템의 메모리 자료구조는, 헤드 노드; 테일 노드; 헤드 노드와 테일 노드 사이에 배치되고, 각각 고유한 키를 갖고, 키에 따라 정렬되는 복수개의 부모 노드; 및 상기 부모 노드와 동일한 키를 갖고 부모 노드 앞에 배치되는 자식 노드를 포함하고, 상기 부모 노드 및 자식 노드는 각각 다음 진행 노드를 가리키는 하나 이상의 넥스트 포인터를 포함하고, 상기 자식 노드는 부모 노드를 가리키는 스트라이드 포인터(stride point)를 포함하는 것을 특징으로 한다.
부모 노드 및 자식 노드는 각각 랜덤한 수의 넥스트 포인터를 갖는 것을 특징으로 한다.
상기 헤드 노드는 상기 부모 노드와 자식 노드가 포함하는 넥스트 포인터 수 이상의 수의 넥스트 포인터를 갖는 것을 특징으로 한다.
상기 자식 노드를 갖는 부모 노드는 null을 키값으로 하는 스트라이드 포인터를 갖는 것을 특징으로 한다.
상기 스트라이드 포인터는 동일한 노드의 넥스트 포인터보다 하위에 위치되는 것을 특징으로 한다.
본 발명의 일 실시예에 따른 헤드 노드, 테일 노드, 헤드 노드와 테일 노드 사이에 배치되고 각각 고유한 키와 다음 노드를 가리키는 하나 이상의 넥스트 포인터를 갖고, 키에 따라 정렬되는 복수개의 부모 노드를 포함하는 비관계형 데이터베이스 관리 시스템의 메모리 자료구조에서 자식 노드를 삽입하는 방법으로서, 삽입되는 자식 노드의 키와 동일한 키를 갖는 부모 노드를 검색하는 단계; 상기 자식 노드를 상기 부모 노드 앞에 배치하는 단계; 상기 자식 노드에 랜덤한 수의 넥스트 포인터를 부여하는 단계; 상기 자식 노드에 상기 부모 노드를 가리키는 스트라이드 포인터(stride point)를 부여하는 단계를 포함한다.
상기 헤드 노드는 상기 부모 노드가 포함하는 넥스트 포인터 수 이상의 수의 넥스트 포인터를 갖고, 상기 자식 노드에 부여되는 넥스트 포인터의 수가 헤드 노드의 포인터의 수보다 높은 경우, 상기 헤드 노드의 포인터의 수를 상기 자식 노드에 부여되는 넥스트 포인터의 수 이상의 수의 넥스트 포인터를 추가하는 것을 특징으로 한다.
상기 자식 노드를 갖는 부모 노드에 null을 갖는 스트라이드 포인터를 추가하는 것을 특징으로 한다.
상기 자식 노드에 상기 부모 노드를 가리키는 스트라이드 포인터(stride point)를 부여하는 단계는, 상기 스트라이드 포인터를 상기 자식 노드의 넥스트 포인터보다 하위에 위치시키는 것을 특징으로 한다.
메모리 자료구조에서 자식 노드를 삽입하는 방법은 상기 자식 노드에 랜덤한 수의 넥스트 포인터를 부여하는 단계 이후에, 상기 자식 노드 보다 앞에 배치되는 부모 노드의 넥스트 포인터를 수정하는 단계를 더 포함하는 것을 특징으로 한다.
상기 자식 노드를 상기 부모 노드 앞에 배치하는 단계에서, 상기 부모 노드 앞에 상기 부모 노드와 동일키를 갖는 자식 노드가 이미 배치되어 있는 경우, 새로 배치되는 자식 노드는 이미 배치되어 있는 자식 노드 앞에 배치되는 것을 특징으로 한다.
본 발명의 일 실시예에 따른 헤드 노드, 테일 노드, 헤드 노드와 테일 노드 사이에 배치되고 각각 고유한 키와 다음 노드를 가리키는 하나 이상의 넥스트 포인터를 갖고, 키에 따라 정렬되는 복수개의 부모 노드를 포함하는 비관계형 데이터베이스 관리 시스템의 메모리 자료구조에서 범위 질의를 처리하는 방법은, 특정키 값을 포함하는 범위 질의를 요청하는 단계; 헤더의 가장 상위의 넥스트 포인터부터 검색을 시작하는 단계; 상기 특정키가 검색될 때까지 넥스트 포인터를 따라 노드를 이동하는 단계; 이동된 노드에서 상기 특정키가 검색되면, 해당 노드의 데이터를 확인하고, 다음 검색키가 존재하는지를 확인하는 단계; 및 다음 검색키가 존재하지 않는 경우, 범위 질의 처리를 종료하는 단계를 포함한다.
상기 다음 검색키가 존재하는 경우, 다음 검색키가 검색될 때까지 넥스트 포인터를 따라 노드를 이동하는 단계로 되돌아가되, 상기 다음 검색키가 검색된 노드가 스트라이드 포인터를 갖는 경우, 스트라이드 포인터를 따라 노드를 이동하는 것을 특징으로 한다.
상기 특정키가 검색되면, 키의 타임스탬프를 통해, 노드의 버전을 확인하는 것을 특징으로 한다.
본 발명에 따른 특정 범위 데이터의 검색 속도 향상을 위한 스트라이드 스킵 리스트에서 빠른 검색이 가능한 자료구조를 제공하는 효과를 제공한다.
도 1은 비관계형 데이터베이스 관리 시스템에서 사용되는 스킵 리스트의 자료구조를 설명하기 위한 도면이다.
도 2는 비관계형 데이터베이스 관리 시스템에서 사용되는 스킵 리스트에서 업데이트가 발생을 설명하기 위한 도면이다.
도 3은 본 발명의 일 실시예에 따른 NoSQL 컴퓨팅 시스템의 구성의 예시적인 블록도이다.
도 4는 본 발명의 일 실시예에 따른 스트라이드 스킵 리스트의 자료구조를 설명하기 위한 도면이다.
도 5는 본 발명의 일 실시예에 따른 비관계형 데이터베이스 관리 시스템의 메모리 자료구조에서 자식 노드를 삽입하는 방법을 설명하는 흐름도이다.
도 6은 도 4의 자료구조에서, 동일키에 대한 데이터가 업데이트 되어, 하나의 자식 노드가 추가된 자료구조이다.
도 7은 도 6의 자료구조에서 동일키에 대한 데이터가 업데이트 되어, 하나의 자식 노드가 추가된 자료구조이다.
도 8은 본 발명의 일 실시예에 따른 비관계형 데이터베이스 관리 시스템의 메모리 자료구조에서 범위 질의를 처리하는 방법을 설명하는 흐름도이다.
본 발명은 다양한 변경을 가할 수 있고 여러 가지 실시예를 가질 수 있는 바, 특정 실시예들을 도면을 참조하여 상세하게 설명하도록 한다. 그러나 이는 본 발명을 특정한 실시 형태에 대해 한정하려는 것이 아니며, 본 발명의 사상 및 기술 범위에 포함되는 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다. 각 도면을 설명하면서 유사한 참조부호를 유사한 구성요소에 대해 사용하였다.
제1, 제2, A, B 등의 용어는 다양한 구성요소들을 설명하는데 사용될 수 있지만, 상기 구성요소들은 상기 용어들에 의해 한정되어서는 안된다. 상기 용어들은 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로만 사용된다. 예를 들어, 본 발명의 권리범위를 벗어나지 않으면서 제1 구성요소는 제2 구성요소로 명명될 수 있고, 유사하게 제2 구성요소도 제1 구성요소로 명명될 수 있다. 및/또는 이라는 용어는 복수의 관련된 기재 항목들의 조합 또는 복수의 관련된 기재 항목들 중의 어느 항목을 포함한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가지고 있다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥 상 가지는 의미와 일치하는 의미를 가지는 것으로 해석되어야 하며, 본 출원에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
명세서 및 청구범위 전체에서, 어떤 부분이 어떤 구성 요소를 포함한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 구성 요소를 제외하는 것이 아니라 다른 구성 요소를 더 포함할 수 있다는 것을 의미한다.
본 발명의 일 실시예에서 설명하는 자료구조를 스트라이드(stride) 자료구조라고 한다.
본 발명의 일 실시예에 따른 스트라이드 자료구조 정의에 의해 동일한 키의 가장 오래된 버전을 가리키는 포인터를 스트라이드 포인터(stride Pointer)라고 한다.
이하, 첨부된 도면을 참조하여 본 발명에 대해 상세하게 설명한다.
도 1은 비관계형 데이터베이스 관리 시스템에서 사용되는 스킵 리스트의 자료구조를 설명하기 위한 도면이고, 도 2는 업데이트된 스킵 리스트에서 검색방법을 설명하기 위한 도면이다.
도 1 내지 도 2를 참조하면, 스킵 리스트는 키와 요소(element)쌍으로 되어 있는 리스트(노드)가 여러 레이어에 걸쳐 있는 형태이다. 각 레이어의 순서를 레벨이라고 한다. 최하위 레이어의 레벨은 1이 된다.
각 노드(node)는 하나 이상의 포인터를 가질 수 있으며, 왼쪽 첫번째의 노드를 특히 헤더 노드(header node)(110)라 칭한다. 검색(searching), 추가, 삭제의 연산 (operation)은 항상 헤더 노드(110)에서부터 시작된다.
헤더 노드(110)의 키(key)는 +∞이고, 마지막 노드(150)는 테일(tail)로서, 키(key)는 null이다. 헤더 노드(110)에서 테일 노드(150) 사이의 각 노드(120, 130, 140, 150)의 키는 임의의 순서(예를 들어 오름차순 또는 내림차순 등)로 정렬(sorting)됨을 알 수 있다.
설명의 편의를 위해, 3개의 노드가 각각 키-요소 쌍이 (이름, 사는 도시)를 갖는 것을 가정한다.
예를 들어, Amy는 캘리포니아(CA), Bob 은 텍사스(Tx), carol은 매사추세츠(Ma)에 살고 있다고 가정하면, 두 번째 노드(120)의 키는 Amy 이고, 세번째 노드(130)의 키는 Bob이고 네번째 노드(140)의 키는 Carol이 되며, 두 번째 노드(120)의 요소는 CA, 세번째 노드(130)의 요소는 Tx, 네번째 노드(140)의 요소는 Ma가 된다.
이 때, 동일키에 대하여 요소의 업데이트가 발생하는 경우, 스킵 리스트는 고병렬성을 지원하기 위해 업데이트가 발생한 키의 노드에 요소를 덮어쓰지 않고, 신규 노드를 삽입한다.
예컨대 Bob 이 텍사스(Tx)에서 캘리포니아(CA)로 이사간 경우, 세번째 노드(130)에 새로운 요소(캘리포니아)를 덮어쓰지 않고, 신규 노드(132)를 동일키를 갖는 세번째 노드(130) 앞에 삽입으로 처리한다. 이렇게 삽입 처리된 노드(132)의 키-요소 쌍은, (Bob, CA)가 된다.
이후, 동일키에 대하여 새로운 요소가 또 업데이트 하는 경우에도, 역시 업데이트가 발생한 키의 노드에 요소를 덮어쓰지 않고, 신규 노드를 삽입한다.
예컨대 Bob 이 캘리포니아(CA)에서 위스콘신(Wl)로 이사간 것을 업데이트 하는 경우, 신규 노드(134)를 동일키를 갖는 노드(132) 앞에 삽입 처리한다. 이렇게 삽입 처리된 노드(134)의 키-요소 쌍은, (Bob, Wl)가 된다.
그 결과 스킵 리스트는 Bob 이라는 동일한 키에 대해 각각 텍사스-캘리포니아-위스콘신 이라는 데이터를 갖는 3개의 노드가 생성된다.
이와 같이 생성된 스킵 리스트에서 특정 범위를 검색하라고 하는 범위 질의(Range Query)나 전체 데이터를 방문하는 스캔(scan) 연산을 수행하는 경우, 노드의 수가 늘어나서 검색 시간이 지연된다.
도 2를 참조하면, A부터 C까지로 시작하는 데이터를 모두 검색하라고 하는 범위 질의(Range Query)나 전체 데이터를 방문하는 스캔(scan) 연산을 수행하는 경우, 불필요한 오래된 버전의 데이터 노드(132) 및 데이터 노드(130)를 모두 방문해야 한다.
이와 같이 동일 키에 대한 데이터의 업데이트가 잦을수록 검색 속도가 매우 저하된다.
도 3은 본 발명의 일 실시예에 따른 NoSQL 컴퓨팅 시스템의 구성의 예시적인 블록도이다. 컴퓨팅 시스템은 메모리(10)와, 스토리지(20)를 갖는다.
메모리(10)는 주기억장치로 예컨대 DRAM 일 수 있고, 스토리지(20)는 보조기억장치로 예컨대 MRAM(Magnetic RAM), PCRAM(Phase Change RAM), HDDs(hard disk drive) 일 수 있다.
사용자로부터 키-값으로 구성된 데이터를 받으면 메모리(10)영역에 데이터를 저장하고 비동기적으로 스토리지(20)에 반영한다.
메모리(10)는 휘발성 메모리로서, 작은 크기의 데이터 쓰기가 빈번한 SNS나 웹 컨텐츠 제공 서비스 등을 제공하기 하기 위한 테이터를 관리할 때 스트라이드 스킵 리스트(Stride Skip List)를 사용한다.
도 4는 본 발명의 일 실시예에 따른 비관계형 데이터베이스 관리 시스템의 메모리 자료구조이다.
도 4에 도시된 바와 같이, 본 발명의 일 실시예에 따른 비관계형 데이터베이스 관리 시스템의 메모리 자료구조는 키와 요소(element)쌍으로 되어 있는 리스트(노드)가 여러 레이어에 걸쳐 있는 형태이다. 동일키를 갖는 여러 버전의 노드가 존재할 수 있다. 이러한 경우에도 타임스탬프는 서로 상이하므로, 동일키의 여러 버전의 경우, 컴퓨팅 시스템은 “key:timestamp” 를 통해 올바른 데이터에 접근할 수 있다.
참고로, 타임스템프는 물리적인 시간의 특징을 데이터 구조에 적용한 것으로, 노드가 생성된 절대적 시각을 나타낼 수도 있고, 전후 관계의 두 사건을 놓고 상대적 시간을 나타낼 수도 있다. 상대적 시간이란 사건1과 사건2가 발행한 정확한 시각은 몰라도 '사건1이 사건2 다음에 있어났다'는 상대적 전후관계만을 나타낼 수도 있다.
설명의 편의상, 동일키를 갖는 여러 버전의 노드들을 구분하기 위하여, 동일키를 갖는 여러 버전의 노드 중 제일 먼저 생성된 노드를 부모 노드라하고, 이후 생성되는 노드를 자식 노드라 한다.
본 발명의 일 실시예에 따른 비관계형 데이터베이스 관리 시스템의 메모리 자료구조는 헤드 노드(210), 테일 노드(250), 헤드 노드(210)와 테일 노드(250) 사이에 배치되는 복수개의 부모 노드(220, 230, 240)를 포함한다. 복수개의 부모 노드(220, 230, 240)는 각각 하나의 키-요소 쌍을 갖는다.
복수개의 부모 노드(220, 230, 240)는 키에 따라 정렬되고, 각각의 노드는 하나 이상의 넥스트 포인터를 갖는다. 포인터의 수만큼 레벨이 상승한다.
각 부모 노드(220, 230, 240, 250)의 키는 임의의 순서(예를 들어 오름차순, 내림차순 등)로 정렬(sorting)됨을 알 수 있다. 헤더 노드(210)의 키는 정렬의 처음이 되고, 테일 노드(250)의 키는 정렬의 마지막이 되도록 키값을 정할 수 있다. 예를 들어, 내림차순으로 정렬되는 경우, 헤더 노드(210)의 키는 +∞이 되고, 테일 노드(250)의 키(key)는 null(또는 -∞)이 될 수 있다.
헤더 노드는 상기 부모 노드와 자식 노드가 포함하는 넥스트 포인터 수 이상의 수의 넥스트 포인터를 갖는다.
설명의 편의를 위해, 3개의 노드가 각각 키-요소 쌍이 (이름, 사는 도시)를 갖는 것을 가정한다.
예를 들어, Amy는 캘리포니아(CA), Bob 은 텍사스(Tx), carol은 매사추세츠(Ma)에 살고 있다고 가정하면, 두 번째 노드 즉 제1 부모 노드(220)의 키는 Amy 이고, 세번째 노드 즉 제2 부모 노드(230)의 키는 Bob이고 네번째 노드 즉 제3 부모 노드(240)의 키는 Carol이 되며, 제1 부모 노드(220)의 요소는 CA, 제2 부모 노드(230)의 요소는 Tx, 제2 부모 노드(240)의 요소는 Ma가 된다.
노드의 레벨은 포인터의 수와 같다. 제1 부모 노드(220)의 포인터는 2개로 모두 제2 부모 노드(@30)를 가리킨다. 제2 부모 노드(230)의 포인터는 3개로 제1 레벨의 포인터는 제3 부모 노드(240)를 가리키고 제2 및 제3 레벨 포인터는 테일 노드(250)를 가리킨다.
헤드 노드(210)의 포인터의 수는 3개로 부모 노드 중 가장 포인터의 수가 많은 제2 부모 노드(230)의 포인터의 수와 같은 것을 알 수 있다.
도 5는 본 발명의 일 실시예에 따른 비관계형 데이터베이스 관리 시스템의 메모리 자료구조에서 자식 노드를 삽입하는 방법을 설명하는 흐름도이다.
도 5를 참조하면, 비관계형 데이터베이스 관리 시스템의 메모리 자료구조에서 자식 노드를 삽입하는 방법을 설명한다.
먼저, 삽입되는 자식 노드의 키와 동일한 키를 갖는 부모 노드를 검색한다(S210).
자식 노드를 검색된 부모 노드 앞에 배치한다(S220).
자식 노드에 랜덤한 수의 넥스트 포인터를 부여한다(S230).
상기 자식 노드 보다 앞에 배치되는 부모 노드의 넥스트 포인터를 수정한다.
자식 노드에 부모 노드를 가리키는 스트라이드 포인터(stride point)를 부여한다(S240).
스트라이드 포인터를 동일한 노드의 넥스트 포인터보다 하위에 위치한다.
상기 자식 노드를 갖는 부모 노드에 null을 갖는 스트라이드 포인터를 추가한 상기 자식 노드에 부여되는 넥스트 포인터의 수가 헤드 노드의 포인터의 수보다 높은 경우, 상기 헤드 노드의 포인터의 수를 상기 자식 노드에 부여되는 넥스트 포인터의 수 이상의 수의 넥스트 포인터를 추가한다.
도 6은 도 4의 자료구조에서, 동일키에 대한 데이터가 업데이트 되어, 하나의 자식 노드가 추가된 자료구조이고, 도 7은 도 6의 자료구조에서 동일키에 대한 데이터가 업데이트 되어, 하나의 자식 노드가 추가된 자료구조이다.
도 6을 참조하여, 도 4의 자료노드에서 제2 부모 노드(230)의 Bob에 대하여 자료가 업데이트 되는 경우, Bob이라는 제2 부모 노드(230)와 동일한 키를 생성하는 제1 자식 노드(232)를 생성한다. 제1 자식 노드(232)의 키-요소 쌍은 Bob-CA라고 가정한다.
도 6을 참조하면, 삽입되는 제1 자식 노드(232)의 키(Bob)와 동일한 키(Bob)를 갖는 제2 부모 노드(230)의 위치 앞에 제1 자식 노드(232)가 배치됨을 확인할 수 있다. 제1 자식 노드(232)의 넥스트 포인터의 수는 랜덤하게 생성되는데 본 실시예에서는 2개의 넥스트 포인터가 부여되었다. 삽입되는 제1 자식 노드(232) 키(Bob)와 동일한 키(Bob)를 갖는 제2 부모 노드(230)의 위치를 가리키는 스트라이드 포인터(SP1)가 부여되며, 스트라이드 포인터(SP1)의 위치는 넥스트 포인터 보다 하위 레벨에 위치하는 것을 알 수 있다.
제1 자식 노드(232)를 갖는 제2 부모 노드(230)에도 스트라이드 포인터(SP2)가 부여될 수 있고, 제2 부모 노드(230)에 부여된 스트라이드 포인터(SP2)는 Null값을 갖는다. 즉, Null값을 갖는 스트라이드 포인터(SP2)는 노드는 동일 키 값을 갖는 가장 오래된 버전으로 이해할 수 있다.
제1 자식 노드(232)가 삽입되면, 제1 자식 노드(232) 앞의 노드의 넥스트 포인터가 변경된다. 제1 부모 노드(220)의 레벨 1, 2의 넥스트 포인터가 제1 자식 노드(232)를 가리키도록 변경됨을 알 수 있다.
다음 도 7을 참조하여, 도 6의 자료 노드에서 제2 부모 노드(230)의 Bob에 대하여 자료가 추가 업데이트 되는 경우, Bob이라는 제2 부모 노드(230)와 동일한 키를 생성하는 제2 자식 노드(234)를 생성한다. 제2 자식 노드(234)의 키-요소 쌍은 Bob-Wl라고 가정한다. 설명의 편의를 위해 이미 생성된 자식 노드는 형님 노드라 하고, 뒤에 생성되는 자식 노드는 동생 노드라 정의한다.
삽입되는 제2 자식 노드(234)의 키(Bob)와 동일한 키(Bob)를 갖는 제2 부모 노드(230)의 위치 앞에 제2 자식 노드(232)가 배치됨을 확인할 수 있다. 다만, 제2 부모 노드(230)의 위치 앞에 이미 생성된 자식 노드 즉 형님 노드가 존재하는 경우, 동생 노드인 제2 자식 노드(232)는 형님 노드인 제1 자식 노드(234) 앞에 배치된다.
배치된 제2 자식 노드(234)의 넥스트 포인터의 수는 랜덤하게 생성되는데 본 실시예에서는 1개의 넥스트 포인터가 부여되었다. 제2 자식 노드(234)의 넥스트 포인터는 제1 자식 노드(232)를 가리킨다.
삽입되는 제2 자식 노드(234) 키(Bob)와 동일한 키(Bob)를 갖는 제2 부모 노드(230)의 위치를 가리키는 스트라이드 포인터(SP3)가 부여되며, 스트라이드 포인터(SP3)의 위치는 넥스트 포인터 보다 하위 레벨에 위치하는 것을 알 수 있다.
제1 자식 노드(232)를 갖는 제2 부모 노드(230)에도 스트라이드 포인터(SP2)가 부여될 수 있고, 제2 부모 노드(230)에 부여된 스트라이드 포인터(SP2)는 Null값을 갖는다. 즉, Null값을 갖는 스트라이드 포인터(SP2)는 노드는 동일 키 값을 갖는 가장 오래된 버전으로 이해할 수 있다.
제2 자식 노드(234)가 삽입되면, 제2 자식 노드(234) 앞의 노드의 넥스트 포인터가 변경된다. 제1 부모 노드(220)의 레벨 1, 2의 넥스트 포인터가 제1 자식 노드(232)를 가리키도록 변경됨을 알 수 있다.
노드 생성이 완료되면, 노드 내에 타임스탬프가 추가된다.
도 8은 본 발명의 일 실시예에 따른 비관계형 데이터베이스 관리 시스템의 메모리 자료구조에서 범위 질의를 처리하는 방법을 설명하는 흐름도이다.
도 7 및 8을 참조하여, 특정키 값의 범위에 해당하는 노드들에 존재하는 데이터에 대한 검색을 요청한다(S310).
가장 상위의 헤더의 넥스트 포인터부터 검색을 시작한다(S320).
상기 특정키가 검색될 때까지 넥스트 포인터를 따라 노드를 이동한다(S330).
이동된 노드의 키가 상기 특정키인지 확인한다(S340).
이동된 노드의 키가 특정키인 경우, 해당 노드의 데이터를 확인한다(S350). 다음 검색키가 존재하는지를 확인한다(S360).
상기 특정키가 검색되면, 키의 타임스탬프를 확인하여, 원하는 버전의 데이터가 존재하는 노드를 확인한다. 상기 다음 검색키가 존재하는 경우, 다음 검색키를 특정키라 하고(S365), 해당 노드에 스트라이드 포인터가 존재하는지 확인한다(S370).
단계 S365에서 다음 검색키는 최초 설정된 특정키와 다른 키이면 되므로, 특정된 값을 의미하는 것은 아닐 수 있다.
스트라이드 포인터가 존재하는 경우, 스트라이드 포인터가 가리키는 노드로 이동하고(S390), 스트라이드 포인터가 존재하지 않는 경우, 넥스트 포인터가 가리키는 노드로 이동한 후, 단계 S340으로 되돌아간다.
단계 S360 에서 다음 검색키가 존재하지 않는 경우, 검색을 종료한다.
도 7 및 도 8을 참고하여, 예컨대, 도 7의 스트라이드 스킵 리스트에서 range_query (Amy, 3) 의 범위 질의를 처리하는 방법을 설명한다.
range_query (Amy, 3) 가 입력되는 경우, A를 시작으로 3개의 서로 다른 키를 읽어오라고 요청한다.
먼저, A로 시작하는 키를 읽는다. 헤더 노드의 레벨 3 포인터에서부터 이동을 시작하여, 제1 부모 노드(220)에서 Amy 키를 확인하다. 제1 부모 노드(220)의 데이터 CA를 확인한다.
다음 2개의 서로 다른 키의 검색이 남았으므로, 검색을 계속한다.
제1 부모 노드(220)의 포인터를 따라 제2 자식 노드(234)로 이동한다. 여기에서 새로운 키 Bob을 찾았으므로, 제2 자식 노드(234)의 데이터 Wl 을 확인한다.
아직 하나의 검색 키가 남았으므로 검색을 계속한다.
이동하기 전, 제2 자식 노드(234)에 스트라이드 포인터가 있는지 확인한다. 제2 자식 노드(234)에 스트라이드 포인터(SP3)가 있으므로, 넥스트 포인터를 따르지 않고, 스트라이드 포인터(SP3)를 따라 이동한다. 스트라이드 포인터(SP3)는 제2 자식 노드(234)와 키 값이 같은 부모 노드(230)를 가리키므로, 바로 제2 부모 노드(230)으로 이동한다.
이동된 제2 부모 노드(230)에는 원하는 새로운 키 값이 없으므로, 제2 부모 노드(230)의 넥스트 포인터에 따라 제3 부모 노드(240)으로 이동한다. 제3 부모 노드(240)에는 Carol 이라는 새로운 키 값이 있으므로, 제3 부모 노드(240)의 데이터를 확인한 후, 범의 질의의 처리를 종료한다.
이와 같은 스트라이드 포인터를 이용한 범의 질의 처리시, 제1 자식 노드(232)로의 이동을 방지할 수 있으므로, 범의 질의 처리 속도가 빨라진다.
본 발명의 일 실시예에서는 설명의 편의상 3개의 부모 노드와 2개의 자식 노드를 예로 하여 설명하였으나, 부모 노드가 늘어나고 자식 노드가 늘어날수록, 즉 동일키에 대하여 업데이트 됨에 따라 삽입되는 노드가 많아질수록 더 효과적이다.
본 발명은 또한 컴퓨터로 읽을 수 있는 기록매체에 컴퓨터가 읽을 수 있는 코드로서 구현하는 것이 가능하다. 컴퓨터가 읽을 수 있는 기록매체는 컴퓨터 시스템에 의하여 읽혀질 수 있는 데이터가 저장되는 모든 종류의 기록장치를 포함한다. 컴퓨터가 읽을 수 있는 기록매체의 예로는 ROM, RAM, CD_ROM, 자기테이프, 플로피디스크 및 광데이터 저장장치 등이 있으며, 또한 캐리어 웨이브(예를 들어 인터넷을 통한 전송)의 형태로 구현되는 것도 포함한다. 또한 컴퓨터가 읽을 수 있는 기록매체는 네트워크로 연결된 컴퓨터 시스템에 분산되어, 분산방식으로 컴퓨터가 읽을 수 있는 코드로 저장되고 실행될 수 있다.
이상의 설명은 본 발명의 기술 사상을 예시적으로 설명한 것에 불과한 것으로, 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 사람이라면 본 발명의 본질적인 특성에서 벗어나지 않는 범위에서 다양한 수정 및 변형이 가능할 것이다. 따라서, 본 발명에 개시된 실시예들은 본 발명의 기술 사상을 한정하기 위한 것이 아니라 설명하기 위한 것이고, 이러한 실시예에 의하여 본 발명의 기술 사상의 범위가 한정되는 것은 아니다. 본 발명의 보호 범위는 아래의 청구범위에 의하여 해석되어야 하며, 그와 동등한 범위 내에 있는 모든 기술 사상은 본 발명의 권리범위에 포함되는 것으로 해석되어야 할 것이다.

Claims (13)

  1. 비관계형 데이터베이스 관리 시스템의 메모리 자료구조에 있어서,
    헤드 노드;
    테일 노드;
    헤드 노드와 테일 노드 사이에 배치되고, 각각 고유한 키를 갖고, 키에 따라 정렬되는 복수개의 부모 노드; 및
    상기 부모 노드와 동일한 키를 갖고 상기 부모 노드 생성 이후에 생성되어 상기 부모 노드 앞에 배치되는 자식 노드
    를 포함하고,
    상기 부모 노드 및 자식 노드는 각각 다음 진행 노드를 가리키는 하나 이상의 넥스트 포인터를 포함하고,
    상기 자식 노드는 부모 노드를 가리키는 스트라이드 포인터(stride point)를 포함하는 것을 특징으로 하는 비관계형 데이터베이스 관리 시스템의 메모리 자료구조.
  2. 제1항에 있어서,
    상기 부모 노드 및 자식 노드는 각각 랜덤한 수의 넥스트 포인터를 갖는 것을 특징으로 하는 비관계형 데이터베이스 관리 시스템의 메모리 자료구조.
  3. 제1항에 있어서,
    상기 헤드 노드는 상기 부모 노드와 자식 노드가 포함하는 넥스트 포인터 수 이상의 수의 넥스트 포인터를 갖는 것을 특징으로 하는 비관계형 데이터베이스 관리 시스템의 메모리 자료구조.
  4. 제1항에 있어서,
    상기 자식 노드를 갖는 부모 노드는 null을 키값으로 하는 스트라이드 포인터를 갖는 것을 특징으로 하는 비관계형 데이터베이스 관리 시스템의 메모리 자료구조.
  5. 제1항에 있어서,
    상기 스트라이드 포인터는 동일한 노드의 넥스트 포인터보다 하위에 위치되는 것을 특징으로 하는 것을 비관계형 데이터베이스 관리 시스템의 메모리 자료구조.
  6. 헤드 노드, 테일 노드, 헤드 노드와 테일 노드 사이에 배치되고 각각 고유한 키와 다음 노드를 가리키는 하나 이상의 넥스트 포인터를 갖고, 키에 따라 정렬되는 복수개의 부모 노드를 포함하는 비관계형 데이터베이스 관리 시스템의 메모리 자료구조에서 상기 부모 노드 생성 이후에 생성되는 자식 노드를 삽입하는 방법에 있어서,
    삽입되는 자식 노드의 키와 동일한 키를 갖는 부모 노드를 검색하는 단계;
    상기 자식 노드를 상기 부모 노드 앞에 배치하는 단계;
    상기 자식 노드에 랜덤한 수의 넥스트 포인터를 부여하는 단계; 및
    상기 자식 노드에 상기 부모 노드를 가리키는 스트라이드 포인터(stride point)를 부여하는 단계
    를 포함하는 메모리 자료구조에서 자식 노드를 삽입하는 방법.
  7. 제6항에 있어서,
    상기 헤드 노드는 상기 부모 노드가 포함하는 넥스트 포인터 수 이상의 수의 넥스트 포인터를 갖고,
    상기 자식 노드에 부여되는 넥스트 포인터의 수가 헤드 노드의 포인터의 수보다 높은 경우, 상기 헤드 노드의 포인터의 수를 상기 자식 노드에 부여되는 넥스트 포인터의 수 이상의 수의 넥스트 포인터를 추가하는 것을 특징으로 하는 메모리 자료구조에서 자식 노드를 삽입하는 방법.
  8. 제6항에 있어서,
    상기 자식 노드를 갖는 부모 노드에 null을 갖는 스트라이드 포인터를 추가하는 것을 특징으로 하는 메모리 자료구조에서 자식 노드를 삽입하는 방법.
  9. 제6항에 있어서,
    상기 자식 노드에 상기 부모 노드를 가리키는 스트라이드 포인터(stride point)를 부여하는 단계는,
    상기 스트라이드 포인터를 상기 자식 노드의 넥스트 포인터보다 하위에 위치시키는 것을 특징으로 하는 것을 특징으로 하는 메모리 자료구조에서 자식 노드를 삽입하는 방법.
  10. 제6항에 있어서,
    상기 자식 노드에 랜덤한 수의 넥스트 포인터를 부여하는 단계 이후에,
    상기 자식 노드 보다 앞에 배치되는 부모 노드의 넥스트 포인터를 수정하는 단계를 더 포함하는 것을 특징으로 하는 메모리 자료구조에서 자식 노드를 삽입하는 방법.
  11. 제6항에 있어서,
    상기 자식 노드를 상기 부모 노드 앞에 배치하는 단계에서,
    상기 부모 노드 앞에 상기 부모 노드와 동일키를 갖는 자식 노드가 이미 배치되어 있는 경우, 새로 배치되는 자식 노드는 이미 배치되어 있는 자식 노드 앞에 배치되는 것을 특징으로 하는 메모리 자료구조에서 자식 노드를 삽입하는 방법.
  12. 헤드 노드, 테일 노드, 헤드 노드와 테일 노드 사이에 배치되고 각각 고유한 키와 다음 노드를 가리키는 하나 이상의 넥스트 포인터를 갖고, 키에 따라 정렬되는 복수개의 부모 노드를 포함하는 비관계형 데이터베이스 관리 시스템의 메모리 자료구조에서 범위 질의를 처리하는 방법에 있어서,
    특정키 값을 포함하는 범위 질의를 요청하는 단계
    헤더의 가장 상위의 넥스트 포인터부터 검색을 시작하는 단계;
    상기 특정키가 검색될 때까지 넥스트 포인터를 따라 노드를 이동하는 단계;
    이동된 노드에서 상기 특정키가 검색되면, 해당 노드의 데이터를 확인하고, 다음 검색키가 존재하는지를 확인하는 단계; 및
    다음 검색키가 존재하지 않는 경우, 범위 질의 처리를 종료하는 단계;
    를 포함하고,
    상기 다음 검색키가 존재하는 경우, 다음 검색키가 검색될 때까지 넥스트 포인터를 따라 노드를 이동하는 단계로 되돌아가되,
    상기 다음 검색키가 검색된 노드가 스트라이드 포인터를 갖는 경우, 스트라이드 포인터를 따라 노드를 이동하는 것을 특징으로 하는 메모리 자료구조에서 범위 질의를 처리하는 방법.
  13. 제12항에 있어서,
    상기 이동된 노드에서 상기 특정키가 검색되면, 해당 노드의 데이터를 확인하고, 다음 검색키가 존재하는지를 확인하는 단계는,
    상기 특정키가 검색되면, 키의 타임스탬프를 통해 노드의 버전을 확인하는 것을 특징으로 하는 메모리 자료구조에서 범위 질의를 처리하는 방법.
KR1020190162974A 2019-12-09 2019-12-09 비관계형 데이터베이스 관리 시스템의 메모리 자료구조, 노드를 삽입하는 방법 및 범위 질의를 처리하는 방법 KR102404174B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020190162974A KR102404174B1 (ko) 2019-12-09 2019-12-09 비관계형 데이터베이스 관리 시스템의 메모리 자료구조, 노드를 삽입하는 방법 및 범위 질의를 처리하는 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020190162974A KR102404174B1 (ko) 2019-12-09 2019-12-09 비관계형 데이터베이스 관리 시스템의 메모리 자료구조, 노드를 삽입하는 방법 및 범위 질의를 처리하는 방법

Publications (3)

Publication Number Publication Date
KR20210072554A KR20210072554A (ko) 2021-06-17
KR102404174B1 true KR102404174B1 (ko) 2022-05-31
KR102404174B9 KR102404174B9 (ko) 2022-12-27

Family

ID=76603832

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020190162974A KR102404174B1 (ko) 2019-12-09 2019-12-09 비관계형 데이터베이스 관리 시스템의 메모리 자료구조, 노드를 삽입하는 방법 및 범위 질의를 처리하는 방법

Country Status (1)

Country Link
KR (1) KR102404174B1 (ko)

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Sarath Lakshman et al., "Nitro: A Fast, Scalable In-Memory Storage Engine for NoSQL Global Secondary Index"(2016) 1부.*
문병엽 외, "학습 관리 시스템 데이터베이스로서의 NoSQL 도입 방안"(2013) 1부.*

Also Published As

Publication number Publication date
KR102404174B9 (ko) 2022-12-27
KR20210072554A (ko) 2021-06-17

Similar Documents

Publication Publication Date Title
US9672235B2 (en) Method and system for dynamically partitioning very large database indices on write-once tables
US9575976B2 (en) Methods and apparatuses to optimize updates in a file system based on birth time
US5852822A (en) Index-only tables with nested group keys
US8326839B2 (en) Efficient file access in a large repository using a two-level cache
US9495398B2 (en) Index for hybrid database
US9524302B2 (en) Distributed consistent database implementation within an object store
EP3170106B1 (en) High throughput data modifications using blind update operations
KR101467589B1 (ko) 데이터 구조를 가지는 하나 이상의 장치 판독가능 매체, 및장치 실행가능 명령어를 구비한 하나 이상의 장치 판독가능 매체
KR102195836B1 (ko) 인덱스 관리 방법
US10521117B2 (en) Unified table delta dictionary memory size and load time optimization
Navarro et al. New dynamic metric indices for secondary memory
US20230342395A1 (en) Network key value indexing design
US10558636B2 (en) Index page with latch-free access
US6571250B1 (en) Method and system for processing queries in a data processing system using index
KR102404174B1 (ko) 비관계형 데이터베이스 관리 시스템의 메모리 자료구조, 노드를 삽입하는 방법 및 범위 질의를 처리하는 방법
KR100859710B1 (ko) 데이터에 대한 검색을 수행하기 위한 자료구조를 이용하여 데이터를 검색, 저장, 삭제하는 방법
CN116010664A (zh) 基于mptt和双亲查找的数据处理方法及系统
Petrov Algorithms behind modern storage systems
CN115495462A (zh) 批量数据更新方法、装置、电子设备和可读存储介质
US20220365905A1 (en) Metadata processing method and apparatus, and a computer-readable storage medium
KR102354343B1 (ko) 블록체인 기반의 지리공간 데이터를 위한 공간 데이터 인덱싱 방법 및 장치
US9824105B2 (en) Adaptive probabilistic indexing with skip lists
Petrov Algorithms behind modern storage systems: Different uses for read-optimized b-trees and write-optimized lsm-trees
CN111581123A (zh) 基于分类的存储器分配的锁定
JP4825504B2 (ja) データ登録・検索システムおよびデータ登録・検索方法

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
G170 Re-publication after modification of scope of protection [patent]