KR102623061B1 - 데이터베이스에서 이터레이터 연산을 수행하기 위한 장치 - Google Patents

데이터베이스에서 이터레이터 연산을 수행하기 위한 장치 Download PDF

Info

Publication number
KR102623061B1
KR102623061B1 KR1020180039216A KR20180039216A KR102623061B1 KR 102623061 B1 KR102623061 B1 KR 102623061B1 KR 1020180039216 A KR1020180039216 A KR 1020180039216A KR 20180039216 A KR20180039216 A KR 20180039216A KR 102623061 B1 KR102623061 B1 KR 102623061B1
Authority
KR
South Korea
Prior art keywords
key
storage device
host
partial
information
Prior art date
Application number
KR1020180039216A
Other languages
English (en)
Other versions
KR20190082652A (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 CN201811515723.XA priority Critical patent/CN110059099A/zh
Publication of KR20190082652A publication Critical patent/KR20190082652A/ko
Application granted granted Critical
Publication of KR102623061B1 publication Critical patent/KR102623061B1/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/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • 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
    • 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
    • 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/24Querying
    • G06F16/242Query formulation
    • G06F16/2425Iterative querying; Query formulation based on the results of a preceding query
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/20Employing a main memory using a specific memory technology
    • G06F2212/202Non-volatile memory
    • G06F2212/2022Flash memory
    • 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)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Computational Linguistics (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

개시된 일 실시 예에 따른 스토리지 장치는, 데이터를 저장하기 위한 메모리 장치, 및 메모리 장치에 저장되는 데이터에 대응하는 벨류(value) 및 벨류를 식별하기 위해 참조되는 키(key)를 호스트로부터 수신하고, 키-벨류 맵핑 정보를 관리하기 위한 컨트롤러를 포함하고, 컨트롤러는, 호스트로부터의 요청에 응답하여, 수신되는 키의 특정 위치에서의 문자와 동일한 문자를 특정 위치와 동일한 위치에서 포함하는 키에 대한 정보를 키-벨류 맵핑 정보를 사용하여 호스트에게 반환할 수 있다.

Description

데이터베이스에서 이터레이터 연산을 수행하기 위한 장치{Apparatus for performing iterator operation in database}
데이터베이스를 관리하기 위한 전자 장치에 관한 것으로, 구체적으로는 키-벨류 인터페이스를 사용하여 데이터를 저장하고 관리하기 위한 스토리지 장치 및 전자 장치에 관한 것이다.
사용자는 필요로 하는 다양한 데이터를 데이터베이스에 요청할 수 있으며, 사용자의 요청에 따라 데이터베이스는 빈번하게 액세스될 수 있다. 예를 들어, 사용자는 오디오, 비디오 데이터와 같은 콘텐츠를 데이터베이스에게 요청할 수 있다.
최근 빅 데이터가 이슈화되면서 트래픽 양은 매우 증가하였다. 따라서, 트래픽 양을 감소시키거나 분산시키기 위해, 데이터를 쉽고 간단하게 저장하기 위한 새로운 데이터베이스가 필요하게 되었다. 예를 들어, 새로운 데이터베이스는 NoSQL(Not only SQL)와 같은 데이터 저장 기술을 사용할 수 있으며 데이터를 키-벨류(key-value) 형태로 저장할 수 있다.
이러한 키-벨류 형태의 데이터는 SSD(Solid State Disk)와 같은 블록 디바이스(block device)에 저장될 수 있다. 그러나, 블록 디바이스를 사용하는 데이터베이스 시스템은, 키를 논리적 주소인LBA(logical block address)로 변환하고, LBA 를 다시 물리적 주소인PBN(physical block number)으로 다시 변환하는 불필요한 맵핑 트랜스레이션(mapping translation)을 발생시킬 수 있다. 이러한 불필요한 맵핑 트랜스레이션이 발생되는 것을 방지하기 위해, 키를 사용하여 바로 스토리지 장치 내의 PBN과 같은 물리적 주소를 획득할 수 있는 키-벨류 디바이스(key-value device)가 사용될 수 있다.
키-벨류 인터페이스를 사용하는 데이터베이스에서 효율적으로 이터레이터(iterator) 연산을 수행하기 위한 장치가 제공될 수 있다.
본 실시 예가 이루고자 하는 기술적 과제는 상기된 바와 같은 기술적 과제로 한정되지 않으며, 이하의 실시 예들로부터 또 다른 기술적 과제들이 유추될 수 있다.
스토리지 장치는 데이터를 저장하기 위한 메모리 장치, 및 상기 메모리 장치에 저장되는 상기 데이터에 대응하는 벨류(value) 및 상기 벨류를 식별하기 위해 참조되는 키(key)를 호스트로부터 수신하고, 키-벨류 맵핑 정보를 관리하기 위한 컨트롤러를 포함하고, 상기 컨트롤러는, 상기 호스트로부터의 요청에 응답하여, 상기 수신하는 키의 특정 위치에서의 문자와 동일한 문자를 상기 특정 위치와 동일한 위치에서 포함하는 키에 대한 정보를 상기 키-벨류 맵핑 정보를 사용하여 상기 호스트에게 반환할 수 있다.
전자 장치는 호스트, 및 데이터를 저장하기 위한 메모리 장치를 포함하는 스토리지 장치를 포함하고, 상기 스토리지 장치는, 상기 메모리 장치에 저장되는 상기 데이터에 대응하는 벨류(value) 및 상기 벨류를 식별하기 위해 참조되는 키(key)를 상기 호스트로부터 수신하고, 키-벨류 맵핑 정보를 관리하기 위해 구성되고, 상기 호스트로부터의 요청에 응답하여 상기 수신하는 키의 특정 위치에서의 문자와 동일한 문자를 상기 특정 위치와 동일한 위치에서 포함하는 키에 대한 정보를 상기 키-벨류 맵핑 정보를 사용하여 상기 호스트에게 반환할 수 있다.
전자 장치는 호스트, 및 상기 호스트로부터 키를 매개변수로 하는 커맨드를 수신하는 스토리지 장치를 포함하고, 상기 호스트는, 상기 키의 특정 위치에서의 문자와 동일한 문자를 상기 특정 위치와 동일한 위치에서 포함하는 키에 대한 정보를 상기 스토리지 장치로부터 수신할 수 있다.
도1은 일 실시 예에 따른 시스템의 블록도를 나타낸다.
도2는 일 실시 예에 따른 이터레이터 연산을 나타낸다.
도3은 일 실시 예에 따라 도1의 시스템의 구체적인 실시 예를 나타낸다.
도4는 일 실시 예에 따라 도3의 시스템에서 수행되는 이터레이터 연산을 나타낸다.
도5는 일 실시 예에 따라 부분 키-벨류 맵핑 정보를 사용하여 이터레이터 연산을 수행하는 블록도를 나타낸다.
도6은 일 실시 예에 따라 부분 키-벨류 맵핑 정보를 사용하기 위해 호스트와 스토리지 장치 사이에서 전달되는 정보를 나타낸다.
도7은 일 실시 예에 따라 부분 키-벨류 맵핑 정보를 사용하기 위해 필요한 정보들을 나타낸다.
도 8은 일 실시 예에 따른 스토리지 장치를 포함하는 전자 시스템의 예시적인 구성을 보여주는 블록도이다.
도 9은 일 실시 예들에 따른 전자 회로를 채용하는 전자 장치의 예시적인 구성 및 그것의 인터페이스들을 나타낸 블록도이다.
도10은 일 실시 예에 따라, 키-벨류 인터페이스를 사용하는 데이터베이스에서 이터레이터 연산을 수행하기 위한 방법의 흐름도를 나타낸다.
아래에서, 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자들(이하, 통상의 기술자들)이 본 발명을 용이하게 실시할 수 있도록, 첨부되는 도면들을 참조하여 몇몇 실시 예가 명확하고 상세하게 설명될 것이다.
도1은 일 실시 예에 따른 시스템의 블록도를 나타낸다.
시스템(100)은 데이터를 저장하고 저장한 데이터를 관리하여 사용자에게 필요한 정보를 제공할 수 있다. 일 실시 예에 따른 시스템(100)은, 데이터를 저장하기 위한 데이터베이스 자체를 의미할 수도 있으며, 저장된 데이터가 일관되고 무결한 상태로 유지되도록 데이터베이스를 관리하는 데이터베이스 관리 시스템을 의미할 수도 있으나 이에 제한되지 않는다. 일 실시 예에 따라, 시스템(100)은 하나 이상의 전자 장치 또는 사용자 장치가 될 수 있다. 전자 장치는 퍼스널 컴퓨터(PC)이거나, 노트북 컴퓨터, 휴대폰, PDA(Personal Digital Assistant), 또는 카메라 등과 같은 모바일 전자 장치일 수 있으나 이에 제한되지 않는다.
시스템(100)은 호스트(host, 120) 및 스토리지 장치(140)를 포함할 수 있다. 호스트(120)와 스토리지 장치(140)는 상호 간에 통신을 하면서 데이터를 관리할 수 있다. 예를 들어, 호스트(120)는, 스토리지 장치(140)에게 데이터를 요청하거나, 스토리지 장치(140)에 데이터를 저장할 수 있다. 또한, 호스트(120)는 스토리지 장치(140)에 저장되어 있는 데이터를 삭제할 수도 있다.
호스트(120)는, 하나 이상의 전자 회로, 칩, 장치의 동작들에 따라, 호스트(120)의 사용자에게 다양한 서비스를 제공할 수 있다. 일 실시 예에 따른 호스트(120)는, 호스트(120)의 사용자로부터 수신된 명령을 처리하기 위해 다양한 연산을 수행할 수 있고, 호스트(120)의 사용자에게 연산 결과를 제공할 수 있다. 일 실시 예에 따른 호스트(120)는 운영 체제, 어플리케이션 등을 포함할 수 있다. 일 실시 예에 따른 호스트(120)는 전용 논리 회로(예컨대, FPGA(Field Programmable Gate Array), ASICs(Application Specific Integrated Circuits) 등)를 포함하는 연산 프로세서(예를 들어, CPU(Central Processing Unit), GPU(Graphic Processing Unit), AP(Application Processor) 등)를 포함할 수 있으나 이에 제한되지 않는다.
호스트(120)는 키-벨류 인터페이스(key-value interface)를 사용하여 스토리지 장치(140)에게 특정 데이터에 대한 다양한 연산을 수행하도록 요청할 수 있다. 키-벨류 인터페이스(key-value interface)를 사용한 호스트-스토리지 장치 내에서의 다양한 연산은 상세히 후술한다.
일 실시 예에 따른 호스트(120)는, 스토리지 장치(140)와 별개의 전자 장치일 수 있다. 예를 들어, 호스트(120)는 이동 통신 단말기, 데스크탑 컴퓨터, 노트북 컴퓨터, 태블릿 컴퓨터, 스마트 폰, 웨어러블(Wearable) 장치 등과 같은 다양한 사용자 장치 중 어느 하나일 수 있다. 또는, 호스트(120)는 워크스테이션, 또 다른 서버, 또는 자동차 중 어느 하나일 수 있다.
일 실시 예에 따른 호스트(120)는 스토리지 장치(140)와 함께 단일의 전자 장치에 포함될 수 있다. 이러한 예에서, 호스트(120)는 연산 프로세서 그 자체일 수 있다.
스토리지 장치(140)는 메모리 장치(146)에 저장되는 데이터에 대응하는 벨류 및 벨류를 식별하기 위해 참조되는 키를 호스트(120)로부터 수신할 수 있다. 스토리지 장치(140)는 컨트롤러(142)와 데이터를 저장하기 위한 메모리 장치(146)를 포함할 수 있다. 예를 들어, 메모리 장치(146)는 데이터를 저장하기 위한 적어도 하나의 서브 메모리 장치를 포함할 수 있다.
컨트롤러(142)는 호스트(120)로부터의 요청에 응답하여 메모리 장치(146)의 동작들을 관리하고 제어할 수 있다. 또한, 컨트롤러(142)는 메모리 장치(146)에 저장되는 데이터에 대응하는 벨류 및 벨류를 식별하기 위해 참조되는 키를 호스트(120)로부터 수신할 수 있다. 예를 들어, 컨트롤러(142)는 키에 대한 정보를 매개 변수로 하는 다양한 커맨드를 호스트(120)로부터 수신할 수 있다. 컨트롤러(142)는 키-벨류 맵핑 정보를 관리할 수 있다. 키-벨류 맵핑 정보에 대해서는 상세히 후술한다.
일 실시 예에 따른 컨트롤러(142)는 복수의 채널을 통해 메모리 장치(146)와 연결될 수 있다. 컨트롤러(142)는 호스트(120)로부터의 다양한 요청에 응답하여 동작을 수행하기 위한 하드웨어 또는 소프트웨어 장치(미도시)를 포함할 수 있다. 일 실시 예에 따른 컨트롤러(142)는 DRAM(Dynamic Random Access Memory), SRAM(Static Random Access Memory), SDRAM(Synchronous DRAM)과 같은 휘발성 메모리를 포함할 수 있다.
일 실시 예에 따른 컨트롤러(142)는 적어도 하나의 프로세서(미도시)를 더 포함할 수 있다. 프로세서는 스토리지 장치(140) 내의 전반적인 동작들을 제어하기 위한 다양한 연산을 수행할 수 있다. 일 실시 예에 따른 프로세서는 다양한 산술 연산 및/또는 논리 연산을 수행하도록 구성되는 전용 논리 회로(예를 들어, FPGA, ASICs 등)를 포함할 수 있다.
메모리 장치(146)는 적어도 하나의 비-휘발성 메모리(non-volatile memory)를 포함할 수 있다. 예를 들어, 메모리 장치(146)는 복수의 플래시 메모리(Flash Memory)를 포함할 수 있다. 예를 들어, 메모리 장치(146)는 PRAM, FRAM, MRAM 과 같은 다른 종류의 비-휘발성 메모리를 포함할 수 있다. 메모리 장치(146)는 메모리 셀 당 하나의 비트 데이터 또는2비트 이상의 데이터를 저장할 수 있다. 또한, 메모리 장치(146)를 구성하는 비-휘발성 메모리는 3차원 구조의 메모리 셀 어레이를 포함할 수도 있다. 다만, 스토리지 장치(140)는 데이터를 저장하기 위한 어떠한 유형의 메모리 장치도 포함할 수 있으며 이에 제한되지 않는다.
일 실시 예에 따른 호스트(120)는 다양한 연산을 수행하도록 스토리지 장치(140)에게 요청하기 위해, 키에 대한 정보를 매개변수로 하는 다양한 커맨드를 스토리지 장치(140)에게 전송할 수 있다. 키는 문자열일 수 있다. 문자열이란, 하나 이상의 문자를 말하는 것으로, 문자는 컴퓨팅 장치에서 취급하는 어떠한 데이터 타입도 될 수 있다. 예를 들어, 문자열은 하나 이상의 숫자, 비트(bit) 값, 문자 또는 이들의 조합을 포함할 수 있다.
호스트(120)로부터 키에 대한 정보와 요청을 수신한 스토리지 장치(140)는, 키-벨류 맵핑 정보(Key-Value Mapping Information, 144)를 사용하여 수신된 요청에 대응하는 연산을 수행할 수 있다. 이하, 호스트(120)로부터 스토리지 장치(140)로 전달되는 다양한 요청(예를 들어, 커맨드)은 스토리지 장치(140)의 컨트롤러(142)에 의해 수신될 수 있으며, 컨트롤러(142)는 수신되는 요청에 대응하는 연산을 수행하고 수행된 결과를 호스트(120)에게 반환할 수 있다.
키-벨류 맵핑 정보(144)란, 키와 벨류 사이의 대응 관계를 나타내는 정보를 의미할 수 있다. 일 실시 예에 따른, 키-벨류 맵핑 정보(144)는 테이블(Table)의 형태로 관리될 수 있다. 다만, 테이블(144)는 키-벨류 맵핑 정보를 관리하기 위한 일 실시 예일 뿐이며, 키-벨류 맵핑 정보를 관리하기 위한 형태는 다양하게 변경 또는 수정될 수 있다. 일 실시 예에 따른 키-벨류 맵핑 정보(144)는 스토리지 장치(140)의 컨트롤러 메모리 장치에 의해 관리될 수 있다. 예를 들어, 키-벨류 맵핑 정보(144)는 스토리지 장치(140) 내의 컨트롤러(142)의 휘발성 메모리에 저장되어 관리될 수 있다.
일 실시 예에 따른 키-벨류 맵핑 정보(144)는, 키(0xbbb)를 벨류(V2)에 대응하는 데이터를 저장하는 메모리 영역의 주소(address)와 대응시키고, 키(0xfff)를 벨류(Vp)에 대응하는 데이터를 저장하는 메모리 영역의 주소와 대응시키도록 관리될 수 있다. 키-벨류 맵핑 정보(144)는 키와 키에 대응하는 벨류의 메모리 내 저장 위치를 맵핑한 정보를 의미할 수 있다. 일 실시 예에 따른 스토리지 장치(140)는 하나의 벨류를 하나의 키에 대응하도록 키-벨류 맵핑 정보(144)를 관리할 수 있다.
일 실시 예예 따른 호스트(120)는, 스토리지 장치(140)에 키와 함께 읽기 요청(예를 들어, get 또는 read 연산)을 전달할 수 있고, 스토리지 장치(140)는 수신된 키에 기초하여, 수신된 키에 대응하는 주소에 저장된 데이터를 호스트(120)로 출력할 수 있다. 예를 들어, 호스트(120)가 벨류(V1)를 스토리지 장치(140)로부터 읽고자 하는 경우, 호스트(120)는 읽기 명령과 함께 벨류(V1)에 대응하는 키(0xaaa)를 스토리지 장치(140)로 전달할 수 있다. 스토리지 장치(140)는 키-벨류 맵핑 정보(144)의 키(0xaaa)를 참조하여, 벨류(V1)에 대응하는 데이터를 저장하는 메모리 장치(146) 내의 주소를 인지할 수 있다. 스토리지 장치(140)는 인지된 주소로부터 벨류(V1)에 대응하는 데이터를 읽은 다음 벨류(V1)를 호스트(120)로 출력할 수 있다.
일 실시 예에 따른 호스트(120)는, 스토리지 장치(140)에 키와 함께 쓰기 요청(예를 들어, put 또는 write 연산)을 전송할 수 있고, 스토리지 장치(140)는 수신된 키에 기초하여 수신된 키에 대응하는 주소에 데이터를 쓸(또는 저장할) 수 있다. 예를 들어, 호스트(120)가 벨류(V1)를 스토리지 장치(140)에 저장하고자 하는 경우, 호스트(120)는 쓰기 명령과 함께 벨류(V1) 및 벨류(V1)에 대응하는 키(0xaaa)를 스토리지 장치(140)로 전달할 수 있다. 스토리지 장치(140)는 벨류(V1)에 대응하는 데이터를 메모리 장치(146)에 저장할 수 있다. 스토리지 장치(140)는 벨류(V1)에 대응하는 데이터를 저장하는 메모리 장치(146) 내의 주소와 키(0xaaa)를 키-벨류 맵핑 테이블(144)에 저장할 수 있다. 키-벨류 맵핑 정보(144)는 키(0xaaa)가 벨류(V1)에 대응하는 데이터를 저장하는 메모리 영역의 주소와 대응하도록 관리될 수 있다. 일 실시 예에 따른 키-벨류 맵핑 정보(144)는 부분 키-벨류 맵핑 정보가 될 수 있다. 부분 키-벨류 맵핑 정보에 대해서는 상세히 후술한다.
일 실시 예에 따른 호스트(120)는, 스토리지 장치(140)에 키와 함께 삭제 요청(예를 들어, delete, unmap, 또는 erase 연산)을 전달할 수 있고, 스토리지 장치(140)는 수신된 키에 기초하여, 수신된 키에 대응하는 주소에 존재하는 데이터를 삭제할 수 있다. 예를 들어, 호스트(120)가 벨류(V1)를 스토리지 장치(140)에서 삭제하고자 하는 경우, 호스트(120)는 삭제 명령과 함께 벨류(V1)에 대응하는 키(0xaaa)를 스토리지 장치(140)로 전달할 수 있다. 스토리지 장치(140)는 키-벨류 맵핑 정보(144)의 키(0xaaa)를 참조하여, 벨류(V1)에 대응하는 데이터를 저장하고 있는 메모리 장치(146) 내의 주소를 인지하고 인지된 주소에 존재하는 데이터를 삭제할 수 있다.
일 실시 예에 따른 호스트(120)는, 스토리지 장치(140)에 키와 함께 당해 키가 존재하는지 여부를 확인(예를 들어, exist 연산)하는 요청을 전달할 수 있고, 스토리지 장치(140)는 수신된 키에 기초하여 수신된 키에 대응하는 데이터가 존재하는지 여부를 확인할 수 있다. 예를 들어, 호스트(120)는 존재하는지 여부를 확인하라는 명령과 함께 벨류(V2)에 대응하는 키(0xbbb)를 스토리지 장치(140)로 전달할 수 있다. 스토리지 장치(140)는 수신된 키(0xbbb)가 키-벨류 맵핑 정보(144)에 존재하는지 여부를 확인하여 결과를 호스트(120)에게 반환할 수 있다.
일 실시 예에 따른 호스트(120)는, 키와 함께, 키 내의 특정 위치에서의 문자와 동일한 문자를 상기 특정 위치와 동일한 위치에서 포함하는 키를 모두 찾아서 반환하도록 스토리지 장치(140)에게 요청할 수 있다. 특정 위치란, 키가 하나 이상의 문자로 구성된 문자열인 경우, 문자열 내의 특정 문자의 위치를 의미할 수 있다. 특정 위치는 호스트(120)에 의해 지정된 키 내부의 위치를 의미할 수 있다. 예를 들어, 키가 6개의 문자로 구성된 “ABCDEF”인 경우 특정 위치는 세 번째 위치일 수 있으며 세 번째 위치에는 문자 “C”가 존재한다. 예를 들어, 키가 8개의 비트로 구성된 “00111100”인 경우 특정 위치는 6 번째와 7번째 위치일 수 있으며 각각 비트 값 “1” 과 “0”이 존재한다. 특정 위치는 키 내의 하나 이상의 위치를 포함할 수 있으며 하나 이상의 위치는 서로 연속되거나 떨어져있을 수 있다.
스토리지 장치(140)는, 키의 특정 위치에서의 문자가 호스트(120)로부터 수신되는 키의 특정 위치에서의 문자와 동일한 모든 키에 대한 정보를 반환하라는 요청을 호스트(120)로부터 수신할 수 있다. 예를 들어, 키의 전체 문자열이 “ABCDEFGH”이면, 특정 위치는 세 번째 위치와 네 번째 위치가 될 수 있으며 특정 위치에서의 문자는 “C”와 D” 가 될 수 있다. 스토리지 장치(140)는 키-벨류 맵핑 정보(144)를 참조하여, 호스트(120)로부터 수신된 키와 특정 위치에서의 문자가 동일한 모든 키(예를 들어, 세 번째 위치의 문자가 “C”이고 네 번째 위치의 문자가 “D”인 모든 키)들을 탐색한 다음 탐색된 모든 키들에 대한 정보를 호스트(120)로 반환할 수 있다. 레퍼런스 키(즉, 호스트(120)로부터 수신된 키)의 특정 위치에서의 문자와 동일한 문자를 상기 특정 위치와 동일한 위치에서 포함하는 모든 키에 대한 정보를 획득하여 호스트(120)에게 반환하는 연산을 이터레이터(iterator) 연산이라고 한다. 이터레이터 연산은 도2를 참조하여 상세히 후술한다.
도 2는 일 실시 예에 따른 이터레이터 연산을 나타낸다.
도2의 시스템(200)은 이터레이터 연산을 수행하기 위한 도1의 시스템(100)의 구체적인 실시 예를 나타낸다. 따라서, 이하 생략된 내용이라 하더라도 도1의 시스템(100)에 관하여 기술된 내용은 도2의 시스템(200)에도 적용될 수 있다. 호스트(220), 스토리지 장치(240), 컨트롤러(242), 키-벨류 맵핑 정보(244), 및 메모리 장치(246) 는 각각 도1의 호스트(120), 스토리지 장치(140), 컨트롤러(142), 키-벨류 맵핑 정보(144), 및 메모리 장치(146)에 대응될 수 있다.
상술한 바와 같이 이터레이터(iterator) 연산이란, 키의 특정 위치에서의 문자가 레퍼런스 키(즉, 호스트로부터 수신된 키)의 특정 위치의 문자와 동일한 모든 키를 탐색하는 연산을 의미한다. 이터레이터 연산은 데이터베이스의 공간적 효율성을 위해 사용될 수 있다. 일 실시 예에 따른 호스트(220)는, 이터레이터 연산의 결과에 기초하여 재압축(Recompression), 가비지 컬렉션(Garbage Collection), 리빌드(Rebuild), 일관성 검사(Consistency Check) 등을 수행할 수 있다.
일 실시 예에 따른 호스트(220)는, 스토리지 장치(240)에게 키 “XXCDXXXX”와 함께, “XXCDXXXX”인 모든 키에 대한 정보를 요청할 수 있다. 키 내의 “X”는 임의의 문자를 의미할 수 있으며, 전달되는 키 “XXCDXXXX”는 세 번째 위치와 네 번째 위치의 문자열이 각각 “C”와 “D”인 모든 키를 의미할 수 있다. 즉, 호스트(220)는 세 번째와 네 번째 위치의 문자가 각각 “C”와 D” 인 모든 키들에 대한 정보를 요청하는 이터레이터 커맨드를 스토리지 장치(240)에게 전달할 수 있다. 이터레이터 연산을 요청 받은 스토리지 장치(240)는 키-벨류 맵핑 정보(244)를 참조하여 세 번째와 네 번째 위치의 문자가 각각 “C” 와 “D” 인 모든 키들에 대한 정보를 탐색하여 호스트(220)에게 반환할 수 있다. 예를 들어, 스토리지 장치(240)는 호스트(220)에게 “ABCDEFGH”, “ABCDFFFF”, “ABCDGGGG”, “ABCDHJKF”의 네 개의 키에 대한 정보를 전달할 수 있다.
따라서 호스트(220)는 키를 논리적 주소 또는 물리적 주소로 변환하는 맵핑 정보를 관리할 필요 없이, 스토리지 장치(240)에게 이터레이터 연산을 요청할 수 있다. 또한, 호스트(220)는 호스트(220)에서 실제로 사용하는 키를 별도의 변환 없이 스토리지 장치(240)에게 전달하여 이터레이터 연산을 요청하고, 스토리지 장치(240)는 자신이 관리하는 맵핑 정보를 참조하여 이터레이터 연산을 수행할 수 있다.
도3은 일 실시 예에 따라 도1의 시스템의 구체적인 실시 예를 나타낸다.
도3의 시스템(300)은 이터레이터 연산을 수행하기 위한 도1의 시스템(100)의 구체적인 실시 예이다. 따라서, 이하 생략된 내용이라 하더라도 도1의 시스템(100)에 관하여 기술된 내용은 도3의 시스템(300)에도 적용될 수 있다. 호스트(320), 스토리지 장치(340), 컨트롤러(342), 및 메모리 장치(346)는 각각 도1의 호스트(120), 스토리지 장치(140), 컨트롤러(142), 및 메모리 장치(146)와 대응될 수 있다. 일 실시 예에 따른 메모리 장치(346)는 복수의 비-휘발성 메모리(3460, 3461, 3462, 3463, 3464)를 포함할 수 있다.
설명의 편의를 위해 메모리 장치(346)가 복수의 비-휘발성 메모리로 구성되는 것으로 도시하였으나, 메모리 장치(346)는 데이터를 저장하기 위한 어떠한 형태의 메모리 장치(예를 들어, 휘발성 메모리)로도 구성될 수 있다.
일 실시 예에 따른 시스템(300)은 이터레이터 연산을 위해, 호스트(320) 자체에 저장된 키-벨류 맵핑 정보를 사용할 수 있다. 예를 들어, 호스트(320) 내의 DRAM 에 저장된 키-벨류 맵핑 정보를 참조하여, 이터레이터 커맨드에 대한 응답이 결정될 수 있다.
그러나, 도2를 참조하여 상술한 바와 같이, 키-벨류 맵핑 정보는 스토리지 장치(340)에서 관리될 수 있다. 키-벨류 맵핑 정보가 스토리지 장치(340)에서 관리되는 경우, 스토리지 장치(340)의 제한적인 리소스로 인해 호스트(320)에서 사용되는 키의 전체 영역에 대한 맵핑 정보를 관리하는 것이 어려울 수 있다. 예를 들어, 호스트(320)에서 사용되는 키의 전체 사이즈가 기준 값(예를 들어, 스토리지 장치에 의해 처리될 수 있는 키의 최대 사이즈)보다 큰 경우, 스토리지 장치(340)에서 키의 전체 영역과 벨류의 주소를 맵핑하여 관리하는 것이 어려울 수 있다.
예를 들어, 호스트(320)에서 사용되는 키의 전체 사이즈가 255 바이트인 경우, 스토리지 장치(340)는 호스트(320)보다 훨씬 리소스가 제한적일 수 있으므로, 키-벨류 맵핑 정보에 키의 전체 영역(즉, 255바이트 사이즈의 키)에 대한 정보를 저장하는 것이 어려울 수 있다. 따라서, 호스트(320)로부터 이터레이터 연산을 요청 받은 스토리지 장치(340)는 메모리 장치(346)를 모두 탐색하여 데이터가 실제로 저장된 영역에 접근하여야 키의 전체 영역에 대한 정보를 획득할 수 있다. 예를 들어, 호스트(320)가 스토리지 장치(340)에 “XXCDXXXX”인 키를 전달하면서, 키 내의 세 번째와 네 번째의 위치에 존재하는 문자가 “XXCDXXXX”와 동일한 모든 키들에 대한 정보를 스토리지 장치(340)에 요청하는 경우, 컨트롤러(342)는 모든 비-휘발성 메모리(3460, 3461, 3462, 3463, 3464)에 접근한 다음, 세 번째 위치의 문자가 “C”이고 네 번째 위치의 문자가 “D” 인 모든 키를 탐색할 수 있다. 이러한 실시 예에서, 스토리지 장치(340)는 이터레이터 연산을 수행하기 위해, 메모리 장치(346) 내의 메모리 장치(3460, 3461, 3462, 3463, 3464)에 접근하여 탐색을 수행할 수 있다.
일 실시 예에 따른 스토리지 장치(340)는 키의 전체 영역이 아닌, 키의 일부 영역인 부분 키(partial key)와 벨류 주소의 대응 관계를 나타내는 부분 키-벨류 맵핑 정보를 사용할 수 있다. 이하, 설명의 편의를 위해, 호스트(320)에서 실제로 사용하는 키의 전체 영역을 전체 키라고 하고, 스토리지 장치(340)에서 맵핑 정보를 관리하기 위해 사용되는 키의 일부 영역을 부분 키라고 한다. 예를 들어, 전체 키가 “ABCDEFGH” 인 경우, 부분 키는 “CDEFGH”가 될 수 있다.
일 실시 예에 따라, 부분 키-벨류 맵핑 정보는 스토리지 장치(340)의 휘발성 메모리 장치(343)에서 관리될 수 있다. 이러한 실시 예에서, 스토리지 장치(340)는 SSD 이고, 부분 키-벨류 맵핑 정보는 SSD 내의 DRAM(343)에 저장되고, 전체 키에 대한 정보는 SSD 내의 복수의 플래시 메모리(3460, 3461, 3462, 3463, 3464)에 저장될 수 있으나 이에 제한되지 않는다.
따라서, 스토리지 장치(340)는 호스트(320)에서 실제로 사용하는 키에 대해 해싱과 같은 별도의 변환 없이 전체 키의 일부 영역만을 사용하여 키-벨류 맵핑 정보를 관리할 수 있다. 이하, 도4를 참조하여 부분 키-벨류 맵핑 정보를 사용하여 이터레이터 연산을 수행하는 시스템을 구체적으로 설명한다.
도4는 일 실시 예에 따라 도3의 시스템에서 수행되는 이터레이터 연산을 나타낸다.
도4의 시스템(400)은 도3의 시스템(300)에서 수행되는 이터레이션 연산의 일 실시 예이다. 따라서, 이하 생략된 내용이라 하더라도 도3의 시스템(300)에 관하여 기술된 내용은 도4의 시스템(400)에도 적용될 수 있다. 호스트(420) 및 스토리지 장치(440)는 각각 도3의 호스트(320) 및 스토리지 장치(340)에 대응될 수 있다. 또한, 휘발성 메모리 장치(443)는 도3의 휘발성 메모리 장치(343)에, 비-휘발성 메모리 장치(446)는 도3의 복수의 비-휘발성 메모리 장치(3460, 3461, 3462, 3463, 3464)들 중 적어도 하나와 대응될 수 있다.
일 실시 예에 따라, 휘발성 메모리 장치(443)는 부분 키와 벨류 주소의 맵핑 정보를 관리하는 부분 키-벨류 맵핑 정보(444)를 관리 또는 저장할 수 있다. 비-휘발성 메모리 장치(446)는 하나 이상의 블록들로 구성될 수 있으며 하나의 블록은 하나 이상의 페이지들로 구성될 수 있다. 비-휘발성 메모리 장치(446)는 사용자가 요청한 데이터가 실제로 저장되는 물리적인 영역이다.
일 실시 예에 따른 호스트(420)는 스토리지 장치(440)에게 키 “XXCDXXXX”와 함께, 키의 세 번째 위치와 네 번째 위치에서의 값이 전송되는 키 “XXCDXXXX”의 세 번째 위치와 네 번째 위치의 값이 동일한 모든 키에 대한 정보를 요청할 수 있다.
이터레이션 연산에 대한 요청을 수신한 컨트롤러(442)는 휘발성 메모리 장치(443) 내의 부분 키-벨류 맵핑 정보(444)를 참조할 수 있다. 도4에서 부분 키-벨류 맵핑 정보(444)는 좌측 열에 부분 키(430)를, 우측 열에 벨류 주소(450)를 기록하는 테이블의 형태로 나타내었으나 이에 제한되지 않는다.
컨트롤러(442)는 부분 키-벨류 맵핑 정보(444)의 좌측 열에 기록된 부분 키들을 참조하여, 세 번째와 네 번째 위치의 문자가 각각 “C”와 “D”인 부분 키들을 탐색할 수 있다. 일 실시 예에 따라, 컨트롤러(442)는 탐색을 위해 오프셋 값에 대한 정보를 추가적으로 가지고 있을 수 있다.
오프셋 값은 부분 키를 사용하여 맵핑 정보를 관리하는 스토리지 장치(440)와 전체 키를 사용하는 호스트(420) 사이에 키-벨류 인터페이스를 사용하여 이터레이터 연산이 가능하게 하는 정보 중 하나일 수 있다. 예를 들어, 오프셋 값은 부분 키가 전체 키의 가장 앞의 위치 또는 가장 뒤의 위치로부터 얼마만큼 떨어진 위치로부터 시작되는지를 나타낼 수 있다. 예를 들어, 컨트롤러(442)는 호스트(420)로부터 오프셋 값이 “3”이라는 정보를 수신하고, 부분 키의 첫 번째 위치가 전체 키의 세 번째 위치에 해당함을 알 수 있다. 따라서, 부분 키-벨류 맵핑 정보(444) 내에 저장된 부분 키들의 첫 번째와 두 번째 위치의 문자는 각각 수신된 키의 세 번째와 네 번째 위치의 문자와 비교될 수 있다. 컨트롤러(442)는 좌측 열 중 행(433, 434, 435, 436)에 기록된 부분 키를 이터레이터 연산을 위해 필요한 부분 키로 결정할 수 있다.
컨트롤러(442)는 행(433, 434, 435, 436)의 우측 열에 기록된 벨류 주소만을 참조하여 비-휘발성 메모리 장치(446) 중에서, 이터레이션 연산을 위해 읽기(read)를 수행할 일부 영역을 결정할 수 있다. 일 실시 예에 따른 컨트롤러(442)는 부분 키-벨류 맵핑 정보(444)를 사용하여 PBN(Physical Block Number) 이나 PPN(Physical Page Number)과 같은 물리적 주소(physical address)를 획득하고, 획득된 물리적 주소에 기초하여, 비-휘발성 메모리 장치(446) 중에서 읽기를 수행할 적어도 일부 영역을 결정할 수 있다. 즉, 컨트롤러(442)는 좌측 열의 행 (431, 432, 437)에는 세 번째와 네 번째 위치의 문자가 각각 “C”와 “D”인 부분 키가 기록되어 있지 않으므로, 행(431, 432, 437)의 우측 열에 기록된 벨류 주소가 가리키는 비-휘발성 메모리 영역을 이터레이터 연산을 위한 접근 및 탐색에서 제외시킬 수 있다.
최종적으로 스토리지 장치(440)는 읽기를 수행할 비-휘발성 메모리 장치(446)의 일부 영역으로부터 전체 키(즉, 키의 전체 영역)를 획득하고 획득된 전체 키를 호스트(420)에 반환할 수 있다.
일 실시 예에 따른 스토리지 장치(440)는 부분 키와 벨류 주소의 대응 관계를 나타내는 맵핑 정보만을 관리함으로서, 이터레이터 연산을 위한 맵핑 정보를 효율적으로 관리할 수 있다. 또한, 부분 키-벨류 맵핑 정보를 참조함으로서 이터레이터 연산을 위해 모든 메모리에 접근하고 읽기를 수행할 필요가 없으므로, 호스트(420)로부터 수신한 이터레이터 연산의 요청에 대해 빠르게 응답할 수 있다.
도5는 일 실시 예에 따라 부분 키-벨류 맵핑 정보를 사용하여 이터레이터 연산을 수행하는 블록도를 나타낸다.
호스트(420)는 “XXCDXXXX” 인 모든 키에 대한 정보를 스토리지 장치(440)에게 요청할 수 있다.
요청을 수신한 스토리지 장치(440)는 부분 키-벨류 맵핑 정보(444)를 참조하여 복수의 비-휘발성 메모리들(520, 530, 540, 550) 중 일부 비-휘발성 메모리(530, 540)를 읽기를 수행할 메모리로 결정할 수 있다. 각 비-휘발성 메모리들(520, 530, 540, 550)에는 전체 키에 대한 정보가 기록될 수 있다. 설명의 편의를 위해, 각 비-휘발성 메모리에 기록된 전체 키들 중 일부만을 나타내었다. 예를 들어, 비-휘발성 메모리(520)는 키 “AAAAAAAA”, “AAAAAAAB”, “BBBCAAAA”, “BCAAAAAB” 를 포함할 수 있다.
일 실시 예에 따른 스토리지 장치(440)는 비-휘발성 메모리(530, 540)로부터 전체 키에 대한 정보(“ABCDEFGH”, “GHCDEFGH”, “ABCDAAAA”, “IJCDAAAA”, AACDGGGG”, “ABCDGGGG”, “ABCDHJKF”, “BCCDHJKF”)를 호스트(420)에게 반환할 수 있다.
설명의 편의를 위해 메모리들(520, 530, 540, 550)을 비-휘발성 메모리로 가정하였으나, 메모리들(520, 530, 540, 550)은 휘발성 메모리를 포함한 다른 어떠한 형태의 메모리도 될 수 있다.
도6은 일 실시 예에 따라 부분 키-벨류 맵핑 정보를 사용하기 위해 호스트와 스토리지 장치 사이에서 전달되는 정보를 나타낸다.
일 실시 예에 따라, 스토리지 장치(440)에서 사용되는 부분 키들은 스토리지 장치(440)에서 사용 가능한 키의 최대 사이즈, 이터레이터 연산을 위해 필요한 오프셋, 및 영역 값 중 적어도 하나에 기초하여 결정될 수 있다.
예를 들어, 스토리지 장치(440)에서 맵핑 정보를 관리하기 위해 사용 가능한 키의 최대 사이즈가 6이고, 도4의 호스트(420)에서 사용하는 실제 키, 즉 전체 키의 사이즈가 8이라고 가정한다. 사이즈가 8인 키를 사용하는 호스트(420)가 스토리지 장치(440)에게 키의 세 번째 위치와 네 번째 위치에서의 문자가 전달되는 키 “ABCDEFGH” 의 세 번째 위치와 네 번째 위치의 문자와 동일한 모든 키에 대한 정보를 스토리지 장치(440)에게 요청하는 이터레이션 연산의 경우, 스토리지 장치(440)는 부분 키-벨류 맵핑 정보를 참조하여 결과를 반환할 수 있다.
일 실시 예에 따라, 이터레이터 연산을 위한 부분 키-벨류 맵핑 정보를 준비하기 위해, 스토리지 장치(440)는 호스트(420)에게 스토리지 장치(440)에서 사용 가능한 키의 최대 사이즈 값(660)인 “6”을 호스트(420)에게 전달할 수 있다.
호스트(420)는 이터레이터 연산을 위해 필요한 키 내의 위치가 세 번째 위치 이후에 존재하므로 오프셋 값(670)을 “3”으로 결정할 수 있다. 상술한 바와 같이, 오프셋 값(670)은 부분 키를 사용하여 맵핑 정보를 관리하는 스토리지 장치(440)와 전체 키를 사용하는 호스트(420) 사이에 키-벨류 인터페이스를 사용하여 이터레이터 연산이 가능하게 하는 정보일 수 있다.
영역 값(680)은 스토리지 장치(440)에서 맵핑 정보를 관리하기 위해 사용할 부분 키의 사이즈로서, 영역 값(680)은 이터레이터 연산을 위해 호스트(420)로부터 수신된 키와 비교가 수행될 키 영역의 사이즈보다는 크거나 같고 최대 사이즈 값(660)보다 작거나 같은 값으로 결정될 수 있다.
도7을 참조하여 보다 구체적으로 설명하면, 호스트(420)에서 실제로 사용되는 전체 키가 “ABCDEFGH” 라면, 이터레이터 연산을 위해 스토리지 장치(440)에서 맵핑 정보를 관리하기 위해 사용되는 부분 키는 “CDEFGH” 가 될 수 있다. 이 경우, 스토리지 장치(440)는 최대 사이즈 값(710)을 “6”으로 결정하여 호스트(420)로 전달하고, 호스트(420)는 오프셋 값(770)을 “3”으로 결정하여 스토리지 장치(440)에게 전달할 수 있다. 이 경우, 이터레이터 연산을 위해 비교가 수행되는 특정 위치는 세 번째 위치(오프셋 값(770)에 따라) 이후에서 시작하여 여덟 번째 위치(오프셋 값(770) + 최대 사이즈 값(710) - 1)보다 작거나 같은 위치에 존재할 수 있다. 영역 값(780)은 최대 사이즈 값(610)인 6보다는 작거나 같고 비교를 수행할 영역(즉, 세 번째 위치와 네 번째 위치) 값(780)인 2보다는 크거나 같도록 결정될 수 있다.
일 실시 예에 따라, 이터레이터 연산을 위해 부분 키-벨류 맵핑 정보 내의 부분 키와 비교가 수행되는 특정 위치는 스토리지 장치(440)에서 맵핑 정보를 관리하기 위해 사용 가능한 키의 최대 사이즈 값(760)를 고려하여 결정될 수 있다. 예를 들어, 스토리지 장치(440)에서 사용 가능한 키의 최대 사이즈 값(760)이 K라면 이터레이터 연산을 요청하기 위한 특정 위치는 키의 N번째 위치부터 N+K-1번째 위치까지 중 적어도 하나의 위치를 포함할 수 있다.
또한 일 실시 예에 따라, 이터레이터 연산을 위해 부분 키-벨류 맵핑 정보 내의 부분 키와 비교가 수행되는 특정 위치는 오프 셋 값(770)을 고려하여 결정될 수 있다. 예를 들어, 오프 셋 값(770)이 L이라면 이터레이터 연산을 요청하기 위한 특정 위치는 전체 키의 L번째 위치에서부터 시작할 수 있다. 정리하면, 예를 들어, 스토리지 장치(440)에서 사용 가능한 키의 최대 사이즈 값(760)이 K 이고 오프 셋 값(770)이 L이라면, 이터레이터 연산을 요청하기 위한 특정 위치는 호스트에서 사용되는 키의 L번째 위치부터 L+K-1 번째 위치 중 적어도 하나의 위치가 될 수 있다. 역으로 말하면, 이터레이터 연산을 위해 부분 키-벨류 맵핑 정보 내의 부분 키와 비교가 수행되는 특정 위치가 Y 번째 위치 이후에 존재한다면, 오프셋 값(770)은 Y 보다 작거나 같은 값으로 결정됨을 의미할 수 있다.
시스템(400)은 스토리지 장치에서 사용하는 키의 최대 사이즈 값(760), 이터레이터 연산을 위해 필요한 오프셋 값(770), 및 영역 값(780) 중 적어도 하나에 기초하여, 맵핑 정보를 관리하기 위해 스토리지 장치(440)에서 사용될 부분 키를 결정하고 부분 키-벨류 맵핑 정보를 구성할 수 있다. 다만, 호스트(420)에서 사용되는 전체 키의 사이즈와 스토리지 장치(440)에서 사용되는 부분 키의 사이즈는 상술한 실시 예에 제한되지 않는다.
일 실시 예에 따라, 스토리지 장치(440)에서 사용될 부분 키를 결정하기 위한 적어도 하나의 정보(예를 들어, 760, 770, 및 780)는, 데이터베이스를 관리하기 위한 키-벨류 맵핑 정보의 초기화 단계 또는 키-벨류 맵핑 정보가 삭제(Map Erase)된 직후에 결정될 수 있다.
스토리지 장치(440)에서 사용될 부분 키를 결정하기 위한 방법은 상술한 실시 예에 제한되지 않으며 다양한 방법에 따라 결정될 수 있다.
도 8은 일 실시 예에 따른 스토리지 장치를 포함하는 전자 시스템의 예시적인 구성을 보여주는 블록도이다.
전자 시스템(1000)은 메인 프로세서(1101), 워킹 메모리(1200), 스토리지 장치(1300), 통신 블록(1400), 유저 인터페이스(1500), 및 버스(1600)를 포함할 수 있다. 예로서, 전자 시스템(1000)은 데스크톱(Desktop) 컴퓨터, 랩톱(Laptop) 컴퓨터, 태블릿(Tablet) 컴퓨터, 스마트폰, 웨어러블(Wearable) 장치, 비디오 게임기(Video Game Console), 워크스테이션(Workstation), 서버(Server), 전기 자동차 등과 같은 전자 장치들 중 하나일 수 있다. 일 실시 예에 따른 전자 시스템(1000)은 도1내지 도7을 참조하여 상술한 시스템 중 어느 하나를 포함할 수 있다. 예를 들어, 전자 시스템(1000)은 도4의 시스템(400)을 포함할 수 있으나 이에 제한되지 않는다.
메인 프로세서(1101)는 전자 시스템(1000)의 전반적인 동작들을 제어할 수 있다. 메인 프로세서(1101)는 다양한 종류의 산술 연산들 및/또는 논리 연산들을 처리할 수 있다. 이를 위해, 메인 프로세서(1101)는 전용(Special-purpose) 회로(예컨대, FPGA(Field Programmable Gate Array), ASICs(Application Specific Integrated Circuits) 등)를 포함할 수 있다. 예로서, 메인 프로세서(1101)는 하나 이상의 프로세서 코어를 포함할 수 있고, 범용 프로세서, 전용 프로세서, 또는 어플리케이션 프로세서(Application Processor)로 구현될 수 있다.
워킹 메모리(1200)는 전자 시스템(1000)의 동작에 이용되는 데이터를 저장할 수 있다. 예로서, 워킹 메모리(1200)는 메인 프로세서(1101)에 의해 처리된 또는 처리될 데이터를 일시적으로 저장할 수 있다. 예로서, 워킹 메모리(1200)는 DRAM(Dynamic RAM), SDRAM(Synchronous RAM) 등과 같은 휘발성 메모리, 및/또는 PRAM(Phase-change RAM), MRAM(Magneto-resistive RAM), ReRAM(Resistive RAM), FRAM(Ferro-electric RAM) 등과 같은 불휘발성 메모리를 포함할 수 있다.
스토리지 장치(1300)는 적어도 하나의 메모리 장치 및 컨트롤러를 포함할 수 있다. 스토리지 장치(1300)의 메모리 장치는 전력 공급에 관계없이 데이터를 저장할 수 있다. 예로서, 스토리지 장치(1300)는 플래시 메모리, PRAM, MRAM, ReRAM, FRAM 등과 같은 불휘발성 메모리를 포함할 수 있다. 예로서, 스토리지 장치(1300)는 SSD(Solid State Drive), 카드 스토리지, 임베디드(Embedded) 스토리지 등과 같은 스토리지 매체를 포함할 수 있다.
통신 블록(1400)은 전자 시스템(1000)의 외부 장치/시스템과 통신할 수 있다. 예로서, 통신 블록(1400)은 LTE(Long Term Evolution), WIMAX(Worldwide Interoperability for Microwave Acess), GSM(Global System for Mobile communications), CDMA(Code Division Multiple Access), Bluetooth, NFC(Near Field Communication), Wi-Fi(Wireless Fidelity), RFID(Radio Frequency Identification) 등과 같은 다양한 무선 통신 규약 중 적어도 하나, 및/또는 TCP/IP(Transfer Control Protocol/Internet Protocol), USB(Universal Serial Bus), Firewire 등과 같은 다양한 유선 통신 규약 중 적어도 하나를 지원할 수 있다.
유저 인터페이스(1500)는 사용자와 전자 시스템(1000) 사이의 통신을 중재할 수 있다. 예로서, 유저 인터페이스(1500)는 키보드, 마우스, 키패드, 버튼, 터치 패널, 터치 스크린, 터치 패드, 터치 볼, 카메라, 마이크, 자이로스코프 센서, 진동 센서 등과 같은 입력 인터페이스를 포함할 수 있다. 예로서, 유저 인터페이스(1500)는 LCD(Liquid Crystal Display) 장치, LED(Light Emitting Diode) 표시 장치, OLED(Organic LED) 표시 장치, AMOLED(Active Matrix OLED) 표시 장치, 스피커, 모터 등과 같은 출력 인터페이스를 포함할 수 있다.
버스(1600)는 전자 시스템(1000)의 구성 요소들 사이에서 통신 경로를 제공할 수 있다. 전자 시스템(1000)의 구성 요소들은 버스(1600)의 버스 포맷에 기초하여 서로 데이터를 교환할 수 있다. 예로서, 버스 포맷은 USB, SCSI(Small Computer System Interface), PCIe(Peripheral Component Interconnect Express), M-PCIe(Mobile PCIe), ATA(Advanced Technology Attachment), PATA(Parallel ATA), SATA(Serial ATA), SAS(Serial Attached SCSI), IDE(Integrated Drive Electronics), EIDE(Enhanced IDE), NVMe(Nonvolatile Memory Express), UFS(Universal Flash Storage) 등과 같은 다양한 인터페이스 규약 중 하나 이상을 포함할 수 있다.
일 실시 예에 따른 스토리지 장치(1300)는 도1내지 7을 참조하여 상술한 이터레이터 연산을 수행할 수 있다. 예를 들어, 스토리지 장치(1300)는 도4의 스토리지 장치(440)를 포함할 수 있으나 이에 제한되지 않는다. 예를 들어, 스토리지 장치(1300)는 메인 프로세서(1101)로부터 키를 매개 변수로 하는 커맨드를 수신하고, 스토리지 장치(1300) 내의 키-벨류 맵핑 정보를 사용하여 이터레이션 연산을 수행할 수 있다. 키-벨류 맵핑 정보는 키의 일부 영역인 부분 키 및 부분 키와 벨류 주소의 대응 관계를 나타내는 부분 키-벨류 맵핑 정보일 수 있다. 스토리지 장치(1300)는 부분 키-벨류 맵핑 정보를 사용함으로서 이터레이터 연산을 위해 모든 메모리에 접근하고 읽기를 수행할 필요가 없으므로, 메인 프로세서(1101)로부터 수신한 이터레이터 연산의 요청에 대해 빠르게 응답할 수 있다.
또한, 상술한 바와 같이 일 실시 예에 따른 메인 프로세서(1101)는 버스(1600)을 통해 스토리지 장치(1300)와 통신할 수 있는 바, 메인 프로세서(1101)는 스토리지 장치(1300)에게 이터레이션 연산을 요청할 수 있다. 예를 들어, 메인 프로세서(1101)는 도4의 호스트(420)를 포함할 수 있으나 이에 제한되지 않는다. 메인 프로세서(1101)는 스토리지 장치(1300)에게 이터레이터 연산을 요청하고, 응답받은 이터레이션 연산의 결과에 기초하여 재압축(Recompression), 가비지 컬렉션(Garbage Collection), 리빌드(Rebuild), 일관성 검사(Consistency Check) 중 적어도 하나를 수행할 수 있다.
도 9은 일 실시 예들에 따른 전자 회로를 채용하는 전자 장치의 예시적인 구성 및 그것의 인터페이스들을 나타낸 블록도이다.
전자 장치(4000)는 MIPI 연합에 의해 제안된 인터페이스 규약을 이용하거나 지원할 수 있는 데이터 처리 장치로 구현될 수 있다. 예로서, 전자 장치(4000)는 휴대용 통신 단말기, PDA(Personal Digital Assistant), PMP(Portable Media Player), 스마트폰, 태블릿 컴퓨터, 웨어러블 장치 등과 같은 전자 장치들 중 하나일 수 있다.
전자 장치(4000)는 어플리케이션 프로세서(4100), 디스플레이(4220), 및 이미지 센서(4230)를 포함할 수 있다. 어플리케이션 프로세서(4100)는 DigRF 마스터(4110), DSI(Display Serial Interface) 호스트(4120), CSI(Camera Serial Interface) 호스트(4130), 물리 계층(4140), 및 UFS HCI(Universal Flash Storage Host-Controller Interface, 4150)를 포함할 수 있다.
DSI 호스트(4120)는 DSI에 따라 디스플레이(4220)의 DSI 장치(4225)와 통신할 수 있다. 예로서, DSI 호스트(4120)에는 시리얼라이저(SER)가 구현될 수 있고, DSI 장치(4225)에는 디시리얼라이저(DES)가 구현될 수 있다..
CSI 호스트(4130)는 CSI에 따라 이미지 센서(4230)의 CSI 장치(4235)와 통신할 수 있다. 예로서, CSI 호스트(4130)에는 디시리얼라이저(DES)가 구현될 수 있고, CSI 장치(4235)에는 시리얼라이저(SER)가 구현될 수 있다. 전자 장치(4000)는 어플리케이션 프로세서(4100)와 통신하는 RF(Radio Frequency) 칩(4240)을 더 포함할 수 있다. RF 칩(4240)은 물리 계층(4242), DigRF 슬레이브(4244), 및 안테나(4246)를 포함할 수 있다. 예로서, RF 칩(4240)의 물리 계층(4242) 및 어플리케이션 프로세서(4100)의 물리 계층(4140)은 MIPI 연합에 의해 제안된 DigRF 인터페이스에 의해 서로 데이터를 교환할 수 있다.
전자 장치(4000)는 워킹 메모리(4250) 및 임베디드/카드 스토리지 장치(4255)를 더 포함할 수 있다. 워킹 메모리(4250)는 어플리케이션 프로세서(4100)에 의해 처리된 또는 처리될 데이터를 일시적으로 저장할 수 있다. 워킹 메모리(4250)는 SRAM(Static Random Access Memory), DRAM(Dynamic RAM), SDRAM(Synchronous DRAM) 등과 같은 휘발성 메모리, 및/또는 플래시 메모리, PRAM(Phase-change RAM), MRAM(Magneto-resistive RAM), ReRAM(Resistive RAM), FRAM(Ferro-electric RAM) 등과 같은 불휘발성 메모리를 포함할 수 있다.
임베디드/카드 스토리지 장치(4255)는 어플리케이션 프로세서(4100)로부터 제공받은 데이터를 저장하거나, 저장된 데이터를 어플리케이션 프로세서(4100)로 제공할 수 있다. 임베디드/카드 스토리지 장치(4255)는 전력 공급 여부에 관계없이 데이터를 저장할 수 있는 불휘발성 메모리를 포함할 수 있다. 임베디드/카드 스토리지 장치(4255)는 도1내지 7을 참조하여 상술한 이터레이션 연산을 수행할 수 있다. 일 실시 예에 따른 임베디드/카드 스토리지 장치(4255)는 어플리케이션 프로세서(4100)로부터 이터레이터 연산에 대한 요청을 수신하고, 키-벨류 맵핑 정보를 사용하여 이터레이션 연산을 수행할 수 있다. 키-벨류 맵핑 정보는 키의 일부 영역인 부분 키 및 부분 키와 벨류 주소의 대응 관계를 나타내는 부분 키-벨류 맵핑 정보일 수 있다. 임베디드/카드 스토리지 장치(4255)는 부분 키-벨류 맵핑 정보를 사용함으로서 이터레이터 연산을 위해 모든 메모리에 접근하고 읽기를 수행할 필요가 없으므로, 어플리케이션 프로세서(4100)로부터 수신한 이터레이터 연산의 요청에 대해 빠르게 응답할 수 있다.
예로서, 임베디드/카드 스토리지 장치(4255)는 UFS 규약에 따라 어플리케이션 프로세서(4100)와 통신할 수 있다. 이 예에서, 어플리케이션 프로세서(4100)는 UFS HCI(4150)를 통해 임베디드/카드 스토리지 장치(4255)와의 통신을 처리할 수 있다.
전자 장치(4000)는 WIMAX(Worldwide Interoperability for Microwave Access, 4260), WLAN(Wireless Local Area Network, 4262), UWB(Ultra Wideband, 4264) 등과 같은 통신 모듈을 통해 외부 장치/시스템과 통신할 수 있다. 전자 장치(4000)는 음성 정보를 처리하기 위한 스피커(4270) 및 마이크(4275)를 포함할 수 있다. 전자 장치(4000)는 위치 정보를 처리하기 위한 GPS(Global Positioning System) 장치(4280)를 포함할 수 있다. 전자 장치(4000)는 주변 장치들과의 연결을 관리하기 위한 브릿지(Bridge) 칩(4290)을 포함할 수 있다.
도10은 일 실시 예에 따라, 시스템에서 이터레이터 연산을 수행하기 위한 방법의 흐름도를 나타낸다.
단계 S1000에서, 스토리지 장치(140)는 호스트(120)와의 통신을 초기화할 수 있다. 호스트(120)와 스토리지 장치(140)는 상호 간에 통신을 하면서 데이터를 관리할 수 있다. 스토리지 장치(140)는 데이터를 저장하기 위한 메모리 장치를 포함할 수 있다. 예를 들어, 메모리 장치는 적어도 하나의 비-휘발성 메모리(non-volatile memory)를 포함할 수 있다. 스토리지 장치(140)는 키-벨류 인터페이스를 사용하기 위한 다양한 정보를 전달할 수 있다. 예를 들어, 스토리지 장치(140)는 부분 키-벨류 맵핑 정보를 구성하기 위해, 스토리지 장치(140)에서 사용되는 키의 최대 사이즈에 대한 정보를 호스트(120)에게 전달할 수 있다. 키의 최대 사이즈에 대한 정보에 기초하여, 스토리지 장치(140)에서 관리되는 부분 키들의 사이즈가 결정될 수 있으며, 이터레이터 연산의 요청을 위한 특정 위치가 결정될 수 있다.
단계 S1020에서, 호스트(120)는 스토리지 장치(140)에게 오프셋 값을 전달할 수 있다. 오프 셋 값은 부분 키를 사용하여 맵핑 정보를 관리하는 스토리지 장치(140)와 전체 키를 사용하는 호스트(120) 사이에 키-벨류 인터페이스를 사용하여 통신이 가능하도록 하는 정보일 수 있다. 예를 들어, 오프셋 값은 부분 키가 전체 키의 가장 앞의 위치 또는 가장 뒤의 위치로부터 얼마만큼 떨어진 위치로부터 시작되는지를 나타낼 수 있다. 또한, 호스트(120)는 스토리지 장치(140)에게 영역에 대한 정보를 더 전달할 수 있다. 영역에 대한 정보는 부분 키의 사이즈에 대한 값으로서, 이터레이터 연산을 위해 호스트(120)로부터 수신된 키와 비교가 수행될 키 영역의 사이즈보다는 크거나 같고 스토리지 장치(140)에서 사용되는 키의 최대 사이즈보다 작거나 같은 값을 갖도록 결정될 수 있다.
단계 S1040에서, 호스트(120)는 스토리지 장치(140)에게 이터레이터 연산을 요청할 수 있다. 스토리지 장치(140)는 호스트(120)로부터 적어도 하나의 메모리 장치에 저장되는 데이터에 대응하는 벨류(value) 및 벨류를 식별하기 위해 참조되는 키(key)를 수신할 수 있다. 예를 들어, 호스트(120)는 스토리지 장치(140)에게 키 “ABCDEFGH”와 함께, 키의 세 번째 위치와 네 번째 위치에서의 문자가 전달되는 키 “ABCDEFGH”의 세 번째 위치와 네 번째 위치의 문자와 동일한 모든 키에 대한 정보를 요청할 수 있다. 호스트(120)는 세 번째와 네 번째 위치의 문자가 각각 “C”와 “D” 인 모든 키들에 대한 정보를 요청하는 이터레이터(iterator) 커맨드를 스토리지 장치(140)에게 전송할 수 있다. 이터레이터 연산에 대해서는 도1 내지 도7을 참조하여 상세히 상술하였다.
단계 S1060에서, 스토리지 장치(140)는 모든 키에 대한 정보를 호스트(120)에게 반환할 수 있다. 스토리지 장치(140)는 호스트(120)로부터 수신한 요청에 따라, 스토리지 장치(140)에 저장된 키-벨류 맵핑 정보를 사용하여 요청 받은 모든 키에 대한 정보를 호스트에게 반환할 수 있다. 스토리지 장치(140)는 이터레이터 연산을 위해 키-벨류 맵핑 정보를 참조할 수 있다. 일 실시 예에 따른 스토리지 장치(140) 는 이터레이터 연산을 위해 키의 전체 영역이 아닌, 키의 일부 영역인 부분 키(partial key)와 벨류 주소의 대응 관계를 나타내는 부분 키-벨류 맵핑 정보를 사용할 수 있다. 부분 키를 포함하는 키의 전체 영역에 대한 정보는 스토리지 장치(140) 내의 비-휘발성 메모리에 저장될 수 있다.
단계 S1060은 스토리지 장치(140)가 부분 키-벨류 맵핑 정보를 사용하여, 적어도 하나의 메모리 장치 중에서 읽기를 수행할 일부 영역을 결정하고, 결정된 적어도 일부의 영역에 대해 읽기를 수행하는 단계를 포함할 수 있다. 예를 들어, 스토리지 장치(140)는 비-휘발성 메모리 내의 적어도 일부 영역에 한해 읽기를 수행하여 단계 S1040에서 요청 받은 모든 키에 대한 정보를 획득할 수 있다. 획득된 모든 키에 대한 정보는 호스트에 반환될 수 있다.
한편, 상술한 방법은 컴퓨터로 읽을 수 있는 기록매체에 컴퓨터가 읽을 수 있는 코드로서 구현하는 것이 가능하다. 컴퓨터가 읽을 수 있는 기록매체는 컴퓨터 시스템에 의하여 읽혀질 수 있는 데이터가 저장되는 모든 종류의 기록장치를 포함한다. 컴퓨터가 읽을 수 있는 기록매체의 예로는 ROM, RAM. CD-ROM, 자기 테이프, 플로피디스크, 광 데이터 저장장치 등이 있으며, 또한 인터넷을 통한 전송 등의 형태로 구현되는 것도 포함한다. 또한, 컴퓨터가 읽을 수 있는 기록매체는 네트워크로 연결된 컴퓨터 시스템에 분산되어, 분산방식으로 프로세서가 읽을 수 있는 코드가 저장되고 실행될 수 있다.
위 설명들은 본 발명을 구현하기 위한 예시적인 구성들 및 동작들을 제공하도록 의도된다. 본 발명의 기술 사상은 위에서 설명된 실시 예들뿐만 아니라, 위 실시 예들을 단순하게 변경하거나 수정하여 얻어질 수 있는 구현들도 포함할 것이다. 또한, 본 발명의 기술 사상은 위에서 설명된 실시 예들을 앞으로 용이하게 변경하거나 수정하여 달성될 수 있는 구현들도 포함할 것이다.

Claims (18)

  1. 문자열들인 전체 키들을 이용하여 데이터를 저장하는 제1 메모리 장치; 및
    특정한 전체 키의 전체 문자열의 일부분인 부분 키를 일부분으로 갖는 모든 전체 키들에 대한 정보를 위한 요청을 호스트로부터 수신하는 컨트롤러를 포함하고,
    상기 컨트롤러는 상기 부분 키(partial key) 및 상기 제1 메모리 장치의 영역을 가리키는 상기 부분 키와 벨류 주소(value address) 사이의 대응 관계를 나타내는 부분 키-벨류 주소 맵핑 정보를 관리하고,
    상기 컨트롤러는, 상기 호스트로부터의 요청에 응답하여, 상기 전체 문자열 내의 상기 부분 키 외의 다른 문자들에 관계없이 상기 부분 키를 일부분으로 갖는 모든 전체 키들에 대한 정보를 상기 호스트에게 반환하고, 그리고
    상기 컨트롤러는 상기 부분 키-벨류 주소 맵핑 정보에 기반하여, 상기 제1 메모리 장치의 일부 영역을 결정하고, 그리고 상기 결정된 일부 영역에 대해 읽기 동작을 수행하여 상기 부분 키를 포함하는 전체 키를 획득함으로써 상기 호스트에 반환될 상기 정보를 판단하는 스토리지 장치.
  2. 제1항에 있어서,
    상기 컨트롤러는 상기 부분 키-밸류 주소 매핑 정보를 관리하는 휘발성 메모리인 제2 메모리 장치를 포함하고,
    상기 제1 메모리 장치는 불휘발성 메모리인 스토리지 장치.
  3. 제1항에 있어서,
    상기 컨트롤러는 상기 부분 키 및 상기 전체 키들의 대응 관계를 위해 사용되는 오프셋에 대응하는 정보를 상기 호스트로부터 수신하는 스토리지 장치.
  4. 제1항에 있어서,
    상기 컨트롤러는 상기 정보를 상기 호스트로 반환하여, 재압축, 가비지 컬렉션, 리빌드, 일관성 검사 중 적어도 하나를 수행하게 하는 스토리지 장치.
  5. 호스트; 및
    문자열들인 전체 키들을 이용하여 데이터를 저장하는 제1 메모리 장치를 포함하는 스토리지 장치를 포함하고,
    상기 스토리지 장치는, 특정한 전체 키의 전체 문자열의 일부분인 부분 키를 일부분으로 갖는 모든 전체 키들에 대한 정보를 위한 요청을 상기 호스트로부터 수신하고, 상기 부분 키(partial key) 및 상기 제1 메모리 장치의 영역을 가리키는 벨류 주소(value address) 사이의 대응 관계를 나타내는 부분 키-벨류 주소 맵핑 정보를 관리하고, 그리고
    상기 스토리지 장치는, 상기 전체 문자열 내의 상기 부분 키 외의 다른 문자들에 관계없이 상기 부분 키를 일부분으로 갖는 모든 전체 키들에 대한 정보를 상기 호스트에게 반환하고, 상기 호스트로 반환되는 정보는 상기 부분 키-밸류 주소 매핑 정보를 이용하여 판단되는 전자 장치.
  6. 제5항에 있어서,
    상기 스토리지 장치는 상기 부분 키-밸류 주소 매핑 정보를 관리하는 컨트롤러 메모리를 포함하고, 그리고
    상기 제1 메모리 장치는 상기 부분 키를 포함하는 수신된 키의 전체 키를 저장하는 전자 장치.
  7. 제6항에 있어서,
    상기 컨트롤러 메모리는 휘발성 메모리이고, 그리고
    상기 제1 메모리 장치는 불휘발성 메모리인 전자 장치.
  8. 제6항에 있어서,
    상기 스토리지 장치는, 상기 부분 키-벨류 주소 맵핑 정보를 사용하여, 상기 제1 메모리 장치의 일부 영역을 결정하고, 그리고 상기 결정된 일부 영역에 대해 읽기 동작을 수행하여 상기 부분 키를 포함하는 상기 수신된 키의 전체 키를 획득하는 전자 장치.
  9. 제8항에 있어서,
    상기 스토리지 장치는 오프셋에 대한 정보에 기반하여 상기 부분 키 및 상기 수신된 키를 비교하고, 그리고 상기 비교의 결과에 기반하여 상기 제1 메모리 장치의 상기 일부 영역을 결정하는 전자 장치.
  10. 제8항에 있어서,
    상기 제1 메모리 장치는 플래시 메모리들을 포함하고, 그리고
    상기 스토리지 장치는 오프셋에 대한 정보에 기반하여 상기 부분 키 및 상기 수신된 키를 비교하고, 그리고 상기 비교의 결과에 기반하여 상기 플래시 메모리들 중 상기 읽기 동작이 수행될 적어도 하나의 플래시 메모리를 결정하는 전자 장치.
  11. 제5항에 있어서,
    상기 부분 키는 상기 스토리지 장치로부터 상기 호스트로 전송되고 그리고 상기 스토리지 장치에서 가용한 키의 최대 사이즈에 대한 정보, 상기 요청에 대하여 상기 호스트로부터 상기 스토리지 장치로 전송되는 오프셋에 대응하는 정보, 그리고 상기 부분 키의 사이즈에 대응하는 정보 중 적어도 하나에 기반하여 결정되는 전자 장치.
  12. 문자열들인 전체 키들을 이용하여 데이터를 저장하는 제1 메모리 장치; 및
    특정한 전체 키의 전체 문자열의 일부분인 부분 키를 일부분으로 갖는 모든 전체 키들에 대한 정보를 위한 요청을 호스트로부터 수신하고, 상기 부분 키(partial key) 및 상기 제1 메모리 장치의 영역을 가리키는 벨류 주소(value address) 사이의 대응 관계를 나타내는 키-벨류 주소 맵핑 정보를 관리하기 위한 컨트롤러를 포함하고,
    상기 컨트롤러는 상기 전체 문자열 내의 상기 부분 키 외의 다른 문자들에 관계없이 상기 부분 키를 일부분으로 갖는 모든 전체 키들에 대한 정보를 상기 호스트에게 반환하고, 그리고
    상기 컨트롤러는 상기 호스트로 반환되는 정보를 상기 부분 키-밸류 주소 매핑 정보를 이용하여 판단하는 스토리지 장치.
  13. 제12항에 있어서,
    상기 컨트롤러는 상기 부분 키-벨류 주소 맵핑 정보를 관리하기 위한 컨트롤러 메모리 장치를 포함하고, 그리고
    상기 제1 메모리 장치는, 상기 부분 키를 포함하는 전체 키를 저장하는 스토리지 장치.
  14. 제13항에 있어서,
    상기 컨트롤러 메모리 장치는 휘발성 메모리 장치이고,
    상기 제1 메모리 장치는 불휘발성 메모리 장치인 스토리지 장치.
  15. 제13항에 있어서,
    상기 컨트롤러는, 상기 부분 키-벨류 주소 맵핑 정보를 사용하여, 상기 제1 메모리 장치 중에서 일부 영역을 결정하고, 그리고 상기 결정된 일부 영역에 대해 읽기 동작을 수행하여 상기 부분 키를 포함하는 전체 키를 획득하는 스토리지 장치.
  16. 제15항에 있어서,
    상기 컨트롤러는, 오프셋에 대한 정보를 사용하여 상기 부분 키와 상기 수신된 키를 비교하고, 상기 비교의 결과에 따라 상기 일부 영역을 결정하는 스토리지 장치.
  17. 제15항에 있어서,
    상기 제1 메모리 장치는 플래시 메모리들을 포함하고, 그리고
    상기 컨트롤러는 오프셋에 대한 정보에 기반하여 상기 부분 키 및 상기 수신된 키를 비교하고, 그리고 상기 비교의 결과에 기반하여 상기 플래시 메모리들 중 상기 읽기 동작이 수행될 적어도 하나의 플래시 메모리를 결정하는 스토리지 장치.
  18. 제12항에 있어서,
    상기 부분 키는 상기 스토리지 장치로부터 상기 호스트로 전송되고 그리고 상기 스토리지 장치에서 가용한 키의 최대 사이즈에 대한 정보, 상기 요청에 대하여 상기 호스트로부터 상기 스토리지 장치로 전송되는 오프셋에 대응하는 정보, 그리고 상기 부분 키의 사이즈에 대응하는 정보 중 적어도 하나에 기반하여 결정되는 스토리지 장치.
KR1020180039216A 2017-12-29 2018-04-04 데이터베이스에서 이터레이터 연산을 수행하기 위한 장치 KR102623061B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811515723.XA CN110059099A (zh) 2017-12-29 2018-12-12 用于在数据库中执行迭代器操作的设备

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/857,857 US10922239B2 (en) 2017-12-29 2017-12-29 Device for performing iterator operation in database
US15/857,857 2017-12-29

Publications (2)

Publication Number Publication Date
KR20190082652A KR20190082652A (ko) 2019-07-10
KR102623061B1 true KR102623061B1 (ko) 2024-01-10

Family

ID=67057735

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180039216A KR102623061B1 (ko) 2017-12-29 2018-04-04 데이터베이스에서 이터레이터 연산을 수행하기 위한 장치

Country Status (3)

Country Link
US (1) US10922239B2 (ko)
KR (1) KR102623061B1 (ko)
CN (1) CN110059099A (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7237782B2 (ja) * 2019-09-13 2023-03-13 キオクシア株式会社 ストレージシステム及びその制御方法

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130275656A1 (en) * 2012-04-17 2013-10-17 Fusion-Io, Inc. Apparatus, system, and method for key-value pool identifier encoding

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3848161B2 (ja) * 1999-12-09 2006-11-22 富士通株式会社 アドレス変換履歴テーブルを用いたメモリアクセス装置及び方法
US7110540B2 (en) * 2002-04-25 2006-09-19 Intel Corporation Multi-pass hierarchical pattern matching
US7409526B1 (en) * 2003-10-28 2008-08-05 Cisco Technology, Inc. Partial key hashing memory
US7860849B1 (en) * 2007-01-18 2010-12-28 Netlogic Microsystems, Inc. Optimizing search trees by increasing success size parameter
US8429133B2 (en) * 2007-12-13 2013-04-23 Oracle International Corporation Partial key indexes
US8433695B2 (en) 2010-07-02 2013-04-30 Futurewei Technologies, Inc. System architecture for integrated hierarchical query processing for key/value stores
US10558705B2 (en) 2010-10-20 2020-02-11 Microsoft Technology Licensing, Llc Low RAM space, high-throughput persistent key-value store using secondary memory
US20120109994A1 (en) * 2010-10-28 2012-05-03 Microsoft Corporation Robust auto-correction for data retrieval
JP5524144B2 (ja) * 2011-08-08 2014-06-18 株式会社東芝 key−valueストア方式を有するメモリシステム
US8788788B2 (en) 2011-08-11 2014-07-22 Pure Storage, Inc. Logical sector mapping in a flash storage array
US9519575B2 (en) 2013-04-25 2016-12-13 Sandisk Technologies Llc Conditional iteration for a non-volatile device
US9129118B1 (en) * 2013-05-03 2015-09-08 Amazon Technologies, Inc. Mapping identifying information
US20150074084A1 (en) 2013-09-12 2015-03-12 Neustar, Inc. Method and system for performing query processing in a key-value store
US9244857B2 (en) * 2013-10-31 2016-01-26 Oracle International Corporation Systems and methods for implementing low-latency lookup circuits using multiple hash functions
US9569141B2 (en) 2014-03-28 2017-02-14 Intel Corporation Hash map support in a storage device
US9438426B2 (en) * 2014-10-03 2016-09-06 Seagate Technology Llc Key-value data storage device with hybrid architecture
KR20170081118A (ko) * 2015-12-30 2017-07-11 삼성전자주식회사 불휘발성 메모리 장치 및 컨트롤러를 포함하는 스토리지 장치, 스토리지 장치의 동작 방법, 그리고 스토리지 장치를 액세스하는 액세스 방법
SG11201811425TA (en) * 2016-09-22 2019-01-30 Visa Int Service Ass Techniques for in-memory key range searches
US10803040B2 (en) * 2017-08-28 2020-10-13 International Business Machines Corporation Efficient and accurate lookups of data by a stream processor using a hash table
US11133090B2 (en) * 2017-09-22 2021-09-28 Cerner Innovation, Inc. Semantic search for a health information exchange

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130275656A1 (en) * 2012-04-17 2013-10-17 Fusion-Io, Inc. Apparatus, system, and method for key-value pool identifier encoding

Also Published As

Publication number Publication date
KR20190082652A (ko) 2019-07-10
CN110059099A (zh) 2019-07-26
US10922239B2 (en) 2021-02-16
US20190205258A1 (en) 2019-07-04

Similar Documents

Publication Publication Date Title
US11874815B2 (en) Key-value storage device and method of operating the same
KR102446733B1 (ko) 스토리지 장치 및 스토리지 장치를 포함하는 전자 장치
US9244619B2 (en) Method of managing data storage device and data storage device
US11270734B2 (en) Method for accessing shingled magnetic recording SMR disk, and server
TW201818249A (zh) 操作對多重名稱空間進行管理的儲存裝置的方法
KR102094393B1 (ko) 불휘발성 메모리 시스템 및 그것의 동작 방법
US20140229657A1 (en) Readdressing memory for non-volatile storage devices
US10860231B2 (en) Memory system for adjusting map segment based on pattern and operating method thereof
US11620066B2 (en) Storage device with expandible logical address space and operating method thereof
US20190146926A1 (en) Storage device and operating method of storage device
US11449270B2 (en) Address translation method and system for KV storage device
CN112988060A (zh) 键值存储装置和用于操作键值存储装置的方法
CN109726147B (zh) 使用数据保护访问带内存储器的设备和方法
KR102653373B1 (ko) 컨트롤러 및 컨트롤러의 동작방법
KR102623061B1 (ko) 데이터베이스에서 이터레이터 연산을 수행하기 위한 장치
KR102275706B1 (ko) 데이터 저장 장치의 작동 방법과 이를 포함하는 데이터 처리 시스템의 작동 방법
US11657000B2 (en) Controller and memory system including the same
US9465747B2 (en) Controller for controlling non-volatile memory and semiconductor device including the same
US11941246B2 (en) Memory system, data processing system including the same, and operating method thereof
KR20220042673A (ko) 컨트롤러, 컨트롤러의 동작 방법, 및 이를 포함하는 메모리 시스템
KR20240016750A (ko) 스토리지 장치 및 이를 포함하는 전자 장치와 그 동작 방법
CN111367825A (zh) 存储设备的虚拟校验数据缓存

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant