KR20150122533A - 세컨더리 인덱스 생성 방법 및 세컨더리 인덱스 저장 장치 - Google Patents

세컨더리 인덱스 생성 방법 및 세컨더리 인덱스 저장 장치 Download PDF

Info

Publication number
KR20150122533A
KR20150122533A KR1020140048924A KR20140048924A KR20150122533A KR 20150122533 A KR20150122533 A KR 20150122533A KR 1020140048924 A KR1020140048924 A KR 1020140048924A KR 20140048924 A KR20140048924 A KR 20140048924A KR 20150122533 A KR20150122533 A KR 20150122533A
Authority
KR
South Korea
Prior art keywords
index data
data table
sorting
metadata
index
Prior art date
Application number
KR1020140048924A
Other languages
English (en)
Other versions
KR102310246B1 (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 KR1020140048924A priority Critical patent/KR102310246B1/ko
Priority to US14/694,442 priority patent/US10061693B2/en
Publication of KR20150122533A publication Critical patent/KR20150122533A/ko
Application granted granted Critical
Publication of KR102310246B1 publication Critical patent/KR102310246B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • 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/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • 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/0638Organizing or formatting or addressing of data
    • 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
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1041Resource optimization
    • G06F2212/1044Space efficiency improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/21Employing a record carrier using a specific recording technology
    • G06F2212/214Solid state disk
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7201Logical to physical mapping or translation of blocks or pages

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)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

세컨더리 인덱스(secondary index) 생성 방법을 개시한다. 본 발명의 일 실시 예에 따른 세컨더리 인덱스 생성 방법은, 인덱스 데이터의 크기가 메모리 블록 사이즈 이상이 되면, 상기 인덱스 데이터를 포함하는 인덱스 데이터 테이블(index data table)을 생성하여 메모리에 기록하는 단계와, 상기 인덱스 데이터 테이블에 대한 메타 데이터 테이블(metadata table)을 생성하여 상기 메모리에 기록하는 단계와, 상기 인덱스 데이터 테이블 및 상기 메타 데이터 테이블 중 적어도 하나에 대해 합병 정렬을 수행하는 단계를 포함한다.

Description

