KR101377923B1 - 지연 갱신을 수행하는 b-트리를 사용하여 플래시 메모리 내에 데이터를 저장하는 장치 및 방법 - Google Patents

지연 갱신을 수행하는 b-트리를 사용하여 플래시 메모리 내에 데이터를 저장하는 장치 및 방법 Download PDF

Info

Publication number
KR101377923B1
KR101377923B1 KR1020110130963A KR20110130963A KR101377923B1 KR 101377923 B1 KR101377923 B1 KR 101377923B1 KR 1020110130963 A KR1020110130963 A KR 1020110130963A KR 20110130963 A KR20110130963 A KR 20110130963A KR 101377923 B1 KR101377923 B1 KR 101377923B1
Authority
KR
South Korea
Prior art keywords
node
nodes
flash memory
memory
loaded
Prior art date
Application number
KR1020110130963A
Other languages
English (en)
Other versions
KR20130064379A (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 KR1020110130963A priority Critical patent/KR101377923B1/ko
Publication of KR20130064379A publication Critical patent/KR20130064379A/ko
Application granted granted Critical
Publication of KR101377923B1 publication Critical patent/KR101377923B1/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]
    • 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
    • G06F16/2246Trees, e.g. B+trees
    • 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/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • 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/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0658Controller construction arrangements

Landscapes

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

Abstract

플래시 메모리를 사용하는 저장 장치 및 저장 방법이 제공된다. 플래시 메모리 기반 저장 장치는 지연 갱신을 수행하는 B-트리를 사용할 수 있다. 플래시 메모리 기반 저장 장치는 플래시 메모리 내에 저장된 B-트리의 노드들 중 삽입 연산에 의해 변경이 일어나는 변경 노드들을 식별한다. 플래시 메모리 기반 저장 장치는 식별된 변경 노드들을 메모리 내에 적재하고, 메모리 내에 적재된 노드들에게 삽입 연산에 의한 변경을 적용함으로써, 플래시 메모리에 대한 쓰기 연산을 지연시킬 수 있다.

Description

