KR20230026946A - 해싱을 사용하는 키 밸류 스토리지 장치 및 그것의 동작 방법 - Google Patents

해싱을 사용하는 키 밸류 스토리지 장치 및 그것의 동작 방법 Download PDF

Info

Publication number
KR20230026946A
KR20230026946A KR1020220089638A KR20220089638A KR20230026946A KR 20230026946 A KR20230026946 A KR 20230026946A KR 1020220089638 A KR1020220089638 A KR 1020220089638A KR 20220089638 A KR20220089638 A KR 20220089638A KR 20230026946 A KR20230026946 A KR 20230026946A
Authority
KR
South Korea
Prior art keywords
key
command
value
keys
hash
Prior art date
Application number
KR1020220089638A
Other languages
English (en)
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 삼성전자주식회사
Publication of KR20230026946A publication Critical patent/KR20230026946A/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
    • 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/0604Improving or facilitating administration, e.g. storage management
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • H04L9/0894Escrow, recovery or storing of secret information, e.g. secret key escrow or cryptographic key storage
    • 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/0292User address space allocation, e.g. contiguous or non contiguous base addressing using tables or multilevel address translation means
    • 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/0614Improving the reliability 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/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/0652Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket
    • 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
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/0643Hash functions, e.g. MD5, SHA, HMAC or f9 MAC

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)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Power Engineering (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

본 발명에 따른 키들을 밸류 어드레스들을 매핑하기 위한 해시를 포함하는 영구 키-밸류 스토리지 장치의 동작 방법은 의해, 제1 키-밸류 콜렉션(first key-value collection)에서, 제1 키를 액세스하기 위한 명령어인 제1 명령어를 수신하는 단계, 영구 키-밸류 스토리지 장치의 명령어 로그에 제1 명령어를 기록하는 단계; 및 명령어 로그에 기록된 명령어들이 임계치보다 큰 이상인 경우, 명령어 로그에 기록된 명령어들을 기반으로, 영구 키-밸류 스토리지 장치의 베이스 페이지로부터 키들의 오프셋을 나타내는 비트맵 해시를 업데이트하는 단계를 포함한다.

Description

해싱을 사용하는 키 밸류 스토리지 장치 및 그것의 동작 방법{KEY VALUE STORAGE DEVICE WITH HASHING}
본 발명에 따른 하나 또는 그 이상의 실시 예들의 사상들은 영구 스토리지에 관한 것이며, 좀 더 상세하게는, 완전 해싱(perfect hashing)을 사용하는 키 밸류 스토리지에 대한 시스템 및 방법에 관한 것이다.
키-밸류(KV; key-value) 스토리지 장치들은, 예를 들어, 서버 시스템에서, 데이터 저장을 위한 다양한 용도를 갖는다. 이러한 스토리지 장치에서, 데이터는 밸류들(values)로서 저장되며, 각 밸류는 각각의 키에 의해 식별된다. KV 스토리지를 사용하는 호스트는, 예를 들어, 키를 포함하는 읽기 요청을 전송하고, 키는 스토리지로부터 읽어질 밸류를 식별한다.
본 발명의 목적은 향상된 성능 및 향상된 효율성을 갖는 해싱을 사용하는 키 밸류 스토리지 장치 및 그것의 동작 방법을 제공하는 데 있다.
일부 실시 예들에서, KV 영구 스토리지 장치(예를 들어, KV SSD)는 동적 완전 해시를 사용하여 키를 탐색하기 위한 최대 단일 페이지 읽기를 보장한다. 일부 실시 예들에서, 로컬리티 컨터버(locality converter), 로컬리티 컨버터 상의 블룸 필터(Bloom filter) 및 테일 포인터 테이블은 완전 해시로의 단편적인 업데이트들 사이에서 사용된다.
업데이트들 사이에서, (예를 들어, 키들을 추가하거나 또는 키들을 삭제함으로써) 키들의 세트에 영향을 미치지는 명령어들은 로컬리티 컨버터에 기록될 수 있고, 수신된 명령어들은 주요 키-밸류 저장소로부터의 모든 읽기들이 유효한지 확인하기 위해 (우선 블룸 필터를 체크한 이후에) 로컬리티 컨버터를 체크할 수 있다. 키 업데이트들(예를 들어, Puts 또는 Deletes)은 로컬리티 컨버터가 충분한 개수의 업데이트들을 수집한 경우 지연된 방식으로 처리될 수 있다.
본 발명의 일 실시 예에 따르면, 방법이 제공된다. 상기 방법은: 키들을 밸류 어드레스들로 매핑하는 해시를 포함하는 영구 키-밸류 스토리지 장치에 의해, w제1 키-밸류 콜렉션에서, 제1 키를 액세스하기 위한 명령어인 제1 명령어를 수신하는 단계; 및 상기 제1 명령어를 상기 영구 키-밸류 스토리지 장치의 명령어 로그에 기록하는 단계를 포함한다.
일부 실시 예들에서, 상기 해시는 충돌을 회피하도록 구성된 해시 함수이다.
일부 실시 예들에서, 상기 제1 명령어를 상기 명령어 로그에 기록하는 단계는: 상기 제1 명령어를 상기 명령어 로그의 제1 위치에 기록하는 단계를 포함하고, 상기 방법은 상기 제1 키-밸류 콜렉션에서, 제2 밸류를 액세스하기 위한 명령어인 상기 제2 명령어를 수신하는 단계; 및 상기 명령어 로그에 제2 위치에서, 상기 제1 위치로의 포인터와 함께 상기 제2 명령어를 기록하는 단계를 더 포함한다.
일부 실시 예들에서, 상기 제1 명령어를 상기 명령어 로그에 기록하는 단계는 테일 포인터 테이블에, 상기 제1 키-밸류 콜렉션에 대응하는 공간에서 상기 제1 위치로의 포인터를 저장하는 단계를 포함한다.
일부 실시 예들에서, 상기 명령어 로그의 상기 제2 위치에 상기 제2 명령어를 기록하는 단계는: 상기 테일 포인터 테이블에, 상기 제1 키-밸류 콜렉션에 대응하는 상기 공간에서, 상기 제2 위치로의 포인터를 저장하는 단계를 포함한다.
일부 실시 예들에서, 상기 제1 명령어는 삭제(Delete) 명령어이고, 상기 방법은 상기 제1 키를 블랙리스트에 추가하는 단계를 포함한다.
일부 실시 예들에서, 상기 방법은: 상기 영구 키-밸류 스토리지 장치에 의해, 상기 제1 키를 액세스하기 위한 명령어인 제2 명령어를 수신하는 단계; 상기 제1 키가 상기 블랙리스트에 존재하는지 판별하는 단계; 및 상기 제1 키의 상기 부재를 보고하는 단계를 더 포함한다.
일부 실시 예들에서, 상기 제1 명령어를 상기 명령어 로그에 기록하는 단계는: 상기 제1 키를 블룸 필터(Bloom filter)에 추가하는 단계를 더 포함한다.
일부 실시 예들에서, 상기 방법은: 상기 영구 키-밸류 스토리지 장치에 의해, 상기 제1 키를 액세스하기 위한 명령어인 제2 명령어를 수신하는 단계; 상기 제1 키가 상기 명령어 로그에 존재하는지 판별하는 단계; 및 상기 제1 키가 상기 명령어 로그에 존재하는 것에 응답하여, 상기 제1 키에 연관된 밸류를 액세스하는 단계를 더 포함하고, 상기 제1 키에 연관된 상기 밸류는 제1 어드레스에 위치하고, 상기 제1 어드레스는 상기 제1 키와 함께 상기 명령어 로그에 저장된다.
일부 실시 예들에서, 상기 제1 키가 상기 명령어 로그에 존재하는지 판별하는 단계는: 상기 블룸 필터를 기반으로, 상기 제1 키가 상기 명령어 로그에 존재할 수 있는지 판별하는 단계를 포함한다.
본 발명의 일 실시 예에 따르면, 프로세싱 회로; 및 영구 스토리지 매체를 포함하는 영구 키-밸류 스토리지 장치가 제공된다. 상기 스토리지 장치는 키들을 밸류 어드레스들로 매핑하는 해시(hash)를 포함하고, 상기 해시는 명령어 로그를 포함한다. 상기 프로세싱 회로는: 제1 키-밸류 콜렉션에서, 제1 키를 액세스하기 위한 명령어인 제1 명령어를 수신하고; 상기 제1 명령어를 상기 명령어 로그에 기록하도록 구성된다.
일부 실시 예들에서, 상기 해시는 충돌을 피하도록 구성된 해시 함수(hash function)이다.
일부 실시 예들에서, 상기 명령어 로그에 상기 제1 명령어를 기록하는 것은 상기 명령어 로그의 제1 위치에 상기 명령어를 기록하는 것을 포함하고, 상기 프로세싱 회로는: 제2 밸류를 액세스하기 위한 명령어인 제2 명령어를 수신하고; 상기 제2 명령어를 상기 명령어 로그의 제2 위치에서 상기 제1 위치로의 포인터와 함께 기록하도록 더 구성된다.
일부 실시 예들에서, 상기 명령어 로그에 상기 제1 명령어를 기록하는 것은 테일 포인터 테이블에, 상기 제1 키-밸류 콜렉션에 대응하는, 공간에서 상기 제1 위치로의 포인터를 저장하는 것을 포함한다.
일부 실시 예들에서, 상기 명령어 로그의 상기 제2 위치에 상기 제2 명령어를 기록하는 것은 상기 테일 포인터 테이블에, 상기 제1 키-밸류 콜렉션에 대응하는, 상기 공간에서 상기 제2 위치로의 포인터를 저장하는 것을 포함한다.
일부 실시 예들에서, 상기 제1 명령어는 삭제(Delete) 명령어이고, 상기 프로세싱 회로는 상기 제1 키를 블랙리스트에 추가하도록 더 구성된다.
일부 실시 예들에서, 상기 프로세싱 회로는: 상기 제1 키를 액세스하기 위한 명령어인 제2 명령어를 수신하고; 상기 제1 키가 상기 블랙리스트에 존재하는지 판별하고; 상기 제1 키의 부재를 보고하도록 더 구성된다.
일부 실시 예들에서, 상기 제1 명령어를 상기 명령어 로그에 기록하는 것은 상기 제1 키를 상기 블룸 필터에 추가하는 것을 포함한다.
일부 실시 예들에서, 상기 프로세싱 회로는: 상기 제1 키를 액세스하기 위한 명령어인 제2 명령어를 수신하고; 상기 제1 키가 상기 명령어 로그에 존재하는지 판별하고; 상기 제1 키가 상기 명령어 로그에 존재하는 것으로 판별된 것에 응답하여, 상기 제1 키와 연관된 밸류를 액세스하도록 더 구성되고, 상기 제1 키와 연관된 상기 밸류는 제1 어드레스에 위치하고, 상기 제1 어드레스는 상기 명령어 로그에 상기 제1 키와 함께 저장된다.
본 발명의 일 실시 예에 따르면, 처리를 위한 수단; 및 영구 스토리지 매체를 포함하는 영구 키-밸류 스토리지 장치가 제공된다. 상기 스토리지 장치는 키들을 밸류 어드레스들로 매핑하는 해시를 포함한다. 상기 해시는 명령어 로그를 포함한다. 상기 프로세싱을 위한 수단은 제1 키-밸류 콜렉션에서, 제1 키를 액세스하기 위한 명령어인 제1 명령어를 수신하고; 상기 제1 명령어를 상기 명령어 로그에 기록하도록 구성된다.
본 발명에 따르면, 향상된 성능을 갖는 해싱을 사용하는 키 밸류 스토리지 장치 및 그것의 동작 방법이 제공된다.
도면들은 특정 실시 예들의 설명들을 제공하기 위한 것이며, 특별하게 도시되지 않은 다른 실시 예들은 본 발명의 사상으로부터 배제되지 않는다. 본 발명의 이러한 특정들 및 이점들 및 다른 특징들 및 이점들은 상세한 설명, 특허청구범위, 및 첨부된 도면들을 참조하여 이해되고, 인식될 것이다.
도 1a는 본 발명의 실시 예에 따른 스토리지 장치의 블록도이다.
도 1b는 본 발명의 실시 예에 따른 해시 함수들 및 비트맵 섹션들의 개념도이다.
도 2는 본 발명의 실시 예에 따른 KV 영구 스토리지 장치를 구동하는 방법의 순서도이다.
도 3은 본 발명의 실시 예에 따른 완전 해시를 업데이트하는 방법의 순서도이다.
도 4는 본 발명의 실시 예에 따른, 제1 밸류를 액세스하는 명령어를 관리하는 방법의 순서도이다.
도 5는 본 발명의 실시 예에 따른 백업 파일들 및 대응하는 비트맵들의 세트의 개념도이다.
도 6은 본 발명의 실시 예에 따른 백업 기기의 고아 데이터(orphaned data)를 관리하는 순서도이다.
도 7은 본 발명의 실시 예에 따른, 호스트 및 스토리지 장치의 블록도이다.
도 8은 본 발명의 실시 예에 따른, 명령어를 관리하는 방법의 순서도이다.
도 9는 본 발명의 실시 예에 따른 명령어를 관리하는 다른 방법의 순서도이다.
첨부된 도면들과 연관되어 설명되는 상세한 설명은 본 발명에 따라 제공되는 완전 해싱(perfect hashing)을 사용하는 키 밸류 스토리지 장치의 실시 예의 설명으로서 의도되며, 본 발명이 구현되거나 또는 활용될 수 있는 유일한 형태들을 나타내는 것으로 의도되지 않는다. 상세한 설명은 기재된 실시 예들과 연관되어 본 발명의 특징들을 설명한다. 그러나, 동일 또는 균등한 기능들 또는 구조들이, 본 발명의 범위에 포함되는 것으로 의도되는 다른 실시 예들에 의해 달성될 수 있다. 본 명세서의 전반에 걸쳐 기재된 바와 같이, 유사한 참조 번호들은 유사한 구성들 또는 기능들을 지칭하는 것으로 의도된다.
키-밸류(KV; key-value) 동작들의 테일 레이턴시 감소는, 인공 지능(artificial intelligence), 머신 러닝(machine learning), 데이터 과학(data sciences), 및 중복 제거 백업 저장소들(deduplicated backup stores)과 같은 다수의 워크로드들에 대해 이점을 가질 수 있다. 일부 KV 저장소 구현들은 키들의 (시간 이동) 세트를 버킷들로 해시하기 위해 고정된 해시 함수(fixed hash function)를 사용한다. 버킷들로 해시된 키들은 충돌(collisions)을 일으킬 수 있으며, 충돌 체인 길이로 인해 긴 테일 레이턴시(long tail latency)가 발생한다. 최악의 경우의 테일 레이턴시는 해시 맵의 버킷들 내의 가장 긴 충돌 체인의 길이에 비례할 수 있다. SSD(solid state drive)에 구현된 KV 저장소에서, 키를 위치시키는 것은 다수의 NAND(Not-AND) 페이지 리드들을 발생시킬 수 있고, 가장 긴 테일 레이턴시 읽기들은 상대적으로 많은 수의 NAND 페이지 읽기들(예를 들어, 18 내지 22 NAND 페이지 읽기들만큼)을 요구할 수 있다. 이와 같이, 충돌(collisions)은 큰 성능 손실을 일으킨다. KV 업로드들이 대량으로(in bulk) 그리고 단편적으로(episodically) 발생하고, 리드-집중적인(read-intensive) 액세스 패턴을 갖는 워크로드들에 대하여, 가끔 단일 NAND 페이지 키 탐색을 방지하는 것만으로도 상당한 성능 향상을 가져올 수 있다.
KV SSD들 및 KV 저장소들은 스토리지 장치 내에서 해시 맵(hashmap)을 구현할 수 있고, 단일 키는 NAND 페이지에 저장되고, Delete 명령어들을 처리할 때 더 높은 장치 WAF(write amplification)를 발생하고, Put, Get, 또는 Exist 명령어들을 처리할 때 더 높은 RAF(read amplification factor)를 발생한다. 해시 맵 내에서 충돌을 관리하기 위해, 버킷 넘버에서 충돌하는 키들을 포함하는 NAND 페이지들이 함께 연결될 수 있다. 이러한 KV 저장소의 최악의 테일 레이턴시는 해시 맵의 버킷들 내의 가장 긴 충돌 체인의 길이에 비례할 수 있다. 상술된 바와 같이, 이러한 방식에서, 충돌은 성능 저하를 유발할 수 있다.
이와 같이, 일부 실시 예들에서, KV 영구 스토리지 장치(예를 들어, KV SSD(solid state drive))는 동적 완전 해시(dynamic perfect hash)를 사용하여 최대 단일 페이지 읽기(single page read)를 보장하여 키를 탐색한다. 일부 실시 예들에서, 로컬리티 컨버터(locality converter)("명령어 로그(instruction log)"로 지칭될 수 있음), 로컬리티 컨버터 상의 블룸 필터(Bloom filter), 및 테일 포인터 테이블은 완전 해시로의 단편적인 업데이트들 사이에서 사용된다. 키 업데이트들(예를 들어, Puts 또는 Deletes)은, 로컬러티 컨버터가 충분한 개수의 업데이터들을 수집한 경우, 지연된 방식으로 처리될 수 있다. 로컬리티 컨버터, 블룸 필터, 및 테일 포인터 테이블은 (예를 들어, 호스트로부터 대응하는 명령어들을 수신한 경우) 키들을 액세스하기 위해 사용될 수 있다. 본 명세서에서 사용되는 바와 같이, 영구 스토리지 장치(persistent storage device)에서 키를 액세스(accessing)하기 위한 명령어는 키를 읽거나 또는 쓰거나 또는 스토리지 장치에 키가 저장되었는지를 판별하는 (Put, Get, Delete, 또는 Exist 등과 같은) 명령어일 수 있다.
일부 실시 예들에서, 해시 맵의 버킷들은 버킷 그룹들(키-밸류 콜렉션들(key-value collections)로 지칭될 수 있음)로 함께 그룹화될 수 있다. 고정된 해시 함수(fixed hash function)(이는 완전 해시와 다름)는 먼저 각 키를 버킷 그룹으로 매핑하는데 사용되고; 이러한 고정된 해시 함수는 복수의 키들을 각 버킷 그룹으로 매핑할 수 있다. 고정된 해시 함수는 단일의 변경되지 않는 해시 함수(즉, 이하에서 좀 더 상세하게 설명되는 바와 같이, 완전 해시를 구현하는데 사용되는 해시 함수와 다름, 동작 동안 다른 해시 함수로 교체되지 않을 수 있음.)일 수 있다. 이후에 각각의 완전 해시가, 충돌 없이, 각 키를 버킷으로 매핑하기 위해 각 버킷 그룹에서 사용된다. 하나의 그룹 내의 복수의 버킷들에 속하는 키들은 단일 NAND 페이지로 패킹될 수 있다. 본 명세서에서 사용되는 바와 같이, "버킷(bucket)"은 밸류를 저장하는 저장 공간이거나, 또는 동등하게, 저장된 밸류 자체일 수 있다. 본 명세서에서 사용되는 바와 같이, "버킷 그룹(bucket group)"은 예를 들어, 액세스를 용이하게 하기 위해, 함께 그룹화된, 이러한 버킷들의 모음이다.
일부 실시 예들에서, 시스템은 도 1에 따라 구현된다. 해시 맵(105)으로 지칭될 수 있는 제1 테이블은 각 버킷 그룹에 대한 하나의 엔트리(entry)를 저장하기 위해 사용된다. 해시 맵(105)은 충돌이 발생할 수 있고 키들이 연결되어 충돌을 수용하는 해시 함수와 함께 사용하기 위한 영구 스토리지에서 제공될 수 있는 동적 랜덤 액세스 메모리(DRAM; dynamic random access memory)의 영역에 맞는 크기를 가질 수 있다. 이러한 영역은, 예를 들어, 버킷 당 4-바이트(four-bytes)의 크기를 가질 수 있고, 이와 같이, 해시 맵(105)의 엔트리들은 그에 따라 크기가 조정될 수 있다. 해시 맵(105)의 각 엔트리는: (i) 베이스 페이지 포인터(110), (ii) 해시 함수 선택기들의 세트(115), (iii) 저장된 키 비트맵(120), 및 (iv) 블랙리스트 어레이(125)(각각은 이하에서 좀 더 상세하게 설명됨.)를 포함한다. 베이스 페이지 포인터는 버킷 그룹 당 N(예를 들어, N ≤ 15*버킷 그룹의 버킷들의 개수)개의 키들을 저장하기 충분한, 버킷 그룹에 대한 연속적인 논리적 스토리지 영역의 시작에서의 미리 정해진 논리적 페이지 어드레스(베이스 페이지 어드레스)로의 정적 포인터(static pointer)이다. 해시 함수 선택기들(예를 들어, 8-비트 인덱서들)은 범용 해시 함수 생성기(universal hash function generator)로부터 해시 함수들을 선택한다. 일부 실시 예들에서, 해시 맵(105)는 각 버킷 그룹에 대하여, 3개 및 5개 사이의 선택기들을 포함한다. 저장된 키 비트맵(간단히 “비트맵(bitmap)”으로 지칭될 수 있음)은 베이스 페이지 어드레스에 비교하여, 키가 저장된 논리적 어드레스를 특정하는 비트 위치, 또는 비트맵 내의 “비트 오프셋(bit offset)”을 유일한 키 오프셋으로 매핑하는 주입 변환(injective transformation)이다. 비트맵 내의 설정 비트는 키 스토리지 영역에 저장된 패킹된 키들의 키에 대응하고, 이는 버킷 그룹에 대하여 베이스 페이지 어드레스에서 시작하는 NAND 페이지들의 세트일 수 있다.
키들은 “키 슬롯들(key slots)”로 지칭되는 연속된 필드들에 키 스토리지 영역에 저장된다. 각 키 슬롯은 가장 큰 가능한 키를 수용하기에 충분한 너비(예를 들어, 32 및 255 바이트들 사이의 너비)를 갖는다. 비트맵의 제n 설정 비트가 키 스토리지 영역의 제n 키 슬롯에 대응하도록, 키들이 스토리지 영역에 기입된다. 예를 들어, 제10 설정 비트(비트맵에서, 비트 오프셋 25에 위치할 수 있음)는 베이스 페이지 어드레스로부터 키 슬롯 넘버 10에 대응한다. 예를 들어, 각 NAND 페이지가 총 64개의 키들을 저장할 수 있는 경우, 비트맵의 제100 설정 비트는 제2 NAND 페이지의 제36 키들에 대응할 수 있다. 블랙리스트 어레이(blacklist array)는 (호스트로부터 수신된 Delete 명령어의 결과로서) 삭제되었으나, 패킹된 키들을 포함하는 키 스토리지 영역 및 비트맵에서는 삭제가 아직 반영되지 않은 키들의 인덱스들을 저장한다. 각 NAND 페이지에 최대 P개의 키들이 존재하도록 키들은 키 스토리지 영역의 NAND 페이지들로 패킹된다. 이 때, P는 가장 긴 키 명칭(key name)에 대하여 연산된다. (예를 들어, 키 사이즈는 애플리케이션을 기반으로 24 바이트보다 작거나 또는 256 바이트보다 작을 수 있다.) 일부 실시 예들에서, L2P(logical-to-physical) 테이블은 (해시 함수 선택기들, 저장된 키들에 대한 비트맵, 및 삭제된 키 인덱스들의 블랙리스트 어레이를 포함하는) 해시 맵(105)을 저장하도록 용도 변경된다.
상술된 데이터 조직(data organization)은 완전 해시(perfect hash)를 구현할 수 있다. 본 명세서에서 사용되는 바와 같이, “해시(hash)”는 키들을 밸류들로 매핑하기 위한 시스템 또는 방법(또는 그것들의 조합)일 수 있다. 본 명세서에서 사용되는 바와 같이, “완전 해시(perfect hash)”는 충돌(collisions)을 피하는 해시 함수(hash function)이다.
초기에, 스토리지 데이터 구조를 구성하고, 그것을 재구성하기 위해, 의도된 경우(예를 들어, 다수의 추가들 및 삭제들이 호스트에 의해 수행된 이후에), 이하의 방법이 사용될 수 있다. 도 1b를 참조하면, 버킷 그룹에 대한 완전 함수를 구성하는 경우, 버킷 그룹의 비트맵 공간의 비트들은 모두 0으로 설정되고, 비트맵 공간은 K 섹션들(170)로 분할된다. 해시 함수들의 패밀리(175)가 선택되고, 제1 해시 함수는 해시 함수들의 패밀리(175)로부터 선택되고, 각 키가 해시 맵(105)의 제1 섹션에 표현되도록, 버킷 그룹내의 모든 키들이 해싱(예를 들어, 각각의 비트 오프셋으로 매핑됨)된다. 충돌없이 비트맵의 제1 섹션에 표현된 각 키에 대하여, 저장된 키 비트맵에서 대응하는 비트는 1로 설정된다. 만약 충돌이 발생한 경우, 다른 해시 함수가 선택되고, 다른 키들과 충돌된 키들(즉, 이미 1로 설정된 비트로 매핑된 키들)은 비트맵의 제2 섹션으로 해싱된다. 제1 반복에서와 같이, 각 키는 비트맵의 제2 섹션의 비트로 매핑된다; 만약 이러한 비트가 이미 설정되지 않은 경우, 1로 설정되고; 만약 이미 설정된 경우, 키가 해싱 중 충돌된 키들의 리스트로 추가된다. 이러한 방식은, 저장된 키 비트맵의 섹션에서 충돌이 없을 때까지, 또는 제K 섹션이 사용되고 충돌이 발생할 때까지, 매번 저장된 키 비트맵과 새로운 해시 함수를 사용하여 반복된다. K번째 반복의 종료에서 (또는 더 빨리), 모든 키들이 소진되거나, 또는 일부 키들이 비트맵의 제K 섹션에서 충돌할 것이다. 비트맵의 제K 섹션에서 충돌들이 발생한 경우, 비트맵의 제1 섹션에 대한 새로운 해시 함수가 선택됨으로써, 저장된 키 비트맵이 클리어된 이후에, 전체 프로세스가 반복될 수 있다. 일부 실시 예들에서, 완전 해시는 ARM 코어당, 초당 약 4000만 내지 1억개의 키들에 대하여 상술된 방법에 의해 생성될 수 있다.
각 밸류는 영구 스토리지 장치에 저장될 수 있다. 밸류들은 가변 크기들을 가질 수 있고, 클 수 있다. 이와 같이, 밸류들의 일부는 스토리지에 파편화될 수 있다. 키 스토리지 영역은 각 키와 함께, 어드레스(예를 들어, 물리 어드레스(physical address))로의 포인터를 범위 매퍼(extent mapper)(140)에 저장할 수 있다. 범위 매퍼(140)는 밸류들을 저장하는 (아마 파편화된) 스토리지 영역일 수 있다. 범위 매퍼(140)에서, 각 밸류는, 도시된 바와 같이, 링크된 리스트에서 하나 또는 그 이상의 엔트리들로서 저장될 수 있다.
도 2를 참조하면, 키들이 추가되거나 또는 삭제될 때, 로컬리티 컨버터(locality converter)(150) 및 블랙리스트 어레이가 (이하에서 상세하게 설명되는 바와 같이, 205 단계에서,) 상술된 바와 같이 완전 해시를 재생성하는 것 없이, Get, Put, 및 Delete 명령어들을 수행하는 것을 계속하기 위해 사용될 수 있다. 이러한 모드의 동작은 로컬리티 컨버터 및 블랙리스트 어레이의 크기의 점진적인 증가를 일으킬 수 있다. 결국, 예를 들어, 210에서 판별되는 바와 같이, 로컬리티 컨버터의 크기 또는 블랙리스트 어레이의 크기가 각각의 임계치에 도달한 경우, 해시가 업데이트되거나 또는 재구성될 수 있다. 도 2에서, 이러한 프로세스는 이하와 같이 설명된다. 215에서, 키 업데이트들(키 업데이트들 각각은 로컬리티 컨버터에 기록된 대응하는 명령어의 일부로서 로컬리티 컨버터에 저장된다.)은 버킷마다 수집될 수 있고, 220에서, 동적 완전 해시 연산(dynamic perfect hash computation)이 수행된다. 225에서, 해시 함수들의 패밀리는 버킷 그룹에서 모든 키들을 표현하기 위한 완전 해시를 생성하기 위해 선택되고, 230에서, 각 키들에 대한 해시 값들의 비트맵이 생성되고(이러한 비트맵은 키 스토리지 영역의 오프셋들을 판별하기 위해 제공됨.), 235 단계에서, 키들은 키 스토리지 영역으로 패킹되고 밸류들은 범위 맵퍼(extent mapper)에 저장된다. 240에서, 해시 맵(또는 L2P 테이블)은 버킷 그룹에 대한 완전 해시를 생성하기 위해 선택된 해시 함수들의 인덱스과 함께 업데이트될 수 있고, 패킹된 키들의 NAND 페이지들 내의 키들의 오프셋들을 포함하는 비트맵은 업데이트될 수 있다. 프로세스는 각 버킷 그룹에 대하여 반복되고; 245에서 판별된 바와 같이, 더 많은 버킷 그룹들이 처리되어야 하는 경우, 프로세스는 225로 돌아간다.
도 3은 완전 해싱을 업데이트하는 프로세스를 보여준다. 305에서, 버킷 그룹에 대한 키 추가들 및 삭제들은, 로컬리티 컨버터(locality converter)에서, 수집된다. 로컬리티 컨버터에서 삽입되고 이후에 삭제된 키들은 제외된다. 만약, 310에서의 판별에 따라, 삭제될 키가 존재하는 경우, 315에서, 블랙리스트 어레이가 삭제될 키들의 인덱스들로 업데이트된다. 320에서의 판별에 따라, 새로운 키들이 추가되는 경우, 325에서의 판별에 따라, 키들이 존재하는 완전 해시로 추가될 수 있는 경우(마지막 몇 섹션만 갱신하는 데 필요에 따라 새로운 해시 함수들이 선택됨), 330에서, 저장된 키 비트맵이 갱신되고, 키들은 새로운 NAND 페이지들로 패킹된다.
이러한 프로세스에서, 어떤 삭제된 키들에 대응하는 비트는 클리어될 수 있고, 어떤 추가된 키들에 대응하는 비트는 설정될 수 있다. (만약 이미 설정되지 않은 경우, 그렇다면, 비트맵의 다른 섹션들로 매핑하는 것이 시도될 수 있다.) 만약 존재하는 해시 함수들이 이러한 프로세스를 사용하여 갱신된 키들을 수용하는 것이 가능한 경우, 따라서 키 스토리지 영역의 컨텐츠는 갱신될 수 있다. 만약 존재하는 해시 함수들이 갱신된 키들을 수용할 수 없는 경우, 키들의 새로운 세트가 최소 연산 노력을 사용하여 완전 해시 함수로서 표현될 수 있도록, 비트맵의 마지막 일부 섹션들만의 해시 함수들이 변경될 수 있다.
해시 함수들의 전부가 아닌 일부를 변경하는 시도가 실패하는 경우(예를 들어, 325에서의 판별에 따라, 키들이 존재하는 완전 해시로 추가될 수 없는 경우), 전체 해시가 재구성될 수 있다. 이러한 무차별 대입 계산도 빠를 수 있다. (초당 3000만 내지 1억 키들) 335에서, 완전 해시가 버킷 그룹에 저장될 새로운 그리고 이전 키들 전체에 대하여 재연산되고, 블랙리스트 어레이는 필요에 따라 클리어되고, 키들은 새로운 NAND 페이지들로 패킹되고(즉, 새로운 키 스토리지 영역을 형성함.), (이전에 사용된 키 스토리지 영역의) 이전 NAND 페이지들은 장치 가비지 콜렉션을 위하여 준비된다.
상술된 바와 같이, 키들을 추가 또는 삭제하는 명령어들(예를 들어, 아직 저장되지 않은 키들을 포함하는 쓰기 명령어들, 또는 Delete 명령어들)은 이런 명령어들을 기록하기 위해 로그-구조화된 저장소로서 조직화된 스토리지 영역인 로컬리티 컨버터(locality converter)에 이런 명령어 각각을 기록(예를 들어, 이러한 명령어 각각을 첨부함)으로써 관리될 수 있다. 본문에서 사용되는 바와 같이, 로컬리티 컨버터에 “명령어를 기록하는 것(recording an instruction)”은, 로컬리티 컨버터에, 이후에 수행될 명령어에 대한 충분한 정보를 저장하는 것(예를 들어, 수행될 동작(예를 들어, Put, Get, Delete, 또는 Exist인지)를 저장하는 것, 키를 저장하는 것, 및 밸류가 기입되거나 또는 변형되는 경우 밸류(또는 밸류로의 포인터)를 저장하는 것)을 의미한다. 본문에서 사용되는 바와 같이, “로컬리티 컨버터(locality converter)”는 이후에 수행될 명령어에 대한 충분한 정보를 저장하는데 적절한 데이터 구조일 수 있다. 명령어들은 각 버킷 그룹에 대한 링크된 리스트로서 로컬리티 컨버터에 저장될 수 있다. 각 버킷 그룹에 대한 테일 포인터 테이블(tail pointer table)(115)(도 1)은 버킷 그룹에 대하여 추가된 마지막 엔트리를 가리킬 수 있다. 명령어가 로컬리티 컨버터로 추가된 경우, 블룸 필터(160)는 적절한 비트들을 설정함으로써, 키의 존재를 기록하도록 갱신된다. 일부 실시 예들에서, 각 버킷 그룹에 대한 명령어들은 (명령어들 전부가 여러 버킷 그룹들(예를 들어, 전부)에 의해 공유되는 로컬리티 컨버터로 저장되는 대신에) 버킷 그룹에 대하여 구분된 각각의 로컬리티 컨버터로 저장된다.
키들이 삭제된 경우(호스트로부터 수신된 Delete 명령어의 결과로서), 저장된 키 비트맵에서 삭제된 키의 위치는 (상술된 바와 같이, 버킷 그룹마다 유지되는) 블랙리스트 어레이에 마킹된다. 후속 탐색 동안, 키가 비트맵에서 발견된 경우, 키의 위치는 (삭제를 반영하기 위해 아직 갱신되지 않은 키 스토리지 영역을 제외하고) 키가 삭제되지 않았음을 확인하기 위해 블랙리스트 어레이에서 체크된다.
도 4를 참조하면, 동작에서, 키 탐색 동작(예를 들어, Get 명령어의 일부로서)은, 405에서, 로컬리티 컨버터의 블룸 필터를 참고함으로써, 로컬리티 컨버터에 키가 존재하는지 체크하는 것을 포함할 수 있다. 410에서의 판별에 따라, 키가 로컬리티 컨버터에 존재하지 않는 경우, 버킷 그룹들 중 하나로 (고정된 해시 함수를 사용하여) 해시된다. 키가 매핑된 버킷 그룹을 기반으로, 버킷 그룹에 대한 해시 함수는 버킷 그룹에 대한 해시 함수 선택기에 따라 선택되고, 비트맵은 키에 대응하는 비트가 설정되었는지 검색하도록 체크된다. 만약, 415에서의 판별에 따라, 비트가 설정되지 않은 경우, 스토리지 시스템으로부터의 키의 부재(absence)가 보정되고, 시스템은, 420에서, 키가 저장되지 않은 것으로 결론내린다. (시스템은 이후에 호스트로 제1 키의 부재를 리포트할 수 있다.) 이러한 상황에서, Get 명령어와 함께 수신된 키를 키 스토리지 영역에 저장된 키와 비교하는 것이 필요하지 않다. 이와 같이, 실패한 키 탐색은 매우 빠를 수 있으며, 이는 PBBA(Purpose-Built Backup Appliance) 및 클라우드 백업 애플리케이션들(cloud backup application)에 대해 특히 이점을 가질 수 있다.
415에서 판별된 바와 같이, 키에 대응하는 비트가 비트맵에서 설정된 경우, (425에서, 키에 대응하는 비트의 오프셋을 판별하기 위해 비트맵에서 설정된 비트들의 개수를 카운팅함으로써, 키 스토리지 영역에서 키의 위치를 판별한 이후에) 키는 키 스토리지 영역으로부터 읽어진다. 만약 스토리지 영역에서 키가 탐색된 키와 일치하는 경우, 키 탐색은 성공한다. (그리고, 예를 들어, Get 명령어는 밸류를 탐색하고 반환함으로써 완료될 수 있다.) 키 스토리지 영역에서 키가 탐색된 키와 일치하지 않는 경우, 키 탐색은 실패한다. (예를 들어, 탐색된 키는 해시 함수가 저장된 다른 키로서 동일한 비트로 매핑한 키이다.)
저장된 키를 탐색된 키와 비교하는데 사용되는 페이지 읽기를 피하기 위해, 430에서, 키 스토리지 영역으로부터 저장된 키를 읽기 전에, 삭제된 키들의 인덱스들을 포함하는 블랙리스트 어레이가 이미 삭제되지 않은 키들을 보장하기 위해 참조될 수 있다. 키 인덱스가 블랙리스트 어레이에 존재하는 경우, 시스템은, 420에서, 키가 저장되지 않은 것으로 결론내린다. 키가 아직 삭제되지 않은 경우, 오프셋에 대응하는 하나의 NAND 페이지의 적절한 섹션이, 435에서, 읽어지고, 밸류가 범위 매퍼(extent mapper)로부터, 440에서, 읽어진다. 410에서 판별된 바와 같이, 블룸 필터가, 키가 로컬리티 컨버터에 존재할 수 있음을 가리키는 경우, 로컬리티 컨버터가, 445에서 통과된다. 만약, 450에서 판별된 바와 같이, 키가 로컬리티 컨버터에 존재하지 않는 경우, 프로세스는 415단계로 돌아간다. 키가 로컬리티 컨버터에 존재하는 경우, 445에서 판별된 바와 같이, 키에 대하여 기록된 마지막 명령어가 Delete 명령어가 아닌 경우, 프로세스는 440 단계로 돌아가고, 그렇지 않다면, 시스템은, 420에서, 키가 저장되지 않은 것으로 결론내린다.
일부 실시 예들에서, 백업 기기들(backup appliances) 및 KV 저장소들 사이의 효율적인 공동의 가비지 콜렉션(collaborative garbage collection)이 수행된다. 백업 기기들은 키들(지문들)을 (잠재적으로 수천 내지 수백만의 키들을 저장하는) 백업 파일 디스크립터들에 저장할 수 있다. 단일 키는 복수의 백업들에 잠재적으로 저장될 수 있다. 백업들이 삭제된 경우, 일부 키들은 고아(orphaned)가 될 수 있고, 고아 키들(orphaned keys)은 기기들에 의해 추적되지 않는다. 이와 같이, 일부 실시 예들은 기기들이 버킷 그룹 내의 저장된 키들의 비트맵을 액세스하도록 할 수 있다. 이러한 실시 예에서, 기기는 라이브 백업의 키가 속한 버킷 및 버킷 그룹을 식별하고, 버킷 그룹에 저장된 키의 비트맵을 획득할 수 있다. 이는 라이브 백업들의 모든 키들에 대하여 수행될 수 있다. 기기는 어떤 키들이 보유되어야 하고 어떤 키들이 삭제될 것인지를 가리키는 버킷 당 변형된 비트맵을 반환할 수 있다. 장치는 이러한 리스트를 처리하고 더 이상 필요하지 않은 각 키에 대한 적절한 삭제 동작을 수행할 수 있다.
이러한 프로세스는 도 5 및 도 6에 도시된다. 도 5에서, 백업 기기는 3개의 백업 파일들(505)(그 중 2개는 삭제됨)을 포함한다. 삭제들의 결과에 따라, 2개의 키들(Key51 및 Key53)은 고아(orphaned)가 된다. 일부 실시 예들에서, 고아인 키들(orphaned keys)은 아래와 같이 식별된다. 우선, KV 스토리지 장치는 비트맵(510)을 백업 기기로 보고한다. 백업 기기는 먼저 (0 각각이 00이 되고, 1 각각이 10이 되도록) 비트맵의 각 비트에 0(zero)을 첨부한다. 백업 기기는, 다음에, 삭제될 백업 파일들의 키들 각각을 해시하여 10의 각 밸류를 11로 변경하고, 비트맵으로 유지되는 백업 파일들의 키들 각각을 해시하여 11 또는 10의 각 밸류를 01로 변경한다. 마지막으로, 백업 기기는, 예를 들어, (고아들(orphans)이 밸류 11로 식별되는) 변형된 비트맵(515)을 KV 스토리지 장치로 다시 전송함으로써, 고아인 키들을 삭제하도록 KV 스토리지 장치로 명령한다. 이러한 실시 예에서, 결과는 백업 기기가 백업 파일들을 해시하는 순서와 무관하게 동일하다. 이는 유지될 백업 파일이 우선 해시되는 경우, 10이 11로 변경될 것이며, 이에 따라, 이러한 밸류들이 11로 변경되는 것으로서 삭제될 파일의 후속 해싱이 방지될 것이기 때문이다.
도 6은 프로세스를 보여주는 순서도이다. 605에서, 백업 기기는 백업 압축 사이클(backup compaction cycle)을 시작하고, 610에서, 백입 기기로부터 수신된 적절한 명령어에 응답하여, KV 스토리지 장치들은 로컬리티 컨버터들(key-Logs)로부터 키들을 수집하고, 버킷 그룹마다 완전 해시 함수들(PHFs; perfect hash functions)를 갱신한다. 615에서, 백업 기기는 라이브 백업들로부터(즉, 삭제되지 않은 백업 파일들로부터) 키들을 검색하고, 620에서, KV 스토리지 장치들은 버킷 그룹에 대한 비트맵 및 버킷 그룹 넘버를 백업 기기로 반환한다. 625에서, 백업 기기는 버킷 그룹 당 기기의 비트맵에 유지될 키 또는 키들을 마크하고, 630에서, 버킷 그룹 당 백업 기기의 비트맵들을 반환한다. 635에서, KV 스토리지 장치들은 삭제될 키들을 블랙리스트 어레이들로 추가하고, 640에서, KV 스토리지 장치들은 버킷 그룹 당 완전 해시 함수들을 갱신하고, 필요에 따라 장치 가비지 콜렉션을 수행한다.
도 7은 호스트(705) 및 (KV 스토리지 장치, 예를 들어, KV SSD일 수 있는) 스토리지 장치(710)의 블록도이다. 스토리지 장치(710)는 2.5인치, 1.8인치, MO-297, MO-300, M.2, 및 EDSFF(Enterprise and Data Center SSD Form Factor)를 포함하나, 이에 한정되지 않는 영구 스토리지 장치들에 대하 적합한 복수의 폼 팩터들 중 하나인 폼 팩터를 포함할 수 있고, 호스트(705)와 연결될 수 있는 전기적 인터페이스를 포함할 수 잇다. 전기적 인터페이스는 PCI(Peripheral Component Interconnect), PCIe(PCI express), 이더넷(Ethernet), SCSI(Small Computer System Interface), SATA(Serial AT Attachment), 및 SAS(Serial Attached SCSI)를 포함하는 영구 스토리지 장치들에 적합한 복수의 인터페이스들 중 하나일 수 있다. 호스트(705) 및 스토리지 장치(710) 각각은 프로세싱 회로(715)(이하에서 상세하게 설명됨)를 포함할 수 있다. 스토리지 장치(710)는 영수 스토리지 매체(720)(예를 들어, NAND 플래시)를 더 포함할 수 있다. 스토리지 장치(710)의 프로세싱 회로(715)는, (그리고 스토리지 장치(710)가 포함하는 프로세싱 회로(715)를 사용하여) 본문에 기재된 방법들 중 일부 또는 전부를 수행할 수 있다. 도 8 및 도 9는 일부 실시 예들에서, 스토리지 장치(710)가 805 또는 905에서, 명령어를 수신하고(예를 들어, 호스트(705)로부터 명령어를 수신할 수 있다.), 910에서, 명령어 로그(또는 810에서, 로컬리티 컨버터)에 명령어를 기록할 수 있는 것을 보여주는 순서도들이다.
일부 실시 예들에서, 명령어 로그 또는 로컬리티 컨버터에 기록된 명령어는 키 업데이트들(예를 들어, Puts 또는 Deletes)과 관련된 명령어일 수 있다. 일부 실시 예들에서, 명령어 로그 또는 로컬리티 컨버터에 기록된 명령어가 Delete 명령어이고, 패킹된 키들을 포함하는 키 스토리지 영역 및 비트맵에서는 삭제가 아직 반영되지 않은 경우, 대응하는 키들의 인덱스들은 블랙리스트 어레이에 저장될 수 있다. 일부 실시 예들에서, 명령어 로그 또는 로컬리티 컨버터에 기록된 명령어 또는 명령어들은, 명령어 로그 또는 로컬리티 컨버터의 크기가 임계치에 도달한 경우 또는 명령어 로그 또는 로컬리티 컨버터에 충분한 개수의 키 업데이트들이 수집된 경우, 지연된 방식(delayed fashion)으로 처리될 수 있다. 예를 들어, 명령어 로그 또는 로컬리티 컨버터에 기록된 명령어 또는 명령어들을 기반으로 해시 및 비트맵이 업데이트될 수 있다. 일 실시 예에서, 해시 및 비트맵을 업데이트하는 방법은 도 3을 참조하여 설명된 방법을 기반으로 처리될 수 있다.
본 명세서에서 사용된 바와 같이, "~의 일부"는 사물의 "적어도 일부"를 의미하고, 따라서 사물의 전부 또는 전부보다 적음을 의미할 수 있다. 이와 같이, 사물의 "일부"는 사물 전체를 특별한 경우로 포함하는데, 즉, 사물 전체가 사물의 일부에 대한 일 예이다. 본 명세서에서 사용된 바와 같이, 제2 숫자가 제1 숫자의 "Y% 이내"인 경우 상기 제2 숫자는 상기 제1 숫자의 최소(1-Y/100) 배이고 상기 제2 숫자는 상기 제1 숫자의 최대(1+Y/100) 배이다. 여기에서 사용된 용어 "또는"은 "및/또는"으로 해석되어야 하며, 예를 들어 "A 또는 B"는 "A" 또는 "B" 또는 "A 및 B" 중 어느 하나를 의미한다. 본 명세서에서 사용되는 바와 같이, “어레이(array)”는 어떻게 저장되는지(예를 들어, 연속된 메모리 위치들 또는 링크된 리스트에서 저장되었는지)와 무관하게 숫자들의 정렬된 세트를 지칭한다.
명세서의 배경 항목에서 제공되는 배경은 맥락을 설정하기 위해서만 포함되며, 이 배경 항목의 내용은 종래 기술인 것으로 인정하지 않는다. 설명된 임의의 구성요소 또는 구성요소들의 임의의 조합(예를 들어, 여기에 포함된 임의의 시스템 다이어그램에서)은 여기에 포함된 임의의 흐름도의 동작들 중 하나 이상을 수행하는데 사용될 수 있다. 또한, (i) 상기 동작들은 예시적인 동작들이고, 명시적으로 커버되지 않은 다양한 추가 단계를 포함할 수 있으며, (ii) 상기 동작들의 시간적 순서는 변경될 수 있다.
본 명세서에서, 용어 "처리 회로" 또는 "컨트롤러 수단"은 데이터 또는 디지털 신호를 처리하는 데 채용되는 하드웨어, 펌웨어 및 소프트웨어의 임의의 조합을 의미하는 데 사용된다. 처리 회로 하드웨어에는 예를 들어 주문형 집적 회로(ASIC), 범용 또는 특수 목적 중앙 처리 장치(CPU), 디지털 신호 프로세서(DSP), 그래픽 처리 장치(GPU) 및 필드 프로그래머블 게이트 어레이(FPGA)와 같은 프로그램머블 로직 장치들을 포함할 수 있다. 처리 회로에서, 본 명세서에서 사용되는 바와 같이, 각 기능은 그 기능을 수행하도록 구성된, 즉 하드-연결된(hard-wired) 하드웨어에 의해 또는 비일시적 저장 매체에 저장된 명령들을 실행하도록 구성된 CPU와 같은 더 범용의 하드웨어에 의해 수행된다. 처리 회로는 단일 인쇄 회로 기판(PCB) 상에서 제작되거나 여러 개의 상호연결된 PCB들 상에서 분포될 수 있다. 처리 회로는 다른 처리 회로를 포함하고, 예컨대, 처리 회로는 PCB상에서 상호연결된 두 개의 프로세싱 회로들, 즉, FPGA 및 CPU를 포함할 수 있다.
본 명세서에서 사용된 바와 같이, 방법(예 : 조정) 또는 제1 수량(예 : 제1 변수)이 제2 수량(예 : 제2 변수)에 "기반"되는 것으로 언급될 때, 이는 제2 수량이 방법에 대한 입력 또는 제1 수량에 영향을 주는데, 예를 들어, 제2 수량은 제1 수량을 계산하는 함수에 대한 입력(예 : 유일한 입력 또는 여러 입력 중 하나)이거나, 제1 수량은 제2 수량과 동일한 값을 가지거나 제 2 수량과 동일할 수 있다(예를 들어, 메모리 내의 동일한 위치 또는 위치들에 저장됨).
비록 용어 "제1", "제2", "제3" 등이 본 명세서에서 다양한 소자들, 구성요소들, 영역들, 계층들 및/또는 섹션들을 설명하기 위해 사용될 수 있으며, 이러한 소자들, 구성요소들, 영역들, 계층들 및/또는 섹션들은 이들 용어로 제한되지 않음이 이해될 것이다. 이러한 용어들는 하나의 소자, 구성요소, 영역, 계층 또는 섹션을 다른 소자, 구성요소, 영역, 레이어 또는 섹션과 구별하는 데만 사용된다. 따라서, 본 명세서에서 언급된 제1 소자, 구성요소, 영역, 계층 또는 섹션은 본 발명의 개념의 사상 및 범위를 벗어나지 않고 제2 소자, 구성요소, 영역, 계층 또는 섹션으로 지칭될 수 있다.
본 명세서에서 사용 된 용어는 특정 실시예를 설명하기위한 것이며 본 발명을 제한하려는 의도가 아니다. 본 명세서에서 사용되는 용어 "실질적으로", "약" 및 이와 유사한 용어는 정도(degree)의 용어가 아니라 근사값의 용어로 사용되며, 당업자에 의해 인지될 수 있는 측정된 또는 계산된 값의 고유한 편차를 고려하도록 의도된 것이다.
본 명세서에서 사용 된 바와 같이, 단수 형태 "a"및 "an"은 문맥상 명백하게 달리 나타내지 않는 한 복수 형태도 포함하도록 의도된다. 본 명세서에서 사용될 때 "포함한다" 및/또는 "포함하는"이라는 용어는 언급된 특징, 정수, 단계, 동작, 소자 및/또는 구성요소의 존재를 특정하지만 하나 이상의 다른 특징, 정수, 단계, 동작, 소자, 구성요소 및/또는 그 그룹의 존재 또는 추가를 배제하지는 않는다는 것이 또한 이해될 것이다. 본 명세서에서 사용되는 용어 "및/또는"은 하나 이상의 연관되어 열거된 항목들의 하나 이상의 임의의 및 모든 조합을 포함한다. "적어도 하나의"와 같은 표현은 소자들의 목록 앞에 올 때 목록 전체 소자들을 변경하며, 목록의 개별 소자를 변경하지 않는다. 또한, 본 발명의 실시예를 설명할 때 "할 수 있다(may)"라는 용어는 "본 개시의 하나 이상의 실시예들"을 나타낸다. 또한, "예시적인"이라는 용어는 예 또는 예시를 나타내는 것으로 의도된다. 본 명세서에서 사용되는 "사용하다", "사용하여", "사용된"이라는 용어는 각각 "활용하다", "활용하여"및 "활용된"라는 용어와 동의어로 간주될 수 있다.
소자 또는 계층이 다른 소자 또는 계층 "에 위치함", "에 연결됨", "에 결합됨" 또는 "에 인접한"것으로 언급될 때, 상기 소자 또는 계층이 다른 소자 또는 계층에 직접 위치하거나, 연결되거나 결합되거나, 인접한 것이거나, 하나 이상의 개재 소자 또는 계층이 존재할 수 있다. 반대로, 소자 또는 계층이 다른 소자 또는 계층에 "바로 위에", "에 직접 연결됨", "에 직접 결합됨" 또는 "에 바로 인접함"이라고 언급될 때, 개재하는 소자 또는 계층이 존재하지 않는다.
본 명세서에서 인용된 임의의 수치 범위는 인용된 범위 내에 포함된 동일한 수치 정확성의 모든 하위 범위를 포함하도록 의도된다. 예를 들어, "1.0 내지 10.0"의 범위 또는 "1.0과 10.0 사이"의 범위는 언급된 최소값 1.0과 언급된 최대값 10.0 사이의(이들을 포함함), 즉 1.0 이상의 최소값 및 10.0 이하의 최대 값을 갖는 모든 하위범위들 예컨대, 2.4 내지 7.6의 범위를 포함한다. 본 명세서에서 언급된 임의의 최대 수치 제한은 그 안에 포함된 모든 더 낮은 수치 제한을 포함하도록 의도되고, 본 명세서에 언급된 임의의 최소 수치 제한은 그 안에 포함된 모든 더 높은 수치 제한을 포함하도록 의도된다.
메모리 자원을 관리하는 시스템 및 방법의 예시적인 실시예가 본 명세서에서 구체적으로 설명되고 예시되었지만, 많은 수정 및 변형이 당업자에게 명백할 것이다. 따라서, 본 개시의 원리에 따라 구성된 메모리 자원을 관리하는 시스템 및 방법은 본 명세서에서 구체적으로 설명된 것과 다르게 구현될 수 있음을 이해해야한다. 본 발명은 또한 청구범위 및 그 등가물에서 정의된다.

Claims (10)

  1. 키들을 밸류 어드레스들로 매핑하기 위한 해시를 포함하는 영구 키-밸류 스토리지 장치의 동작 방법에 있어서,
    제1 키-밸류 수집(first key-value collection)에서, 제1 키를 액세스하기 위한 명령어인 제1 명령어를 수신하는 단계;
    상기 영구 키-밸류 스토리지 장치의 명령어 로그에 상기 제1 명령어를 기록하는 단계; 및
    상기 명령어 로그에 기록된 명령어들이 임계치보다 큰 이상인 경우, 상기 명령어 로그에 기록된 상기 명령어들을 기반으로, 상기 영구 키-밸류 스토리지 장치의 베이스 페이지로부터 키들의 오프셋을 나타내는 비트맵 상기 해시를 업데이트하는 단계를 포함하는 동작 방법.
  2. 제 1 항에 있어서,
    상기 해시는 충돌(collisions)을 피하도록 구성된 해시 함수인 동작 방법.
  3. 제 1 항에 있어서,
    상기 명령어 로그에 상기 제1 명령어를 기록하는 단계는 상기 명령어 로그의 제1 위치에 상기 제1 명령어를 기록하는 단계를 포함하고,
    상기 동작 방법은:
    상기 제1 키-밸류 수집에서, 제2 밸류를 액세스하기 위한 명령어인 제2 명령어를 수신하는 단계; 및
    상기 명령어 로그의 제2 위치에 상기 제1 위치의 포인터와 함께 상기 제2 명령어를 기록하는 단계를 포함하는 방법.
  4. 제 3 항에 있어서,
    상기 명령어 로그에 상기 제1 명령어를 기록하는 단계는 테일 포인터 테이블에, 상기 제1 키-밸류 콜렉션에 대응하는 위치의 상기 제1 위치로의 포인터를 저장하는 단계를 포함하는 동작 방법.
  5. 제 4 항에 있어서,
    상기 명령어 로그의 상기 제2 위치에 상기 제2 명령어를 기록하는 단계는 상기 테일 포인터 테이블에, 상기 제1 키-밸류 콜렉션에 대응하는, 상기 위치에 상기 제2 위치로의 포인터를 저장하는 단계를 포함하는 동작 방법.
  6. 제 1 항에 있어서,
    상기 제1 명령어는 Delete 명령어이고,
    상기 방법은 상기 제1 키를 블랙리스트에 추가하는 단계를 더 포함하는 동작 방법.
  7. 제 6 항에 있어서,
    상기 영구 키-밸류 스토리지 장치에 의해, 상기 제1 키를 액세스하기 위한 명령어인 상기 제2 명령어를 수신하는 단계;
    상기 제1 키가 상기 블랙리스트에 존재하는지 판별하는 단계; 및
    상기 제1 키의 부재(absence)를 보고하는 단계를 더 포함하는 동작 방법.
  8. 제 1 항에 있어서,
    상기 명령어 로그에 상기 제1 명령어를 기록하는 단계는 블룸 필터로 상기 제1 키를 추가하는 단계를 포함하는 동작 방법.
  9. 제 8 항에 있어서,
    상기 영구 키-밸류 스토리지 장치에 의해, 상기 제1 키를 액세스하기 위한 명령어인 제2 명령어를 수신하는 단계;
    상기 제1 키가 상기 명령어 로그에 존재하는지 판별하는 단계; 및
    상기 제1 키가 상기 명령어 로그에 존재하는 것으로 판별된 것에 응답하여, 상기 제1 키와 연관된 밸류를 액세스하는 단계를 더 포함하고,
    상기 밸류는 제1 어드레스에 위치하고, 상기 제1 어드레스는 상기 명령어 로그에 상기 제1 키와 함께 저장되는 동작 방법.
  10. 제 9 항에 있어서,
    상기 제1 키가 상기 명령어 로그에 존재하는지 판별하는 단계는:
    상기 블룸 필터를 기반으로, 상기 제1 키가 상기 명령어 로그에 존재할 수 있는지 판별하는 단계를 포함하는 동작 방법.

KR1020220089638A 2021-08-18 2022-07-20 해싱을 사용하는 키 밸류 스토리지 장치 및 그것의 동작 방법 KR20230026946A (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US202163234613P 2021-08-18 2021-08-18
US63/234,613 2021-08-18
US17/506,647 2021-10-20
US17/506,647 US20230054127A1 (en) 2021-08-18 2021-10-20 Key value storage device with hashing

Publications (1)

Publication Number Publication Date
KR20230026946A true KR20230026946A (ko) 2023-02-27

Family

ID=83115587

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020220089638A KR20230026946A (ko) 2021-08-18 2022-07-20 해싱을 사용하는 키 밸류 스토리지 장치 및 그것의 동작 방법

Country Status (4)

Country Link
US (1) US20230054127A1 (ko)
EP (1) EP4137963A1 (ko)
KR (1) KR20230026946A (ko)
CN (1) CN115708080A (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110175176A (zh) * 2019-05-31 2019-08-27 杭州复杂美科技有限公司 一种kv数据库配置方法、查询方法、设备和存储介质
CN117539408B (zh) * 2024-01-09 2024-03-12 华中科技大学 一种存算一体索引系统及键值对存储系统

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10956324B1 (en) * 2013-08-09 2021-03-23 Ellis Robinson Giles System and method for persisting hardware transactional memory transactions to persistent memory
US10831734B2 (en) * 2018-05-07 2020-11-10 Intel Corporation Update-insert for key-value storage interface
US20220035737A1 (en) * 2018-09-27 2022-02-03 Sony Corporation Storage apparatus, high dimensional gaussian filtering circuit, stereo depth calculation circuit, and information processing apparatus

Also Published As

Publication number Publication date
US20230054127A1 (en) 2023-02-23
EP4137963A1 (en) 2023-02-22
CN115708080A (zh) 2023-02-21

Similar Documents

Publication Publication Date Title
JP5996088B2 (ja) 暗号ハッシュ・データベース
US11157372B2 (en) Efficient memory footprint in deduplicated system storing with content based addressing
US9471500B2 (en) Bucketized multi-index low-memory data structures
JP5445682B2 (ja) ストレージシステム
Lu et al. BloomStore: Bloom-filter based memory-efficient key-value store for indexing of data deduplication on flash
KR101977575B1 (ko) 디렉토리 엔트리 조회 장치, 그 방법 및 디렉토리 엔트리 조회 프로그램이 기록된 기록 매체
US10768843B2 (en) Optmizing metadata management in data deduplication
US20140040540A1 (en) Metadata Management For Virtual Volumes
US10565125B2 (en) Virtual block addresses
US9779026B2 (en) Cache bypass utilizing a binary tree
KR20230026946A (ko) 해싱을 사용하는 키 밸류 스토리지 장치 및 그것의 동작 방법
AU2010200866B1 (en) Data reduction indexing
US8225060B2 (en) Data de-duplication by predicting the locations of sub-blocks within the repository
CN113535670B (zh) 一种虚拟化资源镜像存储系统及其实现方法
US11474699B1 (en) Systems and methods for optimizing data management within key value storage
CN109407985B (zh) 一种数据管理的方法以及相关装置
CN112148217B (zh) 全闪存储系统的重删元数据的缓存方法、装置及介质
US20210286768A1 (en) Techniques for data deduplication
Tulkinbekov et al. CaseDB: Lightweight key-value store for edge computing environment
CN113094336B (zh) 基于Cuckoo哈希的文件系统目录管理方法及系统
US11163693B2 (en) Hash-based one-level mapping for storage clusters
US20200019539A1 (en) Efficient and light-weight indexing for massive blob/objects
US10795596B1 (en) Delayed deduplication using precalculated hashes
CN114296630A (zh) 缓存存储器中重复数据删除指纹索引的更新
CN114930725A (zh) 存储系统中的容量缩减