세컨더리 인덱스 생성 방법 및 세컨더리 인덱스 저장 장치{METHOD FOR GENERATING SECONDARY INDEX AND APPARATUS FOR STORING SECONDARY INDEX}
본 발명은 저장 장치에 대한 것으로, 좀더 상세하게는 데이터를 효율적으로 저장할수 있는 SSD의 세컨더리 인덱스 구조에 대한 것이다.
(Solid State Drive)는 메모리를 집적한 저장매체이다. SSD는 용도나 외관, 설치 방법 등은 하드디스크와 유사하지만, 메모리를 내장하고 있어, 하드디스크보다 빠른 속도로 데이터의 읽기나 쓰기가 가능하다. 그리고 물리적으로 하드 디스크처럼 회전하거나 움직이는 부품이 없기 때문에 작동 소음이 없으며 전력소모도 적다. 이런 특성 덕분에 휴대용 컴퓨터에 SSD를 사용하면 배터리 유지시간을 늘릴 수 있다는 장점이 있다. SSD 제품에 따라서 저장매체로 일반 램(RAM)을 탑재한 제품과?(flash memory)를 탑재한 모델로 나뉜다.
최근에는 빅 데이터 수요 및 데이터 분석 요구에 따라, 세컨더리 인덱스(Secondary Index) 기능을 가진 스케일 아웃 키-밸류 스토리지 시스템(Scale out Key-value Storage system)이 요구되고 있다. 또한, 고성능 및 저전력을 위한 SSD의 필요성이 증대되고 있다. 종래의 세컨더리 인덱스는 SSD의 특성을 고려하지 않는 I/O(Input/Output)패턴으로 쓰기(write) 성능이 저하되고 가비지 컬렉션(Garbage Collection)으로 인한 오버해드(Overhead)가 발생하는 문제가 있었다.
도 1a는 비 트리(B-Tree) 구조를 나타낸 도면이고, 도 1b는 비 트리(B-Tree) 구조를 이용한 종래의 세컨더리 인덱스의 알고리즘을 도식화한 도면이다.
도 1a 및 도 1b를 참조하면, 비 트리를 이용한 종래의 세컨더리 인덱스는 데이터를 키(key)에 따라 정렬하여 유지하고, 추가적인 데이터의 삽입, 삭제시 정렬된 데이터를 갱신하여 다시 기록한다. 이 방식은 추가적인 데이터 삽입 또는 삭제시, 대상 데이터 영역의 내용을 수정 후 다시 쓰기를(Re-write)한다. 도 1b의 실시 예에서 테이블 (1,4,7) 에 2,5를 삽입하는 경우, 최종적으로 정렬된 데이터 테이블 (1,2,4,5,7)을 다시 기록하고 있다.
이 기술은 데이터의 다시 쓰기(Re-write)가 무작위 쓰기(random write) 형태로 발생하는 단점이 있다. 무작위 쓰기는 SSD 최대 성능 발휘를 어렵게 만들며, 가비지 컬렉션(Garbage Collection) 부하를 증가시킨다.
도 2a는 합병 정렬(Merge Sort 또는 Compaction)을 하는 LSM 트리(Log-structured merge Tree) 구조 도시한 도면이고, 도 2b는 LSM 트리를 이용한 종래의 세컨더리 인덱스의 알고리즘을 도식화한 도면이다.
LSM 트리를 이용한 종래의 세컨더리 인덱스는 데이터를 키에 따라 정렬하여 유지하되, 추가적인 데이터의 삽입, 삭제시, 새롭게 정렬된 데이터로 독립적으로 기록한다. 이 방식은 도 2b에 도시된 바와 같이 추가적인 데이터 삽입 또는 삭제시, 추가적인 연산에 대한 데이터를 따로 정렬하여 저장한다.
이 기술은 순차 쓰기(Sequential Write)로 I/O가 발생하므로 최대 쓰기 성능이 발휘된다. 다만, 독립적으로 정렬된 데이터가 늘어남에 따라, 데이터 조회시 각각 분리된 데이터를 모두 접근해야 하므로 성능이 떨어지는 문제가 있다. 읽기(read)를 수행하는 경우 I/O(Input/Output) 감소를 위해 블룸 필터(Bloom Filter)를 사용하지만 한계가 있으며, 합병 정렬(merge)을 수행할 수도 있으나 이로 인한 오버헤드가 발생한다.
따라서, I/O 코스트(cost)를 감소시키고, 합병 정렬(merge) 오버헤드를 감소시키면서, 공간 효율성은 향상시킬 수 있는 세컨더리 인덱스 구조가 요청된다.
본 발명은 상술한 문제점을 해결하기 위한 것으로, 본 발명의 목적은, I/O 코스트(cost)를 감소시키고, 합병 정렬의 오버헤드를 감소시키면서, 공간 효율성은 향상시킬 수 있는 세컨더리 인덱스 구조와 세컨더리 인덱스(secondary index) 생성 방법을 제공하기 위함이다.
상기와 같은 목적을 달성하기 위한 본 발명의 일 실시 예에 따른 세컨더리 인덱스 생성 방법은, 세컨더리 인덱스(secondary index) 생성 방법에 있어서, 인덱스 데이터의 크기가 메모리 블록 사이즈 이상이 되면, 상기 인덱스 데이터를 포함하는 인덱스 데이터 테이블(index data table)을 생성하여 메모리에 기록하는 단계와, 상기 인덱스 데이터 테이블에 대한 메타 데이터 테이블(metadata table)을 생성하여 상기 메모리에 기록하는 단계와, 상기 인덱스 데이터 테이블 및 상기 메타 데이터 테이블 중 적어도 하나에 대해 합병 정렬을 수행하는 단계를 포함한다.
상기 합병 정렬을 수행하는 단계는, 상기 합병 정렬(merge sort)이 되지 않은 인덱스 데이터 테이블이 기 설정된 개수 이상인 경우, 상기 합병 정렬이 되지 않은 인덱스 데이터 테이블 및 상기 합병 정렬이 되지 않은 인덱스 데이터 테이블에 대한 메타 데이터 테이블 중 적어도 하나에 대해 합병 정렬을 수행할 수 있다.
상기 합병 정렬을 수행하는 단계는, 상기 합병 정렬이 되지 않은 인덱스 데이터 테이블에 대한 메타 데이터 테이블들 끼리만 합병 정렬을 수행할 수 있다.
상기 합병 정렬을 수행하는 단계는, 읽기 실패(false Positive)가 기 설정된 횟수 이상 발생된 인덱스 데이터 테이블에 대해 범위 합병 정렬(Range Compaction)을 수행할 수 있다.
상기 세컨더리 인덱스 생성 방법은, 상기 범위 합병 정렬을 수행한 인덱스 데이터 테이블에 대한 메타 데이터 테이블(metadata table)을 생성하여 상기 메모리에 기록하는 단계를 더 포함할 수 있다.
상기 메타 데이터 테이블은, 상기 인덱스 데이터의 페이지 정보, 상기 인덱스 데이터 테이블의 첫번째 키 값, 블룸필터(Bloom filter) 값 및 상기 인덱스 데이터의 페이지의 범위를 나타내는 루트값 중 적어도 하나를 포함할 수 있다.
상기 합병 정렬이 수행된 인덱스 데이터 테이블은, 적어도 하나의 메모리 블록에 기록될 수 있다.
상기 인덱스 데이터 테이블이 기록된 하나의 메모리 블록에는 두 개 이상의 인덱스 데이터 테이블이 기록되지 않을 수 있다.
상기 세컨더리 인덱스 생성 방법은, 상기 합병 정렬이 수행되지 않은 인덱스 데이터 테이블 및 메타 데이터 테이블 중 적어도 하나에 대해 합병 정렬을 수행하는 단계를 더 포함할 수 있다.
상기 루트값은, 원자 기록(atomic write)을 통해 기록될 수 있다.
상기 메모리는 SSD(Solid State Drive)일 수 있다.
상기와 같은 목적을 달성하기 위한 본 발명의 일 실시 예에 따른 세컨더리 인덱스 저장 장치는, 세컨더리 인덱스(secondary index) 저장 장치에 있어서, 메모리와, 인덱스 데이터의 크기가 메모리 블록 사이즈 이상이 되면, 상기 인덱스 데이터를 포함하는 인덱스 데이터 테이블(index data table) 및 상기 인덱스 데이터 테이블에 대한 메타 데이터 테이블(metadata table)을 생성하여 상기 메모리에 기록하고, 상기 인덱스 데이터 테이블 및 상기 메타 데이터 테이블 중 적어도 하나에 대해 합병 정렬을 수행하는 컨트롤러를 포함한다.
상기 컨트롤러는, 상기 합병 정렬(merge sort)이 되지 않은 인덱스 데이터 테이블이 기 설정된 개수 이상인 경우, 상기 합병 정렬이 되지 않은 인덱스 데이터 테이블 및 상기 합병 정렬이 되지 않은 인덱스 데이터 테이블에 대한 메타 데이터 테이블 중 적어도 하나에 대해 합병 정렬을 수행할 수 있다.
상기 컨트롤러는, 상기 합병 정렬이 되지 않은 인덱스 데이터 테이블에 대한 메타 데이터 테이블들 끼리만 합병 정렬을 수행할 수 있다.
상기 컨트롤러는, 읽기 실패(false Positive)가 기 설정된 횟수 이상 발생된 인덱스 데이터 테이블에 대해 범위 합병 정렬(Range Merge Sort or Range Compaction)을 수행할 수 있다.
상기 컨트롤러는, 상기 범위 합병 정렬을 수행한 인덱스 데이터 테이블에 대한 메타 데이터 테이블(metadata table)을 생성하여 상기 메모리에 기록할 수 있다.
상기 메타 데이터 테이블은, 상기 인덱스 데이터의 페이지 정보, 상기 인덱스 데이터 테이블의 첫번째 키 값, 블룸필터(Bloom filter) 값 및 상기 인덱스 데이터의 페이지의 범위를 나타내는 루트값 중 적어도 하나를 포함할 수 있다.
상기 합병 정렬이 수행된 인덱스 데이터 테이블은, 적어도 하나의 메모리 블록에 기록될 수 있다.
상기 인덱스 데이터 테이블이 기록된 하나의 메모리 블록에는 두 개 이상의 인덱스 데이터 테이블이 기록되지 않을 수 있다.
상기 컨트롤러는, 상기 합병 정렬이 수행되지 않은 인덱스 데이터 테이블 및 메타 데이터 테이블 중 적어도 하나에 대해 합병 정렬을 수행할 수 있다.
이상과 같은 본 발명의 다양한 실시 예에 따르면, 본 발명은, I/O 코스트(cost)를 감소시키고, 합병 정렬의 오버헤드를 감소시키면서, 공간 효율성은 향상시킬 수 있는 세컨더리 인덱스 구조와 세컨더리 인덱스(secondary index) 생성 방법을 제공한다.
도 1a는 비 트리(B-Tree) 구조를 나타낸 도면,
도 1b는 비 트리(B-Tree) 구조를 이용한 종래의 세컨더리 인덱스의 알고리즘을 도식화한 도면,
도 2a는 합병 정렬(Merge Sort 또는 Compaction)을 하는 LSM 트리(Log-structured merge Tree) 구조 도시한 도면,
도 2b는 LSM 트리를 이용한 종래의 세컨더리 인덱스의 알고리즘을 도식화한 도면,
도 3은 본 발명의 일 실시 예에 따른 세컨더리 인덱스 저장 장치의 구성을 도시한 도면,
도 4는 본 발명의 일 실시 예에 따른 세컨더리 인덱스를 사용하는 메모리 컨트롤러의 구조를 도시한 도면,
도 5는 종래의 인덱스 데이터 테이블과 메타 데이터 테이블에 대한 합병 정렬 기법을 나타내는 도면,
도 6 및 7은 본 발명의 일 실시 예에 따른 인덱스 데이터 테이블과 메타 데이터 테이블에 대한 합병 정렬 기법을 나타내는 도면,
도 8 및 9는 본 발명의 다른 실시 예에 따른 인덱스 데이터 테이블과 메타 데이터 테이블에 대한 합병 정렬 기법을 나타내는 도면,
도 10은 세컨더리 인덱스의 구조를 도시한 도면,
도 11은 메타 데이터 테이블을 설명하기 위한 도면,
도 12는 SSTable이 기록되는 메모리 블록을 나타낸 도면, 그리고,
도 13은 본 발명의 일 실시 예에 따른 세컨더리 인덱스 생성 방법의 흐름도이다.
이하에서는 첨부된 도면을 참조하여 본 발명의 다양한 실시 예를 설명한다.
도 3은 본 발명의 일 실시 예에 따른 세컨더리 인덱스 저장 장치의 구성을 도시한 도면이다.
도 3을 참조하면, 본 발명의 일 실시 예에 따른 세컨더리 인덱스 저장 장치(100)는, 메모리(110)와 상기 메모리에 대한 데이터 읽기, 쓰기를 제어하는 컨트롤러(120)를 포함한다.
메모리(110)는 램(RAM)과 플래시 메모리 중 적어도 하나를 포함한다. 플래시 메모리의 종류에는 제한이 없어 노어(NOR)형과 낸드(NAND)형 어느 것이어도 무방하다. 메모리(110)는 프라이머리 데이터로서 로우 데이터(RAW DATA), 세컨더리 인덱스 등 다양한 데이터를 저장할 수 있다. 플래시 메모리는 후술하는 메타 데이터 테이블, 인덱스 데이터 테이블도 저장하나, 메타 데이터 테이블은 램에 저장될 수도 있다.
컨트롤러(120)는 메모리(110)의 읽기, 쓰기를 제어한다.
본 발명의 일 실시 예에서 컨트롤러(120)는 인덱스 데이터의 크기가 메모리 블록 사이즈 이상인 경우, 상기 인덱스 데이터를 포함하는 인덱스 데이터 테이블(index data table)과 상기 인덱스 데이터 테이블에 대한 메타 데이터 테이블(metadata table)을 생성하여 상기 메모리(110)에 기록할 수 있다.
여기서 인덱스 데이터는 SSTable(Sorted String Table)의 Data 영역을 가리킨다. SSTable 은 구글™사에서 제안한 것으로 빅 테이블(Bigtable)의 구조 형태로 데이터를 저장하는 방식이다. 물리 파일 저장 구조 자체가 1차 정렬 조건에 맞추어 사전 정렬된 형태를 갖는다. 따리서, 인덱스 데이터 테이블은 인덱스 데이터를 갖는 SSTable의 형태를 갖을 수 있다.
메타 데이터는 인덱스 데이터에 대한 메타 데이터를 나타낸다. 메타 데이터 테이블(metadata table)은, 메타 데이터를 갖는 SSTable의 형태를 갖을 수 있다. 메타 데이터 테이블의 구조에 대해서는 뒤에서 설명하기로 한다.
그리고, 상기 컨트롤러(120)는 상기 인덱스 데이터 테이블 및 상기 메타 데이터 테이블 중 적어도 하나에 대해 합병 정렬(Merge Sort 또는 Compaction)을 수행할 수 있다. 합병 정렬을 하는 구체적인 실시 예는 후술한다.
도 4는 본 발명의 일 실시 예에 따른 세컨더리 인덱스를 사용하는 메모리 컨트롤러의 구조를 도시한 도면이다.
도 4를 참조하면, 메모리 컨트롤러(120)는 클라이언트(410)의 요청을 핸들링 하는 클라이언트 모듈(420), 빅 데이터 처리를 위한 클러스터 관리 모듈(Cluster Management Module)(430), 메인 데이터를 저장하는 메인 데이터 스토어(Main DataStore)(440), 세컨더리 인덱스(Secondary Index)(450), 플래쉬 메모리(470)에 데이터를 읽거나 쓰기 위한 처리를 담당하는 스마트 SSD API(Smart SSD API)(460)을 포함할 수 있다. 본 명세서는 주로 스마트 SSD API(460)와 세컨더리 인덱스(450)의 동작에 초점을 두고 기술한다.
도 5는 종래의 인덱스 데이터 테이블과 메타 데이터 테이블에 대한 합병 정렬 기법을 나타내는 도면이다.
도 5를 참조하면, 기존의 합병 정렬 방법은 인덱스 데이터 테이블(520)과 메타 데이터 테이블(510) 모두, 즉, SSTable들 전체에 대해 합병 정렬을 수행한다. 구체적으로 인덱스 데이터 테이블(520)을 합병 정렬하여 하나의 테이블로 만들고, 새롭게 생성된 테이블에 대한 하나의 메타 데이터 테이블(530)을 생성한다. 그리고, 종전의 메타 데이터 테이블(510)은 폐기한다. 새롭게 인덱스 데이터 테이블이 생성되면, 읽기 실패(false Positive)가 발생하지 않으므로 성능이 향상된다. 그러나, 합병 정렬을 하는데 시간이 소요되어 전체적인 읽기 오버헤드는 증가하는 문제가 있다.
초기에 합병 정렬을 수행할지 결정하는 과정이 필요하다. 인덱스 데이터 테이블의 개수가 많아 지게 되면, 상이한 인덱스 데이터 테이블 사이에는 인덱스의 정렬이 이루어져 있지 않아, 읽기 실패(false Positive)가 증가하게 된다. 따라서, 적절한 시기에 합병 정렬이 필요하다. 이를 판단하기 위한 다양한 알고리즘이 존재할 수 있다.
본 발명의 일 실시 예에 따른 컨트롤러(120)는, 합병 정렬(merge sort)이 되지 않은 인덱스 데이터 테이블이 기 설정된 개수 이상인 경우, 상기 합병 정렬이 되지 않은 인덱스 데이터 테이블 및 상기 합병 정렬이 되지 않은 인덱스 데이터 테이블에 대한 메타 데이터 테이블 중 적어도 하나에 대해 합병 정렬을 수행한다.
도 6 및 7은 본 발명의 일 실시 예에 따른 인덱스 데이터 테이블과 메타 데이터 테이블에 대한 합병 정렬 기법을 나타내는 도면이다.
하나의 SSTable에 대한 Get 연산은 메타 데이터 테이블의 읽기를 통해 대상 인덱스 데이터를 찾고, 인덱스 데이터 테이블의 읽기를 통해 최종적으로 데이터를 읽는 것이다. 따라서, 최종적으로 (SSTable개수 *2)번의 읽기 I/O가 일어난다.
도 6을 참조하면, 컨트롤러(120)는 합병 정렬이 되지 않은 인덱스 데이터 테이블에 대한 메타 데이터 테이블들끼리만 합병 정렬을 수행할 수 있다. 메타 데이터 테이블에 대한 읽기 I/O를 감소시킬 수 있고, 전술한 SSTable들 전체에 대한 합병 정렬에 비해 I/O 비용이 적어진다.
도 6의 실시 예에서 메타 데이터 테이블 (4,11,20)과 (3,10,16)(610)을 합병 정렬하여 메타 데이터 테이블 (3,4,10,11,16,20)(630)을 얻었다. 이 경우 인덱스 데이터 테이블(620)에 대해서는 합병 정렬을 수행하지 않는다. 이렇게 메타 데이터 테이블을 비슷한 영역별로 재배치하게 되면, 전체 I/O 횟수를 줄일 수 있게 된다.
도 7도 유사한 실시 예를 도시한다. 도 7의 실시 예에서, 메타 데이터 테이블 (B,4,11,20)과, 메타 데이터 테이블 (F,3,10,16)과, 메타 데이터 테이블 (J,2,9,13)(이상 710)을 합병 정렬하는 상황을 도시한다. 합병 정렬을 하기 전에는 한번의 읽기를 수행하는데 읽기 실패가 발생하면, 최악의 경우, 각 SSTable별로 메타 데이터 테이블을 한번씩 읽고 인덱스 데이터 테이블을 읽어야 한다.
합병 정렬이 수행되면, 하나의 새로운 메타 데이터 테이블이 생성된다. 도 7의 실시 예에서 페이지 L의 메타 데이터 테이블 (B,4/F,3/J,2), 페이지 M의 메타 데이터 테이블 (C,11/G,10/J,9), 페이지 N의 메타 데이터 테이블 (D,20/H,16/K,13)(이상 720)이 생성된다. 각 페이지의 메타 데이터 테이블은 상호간에 정렬이 되어 있으므로, 합병 정렬 수행 후, 하나의 읽기를 하기 위해서는 하나의 페이지에 대한 메타 데이터 테이블만 읽으면 되며, 이로 인해 I/O가 크게 줄어든다.
도 8 및 9는 본 발명의 다른 실시 예에 따른 인덱스 데이터 테이블과 메타 데이터 테이블에 대한 합병 정렬 기법을 나타내는 도면이다.
I/O 횟수가 증가하는 이유는 정렬되지 않은 인덱스 데이터 테이블, 메타 데이터 테이블로 인해 읽기 실패가 증가하기 때문이다. 반대로 얘기하면, 읽기 실패가 많이 발생하는 영역은 세컨더리 인덱스의 정렬이 이루어지지 않은 영역으로 볼 수 있다. 따라서, 이 영역에 대해서만 정렬을 수행해 줄 수 있다. 이 경우도 전체 SSTable을 모두 정렬하는 것은 아니므로, 전체 오버헤드는 크게 줄어든다.
도 8의 실시 예에서 컨트롤러(120)는 읽기 실패(false Positive)가 기 설정된 횟수 이상 발생된 인덱스 데이터 테이블에 대해 범위 합병 정렬(Range Merge Sort 또는 Range Compaction)을 수행할 수 있다.
도 8에서 테이블 (11,15,17) 과 테이블 (10, 12, 13) 영역(이상 810)에서 읽기 실패가 많이 발생했다고 가정한다. 이 때, 이들 영역에 대해서만 범위 합병 정렬을 수행한다.
또한, 컨트롤러(120)는 범위 합병 정렬을 수행한 인덱스 데이터 테이블에 대한 메타 데이터 테이블(metadata table)을 생성하여 상기 메모리에 기록할 수 있다. 즉, 새롭게 정렬된 테이블 (10,11,12), (13,15,17)(이상 810)에 대한 메타 데이터 테이블(10,13)(820)을 생성한다.
도 9의 실시 예에서 인덱스 데이터 테이블 (11,15,17), (10,12,13), (9,10,11)(이상 910)에 대해서 범위 합병 정렬이 이루어지면, 새로운 인덱스 데이터 테이블 (9,10,10), (11,11,12), (13,15,17)(이상 920)이 생성된다. 여기에 대한 메타 데이터 테이블 (9,11,13)(930)을 생성할 수 있다.
본 발명에서의 합병 정렬(Merge Sort)은 중복되는 데이터를 삭제하지 않는다. 따라서, (9,10,10)과 같은 형태의 인덱스 데이터 테이블이 생성될 수 있다.
도 10은 세컨더리 인덱스의 구조를 도시한 도면이다.
도 10에 도시된 것처럼 하나의 세컨더리 인덱스는 하나의 MemSSTable과 N개의 StoredSSTable으로 구성된다. 읽기(Get) 요청이 있으면 MemSSTable부터 StoredSSTable까지 모든 SSTable에 대해 읽기가 수행된다. 쓰기(Put) 요청이 있으면, 먼저 MemSSTable에 정렬되어 기록된 후, MemSSTable의 크기가 일정 규모가 되면 StoredSSTable의 형태로 SSD에 정렬되어 저장된다. StoredSSTable은 MemSSTable이 SSD에 저장된 형태로 저장될 때에는 순차 쓰기(Sequential Write)로 여러 페이지들이 한번에 저장된다(플러시 flush).
도 10에 도시된 것처럼 메타 데이터 테이블은 노드(1010), 필터(1020), 루트(1030)를 포함한다. 여기에 대해서는 도 11을 참조하여 설명한다.
도 11은 메타 데이터 테이블을 설명하기 위한 도면이다.
메타 데이터 테이블의 필드는 노드(Node), 루트(Root), 필터(Filter)를 포함한다. 노드가 메타 데이터의 대부분을 차지하며, 루트나 필터는 SSTable당 하나씩 존재한다. 루트와 필터는 SSTable 전체의 크기보다 작으며, 따라서 루트와 필터는 항상 메모리에 존재할 수 있다.
필터는 이 SSTable에 해당 키(key)가 존재 하는지 아닌지를 판별할 수 있는 블룸 필터(Bloom Filter) 정보를 갖는다.
루트는 해당 SSTable을 대표하여, SSTable을 구성하는 페이지의 범위 정보를 갖는다. 루트는 SSTable내에서 물리적으로 가장 마지막 페이지에 기록된다. 또한 가장 최근의 루트는 바로 직전의 루트 페이지의 주소값을 갖는다. 이에 따라 항상 물리적으로 마지막 페이지에 가장 최근 루트가 존재하며, 이 루트의 전 루트 페이지 주소를 쫓아가는 방식으로 모든 SSTable을 복구할 수 있다.
노드는 데이터 페이지들의 첫 번째 키(Key)값들을 갖는다. 따라서 노드를 조회하면, 노드가 관리하는 영역의 데이터 페이지가 가진 키(Key)의 영역을 알 수 있다. 데이터 페이지는 물리적으로 연속된 주소공간상에 배치된다. 따라서 노드에서는 뒤 페이지의 PID(Process ID)가 연속적이란 것을 알기 때문에 첫번째 데이터 페이지의 PID만 기록한 후 각 데이터 페이지들의 키만 배치하여도, 탐색이 가능하다.
도 12는 SSTable이 기록되는 메모리 블록을 나타낸 도면이다.
본 발명의 다양한 실시 예에 따르면, 상기 합병 정렬이 수행된 인덱스 데이터 테이블은, 적어도 하나의 메모리 블록에 기록될 수 있다. 달리 말해, 상기 인덱스 데이터 테이블이 기록된 하나의 메모리 블록에는 두 개 이상의 인덱스 데이터 테이블이 기록되지 않는다.
도 12의 위 그림에서 하나의 SSTable이 두 블록에 걸쳐서 기록된 상태를 볼 수 있다. 이러한 경우, 상기 SSTable이 더 이상 쓸모 없어져서 삭제되거나, 하나의 블록에 있는 다른 SSTable과 합병 정렬되고 합병 정렬된 SSTable이 제거되는 경우도 같은 블록 안에 남아 있는 다른 SSTable이 존재할 수 있게 된다. 이러한 경우 다른 SSTable로 인해 해당 블록을 반환할 수 없게 되고 가비지 컬렉션 과정의 오버헤드가 발생한다.
본 발명은 메모리 블록의 크기에 맞추어 인덱스 데이터 테이블 및 메타 데이터테이블(이상 SSTable)을 기록할 수 있게 되므로, SSTable을 제거 후 해당 블록을 가비지 컬렉션 없이 재활용할 수 있어 효율적이다.
또한, 본 발명은 스마트 SSD의 원자 쓰기(Atomic Write)기능을 이용하여 저널링(Jounaling) 기능 없이도 안전한 쓰기를 가능하게 하여, 저널링으로 인한 오버헤드를 제거한다.
상기와 같은 본 발명은 루트 페이지를 이용해 SSTable을 재복구 할 수 있는 기능을 제공한다. 항상 모든 SSTable은 메타 데이터 테이블과 인덱스 데이터 테이블로구성되고, 가장 마지막에 루트 페이지가 기록된다. 또한, 루트 페이지는 직전에 기록한 루트 페이지의 위치정보가 기록된다. 따라서 가장 마지막에 기록한 루트 페이지(1110)를 읽은 후, 이전 루트 페이지(1120,1130,1140)를 찾아 따라가며 읽으면 빠른 시간 내에 모든 SSTable의 루트 페이지를 읽을 수 있다. 루트 페이지는 자신이 속한 SSTable의 페이지 정보가 있기 때문에, 루트 페이지만 있으면 SSTable을 재구성할 수 있다. SmartSSD의 기능을 통해 마지막으로 쓰기를 한 위치를 획득해 마지막 루트 페이지를 탐색함으로써, 메타 데이터를 변경하지 않고 SSTable 추가가 가능하다.
그런데, 루트 페이지는 원자 쓰기(Atomic Write)를 통해 온전히 기록되며, 따라서 항상 마지막에 기록되는 루트 페이지의 기록 여부를 통해 SSTable의 쓰기 여부를 결정할 수 있다. 그러므로, 체크섬(checksum) 비트나, 패리티(parity bit)가 불필요해진다.
이하에서는 본 발명의 일 실시 예에 따른 세컨더리 인덱스 생성 방법을 설명한다.
도 13은 본 발명의 일 실시 예에 따른 세컨더리 인덱스 생성 방법의 흐름도이다.
도 13을 참조하면, 본 발명의 일 실시 예에 따른 세컨더리 인덱스 생성 방법은, 인덱스 데이터의 크기가 메모리 블록 사이즈 이상이 되면(S1310-Y), 상기 인덱스 데이터를 포함하는 인덱스 데이터 테이블(index data table)을 생성하여 메모리에 기록하는 단계(S1320)와, 상기 인덱스 데이터 테이블에 대한 메타 데이터 테이블(metadata table)을 생성하여 상기 메모리에 기록하는 단계(S1330,S1340), 상기 인덱스 데이터 테이블 및 상기 메타 데이터 테이블 중 적어도 하나에 대해 합병 정렬을 수행하는 단계(S1350)를 포함한다.
이때, 상기 합병 정렬을 수행하는 단계는, 합병 정렬(merge sort)이 되지 않은 인덱스 데이터 테이블이 기 설정된 개수 이상인 경우, 상기 합병 정렬이 되지 않은 인덱스 데이터 테이블 및 상기 합병 정렬이 되지 않은 인덱스 데이터 테이블에 대한 메타 데이터 테이블 중 적어도 하나에 대해 합병 정렬을 수행할 수 있다.
또한, 상기 합병 정렬을 수행하는 단계는, 상기 합병 정렬이 되지 않은 인덱스 데이터 테이블에 대한 메타 데이터 테이블들 끼리만 합병 정렬을 수행하는 것일 수 있다.
또한, 상기 합병 정렬을 수행하는 단계는, 읽기 실패(false Positive)가 기 설정된 횟수 이상 발생된 인덱스 데이터 테이블에 대해 범위 합병 정렬(Range Compaction)을 수행할 수 있다.
또한, 상기 범위 합병 정렬을 수행한 인덱스 데이터 테이블에 대한 메타 데이터 테이블(metadata table)을 생성하여 상기 메모리에 기록하는 단계를 더 포함할 수 있다.
또한, 상기 메타 데이터 테이블은, 상기 인덱스 데이터의 페이지 정보, 상기 인
덱스 데이터 테이블의 첫번째 키 값, 블룸필터(Bloom filter) 값 및 상기 인덱스 데이터의 페이지의 범위를 나타내는 루트값 중 적어도 하나를 포함할 수 있다.
또한, 상기 합병 정렬이 수행된 인덱스 데이터 테이블은, 적어도 하나의 메모리 블록에 기록될 수 있다.
또한, 상기 인덱스 데이터 테이블이 기록된 하나의 메모리 블록에는 두 개 이상의 인덱스 데이터 테이블이 기록되지 않는다.
또한, 상기 합병 정렬이 수행되지 않은 인덱스 데이터 테이블 및 메타 데이터 테이블 중 적어도 하나에 대해 합병 정렬을 수행하는 단계를 더 포함할 수 있다.
상기 루트값은, 원자 기록(atomic write)을 통해 기록될 수 있다.
상술한 본 발명의 일 실시 예에 따른 세컨더리 인덱스 생성 방법은 아래와 같은 알고리즘의 수도코드(pseudo code)로 작성될 수 있다.
먼저 메타 데이터 테이블의 합병 정렬은 다음의 알고리즘으로 구현될 수 있다.
알고리즘에서 SSTableManager 모듈, StoredSSTable Module 모듈, PageManager 모듈을 정의한다.
SStableManager -> StoredSStable.mergeMeta() // 본격적인 메타 데이터 테이블 합병 시작
StoredSStable -> IO.beginSSDWrite()??? // SSD에 대한 Write가 시작됨을 알림. Block단위 쓰기를 쉽게 하기 위함.
for( i ... 1-4)????????????? // 합병할 SSTable에 대해 순회하기 위해 커서(cursor)를 열음.?cursor[i] = StoredSStable? -> IO.beginScanSSTable( victimStoreSSTable[i] )Loop:?for( i ... 1-4)????????????? // 합병할 SSTable에 대해 순회.??metas += IO.readMeta( cursor[i] )?????// 모든 victim sstable로부터 meta를 순차적으로 읽음.?minMetaKey = StoreSSTable -> StoreSSTable.chooseMinKey(metas)?? // 읽은 meta key 중 가장 작은 meta를 선택.?if( minMetaKey != null ) {????????// 새롭게 삽입할 meta key가 있을 경우, 삽입 후 loop를 다시 돌음.??StoredSStable -> IO.insertMeta( minMetaKey)? // 새 meta Key를 SSD에 기록. ??goto Loop:?}// minMetaKey가 없으므로, 모든 victim sstable에는 더이상 처리할 meta key가 없음.
for( i ... 1-4)??cursor[i].close()
newSStable = SSTableManager -> O.endSSDWrite()???// ssd에 대한 쓰기가 끝났음을 알림.
SSTableManager -> StoredSStable.regist( newSSTable )?// SSD에는 meta Key로만 이루어진 SSTable이 존재하고, 이 SSTable은, metaKey만 새로 쓰여졌지만, 각 metaKey는 기존 모든 victim SSTable의 DataPage를 가리키기 때문에 유효한 SSTable이다. 이 SSTable을 등록한다.
SStableManager -> StoredSSTable.removeSStable( VictimStoreSStable ) // 이 victim들에 대해서는 newSSTable로 접근 가능하기 때문에, victim들을 제거한다.
또한, 인덱스 데이터 테이블에 대한 범위 합병 정렬은 다음의 알고리즘으로 구현될 수 있다.
SStableManager -> StoredSStable.mergeMeta() // 본격적인 meta merge를 수행.StoredSStable -> IO.beginSSDWrite()??????????? // SSD에 대한 Write가 시작됨을 알린다. 블록단위 쓰기를 쉽게 하기 위함이다.
for( i ... 1-4)????????????????? // meta merge할 sstable에 대해 순회하기 위해 커서(cursor)를 연다.
cursor[i] = StoredSStable? -> IO.beginScanSSTable( victimStoreSSTable[i], beginKey, endKey )?// 스캔하기 위한 커서(cursor)를 열때, beginKey, endKey로 읽을 범위를 지정한다. 만약 지정하지 않고 각 victim sstable의 모든 영역을 범위로 할 경우 SStableMerge가 되며, 범위를 지정할 경우 RangeMerge가 된다.
Loop:
for( i ... 1-4)????????????? // meta merge할 sstable에 대해 순회합니다.??datas += StoredSStable -> IO.readData( VictimStoreSStable[i] )?????// 모든 victim sstable로부터 데이터를 순차적으로 읽음.
?minDataKey = StoreSSTable -> StoreSSTable.chooseMinKey( datas)?? // 읽은 meta key 중 가장 작은 meta를 선택.?if( minDataKey != null ) {????????// 새롭게 삽입할 meta key가 있을 경우, 삽입 후 loop를 다시 돈다.??StoredSStable -> IO.insert( minDataKey)? // 새 dataKey를 SSD에 기록. ??goto Loop:?}
// minDataKey가 없으므로, 모든 victim sstable에는 더이상 처리할 data key가 없음.
newSStable = SSTableManager -> O.endSSDWrite()??// ssd에 대한 쓰기가 끝났음을 알림.
SSTableManager -> StoredSStable.regist( newSSTable )?// 완전히 새로 쓰인 SSTable을 등록.
if( beginKey==NULL & endKey==NULL){????? // 범위가 설정되지 않아, 모든 영역에 대해 새로 기록했을 경우
for( i ... 1-4)??SStableManager -> StoredSSTable.removeSStable( VictimStoreSStable ) // 이 victim들에 대해서는 newSSTable로 접근 가능하기 때문에, victim들을 제거.} else {?for( i ... 1-4)??SStableManager -> StoredSSTable.changeRoot( VictimStoreSStable, beginKey, endKey ) // beginkey <-> endKey영역만 제외되도록 root만 다시 기록.
}
한편, 전술한 세컨더리 인덱스 생성 방법과 그에 대응되는 프로그램은 컴퓨터 상에서 판독 가능한 비일시적 기록 매체에 저장되는 형태로 사용될 수 있다. 여기서 비일시적 판독 가능 매체란 레지스터, 캐쉬 등과 같이 짧은 순간 동안 데이터를 저장하는 매체가 아니라 반영구적으로 데이터를 저장이 가능하며, 전자기기에 의해 판독(reading)이 가능한 매체를 의미한다. 예를 들어, CD, DVD, 하드 디스크, 블루레이 디스크, USB, 메모리카드, ROM 등이 될 수 있다.
이상과 같은 본 발명의 다양한 실시 예에 따르면, 본 발명은 첫째, 스마트 SSD의 성능을 극대화 할 수 있는 I/O 패턴을 사용할 수 있게 된다. 즉, 스마트 SSD의 블록(Block), 채널(Channel), 웨이(way)를 인식한 I/O패턴을 통해 스마트 SSD의 병행 읽기(Read parallelism)를 극대화 하고, 가비지 컬렉션 오버헤드(Garbage Collection Overhead)를 제거하여 쓰기 확대(Write Amplification)를 최소화할 수 있다.
둘째, LSM(Log Structured Merge) 트리 기반의 구성을 통해 쓰기 I/O 패턴을 순차적인 쓰기(Sequential Write)만으로 제한하여, 일반적인 SSD에서도 최적화된 성능을 보일 수 있다.
셋째, SSTable들의 메타 데이터 테이블의 합병을 통한 읽기 I/O 코스트를 감소시킬 수 있다. 데이터 조회시 각 SSTable별로 Meta영역(메타 데이터 테이블)과 Data 영역(인덱스 데이터 테이블)을 읽기 때문에 2번의 읽기 I/O가 발생한다. 여러 SSTable의 Meta 영역만 먼저 합병할 경우, Meta영역에 대한 읽기 I/O를 크게 줄일 수 있게 된다. 이 경우 Meta영역은 Data영역에 비해 매우 작기 때문에, Meta영역만의 합병에 대한 오버헤드는 매우 작다.
넷째, 특정 범위에 대한 우선적 합병을 통한 합병 오버헤드를 감소시킨다. 데이터는 각각 지역성(Locality)을 가지며, 따라서 범위 별로 합병에 대한 우선순위가 다르다. 따라서, SSTable 전체에 대한 합병이 아닌, 우선적인 범위에 대해서만 합병을 수행할 수 있다.
이러한 기술은 한번에 합병하는 범위가 줄어들기 때문에 합병 연산이 빨라지며, 합병에 따른 성능저하도 줄어들 것이다.
다섯째, Meta영역 구조 변경을 통한 Meta영역 공간 효율성을 증가시킬 수 있다. 기존 LSM 트리의 Meta영역은 각 키 벨류(KeyValue) 위치를 키(Key)와 오프셋(Offset)형식으로 표현하였다. 이를 일정한 간격의 오프셋(Offset)에 존재하는 키(Key)들의 연속으로 표현함으로써, 기존 오프셋(Offset)을 표현하기 위해 사용되었던 공간을 절약할 수 있다.
이상에서는 본 발명의 바람직한 실시 예에 대하여 도시하고 설명하였지만, 본 발명은 상술한 특정의 실시 예에 한정되지 아니하며, 청구범위에서 청구하는 본 발명의 요지를 벗어남이 없이 당해 발명이 속하는 기술분야에서 통상의 지식을 가진 자에 의해 다양한 변형실시가 가능한 것은 물론이고, 이러한 변형실시들은 본 발명의 기술적 사상이나 전망으로부터 개별적으로 이해되어서는 안될 것이다.
100 : 세컨더리 인덱스 저장 장치.
110 : 메모리 120 : 컨트롤러