지연 갱신을 수행하는 B-트리를 사용하여 플래시 메모리 내에 데이터를 저장하는 장치 및 방법{APPARATUS AND METOHD FOR STORING DATA IN FLASH MEMORY BY USING B-TREE PERFORMING DELAYED UPDATE}
아래의 실시예들은 플래시 메모리를 사용하는 저장 장치 및 저장 방법에 대한 것이다. 지연 갱신을 수행하는 B-트리를 사용하여 플래시 메모리 내에 데이터를 저장하는 장치 및 방법이 개시된다.
플래시(flash) 메모리(memory) 기반의 저장 장치는, 빠른 접근(access) 속도, 작은 크기, 가벼운 무게 및 저전력 소모 등의 이유로 하드 디스크(hard disk)를 대체하는 저장 매체로 주목 받고 있다.
플래시 메모리 내의 일정한 개수의 페이지(page)들이 하나의 블록(block)을 구성하고, 여러 개의 블록들이 모여 플래시 메모리를 구성한다.
상기와 같이 구성된 플래시 메모리는 하드 디스크와는 상이한 독특한 특성들을 갖는다. 플래시 메모리는, 하드 디스크와 달리, 읽기 연산 및 쓰기 연산 이외에 소거 연산이 필요하며, 읽기 연산, 쓰기 연산 및 소거 연산들 각각의 수행 단위 및 수행 시간이 서로 비대칭적이다. 읽기 연산 및 쓰기 연산은 (예컨대, 2킬로바이트(Kilo Byte; KB)의) 페이지 단위로 수행되며, 각각 25μs 및 200μs 정도의 시간 내에 수행된다. 반면, 소거 연산은 (예컨대, 128KB의) 블록 단위로 수행되며, 일반적으로 세 가지 연산들 중 가장 느린 1.5ms 정도의 시간 내에 수행된다.
또한 플래시 메모리는 제자리 갱신을 할 수 없다. 따라서, 플래시 메모리 내의 특정한 물리 주소에 저장된 데이터를 갱신하기 위해서는, 우선 상기의 물리 주소에 대응하는 블록에 대한 소거 연산이 선행되고, 다음으로 갱신된 데이터가 쓰기 연산을 통해 물리 주소에 대응하는 페이지 내에 저장(또는, 기록)되어야 한다. 상기의 소거 연산을 쓰기-전-소거(erase-before-write) 동작으로 칭한다.
플래시 메모리 기반의 저장 장치는 다수 개의 플래시 메모리 셀을 묶음으로써 만들어진다. 따라서, 플래시 메모리 기반의 저장 장치는 플래시 메모리의 물리적 특성을 그대로 갖는다.
하드 디스크 등의 디스크 기반의 저장 장치를 위한 기존의 호스트 시스템은 데이터 저장을 위해 읽기 연산 및 쓰기 연산 만을 수행한다. 따라서, 전술된 소거 연산을 추가적으로 요구하는 플래시 메모리는 읽기 연산 및 쓰기 연산을 통해 데이터를 저장하는 호스트 시스템에 의해 바로 사용될 수는 없다. 기존의 호스트 시스템이 플래시 메모리를 바로 사용하기 위해서는 플래시 전환 계층(Flash Translation Layer; FTL)이 필요하다. FTL은 소거 연산을 일으키는 쓰기-전-소거 동작을 숨기고, 읽기 연산 및 쓰기 연산으로 플래시 메모리를 사용할 수 있게 하는 인터페이스(interface)를 제공하는 별도의 중간 소프트웨어 계층이다. FTL은 호스트로부터 쓰기 요청을 수신하여, 쓰기 요청의 대상인 데이터를 플래시 메모리의 비어있는 물리 페이지로 사상(mapping)시킨다.
인덱스(index)는 파일 시스템(file system) 또는 데이터베이스(database)에서 디스크에 저장된 데이터에 빠르게 접근하기 위하여 사용된다. 그러나, 디스크 기반의 저장 장치를 위해 구현된 인덱스가 플래시 메모리에 바로 적용될 경우, 이러한 인덱스는 제자리 갱신을 빈번하게 발생시킬 수 있다. 따라서, FTL에 의해 효율적인 사상 알고리즘이 제공되더라도, 플래시 메모리의 특성 상 상기의 제자리 갱신을 수행하기 위한 쓰기-전-소거 동작이 발생한다. 예컨대, 디스크 기반의 저장 장치를 위해 구현된 B-트리가 플래시 전환 계층 위에서 인덱스 구조로서 사용될 경우, 제자리 갱신이 빈번하게 발생하는 B-트리의 특성상, 인덱스 생성에 있어서 성능의 저하가 발생한다.
따라서, 플래시 메모리에 기반한 저장 장치에서 사용되기 위해, 느린 쓰기 연산 및 소거 연산을 감소시키는, 플래시 메모리의 특성을 고려한 새로운 인덱스 구조가 필요하다. 이러한 플래시 메모리 전용의 새로운 인덱스 구조로서 μ-트리 및 로그 구조의 B(Log-Structured B; LSB)-트리 등이 제안되었다. 그러나, μ-트리는 비효율적인 페이지 관리의 측면에서, LSB-트리는 임시 노드의 추가 관리 비용 등의 측면에서 문제점이 있는 것으로 볼 수 있다. 또한, 한국공개특허 제10-2010-0083976호(공개일 2010년 07월 23일)는 B-트리를 사용하여 인덱스를 제공하는 플래시 메모리 저장 장치를 개시하며, 종래의 디스크 기반의 저장 장치를 위해 사용되는 B-트리에 비해, 변형된 연산 방법을 사용하는 B-트리를 개시한다.
일 실시예는 변경이 일어나는 노드들을 메모리에 적재함으로써 플래시 메모리의 쓰기 연산을 지연시키는 플래시 메모리에 기반한 데이터 저장 장치 및 플래시 메모리 내에 저장된 데이터의 관리 방법을 제공할 수 있다.
일 실시예는 전원 차단에 대비하여 일정 조건이 발생하였을 때 메모리에 적재된 노드들을 플래시 메모리 내에 저장하는 플래시 메모리에 기반한 데이터 저장 장치 및 플래시 메모리 내에 저장된 데이터의 관리 방법을 제공할 수 있다.
일 측에 따르면, 하나 이상의 노드들을 포함하는 B-트리를 저장하는 플래시 메모리, 상기 하나 이상의 노드들 각각을 선택적으로 적재하는 메모리 및 상기 플래시 메모리 및 상기 메모리를 제어하는 제어부를 포함하고, 상기 제어부는 상기 B-트리에 대한 삽입 연산 시 상기 하나 이상의 노드들 중 상기 삽입 연산에 의해 변경이 일어나는 모든 하나 이상의 변경 노드들을 상기 메모리 내에 적재하고, 상기 삽입 연산에 따른 변경을 상기 메모리 내에 적재된 노드들에게 적용함으로써 상기 플래시 메모리에 대한 쓰기 연산을 지연시키는, 플래시 메모리 기반 저장 장치가 제공된다.
상기 B-트리는 상기 플래시 메모리의 인덱스 구조를 나타낼 수 있다.
상기 하나 이상의 변경 노드들은 상기 하나 이상의 노드들 중 상기 삽입 연산에 의해 변경이 일어나는 리프 노드 및 상기 리프 노드의 조상 노드들일 수 있다.
상기 제어부는 상기 메모리 내에 적재된 노드의 모든 엔트리들 내에 키들이 저장되면, 상기 적재된 노드를 상기 플래시 메모리 내에 저장할 수 있다.
상기 제어부는 상기 메모리 내에 적재된 노드가 상기 플래시 메모리 내의 노드와 교환될 때, 상기 적재된 노드를 상기 플래시 메모리 내에 저장할 수 있다.
상기 제어부는 상기 삽입 연산 시 상기 하나 이상의 노드들 중 키가 추가될 리프 노드를 결정할 수 있다.
상기 하나 이상의 변경 노드들은 상기 B-트리의 루트 노드로부터 상기 리프 노드까지의 경로 내에 있는 하나 이상의 노드들일 수 있다.
상기 제어부는 상기 하나 이상의 노드들 중 리프 노드가 상기 메모리 내에 적재될 때, 상기 메모리 내에 적재된 노드들 중 다른 리프 노드를 상기 플래시 메모리 내에 저장할 수 있다.
상기 제어부는 순차적인 삽입 연산들을 감지할 수 있고, 상기 삽입 연산이 상기 순차적인 삽입 연산들 중 하나이면 상기 적재된 노드들의 분할 없이 상기 삽입 연산에 따른 상기 변경을 적용할 수 있다.
상기 제어부는 일정한 조건이 만족될 때, 상기 메모리 내에 적재된 모든 노드들을 상기 플래시 메모리 내에 저장할 수 있다.
상기 조건은 상기 하나 이상의 노드들 중 상기 메모리 내에 적재된 루트 노드 내의 키들의 개수가 변경되는 것일 수 있다.
다른 일 측에 따르면, 플래시 메모리 내에 저장된 하나 이상의 노드들을 포함하는 B-트리를 관리하는 방법에 있어서, 특정한 키를 상기 B-트리 내에 삽입하는 삽입 연산에 의해 변경이 일어나는 하나 이상의 변경 노드들을 식별하는 단계, 상기 하나 이상의 변경 노드들 모두를 메모리 내에 적재하는 단계 및 상기 삽입 연산에 따른 변경을 상기 메모리 내에 적재된 노드들에게 적용함으로써 상기 플래시 메모리에 대한 쓰기 연산을 지연시키는 단계를 포함하는, 플래시 메모리 내에 저장된 데이터 관리 방법이 제공된다.
상기 플래시 메모리 내에 저장된 데이터 관리 방법은, 상기 메모리 내에 적재된 노드들 중 모든 엔트리들 내에 키들이 저장된 노드를 상기 플래시 메모리 내에 저장하는 단계를 더 포함할 수 있다.
상기 플래시 메모리 내에 저장된 데이터 관리 방법은, 상기 하나 이상의 변경 노드들 중 하나의 노드와 교환되는 상기 메모리 내에 적재된 노드를 상기 플래시 메모리 내에 저장하는 단계를 더 포함할 수 있다.
상기 삽입 연산이 순차적인 삽입 연산들 중 하나인 경우 상기 변경은 상기 메모리에 적재된 노드의 분할 없이 상기 메모리 내에 적재된 노드들에게 적용될 수 있다.
상기 플래시 메모리 내에 저장된 데이터 관리 방법은, 일정한 조건이 만족될 경우, 메모리 내에 적재된 모든 노드들을 플래시 메모리 내에 저장하는 단계를 더 포함할 수 있다.
변경이 일어나는 노드들을 메모리에 적재함으로써 플래시 메모리의 쓰기 연산을 지연시키는 플래시 메모리에 기반한 데이터 저장 장치 및 플래시 메모리 내에 저장된 데이터의 관리 방법이 제공된다.
전원 차단에 대비하여 일정 조건이 발생하였을 때 메모리에 적재된 노드들을 플래시 메모리 내에 저장하는 플래시 메모리에 기반한 데이터 저장 장치 및 플래시 메모리 내에 저장된 데이터의 관리 방법이 제공된다.
플래시 메모리를 저장 매체로 사용하는 데이터베이스 시스템 및 파일 시스템에서 인덱스 구조로서 사용될 수 있는 변형된 B-트리가 제공된다. 상기의 B-트리에 의해 대용량의 데이터 삽입 및 검색이 빠른 속도로 수행될 수 있다.
도 1은 플래시 메모리 기반 저장 장치를 위한 인덱스 구조를 설명한다.
도 2는 일 실시예에 따른 플래시 메모리에 기반 저장 장치의 구조도이다.
도 3은 일 예에 따른 LUB-트리의 구조를 나타낸다.
도 4는 삽입 연산 전후의 B-트리의 구조들을 설명한다.
도 5는 일 예에 따른 LUB-트리가 순차적인 연산을 처리하는 방법을 설명한다.
도 6은 일 예에 따른 삽입 연산에 따른 LUB-트리의 구조의 변화를 설명한다.
도 7은 일 예에 따른 순차적인 삽입 연산들에 따른 LUB-트리의 구조의 변화를 설명한다.
도 8은 일 예에 따른 LUB-트리의 삽입 연산의 알고리즘의 의사 코드이다.
도 9는 일 예에 따른 전원 차단 회복 정책을 설명한다.
도 10은 일 실시예에 따른 LUB-트리를 사용하여 플래시 메모리 내에 저장된 데이터를 관리하는 방법의 흐름도이다.
도 11은 일 예에 따른 레코드의 삽입에 따른 트리들 각각의 높이를 도시한다.
도 12는 일 예에 따른 레코드의 삽입에 따른 트리들 각각의 생성 시간을 도시한다.
도 13은 일 예에 따른 트리들 각각의 검색 시간을 도시한다.
도 14는 일 예에 따른 트리들 각각의 페이지 할당량을 도시한다.
이하에서, 실시예들을, 첨부된 도면을 참조하여 상세하게 설명한다. 그러나, 본 발명이 실시예들에 의해 제한되거나 한정되는 것은 아니다. 각 도면에 제시된 동일한 참조 부호는 동일한 부재를 나타낸다.
도 1은 플래시 메모리 기반 저장 장치를 위한 인덱스 구조를 설명한다.
B-트리 구조(110)는 플래시 메모리 기반 저장 장치를 위한 인덱스 구조로서 사용된 B-트리의 일 예를 나타낸다.
제1 블록도(120)는 B-트리 구조(110)를 저장하기 위해 유주성(Wandering)-트리가 사용되었을 경우의 플래시 메모리 내의 페이지들의 종류들을 나타낸다.
Wandering-트리는, 제자리 갱신 시 발생하는 소거 연산을 감소시키기 위하여, 갱신이 발생하는 노드만을 새로운 페이지에 할당하여 저장하는 기법을 사용한다. B-트리 구조(110)에서 나타난 것과 같이, 10 개의 노드들을 갖는 트리의 리프 노드 J에 삽입 연산, 갱신 연산 또는 삭제 연산이 발생하면, 변경이 일어나는 리프 노드 J, 부모 노드 D 및 루트 노드 A는 플래시 메모리의 새로운 페이지에 할당 및 저장된다.
그러나, Wandering-트리는, 1 회의 삽입 연산을 처리하기 위하여, 매 삽입 마다 변경되는 모든 부모 노드를 새로운 페이지에 추가적으로 저장해야 하는 문제점을 갖는다.
제2 블록도(130)는 B-트리 구조(110)를 저장하기 위해 μ-트리가 사용되었을 경우의 플래시 메모리 내의 페이지들의 종류들을 나타낸다.
μ-트리는 Wandering-트리에서 발생하는 부모 노드에 대한 추가적인 쓰기 연산을 감소시키기 위해 하나의 페이지에 변경이 발생하는 모든 노드들을 모아서 저장한다. 리프 노드 J에 삽입 연산, 갱신 연산 또는 삭제 연산이 발생하면, 변경이 발생하는 리프 노드 J, 부모 노드 D 및 루트 노드 A는 한 페이지에 모아져서 저장된다. 따라서 삽입 연산, 갱신 연산 및 삭제 연산이 한 번의 쓰기 연산에 의해 처리될 수 있다. 그러나, μ-트리는 페이지의 절반을 리프 노드로 사용하기 때문에, 리프 노드만 저장된 페이지들 내의 공간이 낭비된다. 또한, μ-트리는 페이지를 나누어 여러 레벨들의 노드들을 저장하기 때문에 노드 분할이 빈번하게 발생한다. 상술된 것과 같은 노드 분할은 추가적인 쓰기 연산을 발생시키고, 트리의 신장을 빠르게하기 때문에 기존의 방식에 비해 더 큰 높이의 B-트리를 생성하고, 검색 성능을 저하시킨다.
제3 블록도(140)는 B-트리 구조(110)를 저장하기 위해 LSB-트리가 사용되었을 경우의 플래시 메모리 내의 페이지들의 종류들을 나타낸다.
로그에 기반하는 LSB-트리는 μ-트리의 문제점을 해결하기 위하여 삽입, 갱신 및 삭제 연산 시 리프 노드의 변경되는 부분을 임시 노드에 저장하고 관리한다. 즉, LSB-트리는 갱신되는 엔트리(entry)를 임시로 생성한 노드 내에 별도로 저장하고, 임시로 생성한 노드를 플래시 메모리 내에 기록한다. 따라서, LSB-트리에 대한 대부분의 연산은 플래시 메모리의 1 회의 쓰기 연산에 의해 수행된다. 리프 노드 J에 삽입 연산, 갱신 연산 또는 삭제 연산이 발생하면, 리프 노드 J의 변경되는 엔트리는 임시 노드에 저장되고, 임시 노드는 플래시 메모리의 새로운 페이지 내에 저장된다. LSB-트리는 μ-트리와 마찬가지로 1 회의 쓰기 연산으로 삽입, 갱신 및 삭제 연산을 수행할 수 있다.
그러나, LSB 트리는 임시 노드가 가득 차게 되면, 임시 노드 및 리프 노드를 병합하고, 부모 노드 내의 병합된 리프 노드에 대한 정보를 갱신해야 한다. 이러한 병합 연산은 여러 번의 추가적인 쓰기 연산을 요구한다. 또한 임시 노드를 메모리 내에서 관리하기 위하여 추가적인 비용이 요구되며, 임시 노드 내에 검색 키가 존재하지 않지 않는 경우, 플래시 메모리에 대한 추가적인 읽기 연산이 요구된다. 이러한, 추가적인 쓰기 연산 및 읽기 연산은 저장 장치의 성능을 저하시킬 수 있다.
하기에서, 지연 갱신을 이용한 지연 갱신 B(Lazy Update B; LUB)-트리를 사용하는 플래시 메모리에 기반한 저장 장치가 개시된다.
도 2는 일 실시예에 따른 플래시 메모리에 기반 저장 장치의 구조도이다.
플래시 메모리 기반 저장 장치(200)는 플래시 메모리(210), 메모리(220) 및 제어부(230)를 포함할 수 있다.
플래시 메모리(210)는 B-트리를 저장할 수 있다. 상기의 B-트리는 LUB-트리일 수 있다. B-트리는 하나 이상의 노드들을 포함할 수 있다.
하나의 노드는 플래시 메모리(210)의 하나의 페이지에 대응할 수 있다. 즉, 하나의 페이지가 하나의 노드를 저장할 수 있다.
B-트리는 플래시 메모리(210)의 인덱스 구조를 나타낼 수 있다.
메모리(220)는 B-트리의 하나 이상의 노드들 각각을 선택적으로 적재할 수 있다. 즉, 메모리(220)는 플래시 메모리(210) 내에 저장된 B-트리의 하나 이상의 노드들 각각을 선택적으로 캐싱(caching)할 수 있다.
메모리(220)는 램(Random Access Memory; RAM)과 같은 휘발성 메모리일 수 있다. 메모리(220)는 캐쉬(cache) 메모리일 수 있다.
제어부(230)는 B-트리의 하나 이상의 노드들 중 메모리(220) 내에 적재될 노드들을 선택할 수 있다. 제어부(230)는 메모리(220) 내에 적재된 노드들 중 특정한 노트를 플래시 메모리(210) 내에 저장할 수 있다. 제어부(230)는 메모리(220) 내에 적재된 노드를 플래시 메모리(210)에 저장하면서, 상기의 노드를 메모리(220)에서 삭제할 수 있다.
제어부(130)는 FTL일 수 있다.
도 3은 일 예에 따른 LUB-트리의 구조를 나타낸다.
도시된 LUB-트리는 A 내지 J로 각각 명명된 10 개의 노드들을 포함한다. 노드 A는 루트(root) 노드이고 , 노드 E 내지 노드 J는 각각 리프(leaf) 노드이다.
삽입 연산은 키(또는, 키를 포함하는 레코드)를 LUB-트리 내에 삽입하는 연산이다. 키(또는, 키를 포함하는 레코드)는 리프 노드 내의 특정한 엔트리(entry) 내에 삽입된다.
제어부(230)는 특정한 키를 LUB-트리 내에 삽입하는 삽입 연산에 의해 변경이 일어나는 하나 이상의 변경 노드들을 식별할 수 있다.
도 3에서, 노드 J가 삽입 연산에 의해 변경이 일어나는 리프 노드로 도시되었다. 삽입 연산, 갱신 연산 또는 삭제 연산에 의해 리프 노드 J에 변경이 일어날 경우, 리프 노드 J의 조상 노드들(예컨대, 리프 노드 J의 부모 노드 D 및 루트 노드 A)에도 갱신 연산에 의해 변경이 발생할 수 있다. 리프 노드 J의 조상 노드들에 대한 갱신(또는, 갱신)은 플래시 메모리의 쓰기 연산을 추가적으로 발생시킬 수 있다. 따라서, LUB-트리에 대한 삽입 연산 시, 제어부(230)는 LUB-트리의 하나 이상의 노드들 중 상기의 삽입 연산에 의해 변경이 일어나는 모든 하나 이상의 변경 노드들을 메모리(220) 내에 적재할 수 있고, 삽입 연산에 따른 변경을 메모리(220) 내에 적재된 노드들에게 적용할 수 있다. 여기서, 하나 이상의 변경 노드들은 LUB-트리의 하나 이상의 노드들 중 삽입 연산에 의해 변경이 일어나는 리프 노드 및 상기의 리프 노드의 조상 노드들일 수 있다.
제어부(230)는 변경 노드들 각각을 저장하는 플래시 메모리(210) 내의 페이지들을 유효하지 않은(invalid) 페이지들로 설정할 수 있다. 유효하지 않은 페이지들은 이후 노드를 저장하기 위해 재사용될 수 있다.
제어부(230)는 삽입 연산에 따른 변경을 메모리(120) 내에 적재된 노드들에게 적용함으로써 플래시 메모리(210)에 대한 쓰기 연산을 지연시킬 수 있다. 도 3에서, 제어부(230)는 삽입 연산에 의해 메모리(220) 내에 적재된 리프 노드 J에 변경이 일어날 경우, 메모리(220) 내에 적재된 리프 노드 J에게 삽입 연산에 의한 변경을 적용할 수 있다. 삽입 연산 후, 리프 노드 J의 부모 노드 D와 루트 노드 A가 메모리(220) 내에 적재되었기 때문에, 플래시 메모리(210)에 대한 추가적인 쓰기 연산 없이, 삽입 연산이 종료할 수 있다.
제어부(230)는 삽입 연산 시 하나 이상의 노드들 중 키가 추가될 리프 노드를 결정할 수 있다. 하나 이상의 변경 노드들은 LUB-트리의 루트 노드로부터 리프 노드까지의 경로 내에 있는 하나 이상의 노드들일 수 있다.
제어부(230)는 메모리 내에 적재된 노드들 중 특정한 조건을 만족시키는 노드를 플래시 메모리(210) 내에 저장할 수 있다. 상기의 저장에 의해 플래시 메모리(210)에 대한 쓰기 연산이 발생할 수 있다. 즉, 상기의 저장은 플래시 메모리(210)로의 플러시(flush)일 수 있다. 이하, 제어부(230)는 플래시 메모리(210) 내에 저장되는 노드를 메모리(220)에서 삭제할 수 있다.
제어부(230)는 메모리(220) 내에 적재된 노드의 모든 엔트리들 내에 키들이 저장되면, 상기의 적재된 노드를 플래시 메모리(210) 내에 저장할 수 있다. 일련의 삽입 연산들에 의해 메모리(220) 내에 적재된 특정한 노드 내의 모든 엔트리들 내에 데이터가 저장되면, 이후, 삽입 연산 등에 의해 상기의 특정한 노드에 변경이 일어날 확률은 낮다고 추정될 수 있다.
제어부(230)는 메모리(220) 내에 적재된 노드가 플래시 메모리(210) 내의 노드와 교환될 때, 상기의 적재된 노드를 플래시 메모리(210) 내에 저장할 수 있다. 상기의 교환은 메모리(220) 내에 이미 적재된 제1 리프 노드 대신, 다른 제2 리프 노드가 메모리(220) 내에 적재되는 것을 의미할 수 있다.
제어부(230)는 하나 이상의 노드들 중 특정한 리프 노드가 메모리(220) 내에 적재될 때, 메모리(220) 내에 적재된 노드들 중 다른 리프 노드를 플래시 메모리(210) 내에 저장할 수 있다. 예컨대, 다른 삽입 연산에 의해, 리프 노드 I에 변경이 일어날 경우, 제어부(230)는 리프 노드 I를 메모리(220) 내에 적재할 수 있고, 이미 적재되어 있는 리프 노드 J를 플래시 메모리(210) 내에 저장할 수 있다.
도 4는 삽입 연산 전후의 B-트리의 구조들을 설명한다.
도 4에서, 노드 A(410), 노드 B(420) 및 노드 C(430)로 구성된 B-트리(400)에 키 "9"를 삽입하는 연산을 적용하였을 때의 결과가 도시되었다.
키 "9"를 삽입함으로써 리프 노드 C(430) 내에서 발생한 오버플로우(overflow)로 인해 리프 노드 C(430)는 리프 노드 C1(432) 및 리프 노드 C2(434)로 분할될 수 있다. 루트 노드 A(410)는 키 7을 더 포함하는 루트 노드 A'(412)로 변경될 수 있다. 제자리 갱신이 될 수 없는 플래시 메모리의 특성 상, 기존의 루트 노드 A(410) 및 리프 노드 C(430)가 직접 변경될 수 없다. 따라서, 루트 노드 A(410) 및 리프 노드 C(430)를 각각 저장하는 페이지들은 유효하지 않은(invalid) 페이지가 된다. 또한, 변경된 루트 노드 A'(410), 리프 노드 C1(432) 및 리프 노드 C2(434)를 각각 저장하는 페이지들이 갱신될 수 있다.
B-트리(400)는 삽입 연산 후 변경된 루트 노드 A'(410), 기존의 리프 노드(420), 추가된 리프 노드 C1(432) 및 추가된 리프 노드 C2(434)로 구성될 수 있다.
도 5는 일 예에 따른 LUB-트리가 순차적인 연산을 처리하는 방법을 설명한다.
도 4에서, "9" 이상의 키들이 추가적으로 삽입될 경우, 노드 C1(432)에서는 삽입 연산에 의한 변경이 발생하지 않는다. 따라서, 노드 C1를 위해 할당된 페이지의 공간 중 절반이 사용되지 않은 채 낭비될 수 있다. 또한, 분할에 의해 생성된 노드 C1(432) 및 노드 C2(434)를 저장하기 위해 분할이 발생하지 않았을 때에 비해 1 회의 추가적인 쓰기 연산이 발생할 수 있다.
제어부(230)는, 플래시 메모리(210) 내의 페이지를 효율적으로 사용하고, 추가적인 쓰기 연산을 감소시키기 위해, 순차적인 삽입 연산들을 감지할 수 있고, 삽입 연산이 순차적인 삽입 연산들 중 하나이면 메모리(220) 내에 적재된 노드들의 분할 없이 삽입 연산에 따른 변경을 적용할 수 있다.
제어부(230)는 새로운 키가 삽입되는 리프 노드 내에 저장된 키들 각각의 값들이 순차적인 순서를 갖는지 여부에 기반하여 순차적인 삽입 연산들을 감지할 수 있다. 제어부(230)는 새로운 키가 삽입되는 리프 노드 내에 저장된 키들 각각의 값들이 순차적인 순서를 갖는 경우, 순차적인 삽입 연산들이 발생한 것으로 판단할 수 있다.
도 5의 LUB-트리(500)는 키 "5", 키 "6", 키 "7", 키 "8" 및 키 "9"가 연속적으로 삽입된 결과를 나타낸다.
연속적으로 추가된 키 "5", 키 "6", 키 "7" 및 키 "8"는 모두 메모리(220) 내에 적재된 노드 C(540) 내에 저장된다. 제어부(230)는 키 "5", 키 "6", 키 "7" 및 키 "8"에 의해 노드 C(540)의 모든 엔트리들 내에 키들이 저장되면 노드 C(540)를 플래시 메모리(210) 내에 저장할 수 있다.
이후, 키 "9"를 저장하기 위해, 제어부(230)는 새로운 노드 D(550)를 메모리(220) 내에서 생성할 수 있다.
키 9가 삽입된 후, LUB-트리(500)는 루트 노드 A(510), 리프 노드 B(520), 플래시 메모리(210) 내에 저장된 리프 노드 C(530) 및 메모리(220) 내에 적재된 리프 노드(D)로 구성될 수 있다.
도 6은 일 예에 따른 삽입 연산에 따른 LUB-트리의 구조의 변화를 설명한다.
도 6에서, 삽입 연산 전 LUB-트리(600) 및 삽입 연산 후 LUB-트리(650)가 도시되었다. 삽입 연산 전 LUB-트리(600)에 키 "25"가 삽입된다. 여기서, 루트 노드 A는 공백 노드로서, 키(또는, 키를 저장하기 위한 엔트리)를 포함하지 않고 자식 노드 B를 가리킨다.
삽입 연산 전 LUB-트리(600)에서, 노드 A, 노드 B 및 노드 E가 메모리(220) 내에 적재되었다. 노드 C 및 노드 D는 플래시 메모리(210) 내에 저장되었다. 노드 C 및 노드 D를 각각 저장하는 플래시 메모리(210) 내의 페이지들은 유효한(valid) 페이지들이다.
제어부(230)는 삽입 연산 전 LUB-트리(600) 내에서 키 25를 삽입할 리프 노드를 검색할 수 있다. 검색에 의해, 제어부(230)는 키 25를 삽입할 리프 노드로서 노드 D를 결정할 수 있다. 노드 D는 메모리(220) 내에 적재되지 않은 노드이다. 제어부(230)는 메모리(220) 내에 적재된 다른 리프 노드인 노드 E를 플래시 메모리(210) 내에 저장하고, 메모리(220) 내에서 삭제할 수 있다. 제어부(230)는 플래시 메모리(210)로부터 노드 D를 읽어, 메모리(220) 내에 적재할 수 있다. 상기의 적재 후, 제어부(230)는 메모리(220) 내에 적재된 노드 D 내에 키 25를 삽입할 수 있다. 키 25가 삽입됨으로써 변경된 노드를 노드 D'로 표시한다.
제어부(230)는 기존의 노드 D를 저장한 플래시 메모리(210) 내의 페이지를 유효하지 않은 페이지로 설정할 수 있다. 제어부(230)는 노드 D를 대체하는 노드 D'를 저장하기 위한 플래시 메모리(210)의 쓰기 연산을 다음의 삽입 연산까지 지연시킬 수 있다.
따라서, 삽입 연산 후 LUB-트리(650)에서, 노드 A, 노드 B 및 노드 D'가 메모리(220) 내에 적재된다. 노드 C 및 노드 E는 플래시 메모리(210) 내에 저장되었다. 노드 C 및 노드 E를 각각 저장하는 플래시 메모리(210) 내의 페이지들은 유효한(valid) 페이지들이다.
도 7은 일 예에 따른 순차적인 삽입 연산들에 따른 LUB-트리의 구조의 변화를 설명한다.
도 7에서, 키 "30", 키 "31", 키 "32" 및 키 "33"이 순차적으로 삽입된 전 LUB-트리(700) 및 상기의 전 LUB-트리(700)에 키 "34"가 추가로 삽입된 후 LUB-트리(750)가 도시되었다. 여기서, 루트 노드 A는 공백 노드로서, 키를 포함하지 않고 자식 노드 B를 가리킨다.
전 LUB-트리(700)에서, 제어부(230)는 노드 분할을 사용하지 않은 채 전 LUB-트리(700)에 순차적인 키들(키 "30", 키 "31", 키 "32" 및 키 "33")을 삽입한다. 제어부(230)는 메모리(220) 내에 적재된 리프 노드 E에 키 "30", 키 "31", 키 "32" 및 키 "33"가 삽입되면, 리프 노드 E를 분할하지 않고, 한 페이지의 크기만큼의 노드 데이터를 그대로 플래시 메모리(210) 내에 저장한다. 즉, 제어부(230)는 키 "30", 키 "31", 키 "32" 및 키 "33"(및 키 "30", 키 "31", 키 "32" 및 키 "33"에 대응하는 데이터)를 플래시 메모리(210)의 한 페이지 내에 저장한다. 따라서, 전 LUB-트리(700)에서 메모리(220) 내에 적재되었던 노드 E는, 후 LUB-트리(750)에서는 플래시 메모리(210) 내에 저장된다.
후 LUB-트리(750)에서, 제어부(230)는 키 "34"를 노드 F 내에 저장하고, 노드 F를 메모리(220) 내에 적재한다. 또한, 순차적인 삽입 연산들이 계속되면, 제어부(230)는 삽입되는 키들을 분할 없이 노드 F 내에 저장할 수 있다. 따라서, 제어부(230)는 노드 F를 플래시 메모리(210) 내에 저장하기 위한 쓰기 연산을 지연시킬 수 있다. 또한, 제어부(230)는 노드 F에 할당된 페이지 내의 공간을 모두 사용할 수 있고, 노드의 분할에 의해 발생할 수 있는 추가적인 쓰기 연산을 감소시킬 수 있다.
도 8은 일 예에 따른 LUB-트리의 삽입 연산의 알고리즘의 의사 코드이다.
제1 줄에서, 제어부(230)는 LUB-트리의 루트 노드를 현재 노드로 설정할 수 있다.
제2 줄 내지 제7 줄에서, 제어부(230)는 현재 노드로부터 리프 노드를 제외한 자식 노드를 순차적으로 탐색함으로써 삽입되는 키를 갖는 리프 노드를 검색할 수 있다. 이때, 제어부(230)는 삽입되는 키를 갖는 자식 노드가 플래시 메모리(210) 내에 존재할 경우, 자식 노드를 자신과 동일한 높이의 메모리(220) 내에 적재된 노드와 교환한다. 상기의 교환에 의해 플래시 메모리(210)의 1 회의 쓰기 연산이 발생할 수 있다.
제8 줄에서, 제어부(230)는 자식 노드를 리프 노드로 설정할 수 있다.
제9 줄에서, 제어부(230)는 리프 노드 내에 키를 삽입하기 전에 리프 노드가 가득 차 있는지 여부를 검사할 수 있다.
리프 노드가 가득 찬 경우, 제10 줄에서, 제어부(230)는 리프 노드 내에 저장된 키들 각각의 값들이 순차적인 키 순서를 갖는지 여부를 검사할 수 있다.
리프 노드 내에 저장된 키들 각각의 값들이 순차적인 키 순서를 갖는 경우, 제11 줄 내지 제 12줄 내에서, 제어부(230)는 메모리(220) 내에 적재된 리프 노드를 그대로 플래시 메모리(210) 내에 저장할 수 있다.
리프 노드 내에 저장된 키들 각각의 값들이 순차적인 키 순서를 갖지 않는 경우, 제13 줄 내지 제15 줄에서, 제어부(230)는 삽입될 키 값에 따라, 메모리(220) 내에 적재된 리프 노드를 2 개의 새로운 리프 노드들로 분할할 수 있다. 제어부(230)는 분할에 의해 생성된 새로운 2 개의 리프 노드들 중, 삽입된 키를 포함하는 리프 노드를 메모리(220) 내에 적재할 수 있고, 삽입된 키를 포함하지 않는 리프 노드를 플래시 메모리(210) 내에 저장할 수 있다.
리프 노드가 가득 차 있지 않은 경우, 제18 줄 내지 제19 줄에서, 제어부(230)는 메모리(220) 내에 적재된 리프 노드 내에 키를 삽입할 수 있다.
리프 노드 내에 키가 삽입되면, 제21 줄에서, 제어부(230)는 리프 노드의 정보를 가지고 부모 노드를 갱신할 수 있다.
제어부(230)는 B-트리의 검색 연산과 유사한 방식으로 LUB-트리의 검색 연산을 실행할 수 있다. 제어부(230)는 검색 키 값을 사용하여 루트 노드로부터 최하위 리프 노드까지 상기의 검색 키를 포함하는 노드를 탐색할 수 있다. 제어부(230)는 검색 키의 값이 현재 노드의 키의 값보다 더 작을 경우, 현재 노드의 왼쪽 자식 노드로 이동할 수 있다. 제어부(230)는 검색 키의 값이 현재 노드의 키의 값보다 더 클 경우 현재 노드의 오른쪽 자식 노드로 이동할 수 있다. 전술된 이동을 통해 제어부(230)는 최하위의 리프 노드까지 이동할 수 있다. 제어부(230)는 이동에 의해 도착한 리프 노드 내에 검색 키의 값과 동일한 값을 갖는 키가 있는지 여부를 검사할 수 있다. 상기의 검색 과정 중, 검색되는 키 값을 포함하는 노드가 메모리(220) 내에 적재되어 있다면, 제어부(230)는 플래시 메모리(210)에 대한 읽기 연산을 수행하지 않을 수 있다. 따라서, 제어부(230)는 좀 더 빠르게 읽기 연산을 수행할 수 있다. 루트 노드는 항상 메모리(220) 내에 적재되어 있을 수 있다. 따라서, 루트 노드를 탐색하기 위한 비용이 줄어들기 때문에, 제어부(230)는 기존의 B-트리의 읽기 연산에 비해 더 빠르게 읽기 연산을 수행할 수 있다.
LUB-트리의 삭제 연산에 있어서, 제어부(230)는, 삽입 연산과 마찬가지로, 삭제 키를 포함하는 리프 노드를 루트 노드로부터 탐색할 수 있다. 제어부(230)는 상기의 탐색 중 탐색되는 노드가 플래시 메모리(210) 내에만 저장되어 있으면, 탐색된 노드를 메모리(220) 내에 적재된 탐색된 노드와 동일한 높이의 노드와 교환할 수 있다. 리프 노드까지의 탐색이 종료되면, 제어부(230)는 탐색된 리프 노드로부터 삭제 키를 제거할 수 있고, 메모리(220) 내에 적재된 리프 노드의 조상 노드들로부터 삭제 키를 제거할 수 있다. 전술된 것과 같이, 키의 삭제는 메모리(220) 내에서 발생한다. 따라서, 플래시 메모리의 추가적인 쓰기 연산 및 소거 연산의 발생을 지연함으로써, 플래시 메모리 기반 저장 장치(100)의 성능이 향상될 수 있다.
도 9는 일 예에 따른 전원 차단 회복 정책을 설명한다.
플래시 메모리 기반 저장 장치(100)로 공급되는 전력이 갑자기 차단될 경우, 메모리(220) 내에 적재된 노드들이 손실될 수 있다. 따라서, 특히 루트 노드와 같이, 메모리(220) 내에 적재된 노드들은 일정 시점 마다 플래시 메모리(210) 내에 저장(또는, 백업(backup))될 필요가 있다. 도 9에서, 백업 전 LUB-트리(700) 및 백업 후 LUB-트리(750)가 도시되었다.
제어부(230)는 일정한 조건이 만족될 때, 메모리(220) 내에 적재된 모든 노드들을 플래시 메모리 내에 저장할 수 있다. 여기서, 상기의 조건은 상기 하나 이상의 노드들 중 메모리(220) 내에 적재된 루트 노드 내의 키들의 개수가 변경되는 것일 수 있다. 제어부(230)는 메모리(220) 내에 적재된 루트 노드 내의 키들의 개수가 변경될 때 메모리(220) 내에 적재된 모든 노드들을 플래시 메모리 내에 저장함으로써 루트 노드 내의 키들의 개수가 변경되기 전의 상태의 LUB-트리를 복원할 수 있다.
예컨대, 리프 노드 및 중간 노드가 가득 찬 상태에서, 키 "42"가 LUB-트리(700) 내에 삽입될 경우, 노드들의 분할로 인해 루트 노드(A) 내에 저장된 키들의 개수가 1 증가할 수 있다. 제어부(230)는 키 "42"를 LUB-트리(700) 내에 삽입하기 전에, 메모리(220) 내에 적재된 노드들(즉, 노드 A, 노드 B 및 노드 E)를 플래시 메모리(210) 내에 저장할 수 있다.
메모리(220) 내에 적재된 노드들이 플래시 메모리(210) 내에 저장된 후, 제어부(230)는 전술된 키 "42"를 LUB-트리(750) 내에 삽입하기 위한 동작을 수행할 수 있다.
도 10은 일 실시예에 따른 LUB-트리를 사용하여 플래시 메모리 내에 저장된 데이터를 관리하는 방법의 흐름도이다.
하기의 단계들(1010 내지 1070)에서, 제어부(230)는 플래시 메모리(210) 내에 저장된 하나 이상의 노드들을 포함하는 LUB-트리를 관리한다. LUB-트리는 플래시 메모리(210)의 인덱스 구조를 나타낼 수 있다.
단계(1010)에서, 제어부(230)는 특정한 키를 B-트리 내에 삽입하는 삽입 연산에 의해 변경이 일어나는 하나 이상의 변경 노드들을 식별할 수 있다.
하나 이상의 변경 노드들은 LUB-트리의 하나 이상의 노드들 중 상기의 삽입 연산에 의해 변경이 일어나는 리프 노드 및 상기의 리프 노드의 조상 노드들일 수 있다.
제어부(230)는 삽입 연산 시 LUB-트리의 하나 이상의 노드들 중 키가 추가될 리프 노드를 결정할 수 있다. 하나 이상의 변경 노드들은LUB-트리의 루트 노드로부터 상기의 리프 노드까지의 경로 내에 있는 하나 이상의 노드들일 수 있다.
단계(1020)에서, 제어부(230)는 일정한 조건이 만족되는지 여부를 판단할 수 있다. 상기의 조건은 LUB-트리의 하나 이상의 노드들 중 메모리(220) 내에 적재된 루트 노드 내의 키들의 개수가 변경되는 것일 수 있다. 즉, 제어부(230)는 키 삽입에 의해 루트 노드 내의 키들의 개수가 증가하는지 여부를 검사할 수 있다. 일정한 조건이 만족될 경우 단계(1030)가, 그렇지 않을 경우 단계(1040)가 실행될 수 있다.
일정한 조건이 만족될 경우, 단계(1030)에서, 제어부(230)는 메모리(220) 내에 적재된 모든 노드들을 플래시 메모리(210) 내에 저장(또는, 백업)할 수 있다. 상기의 저장(또는, 백업)은 전원 차단으로 인한 노드 내의 데이터 손실에 대비한 것일 수 있다.
단계(1040)에서, 제어부(230)는 하나 이상의 변경 노드들 중 하나의 노드와 교환되는 메모리(220) 내에 적재된 노드를 플래시 메모리(210) 내에 저장할 수 있다.
제어부(230)는 메모리(220) 내에 적재된 리프 노드가 변경이 일어나는 리프 노드가 아니면, 상기의 메모리(220) 내에 적재된 리프 노드를 플래시 메모리(210) 내에 저장할 수 있다.
단계(1050)에서, 제어부(230)는 하나 이상의 변경 노드들 모두를 메모리(220) 내에 적재할 수 있다.
단계(1060)에서, 제어부(230)은 삽입 연산에 따른 변경을 메모리(220) 내에 적재된 노드들에게 적용함으로써 플래시 메모리(210)에 대한 쓰기 연산을 지연시킬 수 있다.
제어부(230)는 상기의 삽입 연산이 순차적인 삽입 연산들 중 일부인지 여부를 판단할 수 있다. 제어부(230)는 상기의 삽입 연산이 순차적인 삽입 연산들 중 하나인 경우, 상기의 변경을 메모리(220) 내에 저장된 노드의 분할 없이 메모리(220) 내에 적재된 노드들에게 적용할 수 있다.
단계(1070)에서, 제어부(230)는 메모리(220) 내에 적재된 노드들 중 모든 엔트리들 내에 키들이 저장된 노드를 플래시 메모리(210) 내에 저장할 수 있다.
앞서 도 1 내지 도 9를 참조하여 설명된 실시예에 따른 기술적 내용들이 본 실시예에도 그대로 적용될 수 있다. 따라서 보다 상세한 설명은 이하 생략하기로 한다.
하기에서, 전술된 LUB-트리의 성능을 다른 트리의 성능과 비교한 실험 결과들이 설명된다. LUB-트리의 성능을 측정하기 위하여, 플래시 메모리의 연산 횟수를 측정하는 시뮬레이터 위에 μ-트리, LSB-트리 및 LUB-트리가 구현되었다. 시뮬레이터에서, 플래시 메모리는 64 메가바이트(Mega Byte; MB)의 단일 레벨 셀(Single Level Cell; SLC) 낸드(NAND) 플래시 메모리로 설정되었다. 페이지의 크기는 2KB, 블록의 크기는 128KB인 것으로 구성되었다. 노드(node)의 엔트리는 4바이트(byte)의 정수형 키 및 4byte의 정수형 포인트를 포함하며, 하나의 페이지는 256개의 엔트리들을 저장할 수 있다. 또한, 트리의 생성 시간을 측정하기 위해, 1,000,000 개의 순차적인 키 값을 가지는 레코드들을 삽입하여 플래시 메모리의 읽기 연산, 쓰기 연산 및 소거 연산 각각의 횟수를 측정하였다. 플래시 메모리의 읽기 속도는 25μs, 쓰기 속도는 200μs, 소거 속도는 1.5ms로 설정되었다.
도 11은 일 예에 따른 레코드의 삽입에 따른 트리들 각각의 높이를 도시한다.
트리의 높이는 인덱스의 전체적인 성능에 영향을 미치는 중요한 요소이다.
도 11에서는, 트리 높이의 변화를 알아보기 위해, 순차적으로 증가되는 키 값을 갖는 레코드들을 각 트리에 삽입함에 따라 각 트리의 높이가 변화한 것을 측정한 결과가 도시되었다.
도 11에서 도시된 것과 같이, LUB-트리 및 LSB-트리는 약 100,000개 정도의 레코드가 삽입되었을 때 3의 높이가 되었고, μ-트리는 약 150,000개 이상의 레코드가 삽입되었을 때 4의 높이가 되었다.
여기서, μ-트리가 LUB-트리 및 LSB-트리에 비해 더 높은 것은, μ-트리는 페이지의 절반만을 리프 노드로 사용하기 때문에 LUB-트리 및 LSB-트리에 비하여 μ-트리에서 노드 분할이 더 자주 발생하고, 따라서 μ-트리에서 트리 신장이 빠르게 일어나기 때문이다.
이처럼, 일반적으로 더 높은 높이를 갖는 μ-트리는, 트리의 생성 및 검색 연산에 있어서 더 많은 시간을 소모한다. 또한, LSB-트리는 루트 노드를 위해 임시 노드를 사용하는 반면, LUB-트리는 루트 노드를 메모리 내에 상주시킴으로써 임시 노드를 사용하지 않기 때문에 더 빠르게 노드를 검색 및 생성할 수 있다.
도 12는 일 예에 따른 레코드의 삽입에 따른 트리들 각각의 생성 시간을 도시한다.
도 12에서, 1,000,000 개의 순차적인 키 값을 갖는 레코드가 μ-트리, LUB-트리 및 LSB-트리에 삽입된다. LSB-트리는 순차 삽입 시 노드를 분할하는 트리(분할)와, 노드를 분할하지 않는 트리(비 분할)로 구분되어 도시되었다.
도 12에서 도시된 것과 같이, LUB-트리는 메모리 노드를 사용하여 지연 갱신을 하기 때문에, μ-트리 및 LUB-트리에 비하여 매우 빠른 시간 내에 생성될 수 있다. 특히, 순차적인 키 값을 갖는 레코드들이 삽입되는 경우, LUB-트리의 대부분의 연산들은 메모리 노드 내에서 처리될 수 있고, 플래시 메모리의 쓰기 연산은 리프 노드가 가득 찰 경우에만 수행될 수 있다. 따라서, LUB-트리는 레코드가 삽입될 때마다 플래시 메모리에 쓰기 연산을 수행하는 다른 트리에 비해 빠르게 생성될 수 있다. 또한, 순차 삽입 시 노드를 분할하지 않는 LUB-트리는 노드를 분할하는 LUB-트리에 비해 약 2배 이상 빠르게 생성될 수 있다.
도 13은 일 예에 따른 트리들 각각의 검색 시간을 도시한다.
도 13에서, 도 12를 참조하여 설명된 트리들 각각의 검색 성능이 도시된다. 도 12의 생성된 트리들 각각에 삽입된 모든 키들을 검색한 평균 시간이 도시된다.
도 13에 따르면, LUB-트리가 μ-트리 및 LUB-트리에 비해 키를 더 빠르게 검색할 수 있다. 도 11에서 도시된 결과에 따르면, μ-트리는 다른 트리들에 비해 더 높게 생성된다. 따라서, μ-트리는 검색 연산 또한 다른 트리들에 비해 더 느리게 수행한다. 도 11에서 도시된 따르면, LSB-트리 및 LUB-트리는 서로 비슷한 높이로 생성된다. 그러나, LUB-트리의 루트 노드는 항상 메모리 내에 상주되기 때문에, LUB-트리는 LSB-트리에 비해 더 빠르게 검색 연산을 수행할 수 있다.
도 14는 일 예에 따른 트리들 각각의 페이지 할당량을 도시한다.
도 14에서, 도 12를 참조하여 설명된 트리들 각각에게 할당된 페이지들의 개수가 도시된다.
도 14에 따르면, 순차 삽입 시 노드를 분할하지 않는 LUB-트리는 다른 트리들에 비하여 더 적은 페이지를 요구한다. μ-트리는 페이지를 비효율적으로 관리하기 때문에 생성 시 다른 트리들에 비하여 2배 이상의 페이지들을 요구한다.
LSB-트리 및 순차 삽입 시 노드를 분할하는 LUB-트리는 양자 모두 B-트리의 구조를 그대로 사용하기 때문에 비슷한 개수의 페이지들을 요구한다. 그러나, 페이지 효율을 높이고, 플래시 메모리의 쓰기 연산을 줄이기 위해 순차 삽입 시 노드를 분할하지 않는 LUB-트리는, 순차 삽입 시 노드를 분할하는 LSB-트리에 비해서는 약 2배 이상, μ-트리에 비해서는 4배 이상의 좋은 페이지 효율을 보인다.
전술된 플래시 메모리 기반 저장 장치(200)는 임베디드 시스템의 저장소, 휴대 전화의 저장소, 솔리드 스테이트 드라이브(Solid State Drive; SSD), 플래시 메모리 카드의 파일 시스템 및 플래시 메모리를 저장 매체로 사용하는 호스트 시스템 등을 의미할 수 있다.
일 실시예에 따른 방법은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 매체에 기록되는 프로그램 명령은 실시예들을 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(magnetic media), CD-ROM, DVD와 같은 광기록 매체(optical media), 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다. 상기된 하드웨어 장치는 실시예들의 동작을 수행하기 위해 하나 이상의 소프트웨어 모듈로서 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다.
이상과 같이 본 발명은 비록 한정된 실시예와 도면에 의해 설명되었으나, 본 발명은 상기의 실시예에 한정되는 것은 아니며, 본 발명이 속하는 분야에서 통상의 지식을 가진 자라면 이러한 기재로부터 다양한 수정 및 변형이 가능하다.
그러므로, 본 발명의 범위는 설명된 실시예에 국한되어 정해져서는 아니 되며, 후술하는 특허청구범위뿐 아니라 이 특허청구범위와 균등한 것들에 의해 정해져야 한다.
200: 플래시 메모리 기반 저장 장치
210: 플래시 메모리
220: 메모리
230: 제어부

