KR100878142B1 - 플래시 메모리 상에서의 효율적인 동작을 위한 수정된b-트리 인덱스 구성 방법 - Google Patents

플래시 메모리 상에서의 효율적인 동작을 위한 수정된b-트리 인덱스 구성 방법 Download PDF

Info

Publication number
KR100878142B1
KR100878142B1 KR1020060129837A KR20060129837A KR100878142B1 KR 100878142 B1 KR100878142 B1 KR 100878142B1 KR 1020060129837 A KR1020060129837 A KR 1020060129837A KR 20060129837 A KR20060129837 A KR 20060129837A KR 100878142 B1 KR100878142 B1 KR 100878142B1
Authority
KR
South Korea
Prior art keywords
leaf
leaf node
entries
tree index
page
Prior art date
Application number
KR1020060129837A
Other languages
English (en)
Other versions
KR20080056819A (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 KR1020060129837A priority Critical patent/KR100878142B1/ko
Publication of KR20080056819A publication Critical patent/KR20080056819A/ko
Application granted granted Critical
Publication of KR100878142B1 publication Critical patent/KR100878142B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Human Computer Interaction (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

본 발명은 플래시 메모리 상에서 동작하는 수정된 B-트리 인덱스 구성 방법에 관한 것이며, 더욱 상세하게는 종래의 B-트리 인덱스를 수정하여 새로운 데이터의 저장 속도를 빠르게 할 수 있는 수정된 B-트리 인덱스의 구성 방법에 관한 것이다. 이를 위해, 본 발명은 입력된 데이터 엔트리를 출력 버퍼에 저장하는 단계와; 상기 출력 버퍼에서 인덱스의 리프 노드 영역별로 상기 엔트리를 그룹화하여 엔트리 그룹을 생성하는 단계와; 상기 엔트리 그룹 중 가장 많은 엔트리 개수를 가지는 그룹을 선택하는 단계와; 상기 선택된 엔트리 그룹을 리프 노드에 한 번에 저장하는 단계를 포함하는 것을 특징으로 하는 수정된 B-트리 인덱스 구성 방법을 제공한다.
B-트리 인덱스, 플래시 메모리, 빠른 저장 속도, 출력 버퍼, 리프 노드, 메타 페이지

Description

플래시 메모리 상에서의 효율적인 동작을 위한 수정된 B-트리 인덱스 구성 방법{METHOD OF CONFIGURING A MODIFIED B-TREE INDEX FOR AN EFFICIENT OPERATION ON FLASH MEMORY}
도 1은 본 발명의 일실시예에 따른 출력 전 수정된 B-트리 인덱스 구조
도 2는 본 발명의 일실시예에 따른 출력 후 수정된 B-트리 인덱스 구조
도 3은 본 발명의 일실시예에 따른 메타 페이지 구조
도 4는 본 발명의 일실시예에 따른 수정된 B-트리 인덱스 구조 생성 방법에 대한 흐름도
도 5는 본 발명의 일실시예에 따른 모바일 기기에서 작동하는 수정된 B-트리 인덱스 모델에 대한 도면
도 6은 본 발명의 일실시예에 따른 수정된 B-트리 인덱스와 종래의 인덱스에 대한 성능 비교 분석 테이블
*도면의 주요부분에 대한 부호의 설명*
100. 출력 버퍼 101. 리프 노드1 그룹
102. 리프 노드2 그룹 110. 중간 노드
120. 리프 노드1 121. 리프 페이지1
122. 리프 페이지2 123. 메타 페이지
130. 리프 노드2 310. 순서정보리스트
320. 키정보리스트
본 발명은 플래시 메모리 상에서 동작하는 수정된 B-트리 인덱스 구성 방법에 관한 것이며, 더욱 상세하게는 종래의 B-트리 인덱스를 수정하여 새로운 데이터의 저장 속도를 빠르게 할 수 있는 수정된 B-트리 인덱스의 구성 방법에 관한 것이다.
상기 종래의 B-트리 인덱스는 대표적인 2차 저장 매체인 하드 디스크에 가장 많이 사용되는 인덱스 기술이며, 디스크 페이지에 대한 접근 회수를 최소로 줄임으로써 질의 처리 속도를 빠르게 하는 것을 가장 큰 목표로 한다. 상기 종래의 B-트리 인덱스는 특히 특정한 키 값을 찾기 위한 질의(equal query)와 특정한 범위의 키 값을 모두 찾는 범위 질의(range query)에 매우 뛰어나다. 그러나 상기 종래의 B-트리 인덱스는 페이지에 대한 읽기/쓰기 속도가 동일한 디스크를 위한 기술이다. 따라서 읽기/쓰기 속도가 매우 크게 비대칭적인 플래시 메모리에서 사용되는 경우, 쓰기로 인한 성능 저하가 매우 크며, 또한 덮어쓰기가 불가능하여 지우기를 선행함으로써 그 성능 저하가 더욱 커지게 된다. 이로 인하여 종래의 디스크를 위한 기술 들, 특히 저장된 데이터를 빠르게 찾기 위한 인덱스 기술은 플래시 메모리가 가지는 뛰어난 장점을 발휘하는데 장애물로서 작용하고 있다.
또한, 플래시 메모리에서 쓰기 회수를 최소화하기 위한 BFTL(B-Tree Flash Translation Layer)은 메인 메모리 사용량이 매우 크고, 동작을 위하여 필요한 최소한도의 메인 메모리 크기가 크며, 질의 처리 속도가 느리다는 문제점이 있다.
따라서 상기와 같은 문제점을 해결하기 위해 제안된 본 발명은, 출력 버퍼를 이용하여 플래시 메모리와 같이 읽기/쓰기 속도가 매우 비대칭적인 저장 매체에서도 매우 효율적으로 동작할 수 있는 수정된 B-트리 인덱스 구성 방법을 제공하는데 그 목적이 있다.
또한, 상기 B-트리 인덱스의 리프 노드를 효율적으로 구성하는 방법을 제공하는데 그 목적이 있다.
상기 목적을 달성하기 위하여, 본 발명은 입력된 데이터 엔트리를 출력 버퍼에 저장하는 단계와; 상기 출력 버퍼에서 인덱스의 리프 노드 영역별로 상기 엔트리를 그룹화하여 엔트리 그룹을 생성하는 단계와; 상기 엔트리 그룹 중 가장 많은 엔트리 개수를 가지는 그룹을 선택하는 단계와; 상기 선택된 엔트리 그룹을 리프 노드에 한 번에 저장하는 단계를 포함하는 것을 특징으로 하는 수정된 B-트리 인덱 스 구성 방법을 제공한다.
또한, 상기 목적을 달성하기 위하여, 본 발명은 리프 노드 내의 리프 페이지에 엔트리를 크기 순으로 정렬하여 저장하는 단계와; 상기 리프 페이지에 대한 순서 정보 및 상기 순서 정보의 구간을 나눈 키 정보를 메타 페이지에 저장하는 단계를 포함하되, 상기 리프 노드는 복수의 리프 페이지 및 하나의 메타 페이지로 구성되는 것을 특징으로 하는 수정된 B-트리 인덱스의 리프 노드 구성 방법을 제공한다.
또한, 상기 목적을 달성하기 위하여, 본 발명은 입력된 엔트리를 저장하는 출력 버퍼; 리프 노드에 대한 경계값 및 위치 정보가 저장되는 중간 노드; 및 상기 출력 버퍼에 저장된 엔트리가 그룹별로 저장되는 리프 노드를 포함하되, 상기 리프 노드는 상기 엔트리가 저장되는 하나 이상의 리프 페이지 및 상기 리프 페이지의 순서 정보가 저장되는 메타 페이지로 구성되는 것을 특징으로 하는 수정된 B-트리 인덱스 구조를 제공한다.
이하 상기의 목적을 구체적으로 실현할 수 있는 본 발명의 실시예를 첨부한 도면을 참조하여 설명한다.
도 1은 본 발명의 일실시예에 따른 출력 전 수정된 B-트리 인덱스 구조를 나타낸다. 상기 수정된 B-트리 인덱스는 출력 버퍼(write buffer, 100), 중간노드(internal node, 110), 리프 노드(leaf node, 120 및 130)를 포함하고, 상기 리프 노드(120 및 130)는 각각 리프 페이지(121, 122, 131, 132) 및 메타 페이지(123 및 133)를 포함한다.
도 1을 참조하면, 본 발명은 입력 작업에 의한 쓰기 비용을 줄이기 위하여 출력 버퍼(100)를 이용한다. 자세히 설명하면, 출력 버퍼(100)는 입력되는 엔트리들을 정렬하여 저장하였다가, 출력 버퍼(100)가 다 찼을 때 한꺼번에 여러 개의 엔트리를 쓸 수 있다. 이때, 정렬된 엔트리 중에서 가장 많은 엔트리가 속한 리프 노드(120, 130) 영역에 해당하는 입력 엔트리를 그룹(101, 102)으로 출력하고, 상기 그룹(101, 102) 단위로 한 번에 상기 그룹이 속하는 리프 노드의 리프 페이지(121, 122, 131, 132)에 쓸 수 있다.
중간 노드(110)는 종래의 B-트리 인덱스와 동일한 구성을 가진다. 상기 중간 노드(110)는 자식 노드(child node)들의 경계값을 키(key) 값으로 가지며, 자식 노드를 포인팅(pointing)하여 그 위치를 저장한다.
리프 노드(120, 130)는 수정된 B-트리 인덱스의 가장 아래에 위치하여 더 이상의 자식 노드를 가지지 않는다. 상기 리프 노드(120, 130)는 종래의 B-트리 인덱스의 정수배에 해당되는 크기로 구성될 수 있다. 상기 리프 노드(120, 130)는 적어도 하나의 리프 페이지(121, 122, 131, 132) 및 하나의 메타 페이지(123, 133)로 구성될 수 있다. 리프 페이지(121, 122, 131, 132)는 리프 노드(120, 130)를 구성하는 단위로서 실제 엔트리들을 포함한다. 하나의 실제 엔트리는 키 값과 실제 데이터의 위치를 나타내는 포인터 정보로 구성될 수 있다.
상기 방법에 따라 리프 노드(120, 130)에 쓰여 진 엔트리들은 출력 버퍼(100)로부터 함께 출력된 그룹이 저장된 리프 페이지(121, 122, 131, 132) 내에서는 정렬된 순서가 유지되지만, 리프 노드(120, 130) 내의 서로 다른 리프 페이 지(121, 122, 131, 132) 사이에는 정렬된 순서가 유지되지 못한다. 따라서 이러한 리프 노드(120, 130)에 대해 검색 작업이 수행되면 리프 노드(120, 130) 내의 모든 엔트리들을 읽어서 검색해야 하는 큰 비용이 발생한다. 이렇게 큰 검색 비용을 줄이기 위하여 리프 노드(120, 130) 내의 엔트리의 순서를 알 수 있는 방법이 필요하다. 이러한 방법으로 리프 노드(120, 130)에 대해서 해당 리프 노드(120, 130)의 엔트리의 순서 정보를 관리하는 메타 페이지(123, 133)를 사용한다.
이하에서, 상기 출력 버퍼(100) 출력작업, 리프 노드(120, 130)의 구성 방법 및 메타 페이지(123, 133)의 구성 방법에 대하여 보다 상세하게 기술된다.
출력 버퍼(100)는 메인 메모리 상에 위치할 수 있으며, 전술한 것처럼 입력되는 데이터를 임시로 저장한다. 전체 출력 버퍼(100)가 가득 차면 한 번에 다수의 엔트리가 수정된 B-트리의 리프 노드(120, 130)에 기록될 수 있다. 이때, 출력 버퍼(100)로부터 다수의 엔트리가 수정된 B-트리에 기록되는 작업을 출력 작업이라 할 때, 상기 출력 작업은 아래의 다섯 단계로 이루어질 수 있다.
첫째, 출력 버퍼(100)에 할당된 메모리 공간이 다 찰 때까지, 입력된 엔트리를 출력 버퍼(100)에 저장한다. 이때, 출력 버퍼(100)에 저장되는 엔트리는 정렬된 상태로 유지될 수 있다. 예를 들면, 출력 버퍼(100)에 1, 10, 100, 1000 과 같은 입력 엔트리가 저장되어 있을 때, 새롭게 50이 입력된다면 출력 버퍼는 1. 10, 50, 100, 1000 과 같이 정렬된 순서로 입력 엔트리 50을 저장할 수 있다.
둘째, 출력 버퍼(100)의 공간이 다 차면, 수정된 B-트리 인덱스 상의 모든 리프 노드들(120, 130)의 경계값들로 출력 버퍼(100)의 엔트리들을 나누어 리프 노 드(120, 130)의 영역별로 엔트리 그룹(101, 102)을 생성한다.
셋째, 리프 노드(120, 130)의 영역별 엔트리의 그룹(101, 102) 중 가장 많은 엔트리 개수를 가지는 그룹을 선택한다.
넷째, 선택된 엔트리 그룹(101, 102)을 리프 노드(120, 130)에 쓰기 위해 엔트리 그룹(101, 102)의 크기와 각 엔드리 그룹(101, 102)이 속하는 해당 리프 노드(120, 130) 상의 리프 페이지(121, 122, 131, 132)의 전체 빈 공간 크기를 비교하여, 모든 엔트리가 저장될 수 있으며 남는 공간이 가장 작은 리프 페이지(121, 122, 131, 132)를 선택한다. 허용되는 리프 페이지(121, 122, 131, 132)가 없다면 리프 노드를 전반으로 분할하여 새로운 리프 노드를 만든다.
다섯째, 선택된 각각의 리프 페이지에 엔트리 그룹(101, 102)을 한번에 저장하되, 이미 저장되어 있는 엔트리들과 추가되는 엔트리들을 크기에 따라 정렬하여 저장한다.
도 1은 출력 버퍼(100)가 2페이지에 해당하는 메모리 크기로 구성되고, 리프 페이지(121, 122, 131, 132)와 중간 노드(110)가 1페이지, 1페이지에 들어갈 수 있는 엔트리의 개수가 5개로 구성된 예이다. 도 1은 출력 버퍼(100)에 입력으로 정수 값인 "2, 3, 5, 22, 33, 55, 182, 198, 212, 290"이 들어온 후 상기 출력 작업의 두 번째 단계까지 수행된 상태를 보이고 있다. 입력이 들어온 순서는 정수 값의 순서와 관계없이 랜덤하게 들어왔지만 출력 버퍼(100)의 출력 작업 첫 번째 단계를 거치면서 정렬이 되어 저장되어 있으며, 두 번째 단계를 거치면서 각 리프 노드(120, 130)의 경계값인 100, 300을 기준으로 각 리프 노드(120, 10)별로 나누어 져 엔트리 그룹(101, 102)이 생성되었다.
도 2는 본 발명의 일실시예에 따른 출력 후 수정된 B-트리 인덱스 구조를 나타낸다. 즉, 도 1의 상태에서 상기 출력 작업의 나머지 세 단계가 모두 수행된 결과이다. 세 번째 단계에서 6개의 엔트리를 가지는 리프 노드1 그룹(101) 이 선택되어 네 번째, 다섯 번째 단계에 의해 리프 노드 1 그룹(120)의 각 리프 페이지(121, 122)에 엔트리들이 3개씩 나뉘어 쓰인 상태이다. 출력 버퍼(100)에는 리프 노드 1그룹(101)을 쓰고 난 나머지인 리프 노드 2 그룹(102)에 해당하는 엔트리들만 남아 있게 된다. 출력 버퍼(100)의 크기는 해당 시스템이 허용하는 최대의 메인 메모리 공간으로 구성한다. 출력 버퍼(100)가 크면 클수록 많은 엔트리들을 한 번에 해당 리프 노드(120, 130)에 쓸 수 있기 때문이다.
전술한 것처럼, 수정된 B-트리 인덱스의 하나의 리프 노드(120, 130)는 하나 이상의 리프 페이지(121, 122, 131, 132)로 구성되고, 하나의 리프 페이지는 플래시 메모리에서 최소 입출력 단위인 페이지로 구성된다. 이렇게 리프 노드(120, 130)를 복수의 리프 페이지(121, 122, 131, 132)로 구성하는 이유는 다음과 같다. 출력 버퍼(100)가 엔트리들을 그룹 단위로 쓰므로 한 번에 많은 엔트리가 쓰여 지기 때문에 리프 노드(120, 130)의 크기, 즉 리프 노드(120, 130)를 구성하는 리프 페이지(121, 122, 131, 132)의 개수가 작으면 노드의 분할이 자주 발생한다. 그런데 노드의 분할은 많은 페이지의 쓰기를 유발하므로 이로 인한 쓰기 비용도 커진다. 또한 리프 노드(120, 130)의 크기가 작을수록 동일한 개수의 엔트리들의 입력에 대해 많은 새로운 리프 노드가 생성된다. 많은 리프 노드는 출력 버퍼의 출력 작업 시 많은 리프 노드의 경계를 형성하고, 리프 노드 별로 엔트리 그룹의 크기를 작게 한다. 그룹의 크기가 작아지면 한 번에 쓰이게 되는 엔트리의 수가 줄어들게 되어 입력 작업에 대한 쓰기 비용이 증가될 수 있다.
중간 노드(110)의 경우 플래시 메모리의 최소의 입출력 단위인 페이지로 구성한다. 리프 노드(120, 130)는 출력 작업 시마다 수정이 일어나지만, 중간 노드(110)는 리프 노드(120, 130)만큼 수정이 자주 발생하지 않고, 리프 노드의 분할이 일어나는 경우 중 일부의 경우에만 수정이 발생한다. 그러므로 중간 노드(110)를 한 페이지로 구성하고 자식 노드의 분할에 의해 추가되는 경계값을 입력으로 받아 수정된 노드를 바로 플래시 메모리에 쓴다.
도 3은 본 발명의 일실시예에 따른 메타 페이지 구조를 나타낸다. 메타 페이지(300)의 크기는 플래시 메모리의 최소 입출력 단위인 페이지로 구성되며, 메타 페이지(300)가 속한 리프 노드의 모든 엔트리들의 순서 정보를 관리한다. 또한 검색의 효율성을 위해 각 순서 정보의 구간을 나눈 키 정보도 함께 관리할 수 있다. 이러한 순서 정보 및 키 정보의 배열(array)을 각각 순서 정보 리스트(310), 키 정보 리스트(320)로 정의한다.
순서 정보는 리프 노드를 구성하는 리프 페이지들의 순서 번호로 표현된다. 도 1의 경우 리프 노드(120)가 2개의 리프 페이지(121, 122)로 구성되므로, 왼쪽에서부터 첫 번째 리프 페이지(121)의 경우 순서 번호는 1이 되고 두 번째 리프 페이지(122)의 순서 번호는 2가 된다. 리프 페이지(121, 122)는 전술한 것처럼 출력 버퍼(100)의 출력 작업 중 다섯 번째 단계에 의해 항상 정렬되어 있으므로, 순서 정 보를 효율적으로 구성하기 위해 k-단위 통합(merge) 방법의 아이디어를 사용할 수 있다. 상기 k-단위 통합 방법은 k개의 정렬된 숫자 리스트가 있을 때, 각 리스트의 가장 앞 숫자 중 가장 작은 숫자를 선택하여 새로운 리스트를 만들어 나감으로써 모든 리스트를 구성하는 숫자의 정렬된 리스트를 만드는 방법이다. 리프 페이지들(121, 122) 각각을 k-단위 통합에서 사용하는 정렬된 리스트로 보고 각 리스트의 값들을 비교하는 과정의 결과를 리프 페이지(121, 122)의 순서 번호로 기록하여 순서 정보 리스트(310)에 추가한다. 즉, 기록되는 리프 페이지(121, 122)의 순서 번호는 k-단위 통합에서 각각의 리스트의 가장 작은 값을 찾는 과정에서 선택된 가장 작은 값이 있었던 리스트를 나타내는 것이다. 이렇게 k-단위 통합의 비교 과정의 결과를 리프 페이지(121, 122)의 순서 번호로 표현함으로써, 리프 페이지의 순서 번호만으로도 전체 엔트리들 간의 순서를 알아낼 수 있다.
하나의 순서 정보는 한정적인 메타 페이지(300)의 공간에 최대한 많은 순서 정보를 담을 수 있도록 비트 문자열(bit string)로 표현한다. 몇 비트를 설정할 것인지는 한 리프 노드를 구성하는 리프 페이지의 개수에 의해 결정된다. 리프 노드가 n개의 리프 페이지로 구성된다면 하나의 순서 정보는 log2n 비트로 표현된다.
키 정보를 구성하는 방법은 다음과 같다. 순서 정보 리스트(310)를 동일한 순서 정보 개수의 구간으로 나누고 해당 구간의 경계값에 해당하는 엔트리의 키(key)값들을 키 정보로 구성한다. 구간을 나누는 순서 정보의 개수가 되는 구간의 크기는 아래에서 설명된다. 이렇게 구간을 나누어 경계값을 저장하게 되면 나누 어진 구간에서만 이진 검색(binary search)을 수행하여 빠르게 원하는 값을 찾을 수 있다.
상기와 같이 정의된 키 정보를 제한된 메타 페이지(300)의 공간 내에 최대한 많이 저장하기 위해, 압축하여 표현하는 방법을 사용한다. 이를 정규화 작업이라 정의하고 다음과 같은 방법을 따른다. 첫째, 해당 키 값을 표현할 수 있는 최소의 크기를 찾기 위해 리프 노드의 경계 값 두 개를 가져와 큰 값에서 작은 값을 빼고 이 값을 바이트 단위로 표현할 수 있는 최소의 바이트 수를 찾는다. 둘째, 해당 키 값을 리프 노드의 작은 경계 값으로 뺀 후 그 결과를 첫 번째 단계에서 계산한 바이트 수로 표현한다. 이렇게 키 정보를 구성하고 정규화 작업을 통해 압축하여 배열로 구성한 것을 키 정보 리스트(320)로 정의하고 이를 메타 페이지(300)에 순서정보리스트(310)를 저장하고 남은 공간에 저장한다. 계산된 키 정보 리스트(320)의 공간으로부터 저장 가능한 키 정보의 개수를 계산하고 그로부터 앞에서 언급한 순서 정보 리스트를 나누는 구간의 크기를 계산한다.
도 3에 도시된 메타 페이지(300)의 구성은 도 1의 리프 노드 1(120)에 속하는 메타 페이지의 구성을 표현한 것이다. 순서 정보 구성 방법에 따라 각 순서 정보의 크기는 리프 노드1(120)의 리프 페이지(121, 122)의 개수가 2개이므로 1비트로 구성한다. 리프 노드1(120)에 속하는 엔트리의 키 값인 '0, 1, 11, 100'이 속하는 리프 페이지(121, 122)의 순서 번호인 '1, 2, 2, 1'을 순서대로 사용하여, 리프 페이지 번호가 1인 경우(121)는 0으로 리프 페이지 번호가 2인 경우(122)는 1로 표시하여 각 1비트의 '0, 1, 1, 0'의 순서 정보 리스트(310)를 구성한다. 키 정보 리 스트(320)는 해당 순서 정보 리스트(310)의 순서 정보 개수인 4개의 절반에 해당하는 2개로 구성하여 첫 번째 순서정보와 세 번째 순서정보에 해당하는 키 값인 0, 11을 키 정보 리스트(320)로 구성하는데 사용한다. 상기 정규화 작업 첫 번째에 따라 각 키 정보의 크기는 리프 노드 1(120)의 경계값이 0, 100이므로 100에서 0을 뺀 값, 즉 100을 표현할 수 있는 최소의 바이트인 1바이트가 된다. 정규화 작업 두 번째에 따라 작은 경계값이 0이므로 원래의 값에서 0을 빼도 정규화한 값은 ‘0, 11’이 된다. 이를 각기 1바이트의 크기로 할당하여 ‘0, 11‘의 키 정보 리스트(320)로 표현된다.
도 4는 본 발명의 일실시예에 따른 수정된 B-트리 인덱스 구조 생성 방법에 대한 흐름도이다. 즉, 상기한 내용들을 종합하여 수정된 B-트리 인덱스 구조를 생성하는 방법에 대한 전체 과정을 좀 더 알기 쉽게 나타낸 흐름도이다. 도 4를 참조하면, 엔트리가 입력되면(S401), 입력된 엔트리는 출력 버퍼에 저장된다(S402). 상기 입력된 엔트리는 상기 출력 버퍼가 다 찰 때까지 크기 순서로 정렬되어 저장된다. 그 다음에, 상기 출력 버퍼에 저장된 엔트리들은 리프 노드들의 경계값들로 나누어져 그룹화된다(S403). 그리고 상기 엔트리 그룹 중 가장 많은 엔트리를 가지는 그룹이 선택된다(S403). 그 다음에, 선택된 엔트리 그룹의 크기와 리프 노드 내의 리프 페이지의 빈 공간 크기를 비교하여, 만일 엔트리 그룹의 크기가 상기 리프 페이지의 빈 공간 크기보다 크다면(S404), 상기 노드 내에 새로운 리프 페이지가 추가될 수 있는지를 판단한다. 만일 리프 노드에 허용한 최대 리프 페이지 수를 넘지 않아 새로운 리프 페이지가 추가될 수 있다면(S405), 상기 리프 노드 내에 새로운 리프 페이지를 생성한다(S406). 만일 새로운 리프 페이지가 추가될 수 없다면(S405), 상기 리프 노드를 전반으로 분할하여 새로운 리프 노드를 생성한다(S407).
만일 엔트리 그룹의 크기가 상기 리프 페이지의 빈 공간 크기보다 작다면(S404), 선택된 엔트리 그룹을 리프 페이지에 저장한다(S408).
상기 엔트리 그룹을 상기 리프 페이지에 저장할 때, 리프 페이지 내의 다른 엔트리들과 정렬하여 저장한다(S409). 그 다음에, 상기 리프 페이지에 저장된 엔트리들의 순서 정보 및 키 정보를 메타 페이지에 저장한다(S510). 이때, 상기 순서 정보는 k-단위 통합 방법에 의해 구성될 수 있으며, 상기 키 정보는 정규화 작업을 통해 표현될 수 있다.
도 5는 본 발명의 일실시예에 따른 모바일 기기에서 작동하는 수정된 B-트리 인덱스 모델에 대한 메모리 계층 도면이다. 도 5를 참조하면, 출력 버퍼는 메인 메모리에 위치하고 수정된 B-트리 인덱스는 2차 저장 매체인 플래시 메모리 상에 위치하며 수정된 B-트리 인덱스가 색인하는 데이터는 수정된 B-트리 인덱스가 저장된 플래시 메모리의 공간과 독립된 플래시 메모리 공간에 저장되는 것을 알 수 있다.
상기 모바일 기기에 이용되는 플래시 메모리는 전력이 없어도 데이터를 보존하는 비휘발성 저장 매체이며, 저장 용량에 비해서 매체가 차지하는 공간이 작아 저장용량 대비 공간 효율이 매우 우수하고, 기계적인 동작이 없어 소모 전력이 적으며, 전체 데이터에 대한 접근 시간이 동일하며, 디스크에 비해서 매우 빠른 읽기 속도를 가진다는 장점들이 존재한다. 이러한 장점 때문에 주로 플래시 메모리는 휴 대를 위한 모바일 기기에서 많이 사용되며, MP3 플레이어, 디지털 카메라, 휴대폰, PDA 등의 많은 제품에서 사용되는 저장 매체이다. 본 발명에 따른 수정된 B-트리 인덱스 구조는 상기에서 기술된 원리에 의해 상기 플래시 메모리에서 매우 효율적인 동작을 할 수 있다.
지금까지 본 발명에 대하여 몇몇 실시예들을 들어 구체적으로 설명하였으나, 상기 실시예들은 본 발명을 이해하기 위한 설명을 위해 제시된 것이며, 본 발명의 범위가 상기 실시예에 제한되는 것은 아니다. 당업자라면 본 발명의 기술적 사상의 범위를 벗어나지 않고도 다양한 변형이 가능함을 이해할 수 있을 것이며, 본 발명의 범위는 첨부된 특허청구범위에 의해서 해석되어야 할 것이다.
본 발명에 따른 수정된 B-트리 인덱스는 쓰기 비용 및 읽기 비용에서 아래와 같은 효과를 가진다. 입력 작업에 대한 쓰기 비용은 인덱스가 써야 하는 페이지 개수로부터 계산할 수 있고, 검색 작업에 대한 읽기 비용은 인덱스가 읽어야 하는 페이지의 개수로 계산할 수 있다. 이하에서, 상기 두 개의 비용을 편의상 입력 작업 비용과 검색 작업 비용이라 칭한다.
도 6은 본 발명의 일실시예에 따른 수정된 B-트리 인덱스와 종래의 인덱스에 대한 성능 비교 분석 테이블이다. 도 6을 참조하면, 수정된 B-트리 인덱스의 입력 작업 비용과 검색 작업 비용을 종래의 B-트리 인덱스 및 BFTL과 비교하면 아래와 같은 효과를 가진다. 비교를 위해 종래의 B-트리 노드, BFTL의 노드, 수정된 B-트 리 인덱스의 중간 노드, 리프 페이지는 1페이지로 구성된다고 가정한다.
B-트리는 최악의 경우 분할이 발생하기 전까지 한 엔트리에 대한 입력 작업을 수행하기 위해 한 리프 노드를 써야 한다. 즉, 한 엔트리 당 1페이지를 쓰게 된다. 그에 비해 수정된 B-트리 인덱스는 출력 버퍼가 최악의 경우로 구성될 때에도 최소 두 개 이상의 엔트리당 1페이지만 쓸 수 있으며 그 이유는 다음과 같다. 수정된 B-트리의 출력 버퍼가 최악의 경우로 구성되는 조건은 출력 버퍼에 입력된 엔트리들이 모든 리프 노드에 균등하게 속하여 출력 작업 두 번째 단계에서 모두 같은 크기의 묶음이 형성될 때이다. 이렇게 되면 가장 큰 묶음을 쓰더라도 균일하게 분산된 효과로 각 묶음의 크기가 작아지므로 많은 엔트리를 한꺼번에 쓸 수 없게 되기 때문이다. 1페이지에 포함되는 엔트리의 개수를 m, 수정된 B-트리 인덱스의 리프 노드의 크기를 l 리프 페이지, 수정된 B-트리 인덱스의 출력 버퍼의 크기를 w 페이지, 현재까지 인덱스에 입력된 엔트리의 개수를 n이라 표현하면 아래의 [수학식 1] 같은 계산이 가능하다. 수정된 B-트리 인덱스의 출력 버퍼는 최악의 경우,
Figure 112006093880873-pat00001
엔트리를 한꺼번에 쓰므로, 상기 한꺼번에 쓸 수 있는 엔트리의 개수는 아래의 [수학식 1]과 같이 표현될 수 있다.
Figure 112006093880873-pat00002
즉, 1페이지에 포함되는 엔트리의 개수 m을 고정시킬 때, 출력 버퍼의 크기 w와 리프 노드의 크기 l이 크면 클수록 출력 버퍼가 한꺼번에 많은 엔트리를 쓰는 것이다. 수정된 B-트리 인덱스가 최악의 경우 두 개 이상의 엔트리당 1개의 페이지만 쓰기 위한 조건은 아래의 [수학식 2]와 같이 표현될 수 있다.
Figure 112006093880873-pat00003
즉, 상기 [수학식 2])를 만족시킬 수 있도록 w, l을 구성하면 수정된 B-트리 인덱스의 입력 작업 비용은 항상 종래의 B-트리 인덱스보다 작게 된다.
다음으로, 도 6을 참조하여 수정된 B-트리 인덱스의 검색 작업 비용을 종래의 B-트리 인덱스 및 BFTL과 비교한다. 수정된 B-트리 인덱스는 리프 노드의 크기가 종래의 B-트리에 비하여 크므로 대체로 종래의 B-트리보다 작은 높이(height)를 가진다. 그러므로 중간 노드의 검색 작업 비용은 대체로 종래의 B-트리보다 작다. 수정된 B-트리 인덱스의 리프 노드에서의 검색 작업 비용은 리프 노드의 크기에 의해서 결정된다. 메타 페이지의 순서 정보 리스트의 크기, 즉 리스트를 구성하는 순서 정보의 개수가 작을수록 키 정보 리스트의 크기를 크게 할 수 있으므로 검색 작업 비용이 줄어든다. 순서 정보 리스트의 크기를 작게 하기 위해서는 리프 노드에 포함되는 엔트리의 수가 줄어들어야 하고 그에 따라 리프 노드의 크기가 줄어들어야 한다. 하지만 수정된 B-트리의 리프 노드에서의 검색 작업 비용을 줄이기 위해 리프 노드의 크기를 너무 작게 할 필요는 없다. 수정된 B-트리 인덱스의 메타 페이 지의 순서 정보 리스트 크기가 키 정보 리스트의 크기보다 2배로 구성될 경우 수정된 B-트리 인덱스는 리프 노드에서 최소의 검색 작업 비용을 가진다. 이렇게 되면 2개의 키 정보로 구분되는 각각의 구간에 포함되는 순서 정보의 개수가 1개가 되므로 1개의 순서 정보에 해당하는 리프 페이지만 읽으면 되기 때문이다. 리프 노드에서의 전체 검색 작업 비용은 메타 페이지를 읽는 비용까지 합쳐서 총 2페이지 읽기 비용이 된다. 이는 종래의 B-트리 인덱스의 리프 노드에서의 검색 작업 비용이 1페이지 읽기 비용이므로 1페이지 읽기 비용만큼 크다. 수정된 B-트리 인덱스는 위에서 언급한대로 리프 노드의 크기를 적절히 구성하면 전체 검색 작업 비용을 대체로 종래의 B-트리 인덱스와 비슷한 값으로 만들 수 있다. 중간 노드에서의 검색 작업 비용은 대체로 종래의 B-트리 인덱스보다 작고, 리프 노드에서는 종래의 B-트리 인덱스보다 1페이지 읽기 비용만큼 크기 때문이다. 반면 BFTL의 검색 작업 비용은 최악의 경우 종래의 B-트리 인덱스보다 C배 만큼 크다. 최악의 경우 노드 전환 테이블의 모든 가상 노드가 C개의 조각으로 구성되는 리스트를 가지게 되고 검색 시 리스트를 따라 논리 주소 테이블(Logical Block Array, LBA) 상의 페이지들을 C번만큼 탐색하게 된다. 노드마다 종래의 B-트리 인덱스에 비해 C배의 검색 비용을 가지므로 전체 검색 비용도 종래의 B-트리 인덱스의 C배가 된다.
따라서, 수정된 B-트리 인덱스는 리프 노드의 크기에 대한 적절한 설정으로 종래의 B-트리 인덱스의 쓰기 비용을 줄이면서도 종래의 B-트리 인덱스에 가까운 검색 성능을 보일 수 있다.

Claims (13)

  1. 입력된 데이터 엔트리를 출력 버퍼에 저장하는 단계;
    상기 출력 버퍼에서 리프 노드의 영역별로 상기 엔트리를 그룹화하여 엔트리 그룹을 생성하는 단계;
    상기 엔트리 그룹 중 가장 많은 엔트리 개수를 가지는 그룹을 선택하는 단계; 및
    상기 선택된 엔트리 그룹을 상기 리프 노드에 한 번에 저장하는 단계를 포함하는 것을 특징으로 하는 수정된 B-트리 인덱스 구성 방법.
  2. 제 1 항에 있어서,
    상기 B-트리 인덱스 구성 방법은 상기 선택된 엔트리 그룹의 크기와 해당 리프 노드의 전체 빈 공간 크기를 비교하는 단계를 더 포함하는 것을 특징으로 하는 수정된 B-트리 인덱스 구성 방법.
  3. 제 2 항에 있어서,
    상기 B-트리 인덱스 구성 방법은 상기 엔트리 그룹의 크기가 상기 리프 노드의 빈 공간 크기보다 작은 경우, 상기 엔트리 그룹의 저장 시 남는 공간이 가장 작 은 리프 노드를 선택하는 단계를 더 포함하는 것을 특징으로 하는 수정된 B-트리 인덱스 구성 방법.
  4. 제 2 항에 있어서,
    상기 B-트리 인덱스 구성 방법은 상기 엔트리 그룹의 크기가 상기 리프 노드의 빈 공간 크기보다 큰 경우, 상기 리프 노드 내에 새로운 리프 페이지를 생성하는 단계를 더 포함하는 것을 특징으로 하는 수정된 B-트리 인덱스 구성 방법.
  5. 제 4 항에 있어서,
    상기 B-트리 인덱스 구성 방법은 상기 새로운 리프 페이지를 생성할 수 없는 경우, 새로운 리프 노드를 생성하는 단계를 더 포함하는 것을 특징으로 하는 수정된 B-트리 인덱스 구성 방법.
  6. 제 1 항에 있어서,
    상기 B-트리 인덱스 구성 방법은 상기 리프 노드 내의 리프 페이지에 저장된 엔트리를 크기에 따라 정렬하는 단계를 더 포함하는 것을 특징으로 하는 수정된 B-트리 인덱스 구성 방법.
  7. 제 1 항에 있어서,
    상기 입력된 엔트리는 상기 출력 버퍼에 할당된 메모리 공간이 다 찰 때까지 상기 출력 버퍼에 저장되는 것을 특징으로 하는 수정된 B-트리 인덱스 구성 방법.
  8. 리프 노드내의 리프 페이지에 엔트리를 크기 순으로 정렬하여 저장하는 단계; 및
    상기 리프 페이지에 대한 순서 정보 및 상기 순서 정보의 구간을 나눈 키정보를 메타 페이지에 저장하는 단계를 포함하되, 상기 리프 노드는 복수의 리프 페이지 및 하나의 메타 페이지로 구성되는 것을 특징으로 하는 수정된 B-트리 인덱스의 리프 노드 구성 방법.
  9. 제 8 항에 있어서,
    상기 순서 정보는 상기 리프 페이지의 순서 번호로 표현되는 것을 특징으로 하는 수정된 B-트리 인덱스의 리프 노드 구성 방법.
  10. 제 9 항에 있어서, 상기 순서 정보를 표현하는 비트 수는 상기 리프 노드를 구성하는 리프 페이지의 개수에 따라 결정되는 것을 특징으로 하는 수정된 B-트리 인덱스의 리프 노드 구성 방법.
  11. 제 8 항에 있어서,
    상기 키정보는 상기 순서 정보의 리스트를 동일한 순서 정보 개수의 구간으로 나누고, 상기 구간의 경계 값에 해당되는 엔트리의 키 값으로 구성되는 것을 특징으로 하는 수정된 B-트리 인덱스의 리프 노드 구성 방법.
  12. 제 11 항에 있어서,
    상기 키정보는 상기 리프 노드의 두 경계값의 차이값을 표현할 수 있는 최소의 바이트 수로 표현되는 것을 특징으로 하는 수정된 B-트리 인덱스의 리프 노드 구성 방법.
  13. 삭제
KR1020060129837A 2006-12-19 2006-12-19 플래시 메모리 상에서의 효율적인 동작을 위한 수정된b-트리 인덱스 구성 방법 KR100878142B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020060129837A KR100878142B1 (ko) 2006-12-19 2006-12-19 플래시 메모리 상에서의 효율적인 동작을 위한 수정된b-트리 인덱스 구성 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020060129837A KR100878142B1 (ko) 2006-12-19 2006-12-19 플래시 메모리 상에서의 효율적인 동작을 위한 수정된b-트리 인덱스 구성 방법

Publications (2)

Publication Number Publication Date
KR20080056819A KR20080056819A (ko) 2008-06-24
KR100878142B1 true KR100878142B1 (ko) 2009-01-13

Family

ID=39802841

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020060129837A KR100878142B1 (ko) 2006-12-19 2006-12-19 플래시 메모리 상에서의 효율적인 동작을 위한 수정된b-트리 인덱스 구성 방법

Country Status (1)

Country Link
KR (1) KR100878142B1 (ko)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101670930B1 (ko) * 2010-05-12 2016-11-10 삼성전자주식회사 하드웨어를 이용한 케이디 트리 생성 방법 및 장치
KR101699779B1 (ko) 2010-10-14 2017-01-26 삼성전자주식회사 플래시 메모리의 색인 방법
KR102128037B1 (ko) * 2019-03-18 2020-06-29 주식회사 로그프레소 다계층 메모리 구조에 최적화된 데이터 인덱스 방법 및 그 방법에 의해 인덱스된 데이터의 검색 방법

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5204958A (en) * 1991-06-27 1993-04-20 Digital Equipment Corporation System and method for efficiently indexing and storing a large database with high data insertion frequency
KR100289087B1 (ko) * 1997-12-17 2001-05-02 이계철 비플러스트리에다수의키값을추가하기위한방법
KR20060027183A (ko) * 2004-09-22 2006-03-27 (주) 프람트 B+ 트리 인덱스의 최대값들을 이용한 메인 메모리데이터베이스 복구 방법

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5204958A (en) * 1991-06-27 1993-04-20 Digital Equipment Corporation System and method for efficiently indexing and storing a large database with high data insertion frequency
KR100289087B1 (ko) * 1997-12-17 2001-05-02 이계철 비플러스트리에다수의키값을추가하기위한방법
KR20060027183A (ko) * 2004-09-22 2006-03-27 (주) 프람트 B+ 트리 인덱스의 최대값들을 이용한 메인 메모리데이터베이스 복구 방법

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
한국인터넷정보학회 춘계학술발표대회 논문집 제7권 제1호,"플래시메모리기반의 B+ 트리 알고리즘", 나갑주 등 공저, 2006. 4
한국정보과학회 가을 학술발표논문집 제33권 제2호(C), "플래시 메모리상에 B+트리를 위한 효율적인 색인 버퍼 관리 정책", 이현섭 등 공저, 2006. 10
한국정보과학회 한국컴퓨터종합학술대회 논문집(C), "NAND 플래시 메모리에서 페이지 크기에 따른 B+ 트리의 성능 평가", 유현석 등 공저, 2006. 6

Also Published As

Publication number Publication date
KR20080056819A (ko) 2008-06-24

Similar Documents

Publication Publication Date Title
US10642515B2 (en) Data storage method, electronic device, and computer non-volatile storage medium
JP6362316B2 (ja) バッファ・プールをメモリ常駐型データのための常在インメモリ・ストレージとして用いた、ハイブリッド・テーブル実装のための方法、システム、およびコンピュータ・プログラム製品
EP2633413B1 (en) Low ram space, high-throughput persistent key-value store using secondary memory
KR102564170B1 (ko) 데이터 객체 저장 방법, 장치, 및 이를 이용한 컴퓨터 프로그램이 저장되는 컴퓨터 판독가능한 저장 매체
KR100922389B1 (ko) 플래시 메모리를 위한 색인 스킴
CN110168532B (zh) 数据更新方法和存储装置
CN103838853B (zh) 一种基于不同存储介质的混合文件系统
CN103019887A (zh) 数据备份方法及装置
CA2758235A1 (en) Device and method for storage, retrieval, relocation, insertion or removal of data in storage units
KR101438667B1 (ko) 비휘발성 램 기반의 b+ 트리 데이터베이스화 방법
KR100878142B1 (ko) 플래시 메모리 상에서의 효율적인 동작을 위한 수정된b-트리 인덱스 구성 방법
KR100907477B1 (ko) 플래시 메모리에 저장된 데이터의 인덱스 정보 관리 장치및 방법
Lee et al. An efficient buffer management scheme for implementing a B-tree on NAND flash memory
JP6006740B2 (ja) インデックス管理装置
KR101699779B1 (ko) 플래시 메모리의 색인 방법
KR101805059B1 (ko) 데이터 저장 장치 및 방법
CA2439243C (en) Organising data in a database
Pagh Basic external memory data structures
CN111258955A (zh) 一种文件读取方法和系统、存储介质、计算机设备
Gautam SSD Based Indexing and Tree Data Structures
JP5354606B2 (ja) データ蓄積装置及び方法及びプログラム及びデータ検索装置及び方法及びプログラム
CN113535092B (zh) 用于减少内存元数据的存储引擎、方法和可读介质
US20160103623A1 (en) Method for controlled collision of hash algorithm based on nand flash memory
US20230409536A1 (en) File system metadata layout for append-only storage
Sarkar et al. An approach on cloud disk searching using parallel channels

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
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: 20130107

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20140106

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20150105

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20160105

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20170106

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20180105

Year of fee payment: 10

FPAY Annual fee payment

Payment date: 20190102

Year of fee payment: 11

FPAY Annual fee payment

Payment date: 20200102

Year of fee payment: 12