Claims (20)

  1. 세컨더리 인덱스(secondary index) 생성 방법에 있어서,
    인덱스 데이터의 크기가 메모리 블록 사이즈 이상이 되면, 상기 인덱스 데이터를 포함하는 인덱스 데이터 테이블(index data table)을 생성하여 메모리에 기록하는 단계;
    상기 인덱스 데이터 테이블에 대한 메타 데이터 테이블(metadata table)을 생성하여 상기 메모리에 기록하는 단계; 및
    상기 인덱스 데이터 테이블 및 상기 메타 데이터 테이블 중 적어도 하나에 대해 합병 정렬을 수행하는 단계;를 포함하는 세컨더리 인덱스 생성 방법.
  2. 제1항에 있어서,
    상기 합병 정렬을 수행하는 단계는,
    상기 합병 정렬(merge sort)이 되지 않은 인덱스 데이터 테이블이 기 설정된 개수 이상인 경우, 상기 합병 정렬이 되지 않은 인덱스 데이터 테이블 및 상기 합병 정렬이 되지 않은 인덱스 데이터 테이블에 대한 메타 데이터 테이블 중 적어도 하나에 대해 합병 정렬을 수행하는 것을 특징으로 하는 세컨더리 인덱스 생성 방법.
  3. 제2항에 있어서,
    상기 합병 정렬을 수행하는 단계는,
    상기 합병 정렬이 되지 않은 인덱스 데이터 테이블에 대한 메타 데이터 테이블들 끼리만 합병 정렬을 수행하는 것을 특징으로 하는 세컨더리 인덱스 생성 방법.
  4. 제1항에 있어서,
    상기 합병 정렬을 수행하는 단계는,
    읽기 실패(false Positive)가 기 설정된 횟수 이상 발생된 인덱스 데이터 테이블에 대해 범위 합병 정렬(Range Compaction)을 수행하는 것을 특징으로 하는 세컨더리 인덱스 생성 방법.
  5. 제4항에 있어서,
    상기 범위 합병 정렬을 수행한 인덱스 데이터 테이블에 대한 메타 데이터 테이블(metadata table)을 생성하여 상기 메모리에 기록하는 단계;를 더 포함하는 것을 특징으로 하는 세컨더리 인덱스 생성 방법.
  6. 제1항에 있어서,
    상기 메타 데이터 테이블은,
    상기 인덱스 데이터의 페이지 정보, 상기 인덱스 데이터 테이블의 첫번째 키 값, 블룸필터(Bloom filter) 값 및 상기 인덱스 데이터의 페이지의 범위를 나타내는 루트값 중 적어도 하나를 포함하는 것을 특징으로 하는 세컨더리 인덱스 생성 방법.
  7. 제1항에 있어서,
    상기 합병 정렬이 수행된 인덱스 데이터 테이블은, 적어도 하나의 메모리 블록에 기록되는 것을 특징으로 하는 세컨더리 인덱스 생성 방법.
  8. 제7항에 있어서,
    상기 인덱스 데이터 테이블이 기록된 하나의 메모리 블록에는 두 개 이상의 인덱스 데이터 테이블이 기록되지 않는 것을 특징으로 하는 세컨더리 인덱스 생성 방법.
  9. 제1항에 있어서,
    상기 합병 정렬이 수행되지 않은 인덱스 데이터 테이블 및 메타 데이터 테이블 중 적어도 하나에 대해 합병 정렬을 수행하는 단계;를 더 포함하는 것을 특징으로 하는 세컨더리 인덱스 생성 방법.
  10. 제6항에 있어서,
    상기 루트값은,
    원자 기록(atomic write)을 통해 기록되는 것을 특징으로 하는 세컨더리 인덱스 생성 방법.
  11. 제1항에 있어서,
    상기 메모리는 SSD(Solid State Drive)인 것을 특징으로 하는 세컨더리 인덱스 생성 방법.
  12. 세컨더리 인덱스(secondary index) 저장 장치에 있어서,
    메모리; 및
    인덱스 데이터의 크기가 메모리 블록 사이즈 이상이 되면, 상기 인덱스 데이터를 포함하는 인덱스 데이터 테이블(index data table) 및 상기 인덱스 데이터 테이블에 대한 메타 데이터 테이블(metadata table)을 생성하여 상기 메모리에 기록하고, 상기 인덱스 데이터 테이블 및 상기 메타 데이터 테이블 중 적어도 하나에 대해 합병 정렬을 수행하는 컨트롤러;를 포함하는 세컨더리 인덱스 저장 장치.
  13. 제12항에 있어서,
    상기 컨트롤러는,
    상기 합병 정렬(merge sort)이 되지 않은 인덱스 데이터 테이블이 기 설정된 개수 이상인 경우, 상기 합병 정렬이 되지 않은 인덱스 데이터 테이블 및 상기 합병 정렬이 되지 않은 인덱스 데이터 테이블에 대한 메타 데이터 테이블 중 적어도 하나에 대해 합병 정렬을 수행하는 것을 특징으로 하는 세컨더리 인덱스 저장 장치.
  14. 제13항에 있어서,
    상기 컨트롤러는,
    상기 합병 정렬이 되지 않은 인덱스 데이터 테이블에 대한 메타 데이터 테이블들 끼리만 합병 정렬을 수행하는 것을 특징으로 하는 세컨더리 인덱스 저장 장치.
  15. 제12항에 있어서,
    상기 컨트롤러는,
    읽기 실패(false Positive)가 기 설정된 횟수 이상 발생된 인덱스 데이터 테이블에 대해 범위 합병 정렬(Range Merge Sort or Range Compaction)을 수행하는 것을 특징으로 하는 세컨더리 인덱스 저장 장치.
  16. 제15항에 있어서,
    상기 컨트롤러는,
    상기 범위 합병 정렬을 수행한 인덱스 데이터 테이블에 대한 메타 데이터 테이블(metadata table)을 생성하여 상기 메모리에 기록하는 것을 특징으로 하는 세컨더리 인덱스 저장 장치.
  17. 제12항에 있어서,
    상기 메타 데이터 테이블은,
    상기 인덱스 데이터의 페이지 정보, 상기 인덱스 데이터 테이블의 첫번째 키 값, 블룸필터(Bloom filter) 값 및 상기 인덱스 데이터의 페이지의 범위를 나타내는 루트값 중 적어도 하나를 포함하는 것을 특징으로 하는 세컨더리 인덱스 저장 장치.
  18. 제12항에 있어서,
    상기 합병 정렬이 수행된 인덱스 데이터 테이블은, 적어도 하나의 메모리 블록에 기록되는 것을 특징으로 하는 세컨더리 인덱스 저장 장치.
  19. 제18항에 있어서,
    상기 인덱스 데이터 테이블이 기록된 하나의 메모리 블록에는 두 개 이상의 인덱스 데이터 테이블이 기록되지 않는 것을 특징으로 하는 세컨더리 인덱스 저장 장치.
  20. 제12항에 있어서,
    상기 컨트롤러는,
    상기 합병 정렬이 수행되지 않은 인덱스 데이터 테이블 및 메타 데이터 테이블 중 적어도 하나에 대해 합병 정렬을 수행하는 것을 특징으로 하는 세컨더리 인덱스 저장 장치.