Claims (15)

  1. 하나 이상의 노드들을 포함하는 B-트리를 저장하는 플래시 메모리;
    상기 하나 이상의 노드들 각각을 선택적으로 적재하는 메모리; 및
    상기 플래시 메모리 및 상기 메모리를 제어하는 제어부
    를 포함하고, 상기 제어부는 상기 B-트리에 대한 삽입 연산 시 상기 하나 이상의 노드들 중 상기 삽입 연산에 의해 변경이 일어나는 리프 노드와 상기 B-트리의 루트 노드로부터 상기 리프 노드까지의 경로 내에 있는 상기 리프 노드의 조상 노드들을 하나 이상의 변경 노드들로 식별하여, 상기 식별된 하나 이상의 변경 노드들 모두를 상기 메모리 내에 적재하고, 상기 식별된 하나 이상의 변경 노드들을 저장하는 상기 플래시 메모리 내의 페이지들을 유효하지 않은(invalid) 페이지들로 설정하며,
    상기 삽입 연산에 따른 변경을 상기 메모리 내에 적재된 모든 노드들에게 적용함으로써 상기 식별된 하나 이상의 변경 노드들 모두에 대하여 상기 플래시 메모리로의 쓰기 연산을 지연시키며,
    상기 메모리 내에 적재된 노드의 모든 엔트리들 내에 키들이 저장된 이후에, 상기 적재된 노드를 상기 플래시 메모리 내에 저장하고,
    상기 메모리 내에 적재된 노드가 상기 플래시 메모리 내의 노드와 교환될 때, 상기 적재된 노드를 상기 플래시 메모리 내에 저장하거나, 상기 하나 이상의 노드들 중 리프 노드가 상기 메모리 내에 적재될 때, 상기 메모리 내에 적재된 노드들 중 다른 리프 노드를 상기 플래시 메모리 내에 저장하는, 플래시 메모리 기반 저장 장치.
  2. 제1항에 있어서,
    상기 B-트리는 상기 플래시 메모리의 인덱스 구조를 나타내는, 플래시 메모리 기반 저장 장치.
  3. 삭제
  4. 삭제
  5. 삭제
  6. 삭제
  7. 삭제
  8. 제1항에 있어서,
    상기 제어부는 순차적인 삽입 연산들을 감지하고, 상기 삽입 연산이 상기 순차적인 삽입 연산들 중 하나이면 상기 적재된 노드들의 분할 없이 상기 삽입 연산에 따른 상기 변경을 적용하는, 플래시 메모리 기반 저장 장치.
  9. 제1항에 있어서,
    상기 제어부는 일정한 조건이 만족될 때, 상기 메모리 내에 적재된 모든 노드들을 상기 플래시 메모리 내에 저장하는, 플래시 메모리 기반 저장 장치.
  10. 제9항에 있어서,
    상기 조건은 상기 하나 이상의 노드들 중 상기 메모리 내에 적재된 루트 노드 내의 키들의 개수가 변경되는 것인, 플래시 메모리 기반 저장 장치.
  11. 플래시 메모리 내에 저장된 하나 이상의 노드들을 포함하는 B-트리를 관리하는 방법에 있어서,
    특정한 키를 상기 B-트리 내에 삽입하는 삽입 연산에 의해 변경이 일어나는 리프 노드와 상기 B-트리의 루트 노드로부터 상기 리프 노드까지의 경로 내에 있는 상기 리프 노드의 조상 노드들을 하나 이상의 변경 노드들로 식별하는 단계;
    상기 식별된 하나 이상의 변경 노드들을 저장하는 상기 플래시 메모리 내의 페이지들을 유효하지 않은(invalid) 페이지들로 설정하며, 상기 하나 이상의 변경 노드들 모두를 메모리 내에 적재하는 단계;
    상기 삽입 연산에 따른 변경을 상기 메모리 내에 적재된 모든 노드들에게 적용함으로써 상기 식별된 하나 이상의 변경 노드들 모두에 대하여 상기 플래시 메모리로의 쓰기 연산을 지연시키는 단계; 및
    상기 메모리 내에 적재된 노드의 모든 엔트리들 내에 키들이 저장된 이후에, 상기 적재된 노드를 상기 플래시 메모리 내에 저장하는 단계
    를 포함하고,
    상기 적재된 노드를 상기 플래시 메모리 내에 저장하는 단계는
    상기 메모리 내에 적재된 노드가 상기 플래시 메모리 내의 노드와 교환될 때, 상기 적재된 노드를 상기 플래시 메모리 내에 저장하거나, 상기 하나 이상의 노드들 중 리프 노드가 상기 메모리 내에 적재될 때, 상기 메모리 내에 적재된 노드들 중 다른 리프 노드를 상기 플래시 메모리 내에 저장하는 단계
    를 포함하는, 플래시 메모리 내에 저장된 데이터 관리 방법.
  12. 삭제
  13. 삭제
  14. 제11항에 있어서,
    상기 삽입 연산이 순차적인 삽입 연산들 중 하나인 경우 상기 변경은 상기 메모리에 적재된 노드의 분할 없이 상기 메모리 내에 적재된 노드들에게 적용되는, 플래시 메모리 내에 저장된 데이터 관리 방법.
  15. 제11항에 있어서,
    일정한 조건이 만족될 경우, 메모리 내에 적재된 모든 노드들을 플래시 메모리 내에 저장하는 단계
    를 더 포함하는, 플래시 메모리 내에 저장된 데이터 관리 방법.
