KR101123335B1 - 해시 인덱스 구성 방법과 그 장치, 및 상기 장치를 구비하는 데이터 저장 장치, 및 상기 방법을 구현하는 프로그램이 기록된 기록매체 - Google Patents

해시 인덱스 구성 방법과 그 장치, 및 상기 장치를 구비하는 데이터 저장 장치, 및 상기 방법을 구현하는 프로그램이 기록된 기록매체 Download PDF

Info

Publication number
KR101123335B1
KR101123335B1 KR1020090003339A KR20090003339A KR101123335B1 KR 101123335 B1 KR101123335 B1 KR 101123335B1 KR 1020090003339 A KR1020090003339 A KR 1020090003339A KR 20090003339 A KR20090003339 A KR 20090003339A KR 101123335 B1 KR101123335 B1 KR 101123335B1
Authority
KR
South Korea
Prior art keywords
bucket
index
work record
overflow
hash
Prior art date
Application number
KR1020090003339A
Other languages
English (en)
Other versions
KR20100083976A (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 KR1020090003339A priority Critical patent/KR101123335B1/ko
Publication of KR20100083976A publication Critical patent/KR20100083976A/ko
Application granted granted Critical
Publication of KR101123335B1 publication Critical patent/KR101123335B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2255Hash tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • 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
    • 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/2272Management thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/31Indexing; Data structures therefor; Storage structures
    • G06F16/316Indexing structures
    • G06F16/325Hash tables
    • 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/9014Indexing; Data structures therefor; Storage structures hash tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4411Configuring for operating with peripheral devices; Loading of device drivers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/451Execution arrangements for user interfaces
    • G06F9/453Help systems

Landscapes

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

Abstract

본 발명은 소용량 데이터의 작은 쓰기 횟수를 감소시켜 메모리 칩을 이용하는 데이터 저장 장치(ex. SSD)에 적용할 수 있는 해시 인덱스 구성 방법과 그 장치, 및 상기 장치를 구비하는 데이터 저장 장치, 및 상기 방법을 구현하는 프로그램이 기록된 기록매체를 개시한다. 본 발명은 (a) 선형 해싱을 통해 확보된 메모리 공간에 쓰기 버퍼를 할당하는 단계; (b) 할당된 쓰기 버퍼에 데이터 처리 요청에 대한 인덱스 작업 레코드 그룹을 생성하는 단계; (c) 적어도 하나의 버킷을 추출하며, 생성된 인덱스 작업 레코드 그룹을 추출된 버킷으로 출력시키는 단계; 및 (d) 생성된 인덱스 작업 레코드 그룹을 포함하는 버킷을 기반으로 하는 해시 인덱스를 구성하는 단계를 포함하는 것을 특징으로 하는 해시 인덱스 구성 방법을 제공한다. 본 발명에 따르면, SSD와 같은 데이터 저장 장치의 쓰기 효율을 향상시킬 수 있으며, 그 수명도 연장시킬 수 있다.
해시 인덱스(hash index), SSD, 플래시 메모리(flash memory), 버킷(bucket), 선형 해싱(linear hashing), 인덱스 작업 레코드(Index Task Record), 분할 연기(deferred splitting), 오버플로우 버킷(overflow bucket)

Description

해시 인덱스 구성 방법과 그 장치, 및 상기 장치를 구비하는 데이터 저장 장치, 및 상기 방법을 구현하는 프로그램이 기록된 기록매체 {Method and apparatus for configuring hash index, and apparatus for storing data having the said apparatus, and the recording media storing the program performing the said method}
본 발명은 해시 인덱스 구성 방법과 그 장치, 및 상기 장치를 구비하는 데이터 저장 장치, 및 상기 방법을 구현하는 프로그램이 기록된 기록매체에 관한 것이다. 보다 상세하게는, 소용량 데이터의 작은 쓰기 횟수를 감소시켜 메모리 칩을 이용하는 데이터 저장 장치(ex. SSD)에 적용할 수 있는 해시 인덱스 구성 방법과 그 장치, 및 상기 장치를 구비하는 데이터 저장 장치, 및 상기 방법을 구현하는 프로그램이 기록된 기록매체에 관한 것이다.
해시 인덱스(hash index)는 B-트리 인덱스와 함께 각종 데이터베이스 시스템이나 파일 시스템 등에서 광범위하게 사용되고 있는 인덱스 구조이다. 이러한 해시 인덱스는 다수개의 명칭(identifier)들이 무작위로 들어있는 테이블에서 특정 명칭을 찾고자 하는 경우 이용된다. 보통 해시 함수(hash function)를 이용하여 키 값 에서 레코드가 저장되어 있는 주소를 직접 계산한 후 산출된 주소로 접근시키는 해싱(hashing)을 통하여 데이터의 용량에 관계없이 빠르고 일정한 검색 속도를 가지는 장점이 있다. 그러나, 해시 인덱스는 해시 함수에 의해 입력들을 분산 저장시키므로 입력을 군집화시켜 일괄 처리하는 데에는 매우 비효율적이다.
최근 들어 현재 보편 사용되고 있는 데이터 저장 장치인 하드디스크(HDD)를 대체할 새로운 데이터 저장 장치로 SSD(Solid State Drive 또는 Solid State Disk)가 각광받고 있다. SSD는 반도체를 이용하여 정보를 저장하는 저장 매체로 낸드 플래시 메모리 등의 메모리 칩을 사용한다. 그런데, SSD는 쓰기 처리량을 최대화시키기 위해 증가시킨 블록(block)의 크기로 인해 단편화된 작은 쓰기 요청에 취약한 단점이 있다. 단편화된 작은 쓰기 요청은 SSD의 쓰기 횟수를 증가시키며, 이로 인해 SSD는 그 수명이 매우 짧았다. 기존 해시 인덱스는 이러한 단편화된 작은 쓰기 요청을 많이 발생시키므로 SSD와 같은 대용량 데이터 저장 장치에 적용시키기에는 부적합하였다.
본 발명은 상기한 문제점을 해결하기 위해 안출된 것으로서, 데이터의 쓰기 요청시 선형 해싱(linear hashing)을 기반으로 분할 연기 방법(deferred splitting)을 고려한 해시 인덱스를 구성하는 해시 인덱스 구성 방법과 그 장치, 및 상기 장치를 구비하는 데이터 저장 장치, 및 상기 방법을 구현하는 프로그램이 기록된 기록매체를 제공함을 목적으로 한다.
본 발명은 상기한 목적을 달성하기 위해 안출된 것으로서, (a) 선형 해싱을 통해 확보된 메모리 공간에 쓰기 버퍼를 할당하는 단계; (b) 상기 할당된 쓰기 버퍼에 데이터 처리 요청에 대한 인덱스 작업 레코드(Index Task Record) 그룹을 생성하는 단계; (c) 적어도 하나의 버킷을 추출하며, 상기 생성된 인덱스 작업 레코드 그룹을 상기 추출된 버킷으로 출력시키는 단계; 및 (d) 상기 생성된 인덱스 작업 레코드 그룹을 포함하는 버킷을 기반으로 하는 해시 인덱스를 구성하는 단계를 포함하는 것을 특징으로 하는 해시 인덱스 구성 방법을 제공한다.
바람직하게는, 상기 (c) 단계는 (ca) 상기 생성된 인덱스 작업 레코드 그룹을 상기 추출된 버킷으로 출력하는 도중에 오버플로우가 발생하면, 상기 추출된 버킷이 다음 순위에 스플릿을 수행하는 차순위 스플릿 버킷인지 여부를 판별하는 단계; 및 (cb) 상기 판별 결과에 따라 상기 추출된 버킷에 체인 연결된 오버플로우 버킷 또는 다른 버킷의 스플리팅으로부터 신규 생성된 버킷에 상기 생성된 인덱스 작업 레코드 그룹을 추가 출력시키는 단계를 포함한다.
더 바람직하게는, 상기 (ca) 단계가 상기 추출된 버킷을 상기 차순위 스플릿 버킷으로 판별하면 상기 (cb) 단계는 (cba) 부하율(load factor)이 임계치 이상인지 여부를 판별하는 단계; 및 (cbb) 상기 (cba) 단계에서의 판별 결과에 따라 상기 추출된 버킷에 체인 연결된 오버플로우 버킷 또는 다른 버킷의 스플리팅으로부터 신규 생성된 버킷에 상기 생성된 인덱스 작업 레코드 그룹을 추가 출력시키는 단계를 포함한다.
더욱 바람직하게는, 상기 (cba) 단계가 상기 부하율이 상기 임계치 이상인 것으로 판별하면 상기 (cbb) 단계는 (cbba) 상기 차순위 스플릿 버킷을 검색하는 단계; (cbbb) 상기 검색된 차순위 스플릿 버킷에 체인 연결된 오버플로우 버킷을 모두 추출하는 단계; (cbbc) 상기 검색된 차순위 스플릿 버킷과 상기 추출된 오버플로우 버킷에 포함된 모든 인덱스 작업 레코드 그룹으로부터 동일 데이터 처리 요청을 담은 인덱스 작업 레코드를 모두 추출하는 단계; (cbbd) 상기 추출된 인덱스 작업 레코드들과 상기 인덱스 작업 레코드 그룹에 남아있는 인덱스 작업 레코드들을 비교하여 인덱스 레코드의 키 정보가 동일한 것끼리 삭제하는 단계; 및 (cbbe) 삭제되지 않고 남은 인덱스 작업 레코드들을 수집하며, 상기 수집된 인덱스 작업 레코드들을 상기 추출된 버킷 또는 상기 신규 생성된 버킷에 추가 출력시키는 단계를 포함한다.
또는, 상기 (cba) 단계가 상기 부하율이 상기 임계치 미만인 것으로 판별하면 상기 (cbb) 단계는 (cbba) 오버플로우 버킷을 생성하고, 상기 생성된 오버플로 우 버킷을 상기 추출된 버킷에 체인 연결시키는 단계; 및 (cbbb) 상기 추출된 버킷에 체인 연결된 오버플로우 버킷에 상기 생성된 인덱스 작업 레코드 그룹을 추가 출력시키는 단계를 포함한다.
바람직하게는, 상기 (b) 단계는 (ba) 상기 데이터 처리 요청을 수신하면 상기 데이터 처리 형태를 표시하는 작업 타입 데이터를 생성하고, 상기 데이터에 대한 인덱스 레코드를 생성하는 단계; 및 (bb) 상기 생성된 작업 타입 데이터와 상기 생성된 인덱스 레코드를 결합시켜 인덱스 작업 레코드를 생성하고, 상기 생성된 적어도 하나의 인덱스 작업 레코드를 묶어 상기 인덱스 작업 레코드 그룹을 생성하는 단계를 포함한다.
바람직하게는, 상기 해시 인덱스 구성 방법은 입력된 데이터의 수정 요청시, 상기 인덱스 작업 레코드 그룹에 포함되는 인덱스 작업 레코드에 상기 데이터 처리 형태를 표시하는 작업 타입 데이터 및 상기 데이터에 대한 인덱스 레코드의 키 정보를 쓰기 수행하는 단계를 더 포함한다.
바람직하게는, 상기 (c) 단계는 (ca) 버킷을 검색하며, 상기 검색된 버킷들 중에서 적어도 하나의 버킷을 추출하는 단계를 포함하며, 상기 (ca) 단계는 상기 검색된 버킷들 중에서 상기 생성된 인덱스 작업 레코드 그룹의 크기 이상의 크기를 가지는 버킷을 상기 추출 버킷으로 추출하는 것을 특징으로 한다.
또는, 상기 (c) 단계는 (ca) 버킷을 검색하며, 상기 검색된 버킷들 중에서 적어도 하나의 버킷을 추출하는 단계를 포함하며, 상기 (ca) 단계는 상기 검색된 버킷이 적어도 하나의 오버플로우 버킷과 체인 연결된 경우 상기 검색된 버킷으로 부터 가장 끝에 위치하는 상기 오버플로우 버킷을 상기 추출 버킷으로 추출하는 것을 특징으로 한다.
또한, 본 발명은 선형 해싱을 통해 확보된 메모리 공간에 쓰기 버퍼를 할당하는 쓰기 할당부; 상기 할당된 쓰기 버퍼에 데이터 처리 요청에 대한 인덱스 작업 레코드(Index Task Record) 그룹을 생성하는 인덱스 작업 레코드 그룹 생성부; 적어도 하나의 버킷을 추출하며, 상기 생성된 인덱스 작업 레코드 그룹을 상기 추출된 버킷으로 출력시키는 인덱스 작업 레코드 그룹 출력부; 및 상기 생성된 인덱스 작업 레코드 그룹을 포함하는 버킷을 기반으로 하는 해시 인덱스를 구성하는 해시 인덱스 구성부를 포함하는 것을 특징으로 하는 해시 인덱스 구성 장치를 제공한다.
또한, 본 발명은 선형 해싱을 통해 확보된 메모리 공간에 쓰기 버퍼를 할당하는 쓰기 할당부와, 상기 할당된 쓰기 버퍼에 데이터 처리 요청에 대한 인덱스 작업 레코드(Index Task Record) 그룹을 생성하는 인덱스 작업 레코드 그룹 생성부와, 적어도 하나의 버킷을 추출하며, 상기 생성된 인덱스 작업 레코드 그룹을 상기 추출된 버킷으로 출력시키는 인덱스 작업 레코드 그룹 출력부, 및 상기 생성된 인덱스 작업 레코드 그룹을 포함하는 버킷을 기반으로 하는 해시 인덱스를 구성하는 해시 인덱스 구성부를 구비하는 해시 인덱스 구성 장치; 및 메모리 칩을 이용하는 저장 매체를 포함하는 것을 특징으로 하는 데이터 저장 장치를 제공한다.
본 발명에 따르면 선형 해싱과 분할 연기 방법을 고려하여 해시 인덱스를 구성함으로써 다음 효과를 얻을 수 있다. 첫째, 쓰기 횟수를 감소시킬 수 있다. 둘 째, SSD와 같은 데이터 저장 장치에 적용할 경우 쓰기 효율을 향상시킬 수 있으며, 그 수명도 연장시킬 수 있다. 세째, SSD 기반 데이터베이스 시스템이나 파일 시스템을 개발할 때에 상기 해시 인덱스 구조를 적용시켜 데이터베이스 시스템이나 파일 시스템의 효율성을 개선시키는 데에 크게 기여할 수 있다.
이하, 본 발명의 바람직한 실시예를 첨부된 도면들을 참조하여 상세히 설명한다. 우선 각 도면의 구성요소들에 참조 부호를 부가함에 있어서, 동일한 구성요소들에 대해서는 비록 다른 도면상에 표시되더라도 가능한한 동일한 부호를 가지도록 하고 있음에 유의해야 한다. 또한, 본 발명을 설명함에 있어, 관련된 공지 구성 또는 기능에 대한 구체적인 설명이 본 발명의 요지를 흐릴 수 있다고 판단되는 경우에는 그 상세한 설명은 생략한다. 또한, 이하에서 본 발명의 바람직한 실시예를 설명할 것이나, 본 발명의 기술적 사상은 이에 한정하거나 제한되지 않고 당업자에 의해 변형되어 다양하게 실시될 수 있음은 물론이다.
SSD(Solid State Drive 또는 Solid State Disk)는 마그네틱 디스크(magnetic disk)를 이용하지 않고 SDRAM(Synchronous DRAM)이나 플래시 메모리(flash memory)와 같은 메모리 칩을 이용하는 데이터 저장 장치이다. 본 발명의 실시예에서 데이터 저장 장치는 플래시 메모리 등의 메모리 칩을 기반으로 한다면 SSD 외 다른 것도 무방하다. 이하에서는 데이터 저장 장치의 예로 SSD를 들어 설명한다.
도 1은 본 발명의 바람직한 실시예에 대한 SSD 컨트롤러의 내부 구성을 개략적으로 도시한 블록도이다. 도 1에 따르면, SSD 컨트롤러(100)는 CPU부(110), FTL(Flash Transfer Layer) 펌웨어부(115), RAM부(120), 호스트 인터페이스부(125), 플래시 메모리 인터페이스부(130), 버퍼 컨트롤 모듈(135), ECC(Error Correction Code) 모듈(140), 플래시 메모리 칩부(145), 스토리지 인터페이스부(150) 및 해시 인덱스 구성 장치(160)를 포함한다.
CPU부(110)가 데이터 쓰기 요청을 명령하면, 스토리지 인터페이스부(150)는 데이터를 로드하고, 로드된 데이터는 호스트 인터페이스부(125)를 거쳐 버퍼 컨트롤 모듈(135)로 전송된다. 호스트 인터페이스부(125)와 버퍼 컨트롤 모듈(135)는 적어도 1개의 채널 데이터 버스(155a)를 통해 상호 연결된다. 스토리지 인터페이스부(150)는 예컨대 SATA(Serial Advanced Technology Attachment), PATA(Parallel ATA) 등으로 구현될 수 있다. CPU부(110)는 CPU 버스(155b)를 통해 호스트 인터페이스부(125), 버퍼 컨트롤 모듈(135), 플래시 메모리 인터페이스부(130) 등에 연결된다.
버퍼 컨트롤 모듈(135)은 데이터를 RAM부(120)에 임시 저장한 후, 상기 데이터를 분할하여 플래시 메모리 인터페이스부(130)로 전송한다. 버퍼 컨트롤 모듈(135)에서 분할된 데이터 조각들은 플래시 메모리 인터페이스부(130)로 전송되기 전 ECC 모듈(140)을 거친다. ECC 모듈(140)은 분할된 데이터 조각 각각을 수신할 수 있도록 복수개로 구현된다. ECC 모듈(140)이 도 1에 도시된 바와 같이 m개인 경우, 버퍼 컨트롤 모듈(135)은 m개의 채널 데이터 버스(155a)를 통해 각 ECC 모듈(140)에 접속한다. 한편, RAM부(120)는 FPMRAM, EDORAM, SDRAM, DRDRAM, DDR2 SDRAM 등 다양한 RAM으로 구현될 수 있다. 본 발명에서는 가격, 처리 속도 등의 성 능 등을 고려하여 SDRAM으로 RAM부(120)를 구현한다.
플래시 메모리 인터페이스부(130)는 쓰기 요청된 데이터를 플래시 메모리 칩부(145)에 라이팅(writing)시킨다. 이때, 플래시 메모리 인터페이스부(130)는 인터리빙(interleaving) 방법을 이용한다. 인터리빙 방법은 채널별로 분할된 데이터를 시간의 흐름에 따라 각 채널에 링크된 플래시 메모리 칩에 라이팅되도록 한다. 플래시 메모리 칩부(145)는 이러한 점을 참작하여 각 채널마다 n개의 플래시 메모리 칩을 구비한다.
FTL 펌웨어부(115)는 데이터 저장을 위한 논리적 주소와 플래시 메모리 칩부(145)에 구비되는 각 플래시 메모리 칩의 물리적 주소를 어드레스 맵핑(address mapping)시킨다. FTL 펌웨어부(115)의 이러한 기능은 SSD 컨트롤러(100)의 초기화 때에 이루어질 수 있다.
해시 인덱스 구성 장치(160)는 데이터의 쓰기/수정/삭제에 이용할 해시 인덱스(hash index)를 구성하는 장치이다. 이러한 해시 인덱스 구성 장치(160)는 도 1에서 보는 바와 같이 CPU부(110) 또는 플래시 메모리 인터페이스부(130)와 연동하거나, CPU부(110) 또는 플래시 메모리 인터페이스부(130)의 내부에 구비된다.
일반적으로 SSD 컨트롤러는 작은 쓰기에 취약하다. 그 이유는 쓰기 저장될 데이터의 용량이 작음에도 불구하고 이 데이터를 다수개로 분할하여 여러 개의 플래시 메모리에 쓰기 저장시키기 때문이다. 또한, 상기 이유로 인해 큰 용량의 데이터를 쓰기 저장시키는 경우와 같은 시간이 소요되는 문제점도 있다. 본 발명에서는 종래의 이러한 문제점을 해결하기 위해 CPU부(110)의 작은 쓰기 요청시 해시 인덱 스 구성 장치(160)가 선형 해시 방법(linear hashing)을 기반으로 하고 분할 연기 방법(deferred splitting)을 고려한 해시 인덱스를 구성하는 기능을 수행한다. 해시 인덱스 구성 장치(160)의 이러한 기능은 소용량 데이터의 작은 쓰기 횟수를 감소시켜 SSD의 쓰기 효율을 향상시키고 SSD의 수명을 연장시킨다.
이하에서는 도면을 참조하여 해시 인덱스 구성 장치(160)의 해시 인덱스 구성에 대해 상세하게 설명하기로 한다. 도 2는 본 발명에 따른 해시 인덱스 구조의 일실시 예시도이다.
도 2에 따르면, 쓰기 버퍼(200)는 메인 메모리(205)에 저장되며, 각 버킷(bucket)(210)들은 SSD(215)에 저장된다. SSD 컨트롤러의 초기화 실행 후, 초기 버킷(210)들의 개수는 4개이다. 따라서, 다음 순위 스플릿 버킷을 지시하는 포인터(P)는 버킷 3에 도달한 후에는 버킷 0으로 이동한다. 버킷 3은 하나의 오버플로우 버킷(211)을 가진다.
도 2에 도시된 본 발명에 따른 해시 인덱스 구조(hash index structure)는 다음 알고리즘을 따른다.
i = 0
H0(K) = K mod 4
H1(K) = K mod 8
If H0(K) < 1 then B = H1(K)
else B =H0(K)
상기에서, i는 선형 해싱(linear hashing)에 따른 단계 수이고, K는 인덱스 레코드의 키 값이다. 그리고, B는 입력된 인덱스 레코드의 버킷 주소이고, 4는 초기 버킷 갯수를 의미한다.
한편, 본 발명의 실시예에서 메인 메모리(205)에서 쓰기 버퍼(200)의 크기는 사용자 등에 의해서 미리 저장된다.
도 3은 본 발명의 바람직한 실시예에 따른 해시 인덱스 구성 장치의 내부 구성을 개략적으로 도시한 블록도이다. 이하 설명은 도 3을 참조한다.
해시 인덱스 구성 장치(160)가 구성하는 해시 인덱스 구조는 선형 해시 방법을 기반으로 한다. 선형 해시 방법을 이용하면 다른 해시 인덱스들이 디렉토리를 사용함으로써 발생시키는 추가적인 저장 장치에 대한 접근 비용을 줄일 수 있으며, 디렉토리 구성에 사용되는 메인 메모리 공간도 절약할 수 있다. 선형 해시 방법에 대한 알고리즘은 예컨대 다음과 같이 표현될 수 있다.
i = 1, P =0
Ei = 2i-1N
H0(K) = K mod N
Hi(K) = K mod 2iN
if P = 0 then B = Hi(K)
else
B = Hi-1(K)
if B < P then B = Hi(K) end if
End if
If a collision happens then
P = P+1 end if
If P = Ei then
P = 0
i = i+1 end if
상기에서, N은 초기 전체 버킷의 개수이고, P는 다음 순위에 스플릿을 수행하는 버킷에 대한 포인터이다.
선형 해시 방법에 따라 메인 메모리가 절약되면, 이렇게 절약된 메인 메모리를 바탕으로 쓰기 버퍼 할당부(300)가 데이터 입력 요청을 수행하기 위해 메인 메모리의 소정 공간에 쓰기 버퍼를 할당한다.
한편, 본 발명의 실시예에서 해시 인덱스 구성 장치(160)는 쓰기 버퍼를 사용하지 않는 것도 가능하다. 그런데, 하나의 인덱스 레코드를 삽입시키는 데에 있어 최악의 경우 버킷의 개수(k)만큼의 다시 쓰기가 발생할 수 있다. 여기에서, 분할되는 버킷에 연결된 오버플로우 버킷(overflow bucket)의 데이터를 분할로부터 생성된 버킷에 나누어 저장하더라도 오버플로우 버킷을 삭제할 수 없는 경우는 제외한다. k개의 버킷에 대한 다시 쓰기는 콜리젼(collision)이 발생한 버킷에 대한 쓰기, 새로 생성된 오버플로우 버킷, 스플릿된 버킷에 대한 쓰기, 스플릿(split)으로부터 생성된 버킷에 대한 쓰기 등으로 생각해볼 수 있다. 만약 w개의 레코드를 하나의 버킷에 한꺼번에 쓸 수 있는 쓰기 버퍼를 사용한다면 최악의 경우에도 버킷에 다시 쓰는 횟수를 k/w로 감축시킬 수 있다. 따라서, 해시 인덱스 구성 장치(160)는 쓰기 버퍼를 사용함이 바람직하다.
인덱스 작업 레코드 그룹 생성부(310)는 쓰기 버퍼(200)의 절약된 공간에 데이터 입력 요청에 대한 인덱스 작업 레코드(ITR: Index Task Record) 그룹(220)을 생성한다. 인덱스 작업 레코드 그룹(220)은 적어도 하나의 인덱스 작업 레코드(221)를 가지며, 각 인덱스 작업 레코드(221)는 각각의 인덱스 작업 요청에 대하여 인덱스 레코드와 작업 타입을 저장한다. 인덱스 작업 레코드(221)는 도 2에 도시된 바와 같이 작업 타입 데이터(222), 인덱스 레코드의 키 정보(223), 실제 데이터에 대한 포인터(224) 등 3가지 데이터로 구성된다. 작업 타입 데이터(222)는 1비트로 구성되며, 입력 작업 타입일 경우에는 0으로 표시되며 삭제 작업 타입일 경우에는 1로 표시된다.
인덱스 작업 레코드 그룹 생성부(310)는 다음 절차에 따라 인덱스 작업 레코드 그룹(220)을 생성한다. 도 4는 본 발명의 바람직한 실시예에 따른 인덱스 작업 레코드 그룹 생성 방법을 도시한 순서도이다. 이하 설명은 도 4를 참조한다.
제1 단계에서, 인덱스 작업 요청부(311)가 데이터 처리 요청을 수신하면 인 덱스 작업 요청을 발생시킨다(S400). 제2 단계에서, 작업 타입 데이터 생성부(312)가 인덱스 작업 요청을 수신하면 이 요청 타입으로부터 작업 타입을 설정하고, 작업 타입 데이터를 생성한다(S410). 작업 타입 데이터의 구성에 대해서는 이미 설명한 바, 여기서는 생략한다. 제3 단계에서, 인덱스 레코드 생성부(313)가 인덱스 작업 요청에 해당하는 인덱스 레코드를 생성한다(S420). 제4 단계에서, 인덱스 작업 레코드 생성부(314)가 작업 타입 데이터 생성부(312)가 생성한 작업 타입 데이터와 인덱스 레코드 생성부(313)가 생성한 인덱스 레코드를 결합시켜 인덱스 작업 레코드(ITR)를 생성한다(S430). 제5 단계에서, 그룹 생성부(315)가 해시 함수값에 의해 정해지는 버킷의 크기를 고려하여 인덱스 작업 레코드들을 묶어 인덱스 작업 레코드 그룹(ITR group)(220)을 생성한다(S440). 이때, 그룹 생성부(315)가 생성한 인덱스 작업 레코드 그룹은 동일 버킷에 소속된다.
다시 도 3을 참조하여 설명한다.
인덱스 작업 레코드 그룹 출력부(320)는 생성된 인덱스 작업 레코드 그룹(220)을 버킷(211)으로 출력한다. 구체적으로, 인덱스 작업 레코드 그룹 출력부(320)는 쓰기 버퍼(200)가 인덱스 작업 레코드 그룹(220)들로 가득 차면 크기값이 최대인 인덱스 작업 레코드 그룹(220)을 추출하며, 추출된 인덱스 작업 레코드 그룹(220)을 버킷(211)으로 출력한다. 도 2를 참조하면, 인덱스 작업 레코드 그룹 출력부(320)의 이러한 기능에 따라 "Index Task Record group 3"으로 명명된 쓰기 버퍼(200) 상의 인덱스 작업 레코드 그룹(220)은 버킷 3으로 출력될 수 있다.
그런데, 생성된 인덱스 작업 레코드 그룹(220)을 버킷(211)으로 출력하기 위 해서는 출력시킬 인덱스 작업 레코드 그룹(220)의 크기에 적합한 버킷(211)을 검색 추출하는 과정이 선행되어야 한다. 평상시 버킷 추출부(330)는 해시 함수값에 의해 정해진 버킷(211)을 검색하여 추출한다. 그러나, 오버플로우 버킷이 있는 경우, 버킷 추출부(330)는 오버플로우 버킷 체인에서 가장 마지막에 위치하는 버킷(211)을 인덱스 작업 레코드 그룹(220)을 입력시킬 대상으로 추출한다.
버킷 추출부(330)에 의해 버킷(211)이 추출되면, 인덱스 작업 레코드 그룹 출력부(320)는 출력 대상으로 정해진 인덱스 작업 레코드 그룹(220)에 속하는 모든 인덱스 작업 레코드(221)들을 추출된 버킷(211)의 빈 공간에 한꺼번에 쓴다. 그런데, 이 과정에서 모든 인덱스 작업 레코드(221)들이 버킷(211)에 쓰여지지 못하여 오버플로우가 발생할 수 있다. 이하 도 5를 참조하여 이 부분에 대해 상세하게 설명한다. 도 5는 오버플로우가 발생하였을 경우의 인덱스 작업 레코드 그룹 출력 방법을 도시한 순서도이다.
먼저, 스플릿 버킷 판별부(321)가 상기 추출된 버킷(211)이 차순위 스플릿 버킷(next split bucket)인지 여부를 판별한다(S500). 스플릿 버킷 판별부(321)의 판별 결과에 따라 인덱스 작업 레코드 그룹 출력부(320)는 다음 과정을 수행한다.
(a) 쓰기 대상인 버킷이 차순위 스플릿 버킷이 아닐 때
먼저, 오버플로우 버킷 생성부(322)가 쓰기 대상 버킷에 연결될 오버플로우 버킷을 생성한다(S505a). 이후, 체인 연결부(323)가 생성된 오버플로우 버킷을 쓰기 대상 버킷에 체인 연결시킨다(S510a). 이후, 쓰기 처리부(324)가 인덱스 작업 레코드 그룹(220)에서 아직 쓰여지지 못한 인덱스 작업 레코드(221)들을 생성된 오 버플로우 버킷에 쓴다(S515a).
(b) 쓰기 대상인 버킷이 차순위 스플릿 버킷일 때
이 경우에는 먼저 부하 상태 판별부(미도시)가 부하율(load factor)이 임계치(ex. 70%) 이상인지 여부를 판별한다(S501b). 부하율이 임계치 이하이면 상기 S505a 단계 내지 상기 S515a 단계가 진행된다. 반면, 부하율이 임계치 이상이면 더이상 인덱스 작업 레코드 그룹(220)에 소속된 인덱스 작업 레코드(221)들의 쓰기 작업이 불가능하다. 따라서, 분할 연기 방법(deferred splitting)을 적용하고, 쓰기 대상 버킷에 쓰여진 인덱스 작업 레코드들과 쓰여지지 않고 남은 인덱스 작업 레코드들을 모두 포함하여(즉, 인덱스 작업 레코드 그룹(220)에 소속된 모든 인덱스 작업 레코드(221)들을 대상으로) 다음 과정을 수행한다.
먼저, 차순위 스플릿 버킷 검색부(325)가 SSD(215)에서 차순위 스플릿 버킷을 검색한다(S505b). 이후, 오버플로우 버킷 추출부(326)가 검색된 차순위 스플릿 버킷에 연결된 모든 오버플로우 버킷을 추출한다(S510b). 이후, 인덱스 작업 레코드 추출부(327)가 검색된 차순위 스플릿 버킷과 추출된 모든 오버플로우 버킷들로부터 삭제 작업을 지시하는 모든 인덱스 작업 레코드들을 추출한다(S515b). 이후, 삭제 작업 처리부(328)가 추출된 인덱스 작업 레코드(즉, 삭제 작업을 지시하는 인덱스 작업 레코드)들과 버킷에 남아있는 인덱스 작업 레코드(즉, 입력 작업을 지시하는 인덱스 작업 레코드)들을 비교하여 인덱스 레코드의 키 정보가 동일한 것을 삭제 처리한다(S520b). 이후, 쓰기 처리부(324)가 삭제되지 않고 남은 인덱스 작업 레코드들을 수집하여 쓰기 대상 버킷과 신규 생성된 버킷에 나누어 쓰기 처리한 다(S525b). 상기에서, 신규 생성된 버킷은 선형 해싱(linear hashing)에 따라 스플리팅(splitting)된 것을 말한다.
분할 연기 방법은 부하 함수(load function)과 특정 임계치를 사용하여 분할 작업을 연기시키는 방법을 말한다. 이러한 분할 연기 방법은 선형 해시 방법이 분할 작업에 많은 비용을 소모하기 때문에 본 발명의 실시예에 적용된다. 분할 연기 방법으로는 예컨대 W. Litwin이 "Proceedings of the 6th conference on very large database, pp. 212-223, 1980"을 통해 제안한 "Linear hashing : A new tool for file and table addressing"이 있다. 한편, 본 발명의 실시예에서 부하 함수를 적용함에 있어서 오버플로우 버킷은 고려하지 않는다.
해시 인덱스 구성부(340)는 인덱스 작업 레코드 그룹을 포함하는 버킷들을 기반으로 해시 인덱스를 구성한다.
이상 설명한 내용을 종합하여 해시 인덱스 구성 장치(160)의 해시 인덱스 구성 방법을 설명하면 다음과 같다. 도 6은 본 발명의 바람직한 실시예에 따른 해시 인덱스 구성 방법을 도시한 순서도이다. 이하 설명은 도 6을 참조한다.
먼저, 쓰기 버퍼 할당부(300)가 데이터 처리를 위해 메인 메모리의 소정 공간에 쓰기 버퍼를 할당한다(S600). 이후, 인덱스 작업 레코드 그룹 생성부(310)가 쓰기 버퍼의 할당된 공간에 데이터 처리 요청에 대한 인덱스 작업 레코드 그룹을 생성한다(S610). 인덱스 작업 레코드 그룹의 구조에 대해서는 도 2를 참조하여 이미 설명한 바 있다. 또한, 인덱스 작업 레코드 그룹 생성 방법에 대해서는 도 4를 참조하여 이미 설명한 바 있다.
이후, 버킷 추출부(330)가 해시 함수값에 의해 정해진 버킷을 검색 추출한다(S620). 이때, 추출되는 버킷의 크기는 출력시킬 인덱스 작업 레코드 그룹의 크기 이상인 것이 바람직하다. 한편, 오버플로우 버킷이 있는 경우에는 버킷 추출부(330)가 오버플로우 버킷 체인에서 가장 마지막에 위치하는 버킷을 추출한다.
이후, 인덱스 작업 레코드 그룹 출력부(320)가 생성된 인덱스 작업 레코드 그룹을 버킷으로 출력한다(S630). 인덱스 작업 레코드 그룹 출력부(320)는 특히 크기값이 최대인 인덱스 작업 레코드 그룹부터 추출하여 버킷으로 출력한다. 한편, 인덱스 작업 레코드 그룹을 버킷으로 출력하는 도중에 오버플로우가 발생할 수 있다. 오버플로우가 발생하였을 경우의 인덱스 작업 레코드 그룹 출력 방법에 대해서는 도 5를 참조하여 이미 설명한 바 있다.
이후, 해시 인덱스 구성부(340)가 인덱스 작업 레코드 그룹을 포함하는 버킷들을 기반으로 해시 인덱스를 구성한다(S640). 구성된 해시 인덱스 구조 내에 작업 타입 데이터와 인덱스 레코드의 키 정보를 담은 인덱스 작업 레코드 그룹이 포함되면 SSD에 대한 쓰기 횟수를 종전보다 많이 감축시키는 효과를 얻을 수 있다.
한편, S630 단계에 따라 인덱스 작업 레코드 그룹 출력부(320)가 인덱스 작업 레코드 그룹을 버킷으로 출력하는 동안(즉, 쓰기 버퍼가 출력 프로세스를 진행하는 동안), 쓰기 처리부(324)가 인덱스 레코드를 직접 입력하거나 삭제한다면 SSD에서의 쓰기 요청 횟수가 많게 된다. 예컨대, m개의 오버플로우 버킷이 있고 출력 대상인 인덱스 작업 레코드(ITR) 그룹 내에 m개 이상의 삭제 작업 ITR이 있다고 가정한다. 이 경우, 쓰기 버퍼에 의한 출력 작업으로 인하여 최악의 경우 m+1개의 버 킷에 대한 다시 쓰기 작업이 초래될 수 있다.
따라서, 본 발명에서는 로그 기반 삭제 방법을 통하여 인덱스 레코드를 직접 입력하거나 삭제하지 않고 입력 요청 또는 삭제 요청을 지시하는 인덱스 작업 레코드를 버킷에 쓴다. 로그 기반 삭제 방법은 이와 같은 인덱스 작업 레코드가 포함된 버킷을 토대로 입력 작업과 삭제 작업을 일괄 처리하기 때문에 파편화된 작은 쓰기 요청을 감소시킬 수 있으며, 이로부터 SSD의 쓰기 지연 시간을 늘리고 SSD의 수명을 연장시킬 수 있다.
도 7은 인덱스 작업 레코드 그룹을 출력하기 전후의 버킷의 상태도이다. 특히, 도 7의 (a)는 인덱스 작업 레코드 그룹을 출력하기 전의 버킷의 상태도이며, 도 7의 (b)는 인덱스 작업 레코드 그룹을 출력한 후의 버킷의 상태도이다. 도 7의 (b)에 따르면, 인덱스 작업 레코드 그룹을 출력한 후 오버플로우 버킷의 빈 공간에는 2개의 삭제 작업 ITR(700, 705)과 1개의 입력 작업 ITR(710)이 기록되었다. 만약 쓰기 처리부(324)가 인덱스 레코드를 직접 입력하거나 삭제한다면 쓰기 요청 횟수는 3회가 된다. 그러나, 상기와 같이 인덱스 작업 레코드를 버킷에 기록한 후 추후 일괄 처리한다면 쓰기 요청 횟수는 1회로 줄일 수 있다.
상기에서, 로그 기반 삭제 방법을 적용하지 않을 경우 2개의 버킷이 출력 작업에 의해 쓰여진다. 그 이유는 일반 버킷에 제1 삭제 작업 ITR(700)과 키 값이 동일한 입력 작업 ITR(715)이 있기 때문이다. 따라서, 로그 기반 삭제 방법을 적용하지 않는다면 오버플로우 버킷에 키 값이 67인 인덱스 레코드를 기록함과 동시에 일반 버킷에서 키 값이 67인 인덱스 레코드를 삭제하는 불편이 따르게 된다.
삭제 작업 ITR들은 입력 작업 ITR과 똑같이 출력 작업시 다루어진다. 단순히 ITR들을 해시 함수에 의해서 지정된 버킷에 연결된 체인의 가장 마지막 버킷의 마지막으로 쓰여진 ITR 다음에 추가하면 된다. 이것은 버킷 내에서 직접 삭제를 수행하는 것보다 쓰기 버퍼의 출력 알고리즘을 더 간단하게 만들어준다. 하지만, 이 방법은 오버플로우 버킷 체인을 지나치게 길게 만들 수 있다. 또한, 검색 요청시 접근되어야 하는 버킷의 수를 증가시킬 수도 있다. 그러므로, 이렇게 기록된 삭제 로그에 상응하는 인덱스 레코드에 대한 실제 삭제 작업이 주기적으로 수행됨이 필요하다. 주기적인 삭제 작업은 상술한 S505b 단계 내지 S525b 단계에 따라 진행된다.
한편, 상술한 본 발명의 실시예들은 컴퓨터에서 실행될 수 있는 프로그램으로 작성 가능하고, 컴퓨터로 읽을 수 있는 기록매체를 이용하여 상기 프로그램을 동작시키는 범용 디지털 컴퓨터에서 구현될 수 있다. 상기 컴퓨터로 읽을 수 있는 기록매체는 마그네틱 저장매체(예를 들면, ROM, 플로피 디스크, 하드 디스크, 자기 테이프 등), 광학적 판독 매체(예를 들면, CD-ROM, DVD, 광데이터 저장장치 등) 및 캐리어 웨이브(예를 들면, 인터넷을 통한 전송)와 같은 저장매체를 포함한다.
이상의 설명은 본 발명의 기술 사상을 예시적으로 설명한 것에 불과한 것으로서, 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자라면 본 발명의 본질적인 특성에서 벗어나지 않는 범위 내에서 다양한 수정, 변경 및 치환이 가능할 것이다. 따라서, 본 발명에 개시된 실시예 및 첨부된 도면들은 본 발명의 기술 사상을 한정하기 위한 것이 아니라 설명하기 위한 것이고, 이러한 실시예 및 첨부된 도면에 의하여 본 발명의 기술 사상의 범위가 한정되는 것은 아니다. 본 발명의 보호 범위는 아래의 청구 범위에 의하여 해석되어야 하며, 그와 동등한 범위 내에 있는 모든 기술 사상은 본 발명의 권리 범위에 포함되는 것으로 해석되어야 할 것이다.
본 발명은 소용량 데이터의 작은 쓰기 횟수를 감소시켜 메모리 칩을 이용하는 데이터 저장 장치(ex. SSD)에 적용할 수 있는 해시 인덱스 구성 방법과 그 장치, 및 상기 장치를 구비하는 데이터 저장 장치, 및 상기 방법을 구현하는 프로그램이 기록된 기록매체를 개시한다. 본 발명에 따르면 쓰기 횟수를 감소시켜 데이터 저장 장치의 쓰기 효율을 향상시킬 수 있으며, 그 수명도 연장시킬 수 있다.
본 발명에서 제안하는 해시 인덱스 구조는 SSD 기반 데이터베이스 시스템이나 파일 시스템을 개발할 때에 상기 해시 인덱스 구조를 적용시켜 데이터베이스 시스템이나 파일 시스템의 효율성을 개선시키는 데에 크게 기여할 수 있다. 이러한 점을 고려할 때, 본 발명은 삼성전자, 엠트론, 샌디스크(sandisk), 인텔 등의 SSD 생산업체, 데이터베이스 엔진 제작업체, 데이터베이스 운영체제 개발업체, 데이터 저장 장치가 적용되는 제품(ex. 노트북, PMP, 기업용 서버 등)을 생산하는 생산업체 등에 기술 이전이나 라이센스 계약을 제공할 수 있을 것이다.
도 1은 본 발명의 바람직한 실시예에 대한 SSD 컨트롤러의 내부 구성을 개략적으로 도시한 블록도이고,
도 2는 본 발명에 따른 해시 인덱스 구조의 일실시 예시도이고,
도 3은 본 발명의 바람직한 실시예에 따른 해시 인덱스 구성 장치의 내부 구성을 개략적으로 도시한 블록도이고,
도 4는 본 발명의 바람직한 실시예에 따른 인덱스 작업 레코드 그룹 생성 방법을 도시한 순서도이고,
도 5는 오버플로우가 발생하였을 경우의 인덱스 작업 레코드 그룹 출력 방법을 도시한 순서도이고,
도 6은 본 발명의 바람직한 실시예에 따른 해시 인덱스 구성 방법을 도시한 순서도이고,
도 7은 인덱스 작업 레코드 그룹을 출력하기 전후의 버킷의 상태도이다.
< 도면의 주요 부분에 대한 부호의 설명 >
100 : SSD 컨트롤러 160 : 해시 인덱스 구성 장치
200 : 쓰기 버퍼 205 : 메인 메모리
210 : 버킷 211 : 오버플로우 버킷
215 : SSD 220 : 인덱스 작업 레코드 그룹
221 : 인덱스 작업 레코드 300 : 쓰기 버퍼 할당부
310 : 인덱스 작업 레코드 그룹 생성부 311 : 인덱스 작업 요청부
312 : 작업 타입 데이터 생성부 313 : 인덱스 레코드 생성부
314 : 인덱스 작업 레코드 생성부 315 : 그룹 생성부
320 : 인덱스 작업 레코드 그룹 출력부 321 : 스플릿 버킷 판별부
322 : 오버플로우 버킷 생성부 323 : 체인 연결부
324 : 쓰기 처리부 325 : 차순위 스플릿 버킷 검색부
326 : 오버플로우 버킷 추출부 327 : 인덱스 작업 레코드 추출부
328 : 삭제 작업 처리부 330 : 버킷 추출부
340 : 해시 인덱스 구성부

Claims (20)

  1. (a) 주기억장치에서 쓰기 버퍼를 할당하는 단계;
    (b) 데이터의 처리 요청과 관련된 정보인 인덱스 작업 레코드 그룹들을 할당된 쓰기 버퍼에 기록하는 단계;
    (c) 상기 쓰기 버퍼에 기록된 인덱스 작업 레코드 그룹들 중에서 선택된 적어도 하나의 인덱스 작업 레코드 그룹을 해시 함수에 의해 정해진 보조기억장치의 버킷(bucket)에 기록하는 단계; 및
    (d) 상기 버킷에 기록된 인덱스 작업 레코드 그룹과 관련된 정보를 이용하여 상기 데이터에 대한 해시 인덱스를 구성하는 단계
    를 포함하는 것을 특징으로 하는 해시 인덱스 구성 방법.
  2. 제 1 항에 있어서,
    상기 (c) 단계는,
    (ca) 상기 버킷에 기록을 수행하는 도중에 오버플로우가 발생하면, 상기 버킷이 다음 순위에 스플릿을 수행하는 차순위 스플릿 버킷인지 여부를 판별하는 단계; 및
    (cb) 상기 판별 결과에 따라 상기 버킷에 기록된 인덱스 작업 레코드 그룹을 상기 버킷에 체인 연결된 오버플로우 버킷 또는 다른 버킷의 스플리팅으로부터 신규 생성된 버킷에 기록하는 단계
    를 포함하는 것을 특징으로 하는 해시 인덱스 구성 방법.
  3. 제 1 항에 있어서,
    상기 (b) 단계는,
    (ba) 상기 처리 요청이 수신되면 해당 데이터의 처리 형태를 표시하는 작업 타입 데이터를 생성하고, 상기 해당 데이터에 대한 인덱스 레코드를 생성하는 단계; 및
    (bb) 상기 생성된 작업 타입 데이터와 상기 생성된 인덱스 레코드를 결합시켜 인덱스 작업 레코드를 생성하고, 생성된 적어도 하나의 인덱스 작업 레코드를 묶어 하나의 인덱스 작업 레코드 그룹으로 하여 상기 인덱스 작업 레코드 그룹들을 상기 쓰기 버퍼에 기록하는 단계
    를 포함하는 것을 특징으로 하는 해시 인덱스 구성 방법.
  4. 제 2 항에 있어서,
    상기 (ca) 단계에서 상기 버킷이 상기 차순위 스플릿 버킷으로 판별되면 상기 (cb) 단계는,
    (cba) 부하율(load factor)이 임계치 이상인지 여부를 판별하는 단계; 및
    (cbb) 상기 (cba) 단계에서의 판별 결과에 따라 상기 오버플로우 버킷에 기록하거나 상기 신규 생성된 버킷에 기록하는 단계
    를 포함하는 것을 특징으로 하는 해시 인덱스 구성 방법.
  5. 제 4 항에 있어서,
    상기 (cba) 단계에서 상기 부하율이 상기 임계치 이상인 것으로 판별되면 상기 (cbb) 단계는,
    (cbba) 상기 차순위 스플릿 버킷을 검색하는 단계;
    (cbbb) 상기 검색된 차순위 스플릿 버킷에 체인 연결된 오버플로우 버킷을 모두 추출하는 단계;
    (cbbc) 상기 검색된 차순위 스플릿 버킷과 상기 추출된 오버플로우 버킷에 포함된 모든 인덱스 작업 레코드 그룹으로부터 동일 데이터 처리 요청을 담은 인덱스 작업 레코드를 모두 추출하는 단계;
    (cbbd) 추출된 인덱스 작업 레코드들과 추출되지 않고 남아있는 인덱스 작업 레코드들을 비교하여 인덱스 레코드의 키 정보가 동일한 것끼리 삭제하는 단계; 및
    (cbbe) 삭제되지 않고 남은 인덱스 작업 레코드들을 수집하며, 상기 수집된 인덱스 작업 레코드들을 상기 추출된 오버플로우 버킷 또는 상기 신규 생성된 버킷에 기록하는 단계
    를 포함하는 것을 특징으로 하는 해시 인덱스 구성 방법.
  6. 제 4 항에 있어서,
    상기 (cba) 단계에서 상기 부하율이 상기 임계치 미만인 것으로 판별되면 상기 (cbb) 단계는,
    (cbba) 오버플로우 버킷을 생성하고, 생성된 오버플로우 버킷을 상기 버킷에 체인 연결시키는 단계; 및
    (cbbb) 상기 버킷에 기록된 인덱스 작업 레코드 그룹을 상기 버킷에 체인 연결된 오버플로우 버킷에 기록하는 단계
    를 포함하는 것을 특징으로 하는 해시 인덱스 구성 방법.
  7. 삭제
  8. 제 2 항에 있어서,
    상기 (ca) 단계에서 상기 버킷이 상기 차순위 스플릿 버킷이 아닌 것으로 판별되면 상기 (cb) 단계는,
    (cba) 오버플로우 버킷을 생성하고, 생성된 오버플로우 버킷을 상기 버킷에 체인 연결시키는 단계; 및
    (cbb) 상기 버킷에 기록된 인덱스 작업 레코드 그룹을 상기 버킷에 체인 연결된 오버플로우 버킷에 기록하는 단계
    를 포함하는 것을 특징으로 하는 해시 인덱스 구성 방법.
  9. 제 1 항에 있어서,
    상기 (c) 단계는 상기 할당된 쓰기 버퍼가 상기 쓰기 버퍼에 기록된 인덱스 작업 레코드 그룹들로 가득 차면 크기값이 최대인 인덱스 작업 레코드 그룹부터 상기 버킷에 기록하는 것을 특징으로 하는 해시 인덱스 구성 방법.
  10. 제 3 항에 있어서,
    상기 (bb) 단계는 미리 정해진 버킷의 크기를 고려하여 상기 인덱스 작업 레코드 그룹들을 상기 쓰기 버퍼에 기록하는 것을 특징으로 하는 해시 인덱스 구성 방법.
  11. 제 1 항에 있어서,
    상기 (b) 단계에서 상기 쓰기 버퍼에 기록된 인덱스 작업 레코드 그룹들은 적어도 하나의 인덱스 작업 레코드를 포함하며, 상기 인덱스 작업 레코드는 입력 작업인지 또는 삭제 작업인지를 표시하는 작업 타입 데이터 및 인덱스 레코드의 키 정보를 포함하는 것을 특징으로 하는 해시 인덱스 구성 방법.
  12. 제 1 항에 있어서,
    상기 (c) 단계는 상기 버킷으로 상기 보조기억장치에서 버킷을 검색하여 상기 검색된 버킷들 중에서 상기 선택된 인덱스 작업 레코드 그룹의 크기보다 더 큰 버킷을 이용하거나, 상기 검색된 버킷이 적어도 하나의 오버플로우 버킷과 체인 연결된 때 상기 검색된 버킷으로부터 가장 끝에 위치하는 상기 오버플로우 버킷을 이용하는 것을 특징으로 하는 해시 인덱스 구성 방법.
  13. 컴퓨터로 판독 가능한 기록매체에 있어서,
    제 1 항 내지 제 6 항 중 어느 한 항, 또는 제 8 항 내지 제 12 항 중 어느 한 항에 따른 방법을 구현하는 프로그램이 기록된 기록매체.
  14. 주기억장치에서 쓰기 버퍼를 할당하는 쓰기 할당부;
    데이터의 처리 요청과 관련된 정보인 인덱스 작업 레코드 그룹들을 할당된 쓰기 버퍼에 기록하는 인덱스 작업 레코드 그룹 생성부;
    상기 쓰기 버퍼에 기록된 인덱스 작업 레코드 그룹들 중에서 선택된 적어도 하나의 인덱스 작업 레코드 그룹을 해시 함수에 의해 정해진 보조기억장치의 버킷(bucket)에 기록하는 인덱스 작업 레코드 그룹 출력부; 및
    상기 버킷에 기록된 인덱스 작업 레코드 그룹과 관련된 정보를 이용하여 상기 데이터에 대한 해시 인덱스를 구성하는 해시 인덱스 구성부
    를 포함하는 것을 특징으로 하는 해시 인덱스 구성 장치.
  15. 제 14 항에 있어서,
    상기 인덱스 작업 레코드 그룹 출력부는,
    상기 버킷에 기록을 수행하는 도중에 오버플로우가 발생하면, 상기 버킷이 다음 순위에 스플릿을 수행하는 차순위 스플릿 버킷인지 여부를 판별하는 스플릿 버킷 판별부; 및
    상기 판별 결과에 따라 상기 버킷에 기록된 인덱스 작업 레코드 그룹을 상기 버킷에 체인 연결된 오버플로우 버킷 또는 다른 버킷의 스플리팅으로부터 신규 생성된 버킷에 기록하는 쓰기 처리부
    를 포함하는 것을 특징으로 하는 해시 인덱스 구성 장치.
  16. 제 14 항에 있어서,
    상기 인덱스 작업 레코드 그룹 생성부는,
    상기 처리 요청이 수신되면 해당 데이터의 처리 형태를 표시하는 작업 타입 데이터를 생성하는 작업 타입 데이터 생성부;
    상기 데이터 처리 요청이 수신되면 상기 해당 데이터에 대한 인덱스 레코드를 생성하는 인덱스 레코드 생성부;
    상기 생성된 작업 타입 데이터와 상기 생성된 인덱스 레코드를 결합시켜 인덱스 작업 레코드를 생성하는 인덱스 작업 레코드 생성부; 및
    생성된 적어도 하나의 인덱스 작업 레코드를 묶어 하나의 인덱스 작업 레코드 그룹으로 하여 상기 인덱스 작업 레코드 그룹들을 상기 쓰기 버퍼에 기록하는 인덱스 작업 레코드 그룹 생성부
    를 포함하는 것을 특징으로 하는 해시 인덱스 구성 장치.
  17. 제 15 항에 있어서,
    상기 인덱스 작업 레코드 그룹 출력부는 부하율(load factor)이 임계치 이상인지 여부를 판별하는 부하 상태 판별부를 더 포함하는 것을 특징으로 하는 해시 인덱스 구성 장치.
  18. 제 17 항에 있어서,
    상기 스플릿 버킷 판별부에 의해 상기 버킷이 상기 차순위 스플릿 버킷으로 판별되고 상기 부하 상태 판별부에 의해 상기 부하율이 상기 임계치 이상인 것으로 판별되면, 상기 인덱스 작업 레코드 그룹 출력부는,
    상기 차순위 스플릿 버킷을 검색하는 차순위 스플릿 버킷 검색부;
    상기 검색된 차순위 스플릿 버킷에 체인 연결된 오버플로우 버킷을 모두 추출하는 오버플로우 버킷 추출부;
    상기 검색된 차순위 스플릿 버킷과 상기 추출된 오버플로우 버킷에 포함된 모든 인덱스 작업 레코드 그룹으로부터 동일 데이터 처리 요청을 담은 인덱스 작업 레코드를 모두 추출하는 인덱스 작업 레코드 추출부;
    추출된 인덱스 작업 레코드들과 추출되지 않고 남아있는 인덱스 작업 레코드들을 비교하여 인덱스 레코드의 키 정보가 동일한 것끼리 삭제하는 삭제 작업 처리부; 및
    삭제되지 않고 남은 인덱스 작업 레코드들을 수집하며, 상기 수집된 인덱스 작업 레코드들을 상기 추출된 오버플로우 버킷 또는 상기 신규 생성된 버킷에 기록하는 쓰기 처리부
    를 포함하며,
    상기 스플릿 버킷 판별부가 상기 버킷을 상기 차순위 스플릿 버킷이 아닌 것으로 판별하거나, 상기 스플릿 버킷 판별부에 의해 상기 버킷이 상기 차순위 스플릿 버킷으로 판별되고 상기 부하 상태 판별부에 의해 상기 부하율이 상기 임계치 미만인 것으로 판별되면, 상기 인덱스 작업 레코드 그룹 출력부는,
    오버플로우 버킷을 생성하는 오버플로우 버킷 생성부;
    생성된 오버플로우 버킷을 상기 버킷에 체인 연결시키는 체인 연결부; 및
    상기 버킷에 기록된 인덱스 작업 레코드 그룹을 상기 버킷에 체인 연결된 오버플로우 버킷에 기록하는 쓰기 처리부
    를 포함하는 것을 특징으로 하는 해시 인덱스 구성 장치.
  19. 데이터를 저장하는 데이터 저장 장치로서,
    주기억장치에서 쓰기 버퍼를 할당하는 쓰기 할당부; 데이터의 처리 요청과 관련된 정보인 인덱스 작업 레코드 그룹들을 할당된 쓰기 버퍼에 기록하는 인덱스 작업 레코드 그룹 생성부; 상기 쓰기 버퍼에 기록된 인덱스 작업 레코드 그룹들 중에서 선택된 적어도 하나의 인덱스 작업 레코드 그룹을 해시 함수에 의해 정해진 보조기억장치의 버킷(bucket)에 기록하는 인덱스 작업 레코드 그룹 출력부; 및 상기 버킷에 기록된 인덱스 작업 레코드 그룹과 관련된 정보를 이용하여 상기 데이터에 대한 해시 인덱스를 구성하는 해시 인덱스 구성부를 포함하는 해시 인덱스 구성 장치
    를 포함하는 것을 특징으로 하는 데이터 저장 장치.
  20. 제 19 항에 있어서,
    상기 데이터 저장 장치는 SSD(Solid State Drive)인 것을 특징으로 하는 데이터 저장 장치.
KR1020090003339A 2009-01-15 2009-01-15 해시 인덱스 구성 방법과 그 장치, 및 상기 장치를 구비하는 데이터 저장 장치, 및 상기 방법을 구현하는 프로그램이 기록된 기록매체 KR101123335B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020090003339A KR101123335B1 (ko) 2009-01-15 2009-01-15 해시 인덱스 구성 방법과 그 장치, 및 상기 장치를 구비하는 데이터 저장 장치, 및 상기 방법을 구현하는 프로그램이 기록된 기록매체

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020090003339A KR101123335B1 (ko) 2009-01-15 2009-01-15 해시 인덱스 구성 방법과 그 장치, 및 상기 장치를 구비하는 데이터 저장 장치, 및 상기 방법을 구현하는 프로그램이 기록된 기록매체

Publications (2)

Publication Number Publication Date
KR20100083976A KR20100083976A (ko) 2010-07-23
KR101123335B1 true KR101123335B1 (ko) 2012-03-28

Family

ID=42643526

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020090003339A KR101123335B1 (ko) 2009-01-15 2009-01-15 해시 인덱스 구성 방법과 그 장치, 및 상기 장치를 구비하는 데이터 저장 장치, 및 상기 방법을 구현하는 프로그램이 기록된 기록매체

Country Status (1)

Country Link
KR (1) KR101123335B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101847861B1 (ko) * 2016-12-21 2018-04-11 성균관대학교산학협력단 컴퓨팅 장치, 스토리지 장치 및 데이터 관리 방법

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5524144B2 (ja) * 2011-08-08 2014-06-18 株式会社東芝 key−valueストア方式を有するメモリシステム
JP5762878B2 (ja) * 2011-08-08 2015-08-12 株式会社東芝 key−valueストアを有するメモリシステム
KR101340706B1 (ko) * 2011-12-08 2013-12-11 한양대학교 에리카산학협력단 플래시 메모리 기반 저장 장치를 위한 하이브리드 해시 인덱스
KR101970874B1 (ko) * 2017-04-28 2019-08-13 한양대학교 에리카산학협력단 비휘발성 메모리 저장 장치를 위한 하이브리드 해시 인덱스
CN109799961A (zh) * 2019-01-24 2019-05-24 杭州嘉楠耘智信息科技有限公司 电路架构

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5231577A (en) 1990-04-06 1993-07-27 Microsoft Corporation Method and system for processing formatting information in a spreadsheet
US5440732A (en) 1993-02-05 1995-08-08 Digital Equipment Corp., Pat. Law Gr. Key-range locking with index trees
US5511190A (en) 1995-01-20 1996-04-23 Tandem Computers, Inc. Hash-based database grouping system and method
KR20010047384A (ko) * 1999-11-19 2001-06-15 오길록 해쉬 인덱스 구조의 확장 해슁 디렉토리 분할 시점 제어방법 및 이를 이용한 엔트리 삽입, 삭제, 검색 방법

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5231577A (en) 1990-04-06 1993-07-27 Microsoft Corporation Method and system for processing formatting information in a spreadsheet
US5440732A (en) 1993-02-05 1995-08-08 Digital Equipment Corp., Pat. Law Gr. Key-range locking with index trees
US5511190A (en) 1995-01-20 1996-04-23 Tandem Computers, Inc. Hash-based database grouping system and method
KR20010047384A (ko) * 1999-11-19 2001-06-15 오길록 해쉬 인덱스 구조의 확장 해슁 디렉토리 분할 시점 제어방법 및 이를 이용한 엔트리 삽입, 삭제, 검색 방법

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101847861B1 (ko) * 2016-12-21 2018-04-11 성균관대학교산학협력단 컴퓨팅 장치, 스토리지 장치 및 데이터 관리 방법

Also Published As

Publication number Publication date
KR20100083976A (ko) 2010-07-23

Similar Documents

Publication Publication Date Title
US20230273876A1 (en) Memory system, data storage device, user device and data management method thereof
US9684462B2 (en) Method and apparatus utilizing non-uniform hash functions for placing records in non-uniform access memory
KR102549545B1 (ko) 스토리지 장치 및 스토리지 장치의 동작 방법
KR102042643B1 (ko) 비휘발성 메모리(nvm)에서 다중 네임스페이스 관리
US10353586B2 (en) Memory device and host device
KR101977575B1 (ko) 디렉토리 엔트리 조회 장치, 그 방법 및 디렉토리 엔트리 조회 프로그램이 기록된 기록 매체
US9645918B2 (en) Storage devices including non-volatile memory and memory controller and methods of allocating write memory blocks
US20080195801A1 (en) Method for operating buffer cache of storage device including flash memory
KR102275563B1 (ko) 호스트-관리 비휘발성 메모리
US20130250686A1 (en) Semiconductor memory device, information processing system and control method
KR102603070B1 (ko) 메모리 시스템, 메모리 시스템에 데이터를 기록하는 방법 및 메모리 시스템으로부터 데이터를 판독하는 방법
JP2013242908A (ja) ソリッドステートメモリ、それを含むコンピュータシステム及びその動作方法
KR101123335B1 (ko) 해시 인덱스 구성 방법과 그 장치, 및 상기 장치를 구비하는 데이터 저장 장치, 및 상기 방법을 구현하는 프로그램이 기록된 기록매체
CN112506814A (zh) 一种存储器及其控制方法与存储系统
US20240143219A1 (en) Software-hardware combination method for internal mapping address query of zoned namespace
US11269771B2 (en) Storage device for improving journal replay, operating method thereof, and electronic device including the storage device
CN111752479A (zh) 有效存储数据的方法和系统
KR20170033480A (ko) 스토리지 장치 및 그것을 포함하는 서버 시스템의 매칭 키 검색 방법
KR101191650B1 (ko) 낸드 플래시 메모리에서 데이터의 주소를 사상시키는 장치 및 방법
JP7407230B2 (ja) キー値データ記憶デバイスのためのeccパリティ偏り
US20110264848A1 (en) Data recording device
JP6215631B2 (ja) コンピュータシステム及びそのデータ管理方法
US11144249B2 (en) Storage system including nonvolatile memory module for converting random logical addresses to sequential logical addresses and operating method of the nonvolatile memory module
CN108614669B (zh) 解决哈希冲突的键-数据访问方法与固态存储设备
CN110096452B (zh) 非易失随机访问存储器及其提供方法

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E90F Notification of reason for final refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20160202

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20170227

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20180309

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20190225

Year of fee payment: 8