KR1020140048924A 2014-04-23 2014-04-23 세컨더리 인덱스 생성 방법 및 세컨더리 인덱스 저장 장치 KR102310246B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020140048924A KR102310246B1 (ko) 2014-04-23 2014-04-23 세컨더리 인덱스 생성 방법 및 세컨더리 인덱스 저장 장치
US14/694,442 US10061693B2 (en) 2014-04-23 2015-04-23 Method of generating secondary index and apparatus for storing secondary index

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020140048924A KR102310246B1 (ko) 2014-04-23 2014-04-23 세컨더리 인덱스 생성 방법 및 세컨더리 인덱스 저장 장치

Publications (2)

Publication Number Publication Date
KR20150122533A true KR20150122533A (ko) 2015-11-02
KR102310246B1 KR102310246B1 (ko) 2021-10-08

Family

ID=54334977

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020140048924A KR102310246B1 (ko) 2014-04-23 2014-04-23 세컨더리 인덱스 생성 방법 및 세컨더리 인덱스 저장 장치

Country Status (2)

Country Link
US (1) US10061693B2 (ko)
KR (1) KR102310246B1 (ko)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018129500A1 (en) * 2017-01-09 2018-07-12 President And Fellows Of Harvard College Optimized navigable key-value store
KR102235803B1 (ko) 2017-03-31 2021-04-06 삼성전자주식회사 반도체 장치
US10649771B2 (en) 2017-03-31 2020-05-12 Samsung Electronics Co., Ltd. Semiconductor device
KR102343652B1 (ko) 2017-05-25 2021-12-24 삼성전자주식회사 벡터 프로세서의 서열 정렬 방법
WO2019000388A1 (en) 2017-06-30 2019-01-03 Microsoft Technology Licensing, Llc ANCHORING TREE STRETCHING FOR IMPROVED SIMULTANEITY AND PERFORMANCE IN PAGES BEACH INDEX MANAGEMENT
US11249961B2 (en) 2017-06-30 2022-02-15 Microsoft Technology Licensing, Llc Online schema change of range-partitioned index in a distributed storage system
US10776345B2 (en) * 2018-04-25 2020-09-15 DataStax Efficiently updating a secondary index associated with a log-structured merge-tree database
US11093472B2 (en) * 2018-12-07 2021-08-17 Vmware, Inc. Using an LSM tree file structure for the on-disk format of an object storage platform
CN111488340B (zh) * 2019-01-29 2023-09-12 菜鸟智能物流控股有限公司 数据处理方法、装置及电子设备
CN112394874A (zh) * 2019-08-13 2021-02-23 华为技术有限公司 一种键值kv的存储方法、装置及存储设备
US20220011948A1 (en) * 2020-07-08 2022-01-13 Samsung Electronics Co., Ltd. Key sorting between key-value solid state drives and hosts
US11954345B2 (en) 2021-12-03 2024-04-09 Samsung Electronics Co., Ltd. Two-level indexing for key-value persistent storage device

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6061678A (en) * 1997-10-31 2000-05-09 Oracle Corporation Approach for managing access to large objects in database systems using large object indexes
US20090031076A1 (en) * 2002-07-26 2009-01-29 Samsung Electronics Co., Ltd. Method for Managing Flash Memory
US20130097380A1 (en) * 2011-10-14 2013-04-18 John Colgrove Method for maintaining multiple fingerprint tables in a deduplicating storage system
US20130290648A1 (en) * 2012-04-27 2013-10-31 Netapp, Inc. Efficient data object storage and retrieval
US20130290343A1 (en) * 2012-04-27 2013-10-31 Empire Technology Development Llc Multiple variable coverage memory for database indexing
US20130346415A1 (en) * 2012-06-21 2013-12-26 Alexander I. Tomlinson Systems and methods multi-key access to data
US20130346720A1 (en) * 2011-08-11 2013-12-26 Pure Storage, Inc. Garbage collection in a storage system
US20140279855A1 (en) * 2013-03-15 2014-09-18 International Business Machines Corporation Differentiated secondary index maintenance in log structured nosql data stores
US20150213068A1 (en) * 2014-01-27 2015-07-30 Fujitsu Limited Information processing apparatus and storage system
US9612955B2 (en) * 2013-01-09 2017-04-04 Wisconsin Alumni Research Foundation High-performance indexing for data-intensive systems

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9201918B2 (en) * 2013-11-19 2015-12-01 Netapp, Inc. Dense tree volume metadata update logging and checkpointing

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6061678A (en) * 1997-10-31 2000-05-09 Oracle Corporation Approach for managing access to large objects in database systems using large object indexes
US20090031076A1 (en) * 2002-07-26 2009-01-29 Samsung Electronics Co., Ltd. Method for Managing Flash Memory
US20130346720A1 (en) * 2011-08-11 2013-12-26 Pure Storage, Inc. Garbage collection in a storage system
US20130097380A1 (en) * 2011-10-14 2013-04-18 John Colgrove Method for maintaining multiple fingerprint tables in a deduplicating storage system
US20130290648A1 (en) * 2012-04-27 2013-10-31 Netapp, Inc. Efficient data object storage and retrieval
US20130290343A1 (en) * 2012-04-27 2013-10-31 Empire Technology Development Llc Multiple variable coverage memory for database indexing
US20130346415A1 (en) * 2012-06-21 2013-12-26 Alexander I. Tomlinson Systems and methods multi-key access to data
US9612955B2 (en) * 2013-01-09 2017-04-04 Wisconsin Alumni Research Foundation High-performance indexing for data-intensive systems
US20140279855A1 (en) * 2013-03-15 2014-09-18 International Business Machines Corporation Differentiated secondary index maintenance in log structured nosql data stores
US20150213068A1 (en) * 2014-01-27 2015-07-30 Fujitsu Limited Information processing apparatus and storage system