KR1020110130963A 2011-12-08 2011-12-08 지연 갱신을 수행하는 b-트리를 사용하여 플래시 메모리 내에 데이터를 저장하는 장치 및 방법 KR101377923B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020110130963A KR101377923B1 (ko) 2011-12-08 2011-12-08 지연 갱신을 수행하는 b-트리를 사용하여 플래시 메모리 내에 데이터를 저장하는 장치 및 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020110130963A KR101377923B1 (ko) 2011-12-08 2011-12-08 지연 갱신을 수행하는 b-트리를 사용하여 플래시 메모리 내에 데이터를 저장하는 장치 및 방법

Publications (2)

Publication Number Publication Date
KR20130064379A KR20130064379A (ko) 2013-06-18
KR101377923B1 true KR101377923B1 (ko) 2014-03-24

Family

ID=48861355

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020110130963A KR101377923B1 (ko) 2011-12-08 2011-12-08 지연 갱신을 수행하는 b-트리를 사용하여 플래시 메모리 내에 데이터를 저장하는 장치 및 방법

Country Status (1)

Country Link
KR (1) KR101377923B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200097050A (ko) * 2019-02-07 2020-08-18 주식회사 티맥스티베로 인덱스 관리 방법

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170073944A (ko) 2015-12-21 2017-06-29 에스케이하이닉스 주식회사 데이터 처리 시스템 및 데이터 처리 시스템의 동작방법
KR102000627B1 (ko) * 2019-01-04 2019-07-16 (주)공간인소프트 데이터 갱신 방법 및 그 장치

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100907477B1 (ko) * 2007-07-16 2009-07-10 한양대학교 산학협력단 플래시 메모리에 저장된 데이터의 인덱스 정보 관리 장치및 방법

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100907477B1 (ko) * 2007-07-16 2009-07-10 한양대학교 산학협력단 플래시 메모리에 저장된 데이터의 인덱스 정보 관리 장치및 방법

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200097050A (ko) * 2019-02-07 2020-08-18 주식회사 티맥스티베로 인덱스 관리 방법
KR102195836B1 (ko) * 2019-02-07 2020-12-28 주식회사 티맥스티베로 인덱스 관리 방법