Also Published As

Publication number Publication date
KR102310246B1 (ko) 2021-10-08
US20150310053A1 (en) 2015-10-29
US10061693B2 (en) 2018-08-28

Similar Documents

Publication Publication Date Title
KR102310246B1 (ko) 세컨더리 인덱스 생성 방법 및 세컨더리 인덱스 저장 장치
US10496621B2 (en) Columnar storage of a database index
US10761758B2 (en) Data aware deduplication object storage (DADOS)
US9880746B1 (en) Method to increase random I/O performance with low memory overheads
US8225029B2 (en) Data storage processing method, data searching method and devices thereof
US8712963B1 (en) Method and apparatus for content-aware resizing of data chunks for replication
US8639669B1 (en) Method and apparatus for determining optimal chunk sizes of a deduplicated storage system
US10303363B2 (en) System and method for data storage using log-structured merge trees
US9043540B2 (en) Systems and methods for tracking block ownership
US9594674B1 (en) Method and system for garbage collection of data storage systems using live segment records
US9715505B1 (en) Method and system for maintaining persistent live segment records for garbage collection
US20140359233A1 (en) Read-write control method for memory, and corresponding memory and server
US9183218B1 (en) Method and system to improve deduplication of structured datasets using hybrid chunking and block header removal
US9904480B1 (en) Multiplexing streams without changing the number of streams of a deduplicating storage system
KR20200067962A (ko) Ssd에 데이터를 기록하는 방법 및 장치
CN102591947A (zh) 用于数据去重复的快速且低ram占用的索引
KR20200122994A (ko) 키 값 첨부
US10657103B2 (en) Combining data matches from multiple sources in a deduplication storage system
US10229127B1 (en) Method and system for locality based cache flushing for file system namespace in a deduplicating storage system
CN110888837B (zh) 对象存储小文件归并方法及装置
US11372576B2 (en) Data processing apparatus, non-transitory computer-readable storage medium, and data processing method
CN109407985B (zh) 一种数据管理的方法以及相关装置
KR20210058118A (ko) CaseDB: 엣지컴퓨팅을 위한 저비용 Put-Intensive 키-벨류 저장장치
CN113535670A (zh) 一种虚拟化资源镜像存储系统及其实现方法
US20170351608A1 (en) Host device

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right