Also Published As

Publication number Publication date
KR20130064379A (ko) 2013-06-18

Similar Documents

Publication Publication Date Title
CN113168408B (zh) 利用压缩的键值存储树数据块溢出
US10176113B2 (en) Scalable indexing
EP2735978B1 (en) Storage system and management method used for metadata of cluster file system
US11249664B2 (en) File system metadata decoding for optimizing flash translation layer operations
KR20110117099A (ko) 메모리 장치에서 맵핑 어드레스 테이블을 유지관리하는 방법
US10162561B2 (en) Managing backup of logical-to-physical translation information to control boot-time and write amplification
CN111309258B (zh) 一种b+树的存取方法、装置和计算机可读存储介质
CN104516959A (zh) 一种管理数据库日志的方法及装置
CN109407985B (zh) 一种数据管理的方法以及相关装置
US7822940B2 (en) Apparatus and method for managing mapping information of nonvolatile memory
CN106055679A (zh) 一种多层次缓存感知型索引方法
KR101340706B1 (ko) 플래시 메모리 기반 저장 장치를 위한 하이브리드 해시 인덱스
KR101438667B1 (ko) 비휘발성 램 기반의 b+ 트리 데이터베이스화 방법
KR101377923B1 (ko) 지연 갱신을 수행하는 b-트리를 사용하여 플래시 메모리 내에 데이터를 저장하는 장치 및 방법
KR100907477B1 (ko) 플래시 메모리에 저장된 데이터의 인덱스 정보 관리 장치및 방법
KR102321346B1 (ko) 대용량 ssd 장치를 위한 데이터 저널링 방법
CN106294189B (zh) 内存碎片整理方法及装置
KR101077901B1 (ko) 로그 블록 단위 매핑 기법을 이용한 플래시 메모리 관리 장치 및 방법
CN113253926A (zh) 提升新型存储器的查询和存储性能的存储内索引构建方法
KR100987251B1 (ko) 완전 연관 섹터 변환 기법을 사용하는 플래시 변환 계층에서 합병연산을 줄이기 위한 플래시 메모리 관리 방법및 장치
Hiep et al. Timestamp-based hot/cold data identification scheme for solid state drives
Son et al. A tiny-capacitor-backed non-volatile buffer to reduce storage writes in smartphones
KR20100099888A (ko) 플래시 메모리를 기반으로 한 데이터베이스 시스템에 대한 로그 관리 방법
CN112433889B (zh) 基于ftl表的日志生成方法与装置
KR100982591B1 (ko) 단계적 인덱싱을 위한 파일 시스템, 메인 기억장치 및플래시 기억장치 그리고 상기 단계적 인덱싱을 통한 데이터관리 방법

Legal Events

Date Code Title Description
A201 Request for examination
N231 Notification of change of applicant
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
LAPS Lapse due to unpaid annual fee