KR20210058988A - 키-값 저장 트리 데이터 블록의 카운터 기반 압축 - Google Patents
키-값 저장 트리 데이터 블록의 카운터 기반 압축 Download PDFInfo
- Publication number
- KR20210058988A KR20210058988A KR1020217013687A KR20217013687A KR20210058988A KR 20210058988 A KR20210058988 A KR 20210058988A KR 1020217013687 A KR1020217013687 A KR 1020217013687A KR 20217013687 A KR20217013687 A KR 20217013687A KR 20210058988 A KR20210058988 A KR 20210058988A
- Authority
- KR
- South Korea
- Prior art keywords
- key
- value
- sequence
- sets
- sub
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
- G06F16/258—Data format conversion from or to a database
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/06—Arrangements for sorting, selecting, merging, or comparing data on individual record carriers
- G06F7/14—Merging, i.e. combining at least two sets of record carriers each arranged in the same ordered sequence to produce a single set having the same ordered sequence
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/71—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2365—Ensuring data consistency and integrity
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/78—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2207/00—Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F2207/22—Indexing scheme relating to groups G06F7/22 - G06F7/36
- G06F2207/222—Binary data tree
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Data Mining & Analysis (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Mathematical Physics (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
본 개시의 양태들은 카운트 값들을 사용하여 키-값 트리 데이터 구조에서, 노드의 키-값 쌍 데이터를 병합하는 키-값 트리 데이터 구조의 동작들을 제공한다.
Description
우선 출원
본 출원은 2018년 10월 10일자로 출원된 미국 출원 16/156,400호의 이익을 주장하며, 이는 전문이 참조로 본 명세서에에 포함된다.
기술분야
본 개시의 실시 예들은 개괄적으로 메모리 시스템들, 보다 구체적으로는, 키-값 저장(KVS, key-value store) 트리 데이터 구조의 동작에 관한 것이다.
메모리 서브 시스템은 저장 시스템, 이를테면 고체 상태 드라이브(SSD, solid-state drive)일 수 있고, 데이터를 저장하는 하나 이상의 메모리 구성요소를 포함할 수 있다. 메모리 구성요소들은 예를 들어, 비휘발성 메모리 구성요소들 및 휘발성 메모리 구성요소들일 수 있다. 일반적으로, 호스트 시스템은 메모리 서브 시스템을 이용하여 메모리 구성요소들에 데이터를 저장하고 메모리 구성요소들로부터 데이터를 탐색할 수 있다.
본 개시는 아래에 주어지는 발명을 실시하기 위한 구체적인 내용 및 본 개시의 다양한 실시 예들의 첨부 도면들로부터 보다 충분히 이해될 것이다.
도 1은 본 개시의 일부 실시 예들에 따른, 메모리 서브 시스템을 포함하는 예시적인 컴퓨팅 환경을 도시하는 블록도이다.
도 2는 본 개시의 일부 구현들에 따른, 키-값 저장(KVS, key-value store) 트리에 대한 예시적인 카운터 기반 병합의 블록도이다.
도 3 내지 도 5는 본 개시의 일부 구현들에 따른, 카운터 기반 병합 동작을 위한 예시적인 방법들의 흐름도들이다.
도 6 은 본 개시의 일부 구현들에 따른, 카운터 기반 병합 동작에 의해 동작될 수 있는 예시적인 KVS 트리를 도시하는 블록도이다.
도 7a 및 도 7b는 본 개시의 일부 구현들에 따른, 예시적인 KVS 트리 데이터 구조의 노드에 대해 수행되는 예시적인 카운터 기반 병합 동작을 도시하는 흐름도를 도시한다.
도 8a 및 도 8b는 카운터 기반 병합을 위한 방법이 수행되는 예시적인 실시예의 맥락에서 컴퓨팅 환경의 구성요소들 사이의 상호 작용들을 도시하는 상호 작용 도해를 제공한다.
도 9는 본 개시의 일부 실시 예들에 따라, 본 명세서에서 논의된 방법들 중 임의의 하나 이상을 기계가 수행하게 하기 위해 명령어 세트가 실행될 수 있는 컴퓨터 시스템 형태인 기계의 도식적인 표현을 도시하는 블록도이다.
도 1은 본 개시의 일부 실시 예들에 따른, 메모리 서브 시스템을 포함하는 예시적인 컴퓨팅 환경을 도시하는 블록도이다.
도 2는 본 개시의 일부 구현들에 따른, 키-값 저장(KVS, key-value store) 트리에 대한 예시적인 카운터 기반 병합의 블록도이다.
도 3 내지 도 5는 본 개시의 일부 구현들에 따른, 카운터 기반 병합 동작을 위한 예시적인 방법들의 흐름도들이다.
도 6 은 본 개시의 일부 구현들에 따른, 카운터 기반 병합 동작에 의해 동작될 수 있는 예시적인 KVS 트리를 도시하는 블록도이다.
도 7a 및 도 7b는 본 개시의 일부 구현들에 따른, 예시적인 KVS 트리 데이터 구조의 노드에 대해 수행되는 예시적인 카운터 기반 병합 동작을 도시하는 흐름도를 도시한다.
도 8a 및 도 8b는 카운터 기반 병합을 위한 방법이 수행되는 예시적인 실시예의 맥락에서 컴퓨팅 환경의 구성요소들 사이의 상호 작용들을 도시하는 상호 작용 도해를 제공한다.
도 9는 본 개시의 일부 실시 예들에 따라, 본 명세서에서 논의된 방법들 중 임의의 하나 이상을 기계가 수행하게 하기 위해 명령어 세트가 실행될 수 있는 컴퓨터 시스템 형태인 기계의 도식적인 표현을 도시하는 블록도이다.
본 개시의 양태들은 메모리 서브 시스템에 의해 또는 메모리 서브 시스템과 함께 사용될 수 있는 키-값 트리 데이터 구조에서 키-값 세트들을 병합하는 것에 관한 것이다. 메모리 서브 시스템은 이하에서 "메모리 디바이스(memory device)"라고도 지칭된다. 메모리 서브 시스템의 일례는SSD와 같은 저장 시스템이다. 일부 실시 예들에서, 메모리 서브 시스템은 하이브리드 메모리/저장 서브 시스템이다. 일반적으로, 호스트 시스템은 하나 이상의 메모리 구성요소를 포함하는 메모리 서브 시스템을 이용할 수 있다. 호스트 시스템은 메모리 서브 시스템에 저장될 데이터를 제공할 수 있고(예를 들어, 기입 요청들을 통해) 메모리 서브 시스템으로부터 탐색될 데이터를 요청할 수 있다(예를 들어, 판독 요청들을 통해).
메모리 서브 시스템은 호스트 시스템으로부터 데이터를 저장할 수 있는 다수의 메모리 구성요소들을 포함할 수 있다. 메모리 서브 시스템은 또한 호스트 시스템으로부터 수신되는 요청들에 응답하여 메모리 구성요소들에서 데이터를 판독, 데이터를 기입, 또는 데이터를 소거하는 것과 같은 동작들을 수행하기 위해 메모리 구성요소들 각각과 통신할 수 있는 메모리 서브 시스템 제어기를 포함할 수 있다. 메모리 서브 시스템의 메모리 구성요소들 중 임의의 하나 이상은 메모리 구성요소의 메모리 셀들을 관리하고, 메모리 서브 시스템 제어기와 통신하며, 메모리 서브 시스템 제어기로부터 수신된 메모리 요청들(예를 들어, 판독 또는 기입)을 실행하기 위한 매체 제어기를 포함할 수 있다.
데이터베이스 저장 및 볼륨 데이터 저장(예를 들어, 클라우드 저장)와 같은 일부 애플리케이션들에서, 키-값 데이터 구조들은 하나 이상의 메모리 디바이스에 의해 구현되고 하나 이상의 매체 데이터 블록(매체 블록)을 포함하는 단일의 논리적 데이터 저장 볼륨으로서 제시되는 데이터 저장 매체들의 풀(매체 풀)과 같은 데이터 저장 매체들에 데이터를 저장하기 위해 사용된다. 키-값 저장소(KVS, key-value store)는 키-값 쌍들을 저장하고 탐색하기 위해 하나 이상의 키-값 데이터 구조들을 포함할 수 있다. 키-값 데이터 구조들은 키-값 쌍들의 저장된 데이터의 효율적인 탐색을 가능하게 하거나, 희박한 데이터의 효율적인 저장을 가능하게 하거나, 탐색 가능한 데이터의 효율적인 저장을 가능하게 할 수 있다. 일반적으로, 키-값 데이터 구조들은 저장을 위해 키-값 쌍을 수용하고 키에 기초한 값에 대한 질의들에 응답하도록 구성된다. 키-값 데이터 구조들은 트리 데이터 구조들과 같은 구조들을 포함할 수 있으며, 이의 예들은 로그 구조화된 병합(log-structured merge) 트리(LSM 트리) 및 키-값 저장(KVS) 트리(본 명세서에서 키-값 저장 트리 데이터 구조 또는 KVS 트리 데이터 구조라고도 지칭됨)를 포함한다.
본 개시의 양태들은 카운트 값들을 사용하여, 키-값 트리 데이터 구조(KVS 트리)에서, 노드의 키-값 쌍 데이터를 병합(예를 들어, 압축)하기 위한 다양한 실시 예들을 제공한다. 실시 예에 따라, KVS 트리를 저장하는 데이터 저장 매체들은 하나 이상의 로그 구조화된 인덱스를 포함하는 로그 구조화된 시스템(예를 들어, 저널 기반 시스템) - 여기서 데이터는 그룹들(예를 들어, 로그들)로 일괄(batch)될 수 있다 - 을 사용하여 구현될 수 있으며, 이는 데이터 저장 매체들에 대해 더 양호한 데이터 성능을 제공할 수 있다. 일부 실시 예들에 대해, 로그 구조화된 데이터 저장 매체들의 데이터 일괄 기반 동작이 KVS 트리에 매우 적합하며, 이는 키로 질의되어 (키와 쌍을 이루는) 값을 반환할 수 있는 인덱스로서 키-값 쌍들을 저장할 수 있고, 여기서 인덱스는 일괄적으로 업데이트될 수 있다. 특히, 일부 실시 예들의 경우, KVS 트리의 인덱스에 대한 각 업데이트는 인덱스 자체(본 명세서에서 인덱스의 서브 인덱스라고도 지칭됨)를 포함한다.
예를 들어, 초기에 비어 있는 인덱스(S)에 대해, S에 대한 첫 번째, 두 번째, 세 번째 ....N 번째 업데이트들은 각각 서브 인덱스들(S(1), S(2), S(3), ...S(N))을 포함할 수 있으며, 여기서 S(1), S(2), S(3), ...S(N)은 인덱스 자체를 포함한다. 이렇게 해서, 인덱스(S)는 가장 새로운 것에서 가장 오래된 것으로(S = (S(N), …, S(2), S(1)))(여기서 업데이트들은 시퀀스 앞에 붙는다)(또는 대안적으로는, 가장 오래된 것에서 가장 새로운 것으로 - S = (S(1), S(2), S(3),…S(N))(여기서 업데이트들은 시퀀스 뒤에 붙는다) 순서화되는 서브 인덱스들의 시퀀스인 것으로 고려될 수 있다.
일부 실시 예들에 따르면, 인덱스(S)를 탐색하기 위해, 탐색 동작(예를 들어, 관심 키와 쌍을 이루는 값을 탐색하는 것)은 먼저 서브 인덱스(S(3))에서 탐색하는데 이는 이것이 S에 대한 가장 최근의 업데이트이고, 이에 따라 가장 최근의 데이터를 갖기 때문이고; S(3)에서 아무것도 찾아지지 않으면, 탐색 동작은 S(2)에서 탐색하며; S(2)에서 아무것도 찾아지지 않으면, 탐색 동작은 S(1)에서 탐색한다. 인덱스(S)에 더 많은 업데이트들이 적용될 때, 서브 인덱스들의 시퀀스는 계속 증가할 수 있고, 더 많은 가비지 데이터가 이전 업데이트들(예를 들어, S(2) 및 S(1))로 포함되어 오래된 또는 지난 데이터의 형태로 축적될 수 있으며, 이는 결과적으로 탐색 효율을 감소시킬 수 있다(예를 들어, 특정 키와 쌍을 이루는 값을 찾기 위해 더 많은 데이터가 판독되고 탐색될 필요가 있을 수 있다).
따라서, 본 명세서에서 설명되는 다양한 실시 예들은 서브 인덱스들의 시퀀스의, 서브 인덱스들의 서브 시퀀스를 병합 서브 인덱스로 병합(예를 들어, 압축)하고 (서브 인덱스들의 시퀀스 내의) 서브 인덱스들의 서브 시퀀스를 병합 서브 인덱스로 대체함으로써 서브 인덱스들의 시퀀스를 포함하는 인덱스(S)의 탐색 효율을 회복시킬 수 있다. 특히, 일부 실시 예들의 경우, 인덱스(S)는 본 명세서에서 설명되는 바와 같은 키-값 저장 트리 데이터 구조(KVS 트리)를 포함하며, 여기서 KVS 트리의 하나 이상의 노드들은 서브 인덱스들의 시퀀스를 저장하기 위해 사용되고, 각 서브 인덱스(S(i)))는 하나 이상의 키-값 쌍을 저장하기 위한 키-값 세트를 포함한다. 이에 따라, KVS 트리에 의해(예를 들어, 루트 노드를 통해) 수신되는 키-값 세트들은 인덱스(S)에 대한 키-값 쌍 업데이트들로서 역할을 할 수 있다.
본 명세서에서 설명되는 일부 실시 예들에 따르면, 서브 인덱스들(예를 들어, 키-값 세트들)의 서브 시퀀스의 병합 동작은 축적된 가비지 데이터(예를 들면, 오래된 또는 지난 키 또는 값 데이터)를 제거할 수 있고 서브 시퀀스를 포함하는 서브 인덱스들의 시퀀스의 전체 길이를 단축시킬 수 있다(길이가 짧을수록 질의 성능이 양호해질 수 있다). 실시 예에 따라, 서브 인덱스들(예를 들어, 키-값 세트들)의 서브 시퀀스는 서브 인덱스들의 전체 시퀀스를 포함할 수 있거나, 또는 서브 인덱스들의 전체 시퀀스보다 적게 포함할 수 있다(예를 들어, 서브 시퀀스가 시퀀스의 시작, 중간 또는 종료 부분을 포함한다). 병합된 서브 인덱스(예를 들어, 병합된 키-값 세트)는 시퀀스에서의 서브 인덱스들 각각보다 더 크지만(예를 들어, 탐색될 필요가 있는 것보다 더 많은 데이터를 저장한다) 서브 인덱스들의 시퀀스를 그대로 유지하는 것보다는 더 작을 수 있다(예를 들어, 탐색될 필요가 있는 것보다 더 적은 데이터를 저장한다). 본 명세서에서 사용될 때, 병합된 서브 인덱스(예를 들어, 키-값 세트)는 S(i,j)로서 표현될 수 있으며, 여기서 i > j이고, S(i,j)는 병합된 서브 인덱스(S(i,j))가 모든 서브 인덱스들(S(k))(여기서 i <= k <= j)을 병합한(예를 들어, 키-값 세트들 i 내지 j를 병합한) 결과임을 나타낸다.
본 명세서에 설명되는 다양한 실시 예들은 인덱스(S)의 서브 인덱스들(예를 들어, 키-값 세트들)의 서브 시퀀스를 병합하며, 인덱스(S)의 길이간 균형을 관리하고, 인덱스(S)를 저장하는 데 사용되는 데이터 저장 매체들에 대한 기입 동작들(예를 들어, 기입 증폭 현상)을 감소시킨다. 데이터 저장 매체들을 구현하는 하나 이상의 메모리 디바이스가 다른 유형들의 메모리 디바이스들(예를 들어, TLC NAND 셀 메모리 디바이스들)보다 더 낮은 기입 성능 및 내구성 특성들을 갖는 특정 유형들의 메모리 디바이스들(예를 들어, QLC NAND 셀 메모리 디바이스들)을 포함하는 경우, 데이터 저장 매체들에 대한 기입 동작들을 감시키는 것(예를 들어, 최소화하는 것)은 데이터 저장 매체들의 데이터 성능 특성들을 개선할 수있다. 예를 들어, 인덱스(S)에 대한 서브 인덱스들(예를 들어, 업데이트들)의 시퀀스가 서브 인덱스들(S(1), S(2), ...S(N))을 포함하며, 여기서 각 서브 인덱스(S(i))(예를 같이, 업데이트)가 M 바이트의 데이터를 포함하고, 업데이트들의 시퀀스가 인덱스(S)에 가비지 데이터(예를 들어, 오래된 또는 지난 키 또는 값 데이터)를 생성하지 않는 경우를 고려한다. 업데이트들의 시퀀스는 N*M 데이터를 포함할 것이고, 이에 따라 업데이트들의 시퀀스가 데이터 저장 매체들에 기록될 때 적어도 N*M 바이트가 데이터 저장 매체에 기록될 것이다(압축이 사용되지 않는다고 가정함). 예를 들어, 각 인덱싱 크기가 M 바이트인 두 개의 서브 인덱스들의 병합 동작 결과 2*M 바이트가 데이터 저장 매체들로부터 판독되고, 2*M 바이트가 데이터 저장 매체들에 기입될 것이다. 일부 실시 예들에 따라 서브 인덱스들의 시퀀스를 병합된 서브 인덱스로 병합하는 것은 서브 인덱스들의 시퀀스에 대해 판독되고 기입되는 데이터의 양을 효과적으로 감소시킬 수 있다. 이는 결과적으로 키-값 쌍들로서 데이터(예를 들어, 사용자 데이터)를 저장하기 위해 KVS 트리를 사용하는 (메모리 구성요소들의 세트, 이를테면 NAND형 메모리 디바이스들의 세트에 의해 구현되는) 데이터 저장 매체들의 전반적인 성능을 개선할 수 있다.
일부 실시 예들에 따르면, 병합(예를 들어, 압축) 동작은 인덱스(S)에 대해 다음과 같이 수행되며, 이는 서브 인덱스들의 시퀀스를 저장할 수 있다. 병합 동작들은 파라미터 r을 포함할 수 있으며, 이는 1보다 커야 한다(예를 들어, r = 4). 인덱스(S)에서의 각 서브 인덱스(S(i))에는 본 명세서에서 mc로서 지정되는 병합 카운트 값(예를 들어, 압축 카운트)이 부여될 수 있다. 인덱스(S)에 대해 N 번째 업데이트(서브 인덱스(S(N))를 포함함)가 수신될 때, 병합 동작은 S(N)에 0의 mc 값(또는 몇몇 다른 디폴트 초기 값)을 부여하고, 이어서 S(N)을 인덱스(S)에서의 서브 인덱스들의 현재 시퀀스에 덧붙일 수 있다(예를 들어, S = (S(N),.....)(여기서 가장 새로운 업데이트들이 인덱스(S) 앞에 붙는다). 그 후에, 인덱스(S)가 동일한 mc 값(예를 들어, 0, 1, 2 등)을 공유하는 r 개수의 서브 인덱스(예를 들어, r = 4인 경우 4개의 서브 인덱스들)를 포함하는 서브 인덱스들의 서브 시퀀스를 포함하는 경우, 병합 동작은 다음을 수행할 수 있다: x를 서브 시퀀스에서의 각 서브 인덱스에 의해 공유되는 mc 값으로 설정한다; 서브 인덱스들의 서브 시퀀스를 새로운(병합된) 서브 인덱스로 병합한다; 병합된 서브 인덱스에 x+1(또는 몇몇 다른 디폴트 증분 값)의 mc 값을 부여한다; 그리고 시퀀스에서 서브 인덱스들의 서브 시퀀스를 병합된 서브 인덱스로 대체한다.
전술한 병합 동작의 일례를 예시하기 위해, 4로 설정된 예시적인 파라미터 r, 초기에 비어 있는 예시적인 인덱스(SEG), 그리고 서브 인덱스(SEG(k))를 인덱스(SEG) 앞에 붙임으로써 인덱스(SEG)에 k 번째 업데이트가 적용된다고 가정한다. 인덱스(SEG)에 대한 처음 세 번의 업데이트들 후에, 인덱스(SEG)는 세 개의 서브 인덱스들(예를 들어, S= (SEG(3), SEG(2), SEG(1)))을 가질 것이며, 각각은 0의 mc 값을 가진다. 이때, 인덱스(SEG)에 대한 mc 값들의 상태는 [0, 0, 0]으로서 표현될 수 있다. 인덱스(SEG)에 네 번째 업데이트가 적용될 때, 상태는 예시적인 병합 동작이 네 번째 업데이트로 인덱스(SEG)를 업데이트한 후(예를 들어, S= (SEG(4), SEG(3), SEG(2), SEG(1)) [0, 0, 0, 0]으로서 표현될 수 있다. [0, 0, 0, 0]의 상태에 기초하여, 예시적인 병합 동작은 0의 mc 값을 갖는 네 개의 서브 인덱스들의 서브 시퀀스(예를 들어, 인덱스(SEG)에서의 SEG(4), SEG(3), SEG(2), SEG(1)의 서브 시퀀스)를 검출하고, x를 0의 값으로 설정하고, 검출된 서브 시퀀스를 함께 병합하여 새로운 병합된 서브 인덱스(SEG(1,4))를 생성하며, 병합된 서브 인덱스(SEG(1,4))에 x+1(즉, 1)의 mc 값을 부여한다. 이어서 예시적인 병합 동작은 인덱스(SEG)에서 검출된 서브 시퀀스를 병합된 서브 인덱스(SEG(1,4))로 대체하고(예를 들어, S= (SEG(1,4))), 이 결과, 인덱스(SEG)에 대한 mc 값들의 상태는 이제[1]을 포함한다. 또 다른 세 번의 업데이트들(즉, SEG(7), SEG(6), SEG(5))이 인덱스(SEG)에 적용된다고 가정하면(예를 들어, S= (SEG(7), SEG(6), SEG(5), SEG(1,4)), 인덱스(SEG)의 mc 값들의 상태는 [0,0,0,1]을 포함할 것이고, 이에 따라, 예시적인 병합 동작은 동일한 mc 값을 갖는 네 개의 서브 인덱스들의 서브 시퀀스를 검출하지 않을 것이다. 다음 업데이트를 수신하고 적용 시(예를 들어, S= (SEG(8), SEG(7), SEG(6), SEG(5), SEG(1,4)), 인덱스(SEG)의 mc 값들의 상태는 [0, 0, 0, 0, 1]을 포함할 것이고, 예시적인 병합 동작은 0의 mc 값을 갖는 네 개의 서브 인덱스들의 서브 시퀀스(예를 들어, 인덱스(SEG)에서 SEG(8), SEG(7), SEG(6), SEG(5)의 서브 시퀀스)를 검출할 것이다. 이전과 같이, 예시적인 병합 동작은 x를 0의 값으로 설정하고, 검출된 서브 시퀀스를 함께 병합하여 새로운 병합된 서브 인덱스(SEG(5,8))를 생성하며, 병합된 서브 인덱스(SEG(5,8))에 x+1(즉, 1)의 mc 값을 부여한다. 이어서 예시적인 병합 동작은 인덱스(SEG)에서 검출된 서브 시퀀스를 병합된 서브 인덱스(SEG(5,8))로 대체하고(예를 들어, S= (SEG(5,8), SEG(1,4))), 이 결과, 인덱스(SEG)에 대한 mc 값들의 상태는 이제[1, 1]을 포함한다.
인덱스(SEG)에 대해, 추가의 후속 업데이트들을 가정하여, 인덱스(SEG)에 대한 mc 값들의 상태가 최종적으로 [0, 0, 0, 0, 1, 1, 1]을 포함할 수 있으며, 이는 다음과 같은 예시적인 병합 동작을 초래할 것이다: 0의 mc 값을 갖는 네 개의 서브 인덱스들의 서브 시퀀스를 검출하는 것(인덱스(SEG)의 시작에서); x를 0의 값으로 설정하는 것; 검출된 서브 시퀀스를 함께 병합하여 새로운 병합된 서브 인덱스를 생성하는 것, 병합된 서브 인덱스에 x+1(즉, 1)의 mc 값을 부여하는 것; 그리고 인덱스(SEG)에서 검출된 서브 시퀀스를 병합된 서브 인덱스(SEG)로 대체하는 것. 인덱스(SEG)에 대한 mc 값들의 결과적인 상태는 [1, 1, 1, 1]을 포함할 것이다. 이러한 상태에 기초하여, 또 다른 업데이트가 인덱스(SEG)에 적용되기 전에 또한, 예시적인 병합 동작은 1의 mc 값을 갖는 네 개의 서브 인덱스들의 또 다른 서브 시퀀스를 검출할 수 있다. 따라서, 예시적인 병합 동작은 다음을 포함할 수 있다: x를 1의 값으로 설정하고; 검출된 서브 시퀀스를 함께 병합하여 새로운 병합된 서브 인덱스를 생성하고; 병합된 서브 인덱스에 x+1(즉, 2)의 mc 값을 부여하며; 그리고 인덱스(SEG)에서 검출된 서브 시퀀스를 병합된 서브 인덱스(SEG)로 대체한 결과로서, [2]의 새로운 상태가 된다. 예시적인 병합 동작은 인덱스(SEG)에 대한 후속 업데이트들에 대해 계속 이러한 방식으로 수행될 수 있다. 다음의 표 1은 인덱스(SEG)에 대한 예시적인 병합 동작의 동작에 기초한 mc 값들의 예시적인 상태들을 예시한다.
mc 값들의 상태 SEG | SEG 설명 |
00 | SEG는 둘 다 mc == 0인 두 번의 업데이트들(서브 인덱스들)이 적용됨 |
000 | 또한 mc ==0인 세 번째 업데이트가 도달됨 |
0000 --> 1 | 네 번째 업데이트는 mc ==0인 4개의 서브 인덱스들을 생성하며, 이들이 mc ==1인 하나의 병합된 서브 인덱스로 병합됨 |
0001 | 각각 mc ==0인 세 번 이상의 업데이트들이 도달됨 |
00001 --> 11 | 다음 업데이트, 또 다른 병합이 수행되어, mc ==1인 2개의 서브 인덱스들이 남음 |
000011 --> 111 | 또 다른 네 번의 업데이트들이 도달, 또 다른 병합이 수행되어, mc ==1인 3개의 서브 인덱스들이 남음 |
0000111 --> 1111 --> 2 | 또 다른 네 번의 업데이트들이 도달, 이중 병합이 수행되어, 1 @ mc ==2이 남음 |
22 | SEG에 대한 또 다른 16번의 업데이트들 후 mc 값들의 상태 |
222 | SEG에 대한 또 다른 16번의 업데이트들 후 mc 값들의 상태 |
3 | SEG에 대한 또 다른 16번의 업데이트들 후 mc 값들의 상태 |
본 명세서에서 사용될 때, KVS 트리는 (예를 들어, 트리의 컨텐츠보다는) 키의 미리 결정된 도출(derivation)에 기초하여 부모와 자식 노드들간이 연결되는 노드들을 포함하는 트리 데이터 구조를 포함한다. 각 노드는 키-값 세트들(key-value sets)(본 명세서에서 kv 세트들이라고도 지칭됨)의 순서화된(예를 들어, 시간적으로 순서화된) 시퀀스를 포함할 수 있다. 시간적으로 순서화된 경우, 시퀀스에서의 더 나중의 키-값 세트들은 더 오래된 키-값 세트들을 나타낼 수 있다. kv 세트들은 하나 이상의 키-값 쌍을 포함할 수 있며, 이는 값들을 참조하는 대응하는 키들과 함께 값들이 KVS 트리에 저장되게 한다. 이에 따라, KVS 트리 내에서, kv 세트들은 KVS트리의 노드들에 조직된 개별 키 및 값 저장소들로서 기능한다. 소정의 kv 세트 내의 키-값 쌍들은 키로 정렬될 수 있다. 소정의 kv 세트 내의 모든 키는 kv 세트에서의 다른 키들과 달리 고유할 수 있지만, KVS 트리 내의 키들은 고유하지 않을 수 있다(예를 들어, KVS 트리의 단일 노드 내의 또는 상이한 노드들에서의 두 개의 상이한 kv 세트는 동일한 키를 포함할 수 있다). 각 kv 세트는 노드에 기입되면 불변일 수 있다(예를 들어, 노드에 배치/저장되면, kv 세트는 변하지 않는다). 노드 내의 kv 세트가 불변일 수 있지만, kv 세트는 삭제될 수 있거나 kv 세트의 데이터 컨텐츠 중 일부 또는 전부가 새로운 kv 세트에 추가될 수 있다.
kv 세트는 kv 세트의 키-값 쌍들의 키 엔트리들을 저장하기 위한 키 트리를 포함할 수 있으며, 여기서 소정의 키 엔트리는 키, 및 값에 대한 레퍼펀스 둘 다를 포함할 수 있다. 키 트리에 고유한 키들을 효율적으로 저장하고 검색하는 데 이진 탐색 트리들, B-트리들 등과 같은 다양한 데이터 구조들이 사용될 수 있다(예를 들어, 이는 데이터 트리가 아닐 수도 있다). 예를 들어, 키들은 키 트리의 리프 노드들(leaf nodes)에 저장되며, 여기서 키 트리의 임의의 서브 트리에서의 최대 키는 최우측 자식의 최우측의 엔트리에 있을 수 있고, 키 트리의 제1 노드의 최우측 에지는 키 트리의 서브 노드에 링크되며, 키 트리의 서브 노드에 루트를 둔 서브 트리에서의 모든 키들은 키 트리의 제1 노드에서의 모든 키들보다 클 수 있다.
일부 실시 예들의 경우, kv 세트의 키 엔트리들은 주요 키 블록 및 0개 이상의 확장 키 블록을 포함할 수 있는 키 데이터 블록들(키 블록들 또는 k 블록들이라고도 지칭됨)의 세트로 저장된다. 키 블록들의 세트의 구성원들은 SSD, 하드 디스크 드라이브 등과 같은 메모리 디바이스에 의해 구현되는 데이터 저장 매체에 대한 매체 데이터 블록들(매체 블록들)에 대응할 수 있다. 각 키 블록은 이를 키 블록으로서 식별하기 위한 헤더를 포함할 수 있고, kv 세트의 기본 키 블록은 kv 세트의 하나 이상의 확장 키 블록에 대한 매체 블록 식별 정보들의 리스트를 포함할 수 있다.
기본 키 블록은 kv 세트의 키 트리에 대한 헤더를 포함할 수 있다. 헤더는 키들 또는 kv 세트와의 상호 작용을 돕거나 용이하게 하는 다수의 값들을 포함할 수 있다. 예를 들어, 기본 키 블록, 또는 그 안에 저장된 헤더는 kv 세트의 키 트리에서 최하위 키의 카피, 또는 kv 세트의 키 트리에서의 최상위 키의 카피를 포함할 수 있다. 기본 키 블록은 kv 세트의 키 트리에 대한 매체 블록 식별 정보들의 리스트르를 포함할 수 있다. 또한, 기본 키 블록은 kv 세트의 블룸 필터(bloom filter)에 대한 블룸 필터 헤더를 포함할 수 있고, 기본 키 블록은 kv 세트의 블룸 필터에 대한 매체 블록 식별 정보들의 리스트를 포함할 수 있다.
일부 실시 예들의 경우, kv 세트의 값들은 값 데이터 블록들(값 블록들 또는 v 블록들이라고도 지칭됨)의 세트로 저장된다. KVS 트리에서의 각 특정 값 블록은 특정 값 블록이 KVS트리에 대해 초기에 생성되었던 시퀀스 순서를 나타내는 이와 연관된 데이터 생성 숫자를 가질 수 있다. 이렇게 하여, 특정 값 블록의 데이터 생성 숫자는 특정 값 블록이 초기에 생성되는 때에 대한 타임 스탬프로서 역할을 할 수 있다. 예를 들어, 데이터 생성 번호들은 KVS 트리의 루트 노드 (예를 들어, 이의 kv 세트)에 생성되고 추가되는 제1 값 블록에 대해 "1"의 값에서 시작할 수 있고, KVS트리의 루트 노드(예를 들어, 이의 kv 세트)에 생성되고 추가되는 제2 값 블록은 "2"의 데이터 생성 번호를 가질 것이다. 데이터 생성 번호는 루트 노드를 통해 KVS 트리에 생성되고 추가되는 각 새로운 값 블록에 따라 증가한다.
값 블록들의 세트의 구성원들은 본 명세서에서 언급된 바와 같이 SSD, 하드 디스크 드라이브 등을 포함할 수 있는 메모리 디바이스에 의해 구현되는 데이터 저장 매체에 대한 매체 데이터 블록들(매체 블록들)에 대응할 수 있다. 각 키 블록은 이를 값 블록으로서 식별하기 위한 헤더를 포함할 수 있다. 값 블록은 이들 간에 구분 없이 하나 이상의 값들에 대한 저장 섹션을 포함할 수 있으며, 여기서 제1 값의 비트들은 이들 간에 가드, 컨테이너, 또는 다른 구획이 없이 데이터 저장 매체 상의 제2 값의 비트들로 실행될 수 있다. 다양한 실시 예들의 경우, kv 세트의 기본 키 블록은 kv 세트에 대한 값 블록들의 세트에서의 값 블록들에 대한 미디어 블록 식별 정보들의 리스트를 포함한다. 이러한 하여, 기본 키 블록은 kv 세트 내의 값 블록들에 대한 저장 레퍼런스들을 관리할 수 있다.
일부 실시 예들의 경우, 키와 연관된 데이터 마커(이하, 톰스톤(tombstone)이라고 지칭됨)는 키에 대응하는 값이 삭제되었음을 표시하기 위해 사용된다. 톰스톤은 키와 연관되어 키 엔트리에 상주할 수 있고, 어떠한 값 블록 공간도 키-값 쌍에 대해 소비되지 않을 수 있다. 일부 실시 예들에 따르면, 톰스톤은 KVS 트리로부터 값을 제거하는 가능한 비경제적인 동작을 피하면서 키와 연관된 값의 삭제를 마킹한다. 일부 실시 예들의 경우, 소정의 키에 대한 KVS 트리의 시간적으로 순서화된 탐색 동안 톰스톤(tombstone)을 만날 때, 탐색 프로세스는 해당 소정의 키와 연관된 키-값 쌍의 만료된 버전이 KVS 트리 내의 더 낮은(예를 들어, 더 오래된) 위치에 상주하더라도, 소정의 키에 대응하는 값이 삭제되었다는 것을 안다.
일부 실시 예들의 경우, 기본 키 블록은 kv 세트에 대한 메트릭들의 세트를 포함한다. 예를 들어, 메트릭들의 세트는 다음 중 하나 이상을 포함할 수 있다: kv 세트에 저장된 키들의 총 수, 또는 kv 세트에 저장된 톰스톤 값들을 갖는 키들의 수; kv 세트에 저장된 키들에 대한 모든 키 길이들의 합; kv 세트에 저장된 키들에 대한 모든 값 길이들의 합계. 마지막 두 개의 메트릭들은 kv 세트에 의해 소비되는 적어도 근사한(정확하지 않다면) 저장량을 제공할 수 있다. 메트릭들의 세트는 또한 예를 들어, kv 세트의 값 블록들에서의 참조되지 않는 데이터(예를 들어, 참조되지 않은 값들)의 양을 포함할 수 있다. 이러한 마지막 메트릭은 메인터넌스 동작(예를 들어, KVS 트리에 대해 수행되는 가비지 수집 동작)에서 되찾아질 수 있는 공간의 추정을 제공할 수 있다.
다양한 실시 예들의 병합 동작은 지정된 또는 계산된 기준들을 충족하는 소정의 노드에서의 하나 이상의 kv 세트에 관한 조건과 같은 다양한 트리거링 조건들에 응답하여 수행될 수 있다. 예를 들어, 실시 예에 따라, 본 명세서에서 설명되는 병합 동작은 (예를 들어, 소정의 노드의 부모 노드로부터 소정의 노드로 kv 세트를 이동(예를 들어, 스필링(spilling))한 결과로서) 소정의 노드에 의한 새로운 kv 세트의 추가(예를 들어, 인제션(ingestion))와 같이, 소정의 노드에 대해 수행되는 업데이트에 응답하여 KVS 트리의 소정의 노드에 대해 수행(예를 들어, 트리거)될 수 있다. 대안적으로, 병합 동작은 전체 KVS 트리에 대해 또는 KVS트리의 개별 노드들에 대해 연속적으로 수행될 수도 있다(예를 들어, 백그라운드 프로세스에서 실행됨). KVS 트리의 하나 이상의 노드에 대한 (예를 들어, 트리거 조건에 응답하여 또는 백그라운드 프로세스로서) 병합 동작의 연속적인 수행은 특히 키들에 기초하여 값들을 탐색하는 것에 대해, KVS 트리의 동작에서의 연속적인 개선을 유도할 수 있다.
본 명세서에서 설명되는 병합 동작을 트리거할 수 있는 kv 세트 관련 기준들의 다른 예들은 제한 없이, 소정의 노드 내의 kv 세트들의 수, 소정의 노드에 대한 리소스들(예를 들어, 미디어 블록들)의 해제(freeing), 소정의 노드 내의 하나 이상의 kv 세트의 총 사이즈, 또는 가비지 콜렉션에 이용 가능한 하나 이상의 kv 세트들에서의 데이터의 양을 포함한다. kv 세트에서 가비지 수집에 이용 가능한 데이터의 일례는 예를 들어, 더 새로운 kv 세트에서의 키-값 쌍 또는 톰스톤, 또는 제약(예를 들어, 존속 시간 제약)을 위반한 키-값과 쌍에 의해, 쓸모 없게 된 kv세트에서의 하나 이상의 키-값 쌍 또는 톰스톤을 포함한다. 다른 예는 KVS 트리에 대한 메인터넌스(예를 들어, 가비지 수집)를 수행하기 위한 조건을 포함한다. 또 다른 예는 (예를 들어, 소프트웨어 애플리케이션 또는 호스트 시스템의 운영 시스템으로부터) KVS 트리의 하나 이상의 노드에 대해 병합 동작을 개시하라는 요청을 수신하는 것을 포함하며, 여기서 요청은 또한 kv 세트들의 전체 시퀀스 또는 kv 세트들의 서브 시퀀스가 병합 동작에 의해 동작될지 여부를 지정할 수도 있다.
일부 실시 예들의 경우, 본 명세서에서 설명되는 병합 동작은 kv 세트들의 값 블록들은 그대로 남겨두면서 kv 세트들의 키 블록들을 병합함으로써 소정의 노드의 kv 세트들의 시퀀스에서, kv 세트들의 서브 시퀀스를 (소정의 노드의) 병합된 kv 세트로 병합한다. 그렇게 함에 있어서, 병합 동작은 결과적인 병합된 kv 세트에 대한 새로운 값 블록들을 기입하는 것을 피하면서(예를 들어, kv 세트들의 기존 값 블록들이 그대로 병합된 kv 세트로 이동됨), 병합된 kv 세트에 대해 (kv 세트들의 기존 키 블록들에 기초하여) 하나 이상의 새로운 키 블록을 기입함으로써, 병합 동작 동안 KVS 트리에 대해 수행되는 기입 동작들의 양을 감소시킬 수 있다.
예를 들어, 병합 동작은 소정의 노드의 kv 세트들의 시퀀스(예를 들어, 시간적 서브 시퀀스)에서, 서브 시퀀스를 병합하여, 병합된 kv 세트를 생성할 수 있으며, 여기서 결과적인 병합된 kv 세트는 kv 세트들의 서브 시퀀스의 기존 값 블록들의 세트를 참조하는 새로운 키 블록들의 세트를 포함한다. 새로운 키 블록들의 세트는 kv 세트들의 서브 시퀀스의 기존 키 블록들의 세트에 기초하여 생성(예를 들어, 이로부터 카피)될 수 있다. 예를 들어, 새로운 키 블록들의 세트는 기존 키 블록들의 세트의 값들(예를 들어, 키 값들 및 기존 값 블록들에 대한 레퍼런스들)을 새로운 키 블록들의 세트로 복사함으로써 kv 세트들의 서브 시퀀스의 기존 키 블록들의 세트에 기초하여 생성될 수 있다. 새로운 키-값 블록들의 세트에 의해 참조되지 않는 kv 세트들의 서브 시퀀스의 이러한 기존 값 블록들은 유지되지만(예를 들어, 삭제되지 않음) 참조되지 않는 것으로 간주된다.
새로운 키 블록들의 세트가 생성된 후에, 병합 동작은 각 특정 키-값 세트의 하나 이상의(예를 들어, 모든) 값 블록을 남겨두면서(예를 들어, 그대로 보존됨) 소정의 노드로부터, 키-값 세트들의 서브 시퀀스에서 각 특정 키-값을 삭제하고, 각 특정 키-값의 하나 이상의(예를 들어, 모든) 키 블록을 삭제할 수 있다. 보존된 값 블록들은 새로운 키 블록들의 세트에 의해 참조되는 값 블록들, 새로운 키 블록들의 세트 중 어느 것에 의해서도 참조되지 않는 값 블록들, 또는 둘 모두를 포함할 수 있다. kv 세트들의 서브 시퀀스의 모든 값 블록들(그대로 보존됨)은 병합된 kv 세트로 이동될 수 있다. 이어서, 결과적인 병합된 kv 세트는 kv 세트들의 시퀀스에서 kv 세트들의 서브 시퀀스를 대체할 수 있다. 전술한 동작들은 본 명세서에서 총괄하여 키 압축(k-압축)이라고 지칭될 수 있으며, 이는 지난 키 블록들 및 이러한 지난 키 블록들에 의해 점유되는 해제된 자원들(예를 들어, 데이터 저장 매체의 매체 블록들)을 제거하기 위한 가비지 수집의 형태로서 간주될 수 있다.
대안적으로, 일부 실시 예들의 경우, 본 명세서에서 설명되는 병합 동작은 kv 세트들의 키 블록들을 병합하고 kv 세트들의 값 블록들을 병합함으로써 소정의 노드의 kv 세트들의 시퀀스에서, kv 세트들의 서브 시퀀스를 (소정의 노드의) 병합된 kv 세트로 병합하는 것을 포함한다. 그렇게 함에 있어서, 병합 동작은 병합된 kv 세트에 대해 (kv 세트들의 기존 키 블록들에 기초하여) 새로운 하나 이상의 키 블록을 기입할 수 있고, 병합된 kv 세트에 대해 (kv 세트들의 기존 값 블록들에 기초하여) 새로운 값 블록들을 기입할 수 있다. 예를 들어, 병합 동작은 소정의 노드의 kv 세트들의 시퀀스(예를 들어, 시간적 서브 시퀀스)에서, 서브 시퀀스를 병합하여, 병합된 kv 세트를 생성할 수 있으며, 여기서 결과적인 병합된 kv 세트는 새로운 값 블록들의 세트를 참조하는 새로운 키 블록들의 세트를 포함하고, 새로운 키 블록들의 세트는 kv 세트들의 서브 시퀀스의 기존 키 블록들의 세트에 기초하여 생성되며, 새로운 값 블록들의 세트는 kv 세트들의 서브 시퀀스의 기존 값 블록들의 세트에 기초하여 생성된다.
예를 들어, 새로운 키 블록들의 세트는 기존 키 블록들의 세트의 값들(예를 들어, 키 값들)을 새로운 키 블록들의 세트로 복사함으로써, 그리고 (새로운 키 블록들의 세트에서의) 새로운 키 블록들이 기존 키 블록들의 세트에 의해 참조되는 기존 블록들에 대응하는 (새로운 값 블록들의 세트에서의) 새로운 값 블록들을 각각 참조하게 함으로써 kv 세트들의 서브 시퀀스의 기존 키 블록들의 세트에 기초하여 생성될 수 있다. 새로운 값 블록들의 세트는 기존 값 블록들의 세트의 값들을 새로운 값 블록들의 세트로 복사함으로써 kv 세트들의 서브 시퀀스의 기존 값 블록들의 세트에 기초하여 생성될 수 있다. 새로운 키 블록들의 세트 및 새로운 값 블록들의 세트가 생성된 후에, 병합 동작은 소정의 노드로부터, kv 세트들의 서브 시퀀스에서 각 특정 kv 세트를 삭제하고, 각 특정 kv 세트의 하나 이상의 키 블록을 삭제할 수 있다. 또한, 새로운 키 블록들의 세트 및 새로운 값 블록들의 세트가 생성된 후에, kv 세트들의 서브 시퀀스의 하나 이상의 기존 값 블록들(예를 들어, 모든 기존 값 블록들)이 삭제될 수도 있다. 이어서, 결과적인 병합된 kv 세트는 kv 세트들의 시퀀스에서 kv 세트들의 서브 시퀀스를 대체할 수 있다. 전술한 동작들은 본 명세서에서 총괄하여 키-값 압축(kv-압축)이라고 지칭될 수 있으며, 이는 지난 키 블록들 및 값 블록들및 이러한 지난 키 블록들 및 값 블록들에 의해 점유되는 해제된 자원들(예를 들어, 데이터 저장 매체의 매체 블록들)을 제거하기 위한 가비지 수집의 형태로서 간주될 수 있다.
일부 실시 예들에 따르면, KVS 트리는 메모리 서브 시스템에 의해 구현되는 데이터 저장 매체 상에 생성되고 저장되며, 여기서 KVS 트리는 데이터를 데이터 저장 매체 상에 하나 이상의 키-값 쌍으로서 저장하기 위해 사용될 수 있다. 실시 예에 따라, 본 명세서에 설명된 동작들은 호스트 시스템, 메모리 서브 시스템, 또는 이 둘의 일부 조합에 대해 수행될 수 있다.
본 명세서에서 설명된 바와 같은 카운트 값들을 사용하여, KVS 트리의 노드들의 키-값 세트들과 같은, 인덱스의 서브 인덱스들을 병합(예를 들어, 압축)하는 것에 관한 동작들을 수행하는 시스템들의 일부 예들이 본 명세서에서 개시된다.
도 1은 본 개시의 일부 예들에 따른, 메모리 서브 시스템(110)을 포함하는 예시적인 컴퓨팅 환경(100)을 도시한다. 메모리 서브 시스템(110)은 메모리 구성요소들(112A 내지 112N)과 같은 매체들을 포함할 수 있다. 메모리 구성요소들(112A 내지 112N)은 휘발성 메모리 디바이스들, 비휘발성 메모리 디바이스들 또는 이들의 조합일 수 있다. 일부 실시 예들에서, 메모리 서브 시스템(110)은 저장 시스템이다. 저장 시스템의 일례는 SSD이다. 일부 실시 예들에서, 메모리 서브 시스템(110)은 하이브리드 메모리/저장 시스템이다. 일반적으로, 컴퓨팅 환경(100)은 메모리 서브 시스템(110)을 사용하는 호스트 시스템(120)을 포함할 수 있다. 예를 들어, 호스트 시스템(120)은 메모리 서브 시스템(110)에 데이터를 기입하고 메모리 서브 시스템(110)으로부터 데이터를 판독할 수 있다.
호스트 시스템(120)은 컴퓨팅 디바이스 이를테면 데스크탑 컴퓨터, 랩탑 컴퓨터, 네트워크 서버, 모바일 디바이스, 또는 메모리 및 프로세싱 디바이스를 포함하는 컴퓨팅 디바이스일 수 있다. 호스트 시스템(120)은 호스트 시스템(120)이 메모리 서브 시스템(110)으로부터 데이터를 판독하거나 이에 데이터를 기입할 수 있도록 메모리 서브 시스템(110)을 포함하거나 이에 결합될 수 있다. 호스트 시스템(120)은 물리적 호스트 인터페이스를 통해 메모리 서브 시스템(110)에 결합될 수 있다. "~에 연결된(coupled to)"은 본 명세서에서 사용될 때, 일반적으로 전기적, 광학적, 자기적 등과 같은 접속을 포함하여, 유선이든 무선이든, 간접 통신 접속 또는 직접 통신 접속일 수 있는, 구성요소들 사이의 접속을 나타낸다. 물리적 호스트 인터페이스의 예들은 SATA(serial advanced technology attachment) 인터페이스, PCIe(peripheral component Interconnect express) 인터페이스, USB(universal serial bus) 인터페이스, 파이버 채널, 직렬 접속 SCSI(SAS, Serial Attached SCSI) 인터페이스 등을 포함하나, 이에 제한되지는 않는다. 물리적 호스트 인터페이스는 호스트 시스템(120)과 메모리 서브 시스템(110) 사이에서 데이터를 송신하는 데 사용될 수 있다. 호스트 시스템(120)은 또한 메모리 서브 시스템(110)이 PCIe 인터페이스에 의해 호스트 시스템(120)과 결합될 때 NVMe(NVM Express) 인터페이스를 이용하여 메모리 구성요소들(112A 내지 112N)에 액세스할 수 있다. 물리적 호스트 인터페이스는 메모리 서브 시스템(110)과 호스트 시스템(120) 사이에서 제어, 어드레스, 데이터 및 다른 신호들을 전달하기 위한 인터페이스를 제공할 수 있다.
메모리 구성요소들(112A 내지 112N)은 상이한 유형들의 비휘발성 메모리 구성요소들 및/또는 휘발성 메모리 구성요소들의 임의의 조합을 포함할 수 있다. 비휘발성 메모리 구성요소들의 일례는 부정 곱(NAND) 유형 플래시 메모리를 포함한다. 메모리 구성요소들(112A 내지 112N) 각각은 단일 레벨 셀들(SLC들) 또는 다중 레벨 셀들(MLC들)(예를 들어, TLC들 또는 QLC들)과 같은 메모리 셀들의 하나 이상의 어레이를 포함할 수 있다. 일부 실시 예들에서, 특정 메모리 구성요소는 메모리 셀들의 SLC 부분 및 MLC 부분 양자를 포함할 수 있다. 메모리 셀들 각각은 호스트 시스템(120)에 의해 사용되는 데이터의 하나 이상의 비트(예를 들어, 데이터 블록)를 저장할 수 있다. NAND 유형 플래시 메모리와 같은 비휘발성 메모리 구성요소들이 설명되지만, 메모리 구성요소들(112A 내지 112N)은 휘발성 메모리와 같은 임의의 다른 유형의 메모리에 기초할 수 있다. 일부 실시 예들에서, 메모리 구성요소들(112A 내지 112N)은 랜덤 액세스 메모리(RAM), 판독 전용 메모리(ROM), 동적 랜덤 액세스 메모리(DRAM), 동기식 동적 랜덤 액세스 메모리(SDRAM), 상 변화 메모리(PCM), 자기 랜덤 액세스 메모리(MRAM), 부정 합(NOR) 플래시 메모리, 전기적으로 소거 가능한 프로그래밍 가능한 판독 전용 메모리(EEPROM), 및 비휘발성 메모리 셀들의 크로스 포인트 어레이일 수 있으나, 이에 제한되지는 않는다. 비휘발성 메모리 셀들의 크로스 포인트 어레이는 적층 가능한 크로스 그리드 데이터 액세스 어레이와 함께, 벌크 저항의 변화에 기초하여 비트 저장을 수행할 수 있다. 또한, 크로스 포인트 비휘발성 메모리는 많은 플래시 기반 메모리들과 달리, 제자리 기입 동작을 수행할 수 있으며, 이때 비휘발성 메모리 셀은 비휘발성 메모리 셀이 사전에 소거되지 않고도 프로그래밍될 수 있다. 뿐만 아니라, 메모리 구성요소들(112A 내지 112N)의 메모리 셀들은 데이터를 저장하는 데 사용되는 메모리의 유닛을 나타낼 수 있는 메모리 페이지들 또는 데이터 블록들로서 그룹화될 수 있다.
메모리 서브 시스템 제어기(115)는 메모리 구성요소들(112A 내지 112N)과 통신하여 메모리 구성요소들(112A 내지 112N)에서의 데이터 판독, 데이터 기입 또는 데이터 소거와 같은 동작들 및 다른 이러한 동작들을 수행할 수 있다. 메모리 서브 시스템 제어기(115)는 하나 이상의 집적 회로 및/또는 개별 구성요소, 버퍼 메모리, 또는 이들의 조합과 같은 하드웨어를 포함할 수 있다. 메모리 서브 시스템 제어기(115)는 마이크로 제어기, 특수 목적 논리 회로부(예를 들어, 현장 프로그래밍 가능한 게이트 어레이(FPGA), 용도 특정 집적 회로(ASIC) 등), 또는 또 다른 적합한 프로세서일 수 있다. 메모리 서브 시스템 제어기(115)는 로컬 메모리(119)에 저장된 명령어들을 실행하도록 구성된 프로세서(프로세싱 디바이스)(117)를 포함할 수 있다. 도시된 예에서, 메모리 서브 시스템 제어기(115)의 로컬 메모리(119)는 메모리 서브 시스템(110)과 호스트 시스템(120) 사이의 통신을 핸들링하는 것을 포함하여, 메모리 서브 시스템(110)의 동작을 제어하는 다양한 프로세스들, 동작들, 논리 흐름들, 및 루틴들을 수행하기 위한 명령어들을 저장하도록 구성된 임베디드 메모리를 포함한다. 일부 실시 예들에서, 로컬 메모리(119)는 메모리 포인터들, 페칭된 데이터 등을 저장하는 메모리 레지스터들을 포함할 수 있다. 로컬 메모리(119)는 또한 마이크로 코드를 저장하기 위한 판독 전용 메모리(ROM)를 포함할 수 있다. 도 1에서의 예시적인 메모리 서브 시스템(110)은 메모리 서브 시스템 제어기(115)를 포함하는 것으로 도시되었지만, 본 개시의 또 다른 실시 예에서, 메모리 서브 시스템(110)은 메모리 서브 시스템 제어기(115)를 포함하지 않을 수 있고, 대신 외부 제어(예를 들어, 외부 호스트에 의해 또는 메모리 서브 시스템과 별개인 프로세서 또는 제어기에 의해 제공되는)에 의존할 수 있다.
일반적으로, 메모리 서브 시스템 제어기(115)는 호스트 시스템(120)으로부터 커맨드들 또는 동작들을 수신할 수 있고 커맨드들 또는 동작들을 메모리 구성요소들(112A 내지 112N)에 대한 목적하는 액세스를 달성하기 위한 명령어들 또는 적절한 커맨드들로 변환할 수 있다. 메모리 서브 시스템 제어기(115)는 웨어 레벨링 동작들, 가비지 수집 동작들, 오류 검출 및 오류 정정 코드(ECC, error-correcting code) 동작들, 암호화 동작들, 캐싱 동작들, 및 메모리 구성요소들(112A 내지 112N)과 연관된 논리적 블록 어드레스와 물리적 블록 어드레스 사이의 어드레스 변환과 같은 다른 동작들도 담당할 수 있다. 메모리 서브 시스템 제어기(115)는 또한 물리적 호스트 인터페이스를 통해 호스트 시스템(120)과 통신하기 위한 호스트 인터페이스 회로부를 포함할 수 있다. 호스트 인터페이스 회로부는 호스트 시스템(120)으로부터 수신된 커맨드들을 메모리 구성요소들(112A 내지 112N)에 액세스하기 위한 커맨드 명령어들로 변환할 뿐만 아니라 메모리 구성요소들(112A 내지 112N)과 연관된 응답들을 호스트 시스템(120)에 대한 정보로 변환할 수도 있다.
메모리 서브 시스템(110)은 또한 도시되지 않은 추가 회로부 또는 구성요소들을 포함할 수 있다. 일부 실시 예들에서, 메모리 서브 시스템(110)은 메모리 구성요소들(112A 내지 112N)에 액세스하기 위해 메모리 서브 시스템 제어기(115)로부터 어드레스를 수신하고 어드레스를 디코딩할 수 있는 어드레스 회로부(예를 들어, 로우 디코더 및 컬럼 디코더) 및 캐시 또는 버퍼(예를 들어, DRAM)를 포함할 수 있다.
메모리 구성요소들(112A 내지 112N) 중 임의의 하나는 메모리 구성요소의 메모리 셀들을 관리하고, 메모리 서브 시스템 제어기(115)와 통신하며, 메모리 서브 시스템 제어기(115)로부터 수신된 메모리 요청들(예를 들어, 판독 또는 기입)을 실행하기 위한 매체 제어기(예를 들어, 매체 제어기(113A) 및 매체 제어기(113N))를 포함할 수 있다.
호스트 시스템(120)은 메모리 구성요소들(112A 내지 112N) 중 하나 이상에 의해 구현되는 데이터 저장 매체(예를 들어, 매체 풀) 상에 저장된 KVS 트리에 대해 본 명세서에서 설명되는 바와 같은 카운터 기반 병합 동작을 수행하는 데 사용될 수 있는 키-값 저장(KVS, key-value store) 트리에 대한 카운터 기반 병합(122)(카운터 기반 병합 구성요소(122))를 포함한다. 데이터 저장 매체 상에 저장된 KVS 트리는 호스트 시스템(120), 메모리 서브 시스템(110)(예를 들어, 호스트 시스템(120)의 요청 시 메모리 서브 시스템 제어기(115)), 또는 이들의 일부 조합에 의해 생성된 것일 수 있다. 실시 예에 따라, 카운터 기반 병합 구성요소(122)는 호스트 시스템(120) 상의 애플리케이션 또는 운영 체제(예를 들어, 메모리 서브 시스템(110)에 대한 운영 체제 소프트웨어 드라이버)의 일부일 수 있다. 일부 실시 예들에서, 메모리 서브 시스템(110)은 카운터 기반 병합 구성요소(122)의 적어도 일 부분을 포함한다. 예를 들어, 메모리 서브 시스템 제어기(115)는 본 명세서에서 설명된 동작들을 수행하기 위한 로컬 메모리(119)에 저장된 명령어들을 실행하도록 구성된 프로세서(117)(프로세싱 디바이스)를 포함할 수 있다. 본 명세서에서 언급된 바와 같이, 병합 동작은 kv 세트들의 카운트 값들에 기초하여 KVS 트리의 소정의 노드 내의 kv 세트들을 병합할 수 있다.
카운터 기반 병합 구성요소(122)는 지정된 또는 계산된 기준들을 충족하는 소정의 노드에서의 하나 이상의 kv 세트에 관한 조건을 포함할 수 있는 조건(예를 들어, 트리거링 조건)을 검출하는 것에 응답하여 병합 동작을 수행할 수 있다. 예를 들어, 실시 예에 따라, 카운터 기반 병합 구성요소(122)는 (예를 들어, 소정의 노드의 부모 노드로부터 소정의 노드로 kv 세트를 이동(예를 들어, 스필링(spilling))한 결과로서) 소정의 노드에 의한 새로운 kv 세트의 추가(예를 들어, 인제션(ingestion))와 같이, 소정의 노드에 대해 수행되는 업데이트에 응답하여 KVS 트리의 소정의 노드에 대해 병합을 수행할 수 있다. 이러한 kv 세트 관련 기준들의 다른 예들은 제한 없이, 소정의 노드 내의 kv 세트들의 수, 소정의 노드에 대한 리소스들(예를 들어, 미디어 블록들)의 해제(freeing), 소정의 노드 내의 하나 이상의 kv 세트의 총 사이즈, 또는 가비지 콜렉션에 이용 가능한 하나 이상의 kv 세트들에서의 데이터의 양을 포함한다. 카운터 기반 병합 구성요소(122)는 전체 KVS 트리에 대해 또는 KVS 트리의 개별 노드들에 대해 병합할 kv 세트들의 서브 시퀀스들에 대해 연속적으로 검출하는 백그라운드 프로세스로서 동작할 수 있다.
실시 예에 따라, 카운터 기반 병합 구성요소(122)는 로직(예를 들어, 펌웨어와 같은 기계 명령어 세트) 또는 메모리 서브 시스템(110)(예를 들어, 메모리 서브 시스템 제어기(115))가 카운터 기초 병합 구성요소(122)에 대해 본 명세서에서 설명되는 동작들을 수행하게 하는 하나 이상의 구성요소를 포함할 수 있다. 카운터 기반 병합 구성요소(122) 는 본 명세서에서 설명되는 동작들을 수행할 수 있는 유형적 유닛을 포함할 수 있다. 카운터 기반 병합 구성요소(122)의 동작들에 관한 추가 세부 사항들은 후술된다.
도 2는 본 개시의 일부 구현들에 따른, KVS 트리에 대한 예시적인 카운터 기반 병합(200)(이하, 카운터 기반 병합 구성요소(200))의 블록도이다. 도시된 바와 같이, 카운터 기반 병합 구성요소(200)는 키-값 세트 업데이터(210), 카운터 기반 키-값 세트 서브 시퀀스 검출기(220), 및 키-값 세트 병합기(230)를 포함한다. 일부 실시 예들의 경우, 카운터 기반 병합 구성요소(200)는 도 2에 도시된 것과 구성요소들 또는 배열이 상이할 수 있다(예를 들어, 구성요소들이 더 적거나 더 많을 수 있다).
본 명세서에서 언급된 바와 같이, 카운터 기반 병합 구성요소(200)에 의해 동작되는 KVS 트리는 키-값 쌍들로서 데이터(예를 들어, 사용자 데이터)의 저장을 용이하게 하기 위해 메모리 서브 시스템(예를 들어, 110) 상에 저장될 수 있다. KVS 트리는 키-값 저장(KVS) 데이터베이스를 형성하는 복수의 KVS 트리들의 일부일 수 있으며, 이는 이종의 kv 세트들을 포함하는 베이스 레벨 및 각각이 동종의 kv세트들을 각각 포함하는 둘 이상의 KVS 서브 트리들의 루트 노드들(그리고 이데 따라 시작)을 포함하는 두 번째 레벨을 갖는 멀티 레벨 트리를 포함할 수 있다. KVS 트리는 호스트 시스템(예를 들어, 110), 메모리 서브 시스템(예를 들어, 110), 또는 이들의 일부 조합에 의해 생성될 수 있다. KVS 트리는 메모리 구성요소들의 세트 상에, KVS트리가 노드들의 세트를 포함하며, 여기서 노드들의 세트에서의 각 노드는 kv 세트들의 시퀀스를 포함하고, kv 세트들의 시퀀스에서의 kv 세트는 하나 이상의 키를 저장하기 위한 키 블록들의 세트 및 하나 이상의 값을 저장하기 위한 값 블록들의 세트를 포함하도록 생성될 수도 있다. kv 세트들의 시퀀스는 시퀀스에서 더 일찍 추가된 kv 세트들이 최근에 추가된 kv 세트들에 비해 더 오래된 데이터(예를 들어, 키-값 쌍들)를 나타내도록 시간적으로 순서화될 수 있다.
키-값 세트 업데이터(210)는 개별 카운트 값(예를 들어, 병합 카운트 값 또는 병합 카운트 값)을 KVS 트리의 소정의 노드의 kv 세트들의 시퀀스에 추가되는 각 kv 세트와 연관시킨다(예를 들어, 부여한다). 초기에 연관될 때(예를 들어, 초기에 부여될 때), 키-값 세트 업데이터(210)는 각 개별 카운트 값을 0과 같은 디폴트 초기 값으로 설정할 수 있다. 또한, 실시 예들에 따라, 키-값 세트 업데이터(210)는 소정의 노드를 kv 세트로 업데이트하는 것을 담당할 수 있거나, 대안적으로 키-값 세트 업데이터(210)는 단지 kv 세트가 소정의 노드에 추가되는 때를 검출할 수도 있다. 예를 들어, 일부 실시 예들의 경우, 키-값 세트 업데이터(210)는 kv 세트를 수신하고, 이에 응답하여, 소정의 노드의 kv 세트들의 시퀀스에 kv 세트를 덧붙임으로써 kv 세트를 사용하여 소정의 노드를 업데이트하고, 추가된 kv 세트를 초기 카운트 값(예를 들어, 0 또는 일부 다른 디폴트 초기값으로 설정되는)과 연관시킨다(예를 들어, 부여한다). 키-값 세트 업데이터(210)는 kv 세트 세트를 시퀀스 앞에 붙이거나(예를 들어, 노드들에서의 최신 kv 세트들이 키-값 세트 시퀀스들 앞에 붙는다) 또는 kv 세트를 시퀀스 뒤에 붙임으로써(예를 들어, 노드들에서의 최신 kv 세트들이 키-값 세트 시퀀스들 뒤에 붙는다), kv 세트를 시퀀스 뒤에 붙임으로써 시퀀스에 kv 세트를 덧붙일 수 있다. 대안적으로, 일부 실시 예들의 경우, 키-값 세트 업데이터(210)는 KVS 트리에 대해 수행되는 또 다른 동작에 의해 kv 세트가 소정의 노드에 추가되는 때를 검출하고, 이에 응답하여, 키-값 세트 업데이터(210)는 추가된 kv 세트를 초기 카운트 값(예를 들어, 0 또는 일부 다른 디폴트 초기값으로 설정되는)과 연관시킨다(예를 들어, 부여한다). 소정의 노드에 kv 세트의 추가를 야기하는 다른 동작은 예를 들어, 또 다른 노드로부터 소정의 노드로 kv 세트를 이동시키는 이동 동작(예를 들어, 스필 동작)을 포함할 수 있다. 일부 실시 예들의 경우, 소정의 노드에 kv 세트를 추가 시(또는 소정의 노드에 kv 세트의 추가를 검출 시), 키-값 세트 업데이터(210)는 후술될 바와 같이, 카운터 기반 키-값 세트 서브 시퀀스 검출기(220)가 이의 각각의 동작들을 수행하기 시작하게 할 수 있다(예를 들어, 트리거링할 수 있다).
카운터 기반 키-값 세트 서브 시퀀스 검출기(220)는 각 kv 세트가 유사한 카운트 값(예를 들어, 0, 1, 2 등)과 연관된, 특정(예를 들어, 미리 결정된) 수의 kv 세트들(예를 들어, 4개의 kv 세트들)을 서브 시퀀스가 포함하는, kv 세트들의 서브 시퀀스를 소정의 노드의 서브 인덱스들의 시퀀스가 포함하는지 여부를 검출한다. 키-값 세트들의 시퀀스가 키-값 세트들의 서브 시퀀스를 포함한다는 것을 검출하는 것에 응답하여: 카운터 기반 키-값을 갖는 세트 서브 시퀀스 검출기(220)는 키-값 세트 병합기(230)가 kv 세트들의 검출된 서브 시퀀스를 병합된 kv 세트로 병합하고 대체하게 할 수 있다(예를 들어, 트리거링할 수 있다).
키-값 세트 병합기(230)는 카운터 기반 키-값 세트 서브 시퀀스 검출기(220)에 의해 검출된 kv 세트들의 특정 서브 시퀀스를 병합하여 병합된 kv 세트를 생성하고, 병합된 kv 세트를 카운터 기반 키-값 세트 서브 시퀀스 검출기(220)에 의해 사용된 유사한 카운트 값에 기초하여 생성되는 새로운 카운트 값과 연관시켜(예를 들어, 부여하여) kv 세트들의 특정 서브 시퀀스를 검출한다. 예를 들어, 유사한 카운트 값에 기초하는 새로운 카운트 값을 생성하는 것은 새로운 카운트 값을 유사한 카운트 값이 특정 값(예를 들어, 1)만큼씩 증분된 것과 동일하게 설정하는 것을 포함할 수 있다. 이어서 키-값 세트 병합기(230)는 소정의 노드의 kv 세트들의 시퀀스에서, kv 세트들의 특정 서브 시퀀스를 병합된 kv 세트로 대체함으로써, 소정의 노드의 kv 세트들의 업데이트된 시퀀스가 생성될 수 있다. 후속하여 카운터 기반 키-값 세트 서브 시퀀스 검출기(220)는 소정의 노드의 업데이트된 시퀀스가 kv 세트들의 또 다른 서브 시퀀스를 포함하는지 여부를 검출하며, 여기서 서브 시퀀스는 특정(예를 들어, 미리 결정된) 수의 kv 세트들(예를 들어, 4개의 kv 세트들)을 포함하며, 여기서 각 kv 세트는 유사한 카운트 값(예를들면, 0, 1, 2 등)과 연관된다. kv 세트들의 또 다른 서브 시퀀스가 검출되면, 키-값 세트 병합기(230)는 kv 세트들의 다른 하위 시퀀스에 대한 이의 동작을 다시 수행할 수 있고; 그렇지 않으면, 키-값 세트 업데이터(210)는 소정의 노드에 추가될 다음 kv 세트를 대기할 수 있다.
일부 실시 예들의 경우, 키-값 세트 병합기(230)는 병합된 kv 세트가 kv 세트들의 서브 시퀀스의 기존 값 블록들의 세트를 참조하는 새로운 키 블록들의 세트를 포함하도록 kv 세트들의 특정 서브 시퀀스를 병합하고, 새로운 키 블록들의 세트는 키-값 세트들의 서브 시퀀스의 기존 키 블록들의 세트(예를 들어, 기존 키 블록들로부터 새로운 키 블록들로 카피된 키 값들 및 값 블록 레퍼런스들)에 기초하여 생성된다. 이러한 실시 예들의 경우, kv 세트들의 서브 시퀀스의 기존 값 블록들은 이들 각각의 kv 세트들로부터 병합된 kv 세트로 이동될 수 있다. 키-값 세트 병합기(230)는 결과적인 병합된 kv 세트에 대한 새로운 값 블록들을 기입하는 것을 피하면서(예를 들어, kv 세트들의 기존 값 블록들이 그대로 병합된 kv 세트로 이동됨), 병합된 kv 세트에 대해 (kv 세트들의 기존 키 블록들에 기초하여) 하나 이상의 새로운 키 블록을 기입함으로써, 병합 동작 동안 KVS 트리에 대해 수행되는 기입 동작들의 양을 감소시킬 수 있다.
다양한 실시 예들의 경우, 키-값 세트 병합기(230)는 병합된 kv 세트가 새로운 값 블록들의 세트, 및 새로운 값 블록들의 세트를 참조하는 새로운 키 블록들의 세트를 포함하며, 여기서 새로운 값 블록들의 세트는 키-값 세트들의 서브 시퀀스의 기존 값 블록들의 세트에 기초하여 생성되고, 새로운 키 블록들의 세트가 키-값 세트들의 시퀀스의 기존 키 블록들의 세트에 기초하여 생성되도록 kv 세트들의 특정 서브 시퀀스를 병합한다. 이러한 실시 예들의 경우, 키-값 세트 병합기(230)는 병합된 kv 세트에 대해 (kv 세트들의 기존 키 블록들에 기초하여) 하나 이상의 새로운 키 블록을 기입할 수 있고, 병합된 kv 세트에 대해 (kv 세트들의 기존 값 블록들에 기초하여) 하나 이상의 새로운 값 블록을 기입할 수 있으나, 후속하여 기존 키 블록들 및 기존 값 블록들을 삭제함으로써, 이러한 기존 키 블록들 및 기존 값 블록들에 의해 점유된 자원들(예를 들어, 데이터 저장 매체들 상의 매체 블록들)을 되찾을 수 있다.
도 3 내지 도 5는 본 개시의 일부 구현들에 따른, 카운터 기반 병합 동작들을 위한 예시적인 방법들의 흐름도들이다. 도 3 내지 도 5의 방법들(300, 400, 500) 중 어느 하나를 하드웨어(예를 들어, 프로세싱 디바이스, 회로부, 전용 로직, 프로그래밍 가능한 로직, 마이크로 코드, 디바이스의 하드웨어, 집적 회로 등), 소프트웨어(예를 들어, 프로세싱 디바이스 상에서 운영 또는 실행되는 명령어들), 또는 이들의 조합을 포함할 수 있는 프로세싱 로직에 의해 수행될 수 있다. 일부 실시 예들에서, 도 3 내지 도 5의 하나 이상의 방법(300, 400, 500)은 도 1의 호스트 시스템(120)에 의해 수행된다. 이러한 실시 예들에서, 방법들(300, 400, 500)은 적어도 부분적으로, 카운터 기반 병합 구성요소(122) 에 의해 수행될 수 있다. 대안적으로, 도 3 내지 도 5의 하나 이상의 방법은 도 1의 메모리 서브 시스템(110)(예를 들어, 메모리 서브 시스템 제어기(115)의 프로세서)에 의해 수행된다. 프로세스들이 특정 시퀀스 또는 순서로 도시되지만, 달리 특정되지 않는 한, 프로세스들의 순서는 수정될 수 있다. 이에 따라, 도시된 실시 예들은 예들로서만 이해되어야 하고, 도시된 프로세스들은 상이한 순서로 수행될 수 있으며, 일부 프로세스들은 병렬적으로 수행될 수도 있다. 또한, 다양한 실시 예들에서 하나 이상의 프로세스가 생략될 수도 있다. 이에 따라, 모든 프로세스들이 모든 실시 예에서 필수적인 것은 아니다. 다른 프로세스 흐름들도 가능하다. 도 3 내지 도 5의 방법들(300, 400, 500)의 동작들은 KVS 트리의 두 개 이상의 노드들에 대해 동시에 수행된다.
이제 도 3의 방법(300)을 참조하면, 동작(305)에서, 호스트 시스템(예를 들어, 120)의 프로세싱 디바이스는 메모리 서브 시스템(예를 들어, 110) 상에, 노드들의 세트를 포함하는 키-값 저장 트리 데이터 구조(KVS 트리)를 생성하며, 여기서 각 노드는 키-값 세트들(kv 세트들)의 시퀀스를 포함하고, kv 세트들의 시퀀스에서의 각 kv 세트는 개별 카운트 값과 연관되며, kv 세트들의 시퀀스에서의 적어도 하나의 kv 세트는 하나 이상의 키들을 저장하기 위한 키 블록들의 세트 및 하나 이상의 값을 저장하기 위한 값 블록들의 세트를 포함한다. 대안적으로, KVS 트리는 (예를 들어, 또 다른 프로세스에 의해) 이미 생성될 수 있고, 일부 실시 예들의 경우, 동작(305)에서 KVS 트리에 액세스되며, 여기서 KVS 트리에 액세스하는 것은 방법(300)의 후속 동작들(예를 들어 동작(310))을 도울 수 있다.
동작(310)에서, 호스트 시스템의 프로세싱 디바이스는 각 kv 세트(서브 시퀀스에서의)가 유사한 카운트 값(예를 들어, 0, 1, 2 등)과 연관된 미리 결정된 수의 kv 세트들(예를 들어, 4개의 kv 세트들)을 포함하는 kv 세트들의 서브 시퀀스를 kv 세트들의 시퀀스가 포함하는지 여부를 검출한다. 동작(315)에서, 호스트 시스템의 프로세싱 디바이스가 각 kv 세트(서브 시퀀스에서의)가 유사한 카운트 값과 연관된 미리 결정된 수의 kv 세트들을 포함하는 kv 세트들의 서브 시퀀스를 검출한다면(동작(310)에서), 방법(300)은 동작(320)으로 진행하고; 그렇지 않다면 방법(300)은 동작(310)으로 되돌아간다.
동작(320)에서, 호스트 시스템의 프로세싱 디바이스는 kv 세트들의 서브 시퀀스를 병합하여 병합된 kv 세트를 생성한다. 일부 실시 예들에 따르면, kv 세트들의 서브 시퀀스를 병합하는 것으로부터 생성되는 병합된 kv 세트는 서브 시퀀스에서의 임의의 kv세트와 연관된 가장 큰 수(예를 들어, 가장 큰 kv 세트 수) 와 연관된다(예를 들어, 승계된다). 동작(325)에서, 호스트 시스템의 프로세싱 디바이스는 병합된 kv 세트를 유사한 카운트 값에 기초하여 생성되는 새로운 카운트 값과 연관시킨다(예를 들어, 부여한다). 예를 들어, 본 명세서에서 언급된 바와 가이, 유사한 카운트 값에 기초하는 새로운 카운트 값을 생성하는 것은 새로운 카운트 값을 유사한 카운트 값이 특정 값(예를 들어, 1)만큼씩 증분된 것과 동일하게 설정하는 것을 포함할 수 있다. 후속하여, 동작(330)에서, 호스트 시스템의 프로세싱 디바이스는 kv 세트들의 시퀀스 내에서, kv 세트들의 서브 시퀀스를 병합된 kv 세트로 대체하여 kv 세트의 업데이트된 시퀀스를 생성한다.
이제 도 4의 방법(400)을 참조하면, 동작(405)에서, 호스트 시스템(예를 들어, 120)의 프로세싱 디바이스는 메모리 서브 시스템(예를 들어, 110) 상에, 노드들의 세트를 포함하는 키-값 저장 트리 데이터 구조(KVS 트리)를 생성하며, 여기서 각 노드는 키-값 세트들(kv 세트들)의 시퀀스를 포함하고, kv 세트들의 시퀀스에서의 각 kv 세트는 개별 카운트 값과 연관되며, kv 세트들의 시퀀스에서의 적어도 하나의 kv 세트는 하나 이상의 키들을 저장하기 위한 키 블록들의 세트 및 하나 이상의 값을 저장하기 위한 값 블록들의 세트를 포함한다. 대안적으로, KVS 트리는 (예를 들어, 또 다른 프로세스에 의해) 이미 생성될 수 있고, 일부 실시 예들의 경우, 동작(405)에서 KVS 트리에 액세스되며, 여기서 KVS 트리에 액세스하는 것은 방법(400)의 후속 동작들(예를 들어 동작(410))을 도울 수 있다.
동작(410)에서, 호스트 시스템의 프로세싱 디바이스는 새로운 kv 세트를 kv 세트들의 시퀀스에 덧붙임으로써 노드를 업데이트한다. 본 명세서에서 언급된 바와 같이, 실시 예에 따라, 새로운 kv 세트는 노드의 kv 세트들의 시퀀스 앞에 붙을 수 있거나(예를 들어, 노드들에서의 최신 kv 세트들이 kv 세트 시퀀스들 앞에 붙는다) 또는 새로운 kv 세트는 시퀀스 뒤에 붙을 수 있다(예를 들어, 노드들에서의 최신 kv 세트들이 kv 세트 시퀀스들 뒤에 붙는다). 동작(415)에서, 호스트 시스템의 프로세싱 디바이스는 새로운 kv 세트를 디폴트 초기 값(예를 들어, 0)으로 설정될 수 있는 초기 카운트 값과 연관시킨다(예를 들어, 부여한다).
대안적으로, 동작(410)에서, 호스트 시스템의 프로세싱 디바이스는 노드에 대한 업데이트가 kv 세트들의 시퀀스에 새로운 kv 세트가 덧붙는지 여부를 검출할 수 있고, 이에 응답하여, 방법(400)은 동작들(415 내지 435) 중 하나 이상을 수행하도록 진행할 것이다.
일부 실시 예들의 경우, 방법(400)의 동작들(420 내지 440)은 도 3에 대하여 상술된 방법(300)의 동작들(310 내지 330)과 각각 유사하다.
이제 도 5의 방법(500)을 참조하면, 동작(505)에서, 호스트 시스템(예를 들어, 120)의 프로세싱 디바이스는 메모리 서브 시스템(예를 들어, 110) 상에, 서브 인덱스들의 세트를 포함하는 인덱스 데이터 구조를 생성하며, 여기서 서브 인덱스들의 서브 시퀀스에서의 각 서브 인덱스는 개별 카운트 값과 연관된다. 대안적으로,인덱스 데이터 구조는 (예를 들어, 또 다른 프로세스에 의해) 이미 생성될 수 있고, 일부 실시 예들의 경우, 동작(505)에서 인덱스 데이터 구조에 액세스되며, 여기서 인덱스 데이터 구조에 액세스하는 것은 방법(500)의 후속 동작들(예를 들어 동작(510))을 도울 수 있다. 예시적인 인덱스 데이터 구조는 제한 없이, 본 명세서에서 설명된 키-값 저장 트리 데이터 구조를 포함할 수 있고, 서브 인덱스의 일례는 제한 없이, 본 명세서에서 설명된 키-값 세트를 포함할 수 있다. 따라서, 실시 예에 따라, 인덱스 데이터 구조는 KVS 트리 이외의 어떤 것을 포함할 수 있고, 서브 인덱스는 키-값 세트 이이외의 어떤 것을 포함할 수 있다.
동작(510)에서, 호스트 시스템의 프로세싱 디바이스는 새로운 서브 인덱스를 kv 세트들의 시퀀스에 덧붙임으로써 노드를 업데이트한다. 실시 예에 따라, 새로운 서브 인덱스는 노드의 서브 인덱스들의 시퀀스 앞에 붙을 수 있거나(예를 들어, 최신 서브 인덱스들이 서브 인덱스 시퀀스들 앞에 붙는다) 또는 새로운 서브 인덱스는 시퀀스 뒤에 붙을 수 있다(예를 들어, 최신 서브 인덱스들이 서브 인덱스 시퀀스 뒤에 붙는다). 동작(515)에서, 호스트 시스템의 프로세싱 디바이스는 새로운 서브 인덱스를 디폴트 초기 값(예를 들어, 0)으로 설정될 수 있는 초기 카운트 값과 연관시킨다(예를 들어, 부여한다).
대안적으로, 동작(510)에서, 호스트 시스템의 프로세싱 디바이스는 인덱스 데이터 구조가 서브 인덱스들의 시퀀스에 새로운 서브 인덱스가 덧붙는어 인덱스 데이터 구조가 업데이트되는지 여부를 검출할 수 있고, 이에 응답하여, 방법(500)은 동작들(515 내지 535) 중 하나 이상을 수행하도록 진행할 것이다.
동작(520)에서, 호스트 시스템의 프로세싱 디바이스는 각 서브 인덱스(서브 시퀀스에서의)가 유사한 카운트 값(예를 들어, 0, 1, 2 등)과 연관된 미리 결정된 수의 서브 인덱스들(예를 들어, 4개의 서브 인덱스들)을 포함하는 서브 인덱스들의 서브 시퀀스를 서브 인덱스들의 시퀀스가 포함하는지 여부를 검출한다. 동작(525)에서, 호스트 시스템의 프로세싱 디바이스가 각 서브 인덱스(서브 시퀀스에서의)가 유사한 카운트 값과 연관된 미리 결정된 수의 서브 인덱스들을 포함하는 서브 인덱스들의 서브 시퀀스를 검출한다면(동작(520)에서), 방법(500)은 동작(530)으로 진행하고; 그렇지 않다면 방법(500)은 동작(520)으로 되돌아간다.
동작(530)에서, 호스트 시스템의 프로세싱 디바이스는 서브 인덱스들의 서브 시퀀스를 병합하여 병합된 서브 인덱스를 생성한다. 동작(535)에서, 호스트 시스템의 프로세싱 디바이스는 병합된 서브 인덱스를 유사한 카운트 값에 기초하여 생성되는 새로운 카운트 값과 연관시킨다(예를 들어, 부여한다). 예를 들어, 본 명세서에서 언급된 바와 같이, 유사한 카운트 값에 기초하는 새로운 카운트 값을 생성하는 것은 새로운 카운트 값을 유사한 카운트 값이 특정 값(예를 들어, 1)만큼씩 증분된 것과 동일하게 설정하는 것을 포함할 수 있다. 후속하여, 동작(540)에서, 호스트 시스템의 프로세싱 디바이스는 kv 세트들의 시퀀스 내에서, 서브 인덱스들의 서브 시퀀스를 병합된 서브 인덱스로 대체하여 서브 인덱스의 업데이트된 시퀀스를 생성한다.
도 6 은 본 개시의 일부 구현들에 따른, 카운터 기반 병합 동작에 의해 동작될 수 있는 예시적인 KVS 트리(600)를 도시하는 블록도이다. 본 명세서에서 언급된 바와 같이, KVS 트리(600)는 트리로서 조직되는 키-값 데이터 구조를 포함한다. 키-값 데이터 구조로서, 값들은 값들을 참조하는 대응하는 키들과 함께 KVS 트리(600)에 저장된다. 구체적으로, 키 엔트리들은 키 및 값에 대한 레퍼런스와 같은 추가 정보 둘 다를 포함하는 데 사용될 수 있다. 키들 자체는 KVS 트리(600) 내 전체 순서를 가질 수 있고, 이에 따라, 키들은 서로 정렬될 수 있다. 키들은 또한 서브 키들로 분할될 수 있으며, 여기서 서브 키들은 키의 비중첩 부분들이다. 일부 실시 예들의 경우, 키들의 전체 순서는 다수의 키들간에서 유사한 서브 키들을 비교하는 것에 기초한다(예를 들어, 키의 제1 서브 키가 또 다른 키의 제1 서브 키와 비교된다). 또한, 일부 실시 예들에서, 키 프리픽스는 키의 시작 부분을 포함한다. 사용될 때, 키 프리픽스는 하나 이상의 서브 키로 구성될 수 있다.
KVS 트리(600)는 각각이 하나 이상의 키-값 세트(kv 세트)를 포함하는 하나 이상의 노드, 이를테면 노드(610)를 포함할 수 있다. 일부 실시 예들의 경우, (노드(610)와 같은) 하나 이상의 노드 각각은 kv 세트들의 시간적으로 순서화된 시퀀스를 포함한다. 도시된 바와 같이, kv 세트(615)는 이것이 시퀀스의 최신임(newest)을 표시하기 위해 'N' 배지를 포함하는 반면, kv 세트(620)는 이것이 시퀀스 중 가장 오래된 것임(oldest)을 표시하기 위해 'O' 배지를 포함한다. kv 세트(625)는 이것이 시퀀스에서 중간임(intermediate)을 표시하기 위해 'I' 배지를 포함한다. 이러한 배지들은 kv 세트들을 라벨링하기 위해 전체에 걸쳐 사용되나; ('X'와 같은) 또 다른 배지는 그것이 단순히 익명의 kv 세트인 경우에 그것이 파형 부호 '~'가 아니라면 시퀀스에서의 그것의 위치(예를 들어, 새로운, 중간, 오래된 등)보다는 특정 kv 세트를 나타낸다. 아래에서 더 상세히 설명되는 바와 같이, (더 오래된 키 블록들을 갖는) 더 오래된 kv 세트들은 KVS 트리(600)에서 더 낮게 발생한다. 이에 따라, kv 세트들을 L1에서 L2로와 같이 트리 레벨을 밀어 내리는 것(예를 들어, 스필링)은 부모 노드로부터, 적어도 하나의 새로운 kv 세트가 부모 노드의 수신자 자식 노드에서 최신 위치에 추가되게 한다.
KVS 트리(600)는 소정의 노드(예를 들어, 노드(610))의 kv 세트에서의 키-값 쌍(키 블록 및 값 블록에 의해 저장됨)에 대해 소정의 노드의 어느 하나의 자식 노드(예를 들어, L1에서의 모든 노드들에 의해 나타내어지는 노드(610)의 자식 노드들 중 어느 하나)로의 결정론적 맵핑을 포함한다. KVS 트리(600)의 결정론적 맵핑은, 키가 주어지면, 외부 엔티티가 KVS트리(600)의 콘텐츠들을 알지 못해도 키에 대한 (키-값 쌍의) 키 블록 및 값 블록에 대한 KVS 트리(600)의 노드들을 통한 경로를 추적할 수 있다는 것을 의미할 수 있다. 이는 예를 들어, B-트리와 상이하며, 예를 들어, 트리의 콘텐츠는 트리의 탐색 최적화된 구조를 유지하기 위해 소정의 키의 값이 어디에 속할지를 결정할 것이다. 이에 반해, KVS 트리(600)의 결정론적 맵핑은 예를 들어, 키가 주어지면, 최대 트리 레벨(예를 들어, 트리 깊이)이 그 순간에 L1에만 있는 경우에도 키가 매핑될 L3에서의 자식 노드를 계산할 수 있도록 하는 규칙을 제공할 수 있다. 일부 실시 예들의 경우, 결정론적 맵핑은 키의 일부의 해시의 일 부분을 포함한다. 서브 키는 맵핑 세트에 도달하기 위해 해싱될 수 있고, 맵핑 세트의 일 부분은 트리의 임의의 소정의 레벨에 대해 사용될 수 있다. 실시 예에 따라, 키의 부분은 전체 키를 포함할 수 있다.
일부 실시 예들에서, 해시는 해시의 부분을 포함하는 다수의 비중첩 부분들을 포함한다. 예를 들어, 다수의 비중첩 부분들 각각은 트리의 레벨에 대응할 수 있다. 해시의 부분은 노드의 레벨에 의해 다수의 비중첩 부분들로부터 결정될 수 있다. 따라서, 노드에 대한 자식 노드들의 최대 수는 해시의 부분의 크기에 의해 정의될 수 있으며, 여기서 해시의 부분의 크기는 특정 비트들의 수일 수 있다. 예를 들어, 8 비트를 초래하는 키의 해시에 대해, 8 비트는 처음 2 비트, 3 내지 6 비트, 및 7 및 8 비트를 포함하는 세 개의 세트들로 분할될 수 있다. 자식 노드들은 제1 레벨(예를 들어, L1)의 자식 노드들이(비트 1 및 2에 기초하여) 두 개의 비트 명칭들을 갖고, 제2 레벨(예를 들어, L2)의 자식 노드들이(비트 3 내지 6에 기초하여) 4 비트 명칭들을 가지며, 제3 레벨(예로서, L3)의 자식 노드들을(비트 7 및 8에 기초하여) 두 개의 비트 명칭들을 갖도록, 비트들의 세트에 기초하여 인덱싱된다.
일부 실시 예들에서, 노드(610)는 KVS 트리(600)의 루트 노드를 나타낸다. KVS 트리(600) 는 메모리 서브 시스템(예를 들어, 110)에 의해 구현된 데이터 저장 매체들 상에 저장될 수도 있으며, 여기서 KVS트리(600) 는 데이터 저장 매체의 매체 블록들에 저장될 수 있다. 데이터 저장 매체들의 매체 블록들은 블록 어드레싱 가능할 수 있다.
도 7a 및 도 7b는 본 개시의 일부 구현들에 따른, 예시적인 KVS 트리의 노드(705)에 대해 수행되는 예시적인 카운터 기반 병합 동작을 도시하는 흐름도를 도시한다. 예시적인 목적들로, 관심 서브 시퀀스는 각각이 유사한 카운트 값(MC)과 연관되는 세 개의 kv 세트들을 포함하는 키-값 세트(kv 세트)의 서브 시퀀스를 포함하는 것으로 가정될 것이다. 특히, 도 7a는 스테이지 710에서, kv 세트들의 초기 시퀀스가 KV 세트 2 및 KV 세트 1을 포함하는 kv 세트들의 시퀀스를 포함하며, 여기서 각 kv 세트는 0의 MC와 연관된다. 스테이지 715에서, KV 세트 3가 노드(705)에 추가되고, 이에 따라, 스테이지 720에서, 노드(705)는 KV 세트 3, KV 세트 2, 및 KV 세트 1을 포함하는 kv 세트들의 업데이트된 시퀀스를 포함하며, 여기서 각 kv 세트는 0의 MC와 연관된다. 스테이지 725에서, 카운터 기반 병합 동작은 스테이지 730에 도시된 바와 같이, 0의 유사한 MC와 각각 연관된 세 개의 kv 세트들(KV 세트 3, KV 세트 2, 및 KV 세트 1)을 포함하는 관심 서브 시퀀스를 검출한다. 서브 시퀀스를 검출하는 것에 응답하여, 스테이지 735에서, 카운터 기반 병합 동작은 검출된 서브 시퀀스를 병합하고, 스테이지 740에 도시된 바와 같이, 노드(705)는 (이의 병합기들의 수를 반영하기 위해) 1의 MC와 연관된 병합된 KV 세트 3를 포함하는 kv 세트들의 시퀀스를 포함한다. 본 명세서에서 언급된 바와 같이, 일부 실시 예들의 경우, kv 세트들의 서브 시퀀스를 병합하는 것으로부터 생성되는 병합된 kv 세트는 서브 시퀀스에서의 임의의 kv세트와 연관된 가장 큰 수(예를 들어, 가장 큰 kv 세트 수) 와 연관된다(예를 들어, 승계된다).
스테이지 745에서, KV 세트 4가 노드(705)에 추가되고, 이에 따라, 스테이지 750에서, 노드(705)는 KV 세트 4 및 병합된 KV 세트 3를 포함하는 kv 세트들의 업데이트된 시퀀스를 포함하며, 여기서 KV 세트 4는 0의 MC와 연관되고, 병합된 KV 세트 3는 1의 MC와 연관된다. 스테이지 755에서, KV 세트 5가 노드(705)에 추가되고, 이에 따라, 스테이지 760에서, 노드(705)는 KV 세트 5, KV 세트 4, 및 병합된 KV 세트 3를 포함하는 kv 세트들의 업데이트된 시퀀스를 포함하며, 여기서 KV 세트 5 및 KV 세트 4는 0의 MC와 연관되고, 병합된 KV 세트 3는 1의 MC와 연관된다. 스테이지 765에서, KV 세트 6가 노드(705)에 추가되고, 이에 따라, 스테이지 770에서, 노드(705)는 KV 세트 6, KV 세트 5, KV 세트 4, 및 병합된 KV 세트 3를 포함하는 kv 세트들의 업데이트된 시퀀스를 포함하며, 여기서 KV 세트 6, KV 세트 5, 및 KV 세트 4 각각은 0의 MC와 연관되고, 병합된 KV 세트 3는 1의 MC와 연관된다.
스테이지 775에서, 카운터 기반 병합 동작은 도 7b의 스테이지 780에 도시된 바와 같이, 0의 유사한 MC와 각각 연관된 세 개의 kv 세트들(KV 세트 6, KV 세트 5, 및 KV 세트 4)을 포함하는 관심 서브 시퀀스를 검출한다. 이제 도 7b를 참조하면, 서브 시퀀스를 검출하는 것에 응답하여, 스테이지 785에서, 카운터 기반 병합 동작은 검출된 서브 시퀀스를 병합하고, 스테이지 790에 도시된 바와 같이, 노드(705)는 (이의 병합기들의 수를 반영하기 위해) 각각 1의 MC와 연관된 병합된 KV 세트 6 및 병합된 KV 세트 3를 포함하는 kv 세트들의 시퀀스를 포함한다.
도 8a 및 도 8b는 카운터 기반 병합을 위한 방법이 수행되는 예시적인 실시예의 맥락에서 컴퓨팅 환경(100)의 구성요소들 사이의 상호 작용들을 도시하는 상호 작용 도해를 제공한다. 방법의 동작들은 하드웨어(예를 들어, 프로세싱 디바이스, 회로부, 전용 로직, 프로그래밍 가능한 로직, 마이크로 코드, 디바이스의 하드웨어, 집적 회로 등), 소프트웨어(예를 들어, 프로세싱 디바이스 상에서 운영 또는 실행되는 명령어들), 또는 이들의 조합을 포함할 수 있는 프로세싱 로직에 의해 수행될 수 있다. 일부 실시 예들에서, 방법은 호스트 시스템(120)에 의해 수행된다. 동작들이 특정 시퀀스 또는 순서로 도시되지만, 달리 특정되지 않는 한, 프로세스들의 순서는 수정될 수 있다. 이에 따라, 도시된 실시 예들은 예들로서만 이해되어야 하고, 도시된 프로세스들은 상이한 순서로 수행될 수 있으며, 일부 프로세스들은 병렬적으로 수행될 수도 있다. 또한, 다양한 실시 예들에서 하나 이상의 프로세스가 생략될 수도 있다. 이에 따라, 모든 프로세스들이 모든 실시 예에서 필수적인 것은 아니다.
도 8a 내지 도 8b에 예시된 예의 맥락에서, 호스트 시스템은 호스트 시스템(120)을 포함할 수 있고, 메모리 서브 시스템은 메모리 서브 시스템(110)를 포함할 수 있으며, 여기서 메모리 구성요소들(112A 내지 112N) 중 하나 이상이 호스트 시스템(120)에 의해 동작되는 KVS 트리를 저장하기 위한 데이터 저장 매체들을 구현할 수 있다.
도 8a에 도시된 바와 같이, 동작(802)에서, 호스트 시스템(120)은 키-값 저장 트리 데이터 구조(KVS 트리)를 생성하며, 호스트 시스템(120)은 이를 저장을 위해 메모리 서브 시스템(110)에 기입한다. 이에 응답하여, 동작(810)에서, 메모리 서브 시스템(110)은 데이터 저장 매체들 상에 KVS 트리를 저장한다.
동작(804)에서, 호스트 시스템(120)은 KVS 트리의 소정의 노드의 서브 인덱스들의 시퀀스가, 서브 시퀀스가 병합 카운트 기준들(이를테면 서브 시퀀스가, 각 kv 세트가 유사한 카운트 값(예를들면, 0, 1, 2 등)과 연관된 특정(예를 들어, 미리 결정된) 수의 kv 세트들(예를 들어, 4개의 kv 세트들)을 포함하는 것)을 충족하는 키-값 세트들(kv 세트들)의 서브 시퀀스를 포함하는지 여부를 검출한다. 호스트 시스템(120)이 서브 시퀀스를 검출 시, 동작(806)에서, 호스트 시스템(120)은 kv 세트들의 검출된 서브 시퀀스를 병합(예를 들어, k-압축 또는 kv-압축)하여 병합된 kv 세트를 생성한다. 소정의 노드의 kv 세트들의 시퀀스를 병합하기 위해, 호스트 시스템(120)은 메모리 서브 시스템(110)의 데이터 저장 매체들 상에 저장된 KVS 트리를 판독하고(예를 들어, 서브 시퀀스의 키-값 세트들을 판독하고), 동작(812)에서 메모리 서브 시스템(110)이 KVS 트리에 액세스한다. 동작(808)에서, 호스트 시스템(120)은 병합된 kv 세트를 0의 값(또는 몇몇 다른 디폴트 초기값)으로 초기화될 수 있는 새로운 카운트 값과 연관시킨다.
이제도 8b를 참조하면, 동작(808) 후, 동작(820)에서, 호스트 시스템(120)은 kv 세트들의 시퀀스에서, kv 세트들의 서브 시퀀스를 새로운 카운트 값과 연관된 병합된 kv 세트로 대체한다. 호스트 시스템(120)은 메모리 서브 시스템(110)의 데이터 저장 매체 상에 저장된 KVS 트리에 이러한 변경들을 기입하고, 동작(830)에서 메모리 서브 시스템은 저장된 KVS 트리에 대한 이러한 변경들을 커밋한다.
도 9는 본 명세서에서 논의된 방법들 중 임의의 하나 이상을 기계가 수행하게 하기 위해 명령어 세트가 실행될 수 있는 컴퓨터 시스템(900) 형태의 예시적인 기계를 도시한다. 일부 실시 예들에서, 컴퓨터 시스템(900)은 메모리 서브 시스템(예를 들어, 도 1의 메모리 서브 시스템(110))을 포함하거나, 이에 결합되거나, 또는 이를 이용하는 호스트 시스템(예를 들어, 도 1의 호스트 시스템(120))에 대응할 수 있거나 제어기의 동작들을 수행하는 데(예를 들어, 도 1의 카운터 기반 병합 구성요소(122)에 대응하는 동작들을 수행하기 위해 운영 체제를 실행하는 데) 사용될 수 있다. 대안적인 실시 예들에서, 기계는 근거리 네트워크(LAN), 인트라넷, 엑스트라넷, 및/또는 인터넷으로 다른 기계들에 접속(예를 들어, 네트워킹)될 수 있다. 기계는 클라이언트-서버 네트워크 환경에서의 서버 또는 클라이언트 기계로서, 피어-투-피어(또는 분산) 네트워크 환경에서의 피어 기계로서, 또는 클라우드 컴퓨팅 인프라스트럭처 또는 환경에서의 서버 또는 클라이언트 기계로서 동작할 수 있다.
기계는 개인용 컴퓨터(PC), 태블릿 PC, 셋탑 박스(STB), 개인용 정보 단말기(PDA), 휴대 전화, 웹 기기, 서버, 네트워크 라우터, 네트워크 스위치, 네트워크 브리지, 또는 해당 기계에 의해 취해질 동작들을 지정하는 명령어들의 세트(순차적 또는 다른 방식)를 실행할 수 있는 임의의 기계일 수 있다. 나아가, 단일 기계가 도시되지만, "기계"라는 용어는 또한 본 명세서에서 논의된 방법론들 중 임의의 하나 이상을 수행하기 위한 명령어들의 세트(또는 다수의 세트들)를 개별적으로 또는 공동으로 실행하는 임의의 기계 모음을 포함하는 것으로 취해져야 한다.
예시적인 컴퓨터 시스템(900)은 버스(930)를 통해 서로 통신하는, 프로세싱 디바이스(902), 메인 메모리(904)(예를 들어, 판독 전용 메모리(ROM), 플래시 메모리, 동적 랜덤 액세스 메모리(DRAM) 이를테면 동기식 DRAM(SDRAM) 또는 램버스 DRAM(RDRAM) 등), 정적 메모리(906)(예를 들어, 플래시 메모리, 정적 랜덤 액세스 메모리(SRAM) 등), 및 데이터 저장 디바이스(918)를 포함한다.
프로세싱 디바이스(902)는 마이크로 프로세서, 중앙 프로세싱 유닛 등과 같은 하나 이상의 범용 프로세싱 디바이스를 나타낸다. 보다 구체적으로, 프로세싱 디바이스(902)는 복합 명령어 세트 컴퓨팅(CISC, complex instruction set computing) 마이크로 프로세서, 축소 명령어 세트 컴퓨팅(RISC, reduced instruction set computing) 마이크로 프로세서, 훨씬 긴 명령어(VLIW, very long instruction word) 마이크로 프로세서, 다른 명령어 세트들을 구현하는 프로세서, 또는 명령어 세트들의 조합을 구현하는 프로세서들일 수 있다. 프로세싱 디바이스(902)는 또한 용도 특정 집적 회로(ASIC), 필드 프로그래밍 가능한 게이트 어레이(FPGA), 디지털 신호 프로세서(DSP), 네트워크 프로세서 등과 같은 하나 이상의 특수 목적 프로세싱 디바이스일 수 있다. 프로세싱 디바이스(902)는 본 명세서에서 논의된 동작들 및 단계들을 수행하기 위한 명령어들(926)을 실행하도록 구성된다. 컴퓨터 시스템(900)은 네트워크(920)를 통해 통신하기 위한 네트워크 인터페이스 디바이스(908)를 더 포함할 수 있다.
데이터 저장 디바이스(918)는 본 명세서에서 설명된 방법론들 또는 기능들 중 임의의 하나 이상을 구현하는 하나 이상의 명령어 세트(926) 또는 소프트웨어가 저장되는 기계 판독 가능한 저장 매체(924)(컴퓨터 판독 가능한 매체라고도 지칭됨)를 포함할 수 있다. 명령어들(926)은 또한 기계 판독 가능한 저장 매체들을 또한 구성하는 컴퓨터 시스템(900), 메인 메모리(904) 및 프로세싱 디바이스(902)에 의한 이것들의 실행 동안 메인 메모리(904) 내에 그리고/또는 프로세싱 디바이스(902) 내에 완전히 또는 적어도 부분적으로 상주할 수 있다. 기계 판독 가능한 저장 매체(924), 데이터 저장 디바이스(918), 및/또는 메인 메모리(904)는 도 1의 메모리 서브 시스템(110)에 대응할 수 있다.
일 실시 예에서, 명령어들(926)은 본 명세서에서 설명된 바와 같은 카운터 기반 병합 동작(예를 들어, 도 1의 카운터 기반 병합 구성요소(122))에 대응하는 기능을 구현하기 위한 명령어들을 포함한다. 기계 판독 가능한 저장 매체(924)가 예시적인 실시 예에서 단일 매체인 것으로 도시되지만, "기계 판독 가능한 저장 매체"라는 용어는 하나 이상의 명령어 세트를 저장하는 단일의 매체 또는 다수의 매체들을 포함하는 것으로 취해져야 한다. "기계 판독 가능한 매체"라는 용어는 또한 기계에 의한 실행을 위한 명령어 세트를 저장하거나 인코딩할 수 있고 기계로 하여금 본 개시의 방법론들 중 어느 하나 이상을 수행하게 하는 임의의 매체를 포함하는 것으로도 취해져야 한다. 이에 따라, "기계 판독 가능한 저장 매체"라는 용어는 고체 상태 메모리들, 광학 매체들, 및 자기 매체들을 포함하지만, 이에 제한되지는 않는 것으로 취해져야 한다.
선행하는 발명을 실시하기 위한 구체적인 내용의 일부 부분들은 컴퓨터 메모리 내의 데이터 비트들에 관한 동작들의 알고리즘들 및 상징적 표현들과 관련하여 제시되었다. 이러한 알고리즘적 설명 및 표현들은 데이터 프로세싱 분야의 통상의 기술자들에 의해 자신들의 작업 내용을 해당 기술분야의 다른 통상의 기술자들에게 가장 효과적으로 전달하는 데 사용되는 방식들이다. 알고리즘은 본 명세서에서, 그리고 일반적으로 요구되는 결과를 도출하는 동작들의 자기 일관적인 시퀀스인 것으로 구상된다. 동작들은 물리적 수량들의 물리적 조작들을 필요로 하는 것들이다. 반드시 그렇지는 아니지만, 일반적으로, 이러한 수량들은 저장, 조합, 비교, 및 이와 다른 방식으로 조작될 수 있는 전기적 또는 자기적 신호들의 형태를 띤다. 주로 일반적인 용법의 이유로, 이러한 신호들을 비트들, 값들, 요소들, 심볼들, 문자들, 용어들, 숫자들 등으로서 나타내는 것이 때때로 편리한 것으로 입증되었다.
그러나, 이러한 그리고 유사한 용어들은 모두 적절한 물리적 수량들과 연관되어야 하고 이러한 수량들에 적용되는 편리한 라벨들일 뿐임을 명심해야 한다. 본 개시는 컴퓨터 시스템, 또는 컴퓨터 시스템의 레지스터들 및 메모리들 내 물리적(전자적) 수량들로서 표현된 데이터를 조작하고 컴퓨터 시스템의 메모리들 또는 레지스터들 또는 다른 이러한 정보 저장 시스템들 내 물리적 수량들로서 유사하게 표현되는 다른 데이터로 변환하는 유사한 전자 컴퓨팅 디바이스의 동작 및 프로세스들을 나타낼 수 있다.
본 개시는 또한 본 명세서에서의 동작들을 수행하기 위한 장치에 관한 것이다. 이러한 장치는 의도된 목적들을 위해 특별히 구성될 수 있거나, 컴퓨터에 저장된 컴퓨터 프로그램에 의해 선택 가능하게 활성화되거나 재구성되는 범용 컴퓨터를 포함할 수 있다. 이러한 컴퓨터 프로그램은 컴퓨터 판독 가능한 저장 매체 이를테면 이에 제한되지는 않지만, 각각 컴퓨터 시스템 버스에 결합되는, 플로피 디스크, 광학 디스크, CD-ROM, 및 자기 광학 디스크; 판독 전용 메모리(ROM); 랜덤 액세스 메모리(RAM); 소거 가능 프로그래밍 가능한 판독 전용 메모리(EPROM); EEPROM; 자기 또는 광학 카드; 또는 전자 명령어들을 저장하는 데 적합한 임의의 유형의 매체들을 포함하는 임의의 유형의 디스크에 저장될 수 있다.
본 명세서에서 제시된 알고리즘들 및 디스플레이들은 본질적으로 임의의 특정 컴퓨터 또는 다른 장치와 관련되는 것은 아니다. 다양한 범용 시스템들이 여기서의 교시에 따른 프로그램들과 함께 사용될 수 있거나, 방법을 수행하기 위해 보다 특화된 장치를 구성하는 것이 편리함을 증명할 수 있다. 이러한 다양한 시스템들에 대한 구조는 상기한 설명에서 제시된 바와 같이 나타날 것이다. 또한, 본 개시는 임의의 특정 프로그래밍 언어를 참조하여 설명되지 않는다. 본 명세서에서 설명된 바와 같이 본 개시의 교시를 구현하는 데 다양한 프로그래밍 언어들이 사용될 수 있다는 것이 이해될 것이다.
본 개시는 컴퓨터 프로그램 제품, 또는 소프트웨어로서 제공될 수 있으며, 이는 본 개시에 따라 프로세스를 수행하기 위해 컴퓨터 시스템(또는 다른 전자 디바이스들)을 프로그래밍하는 데 사용될 수 있는 명령어들을 저장한 기계 판독 가능한 매체를 포함할 수 있다. 기계 판독 가능한 매체는 기계(예를 들어, 컴퓨터)에 의해 판독 가능한 형태로 정보를 저장하기 위한 임의의 메커니즘을 포함한다. 일부 실시 예들에서, 기계 판독 가능한(예를 들어, 컴퓨터 판독 가능한) 매체는 기계 판독 가능한(컴퓨터 판독 가능한) 저장 매체 이를테면 판독 전용 메모리(ROM), 랜덤 액세스 메모리(RAM), 자기 디스크 저장 매체, 광학 저장 매체, 플래시 메모리 구성요소들 등을 포함한다.
앞에서의 명세서에서, 본 개시의 실시 예들은 이의 구체적인 예시적인 실시 예들을 참조하여 설명되었다. 다음의 청구항들에 제시된 바와 같은 본 개시의 실시 예들로부터 벗어나지 않고 다양한 수정이 이루어질 수 있음이 명백할 것이다. 따라서, 본 명세서 및 도면들은 제한적인 의미가 아니라 예시적인 의미로 간주되어야 한다.
예들
예 1은 시스템으로서, 키-값 저장 트리 데이터 구조를 저장하는 메모리 구성요소들의 세트로서, 키-값 저장 트리 데이터 구조는 노드들의 세트를 포함하되, 노드들의 세트에서의 노드는 키 값 세트들의 시퀀스를 포함하고, 키-값 세트들의 시퀀스에서의 각 키-값 세트는 개개의 카운트 값과 연관되는 것인, 메모리 구성요소들의 세트; 및 메모리 구성요소들의 세트에 동작 가능하게 연결되고, 동작들을 수행하도록 구성된 프로세싱 디바이스를 포함하며, 동작들은: 메모리 구성요소들의 세트 상에서, 키-값 저장 트리 데이터 구조에 액세스하는 동작; 각 키-값 세트가 유사한 카운트 값과 연관된 미리 결정된 수의 키-값 세트들을 포함하는 키-값 세트들의 서브 시퀀스를 키-값 세트들의 시퀀스가 포함하는지 여부를 검출하는 동작; 및 키-값 세트들의 시퀀스가 키-값 세트들의 서브 시퀀스를 포함한다는 것을 검출하는 것에 응답하여: 키-값 세트들의 서브 시퀀스를 병합하여 병합된 키-값 세트를 생성하는 동작; 병합된 키-값 세트를 유사한 카운트 값에 기초하여 생성되는 새로운 카운트 값과 연관시키는 동작; 및 키-값 세트들의 시퀀스에서, 키-값 세트들의 서브 시퀀스를 병합된 키-값 세트로 대체하여 키-값 세트들의 업데이트된 시퀀스를 생성하는 동작을 포함하는 것인, 시스템이다.
예 2에서, 예 1의 대상은 선택 사항으로서 유사한 카운트 값에 기초하여 생성되는 새로운 카운트 값을 생성하는 것이 새로운 카운트 값을 유사한 카운트 값이 특정 값만큼 증분된 것과 동일하게 설정하는 것을 포함하는 것을 포함한다.
예 3에서, 예 2의 대상은 선택 사항으로서 특정 값이 1의 값을 포함하는 것을 포함한다.
예 4에서, 예 1 내지 3 중 어느 하나의 대상은 선택 사항으로서 병합된 키-값 세트가 키-값 세트들의 서브 시퀀스의 기존 값 블록들의 세트를 참조하는 새로운 키 블록들의 세트를 포함하고, 새로운 키 블록들의 세트가 키-값 세트들의 서브 시퀀스의 기존 키 블록들의 세트에 기초하여 생성되는 것을 포함한다.
예 5에서, 예 1 내지 4 중 어느 하나의 대상은 선택 사항으로서 새로운 키 블록들의 세트가 새로운 키 블록들의 세트가 기존 값 블록들의 세트에 대한 하나 이상의 레퍼런스들을 포함하도록 기존 키 블록들의 세트의 값들을 새로운 키 블록들의 세트로 복사함으로써 키-값 세트들의 서브 시퀀스의 기존 키 블록들의 세트에 기초하여 생성되는 것을 포함한다.
예 6에서, 예 1 내지 5 중 어느 하나의 대상은 선택 사항으로서 병합된 키-값 세트가 새로운 값 블록들의 세트, 및 새로운 값 블록들의 세트를 참조하는 새로운 키 블록들의 세트를 포함하고, 새로운 값 블록들의 세트가 키-값 세트들의 서브 시퀀스의 기존 값 블록들의 세트에 기초하여 생성되며, 새로운 키 블록들의 세트가 키-값 세트들의 시퀀스의 기존 키 블록들의 세트에 기초하여 생성되는 것을 포함한다.
예 7에서, 예 1 내지 6 중 어느 하나의 대상은 선택 사항으로서 새로운 값 블록들의 세트가 기존 값 블록들의 세트의 값들을 새로운값 블록들의 세트에 복사함으로써 키-값 세트들의 서브 시퀀스의 값 키 블록들의 세트에 기초하여 생성되고, 새로운 키 블록들의 세트가 기존 키 블록들의 세트의 값을 새로운 키 블록들의 세트로 복사함으로써 키-값 세트들의 서브 시퀀스의 기존 키 블록들의 세트에 기초하여 생성되는 것을 포함한다.
예 8에서, 예 1 내지 7 중 어느 하나의 대상은 선택 사항으로서 키-값 세트들의 시퀀스에서, 키-값 세트들의 서브 시퀀스를 병합된 키-값 세트로 대체하여 키-값 세트들의 업데이트된 시퀀스를 생성하는 동작이: 노드로부터, 키-값 세트들의 서브 시퀀스에서의 각 특정 키-값 세트를 삭제하는 동작을 포함하는 것을 포함한다.
예 9에서, 예 1 내지 8 중 어느 하나의 대상은 선택 사항으로서 키-값 세트들의 시퀀스에서, 키-값 세트들의 서브 시퀀스를 병합된 키-값 세트로 대체하여 키-값 세트들의 업데이트된 시퀀스를 생성하는 동작이: 키-값 세트들의 서브 시퀀스에서의 각 특정 키-값 세트의 하나 이상의 키 블록을 삭제하는 동작을 포함하는 것을 포함한다.
예 10에서, 예 1 내지 9 중 어느 하나의 대상은 선택 사항으로서 키-값 세트들의 시퀀스에서, 키-값 세트들의 서브 시퀀스를 병합된 키-값 세트로 대체하여 키-값 세트들의 업데이트된 시퀀스를 생성하는 동작이: 키-값 세트들의 서브 시퀀스에서의 각 특정 키-값 세트의 하나 이상의 값 블록을 삭제하는 동작을 포함하는 것을 포함한다.
예 11에서, 예 1 내지 10 중 어느 하나의 대상은 선택 사항으로서 동작들이 또한: 키-값 세트들의 업데이트된 시퀀스에서, 각 키-값 세트가 제2 유사한 카운트 값과 연관된 미리 결정된 수의 키-값 세트들을 키-값 세트들의 제2 서브 시퀀스가 포함하는지 여부를 검출하는 동작; 키-값 세트들의 업데이트된 시퀀스에서 키-값 세트들의 제2 서브 시퀀스를 검출하는 것에 응답하여: 키-값 세트들의 제2 서브 시퀀스를 병합하여 제2 병합된 키-값 세트를 생성하는 동작; 제2 병합된 키-값 세트를 제2 유사한 카운트 값에 기초하여 생성되는 제2 새로운 카운트 값과 연관시키는 동작; 및 키-값 세트들의 업데이트된 시퀀스에서, 키-값 세트들의 제2 서브 시퀀스를 병합된 키-값 세트로 대체하여 키-값 세트들의 제2 업데이트된 시퀀스를 생성하는 동작을 포함하는 것을 포함한다.
예 12에서, 예 1 내지 11 중 어느 하나의 대상은 선택 사항으로서 키-값 세트들의 서브 시퀀스가 노드 내의 하나 이상의 키-값 세트들을 포함하는 것을 포함한다.
예 13은 방법으로서, 메모리 구성요소들의 세트 상에, 키-값 저장 트리 데이터 구조를 생성하는 단계로서, 키-값 저장 트리 데이터 구조는 노드들의 세트를 포함하되, 노드들의 세트에서의 노드는 키 값 세트들의 시퀀스를 포함하고, 키-값 세트들의 시퀀스에서의 각 키-값 세트는 개개의 카운트 값과 연관되는 것인, 키-값 저장 트리 데이터 구조를 생성하는 단계; 프로세싱 디바이스에 의해, 각 키-값 세트가 유사한 카운트 값과 연관된 미리 결정된 수의 키-값 세트들을 포함하는 키-값 세트들의 서브 시퀀스를 키-값 세트들의 시퀀스가 포함하는지 여부를 검출하는 단계; 및 키-값 세트들의 시퀀스가 키-값 세트들의 서브 시퀀스를 포함한다는 것을 검출하는 것에 응답하여: 프로세싱 디바이스에 의해, 키-값 세트들의 서브 시퀀스를 병합하여 병합된 키-값 세트를 생성하는 단계; 프로세싱 디바이스에 의해, 병합된 키-값 세트를 유사한 카운트 값에 기초하여 생성되는 새로운 카운트 값과 연관시키는 단계; 및 프로세싱 디바이스에 의해, 키-값 세트들의 시퀀스에서, 키-값 세트들의 서브 시퀀스를 병합된 키-값 세트로 대체하여 키-값 세트들의 업데이트된 시퀀스를 생성하는 단계를 포함하는, 방법이다.
예 14에서, 예 13의 대상은 선택 사항으로서 유사한 카운트 값에 기초하여 생성되는 새로운 카운트 값을 생성하는 것이 새로운 카운트 값을 유사한 카운트 값이 특정 값만큼 증분된 것과 동일하게 설정하는 것을 포함하는 것을 포함한다.
예 15에서, 예 13 또는 예 14의 대상은 선택 사항으로서 특정 값이 1의 값을 포함하는 것을 포함한다.
예 16에서, 예 13 내지 15 중 어느 하나의 대상은 선택 사항으로서 키-값 세트들의 서브 시퀀스가 키-값 세트들의 시퀀스에서의 마지막 키-값 세트를 포함하는 것을 포함한다.
예 17에서, 예 13 내지 16 중 어느 하나의 대상은 선택 사항으로서 방법이 또한: 새로운 키-값 세트를 키-값 세트들의 시퀀스에 덧붙임으로써 노드를 업데이트하는 단계; 및 새로운 키-값 세트를 초기 카운트 값과 연관시키는 단계를 포함하는 것을 포함한다.
예 18에서, 예 13 내지 17 중 어느 하나의 대상은 선택 사항으로서 방법이 또한: 노드에 대한 업데이트 결과 키-값 세트들의 시퀀스에 새로운 키-값 세트가 덧붙는지 여부를 검출하는 단계; 및 노드에 대한 업데이트를 검출하는 것에 응답하여, 새로운 키-값 세트를 초기 카운트 값과 연관시키는 단계를 포함하는 것을 포함한다.
예 19는 명령어들을 포함하는 비일시적인 기계 판독 가능한 저장 매체로서, 명령어들은 프로세싱 디바이스에 의해 실행될 때, 프로세싱 디바이스로 하여금: 메모리 구성요소들의 세트 상에, 서브 인덱스들의 시퀀스를 저장하기 위한 인덱스를 포함하는 인덱스 데이터 구조를 생성하게 하고 - 시퀀스에서의 각 서브 인덱스는 키-값 쌍들의 세트를 저장하는 것임 -; 서브 인덱스들의 시퀀스에 새로운 서브 인덱스를 첨부함으로써 인덱스를 업데이트하게 하고 - 새로운 서브 인덱스는 키-값 쌍들의 새로운 세트를 포함함 -; 새로운 서브 인덱스를 초기 카운트 값과 연관시키게 하고; 각 서브 인덱스가 유사한 카운트 값과 연관된 미리 결정된 수의 서브 인덱스들을 포함하는 서브 인덱스들의 서브 시퀀스를 서브 인덱스들의 시퀀스가 포함하는지 여부를 검출하게 하고; 서브 인덱스들의 시퀀스가 서브 인덱스들의 서브 시퀀스를 포함하는 것을 검출하는 것에 응답하여: 서브 인덱스들의 서브 시퀀스를 병합하여 병합된 서브 인덱스를 생성하게 하고; 병합된 서브 인덱스를 유사한 카운트 값에 기초하여 생성되는 새로운 카운트 값과 연관시키게 하며; 서브 인덱스들의 시퀀스 내에서, 서브 인덱스들의 서브 시퀀스를 병합된 서브 인덱스 세트로 대체하여 서브 인덱스들의 업데이트된 시퀀스를 생성하게 하는 것인, 비일시적인 기계 판독 가능한 저장 매체이다.
예 20에서, 예 19의 대상은 선택 사항으로서 인덱스 데이터 구조가 키-값 저장 트리 데이터 구조를 포함하고, 시퀀스에서의 각 서브 인덱스가 키-값 쌍들의 세트의 하나 이상의 키를 저장하기 위한 키 블록들의 세트 및 키-값 쌍들의 세트의 하나 이상의 값을 저장하기 위한 값 블록들의 세트를 포함하는 키-값 세트를 포함하는 것을 포함한다.
Claims (15)
- 시스템으로서,
키-값 저장 트리 데이터 구조를 저장하는 메모리 구성요소들의 세트로서, 상기 키-값 저장 트리 데이터 구조는 노드들의 세트를 포함하되, 상기 노드들의 세트에서의 노드는 키 값 세트들의 시퀀스를 포함하고, 상기 키-값 세트들의 시퀀스에서의 각 키-값 세트는 개개의 카운트 값과 연관되는 것인, 상기 메모리 구성요소들의 세트; 및
상기 메모리 구성요소들의 세트에 동작 가능하게 연결되고, 동작들을 수행하도록 구성된 프로세싱 디바이스를 포함하며, 상기 동작들은:
상기 메모리 구성요소들의 세트 상에서, 상기 키-값 저장 트리 데이터 구조에 액세스하는 동작;
각 키-값 세트가 유사한 카운트 값과 연관된 미리 결정된 수의 키-값 세트들을 포함하는 키-값 세트들의 서브 시퀀스를 상기 키-값 세트들의 시퀀스가 포함하는지 여부를 검출하는 동작; 및
상기 키-값 세트들의 시퀀스가 상기 키-값 세트들의 서브 시퀀스를 포함한다는 것을 검출하는 것에 응답하여:
상기 키-값 세트들의 서브 시퀀스를 병합하여 병합된 키-값 세트를 생성하는 동작;
상기 병합된 키-값 세트를 상기 유사한 카운트 값에 기초하여 생성되는 새로운 카운트 값과 연관시키는 동작; 및
상기 키-값 세트들의 시퀀스에서, 상기 키-값 세트들의 서브 시퀀스를 상기 병합된 키-값 세트로 대체하여 키-값 세트들의 업데이트된 시퀀스를 생성하는 동작을 포함하는 것인, 시스템. - 제1항에 있어서, 상기 유사한 카운트 값에 기초하여 생성되는 상기 새로운 카운트 값을 생성하는 것은 상기 새로운 카운트 값을 상기 유사한 카운트 값이 특정 값만큼 증분된 것과 동일하게 설정하는 것을 포함하는 것인, 시스템.
- 제1항에 있어서, 상기 병합된 키-값 세트는 상기 키-값 세트들의 서브 시퀀스의 기존 값 블록들의 세트를 참조하는 새로운 키 블록들의 세트를 포함하고, 상기 새로운 키 블록들의 세트는 상기 키-값 세트들의 서브 시퀀스의 기존 키 블록들의 세트에 기초하여 생성되는 것인, 시스템.
- 제3항에 있어서, 상기 새로운 키 블록들의 세트는 상기 새로운 키 블록들의 세트가 상기 기존 값 블록들의 세트에 대한 하나 이상의 레퍼런스들을 포함하도록 상기 기존 키 블록들의 세트의 값들을 상기 새로운 키 블록들의 세트로 복사함으로써 상기 키-값 세트들의 서브 시퀀스의 상기 기존 키 블록들의 세트에 기초하여 생성되는 것인, 시스템.
- 제1항에 있어서, 상기 병합된 키-값 세트는 새로운 값 블록들의 세트, 및 상기 새로운 값 블록들의 세트를 참조하는 새로운 키 블록들의 세트를 포함하고, 상기 새로운 값 블록들의 세트는 상기 키-값 세트들의 서브 시퀀스의 기존 값 블록들의 세트에 기초하여 생성되며, 상기 새로운 키 블록들의 세트는 상기 키-값 세트들의 시퀀스의 기존 키 블록들의 세트에 기초하여 생성되는 것인, 시스템.
- 제5항에 있어서, 상기 새로운 값 블록들의 세트는 상기 기존 값 블록들의 세트의 값들을 상기 새로운 값 블록들의 세트에 복사함으로써 상기 키-값 세트들의 서브 시퀀스의 상기 값 키 블록들의 세트에 기초하여 생성되고, 상기 새로운 키 블록들의 세트는 상기 기존 키 블록들의 세트의 값을 상기 새로운 키 블록들의 세트로 복사함으로써 상기 키-값 세트들의 서브 시퀀스의 상기 기존 키 블록들의 세트에 기초하여 생성되는 것인, 시스템.
- 제1항에 있어서, 상기 키-값 세트들의 시퀀스에서, 상기 키-값 세트들의 서브 시퀀스를 상기 병합된 키-값 세트로 대체하여 상기 키-값 세트들의 업데이트된 시퀀스를 생성하는 동작은:
상기 노드로부터, 상기 키-값 세트들의 서브 시퀀스에서의 각 특정 키-값 세트를 삭제하는 동작을 포함하는 것인, 시스템. - 제1항에 있어서, 상기 키-값 세트들의 시퀀스에서, 상기 키-값 세트들의 서브 시퀀스를 상기 병합된 키-값 세트로 대체하여 상기 키-값 세트들의 업데이트된 시퀀스를 생성하는 동작은:
상기 키-값 세트들의 서브 시퀀스에서의 각 특정 키-값 세트의 하나 이상의 키 블록을 삭제하는 동작을 포함하는 것인, 시스템. - 제1항에 있어서, 상기 키-값 세트들의 시퀀스에서, 상기 키-값 세트들의 서브 시퀀스를 상기 병합된 키-값 세트로 대체하여 상기 키-값 세트들의 업데이트된 시퀀스를 생성하는 동작은:
상기 키-값 세트들의 서브 시퀀스에서의 각 특정 키-값 세트의 하나 이상의 값 블록을 삭제하는 동작을 포함하는 것인, 시스템. - 제1항에 있어서, 상기 동작들은 또한:
상기 키-값 세트들의 업데이트된 시퀀스에서, 각 키-값 세트가 제2 유사한 카운트 값과 연관된 상기 미리 결정된 수의 키-값 세트들을 키-값 세트들의 제2 서브 시퀀스가 포함하는지 여부를 검출하는 동작;
상기 키-값 세트들의 업데이트된 시퀀스에서 상기 키-값 세트들의 제2 서브 시퀀스를 검출하는 것에 응답하여:
상기 키-값 세트들의 제2 서브 시퀀스를 병합하여 제2 병합된 키-값 세트를 생성하는 동작;
상기 제2 병합된 키-값 세트를 상기 제2 유사한 카운트 값에 기초하여 생성되는 제2 새로운 카운트 값과 연관시키는 동작; 및
상기 키-값 세트들의 업데이트된 시퀀스에서, 상기 키-값 세트들의 제2 서브 시퀀스를 상기 병합된 키-값 세트로 대체하여 키-값 세트들의 제2 업데이트된 시퀀스를 생성하는 동작을 포함하는 것인, 시스템. - 제1항에 있어서, 상기 키-값 세트들의 서브 시퀀스는 상기 노드 내의 하나 이상의 키-값 세트들을 포함하는 것인, 시스템.
- 방법으로서,
메모리 구성요소들의 세트 상에, 키-값 저장 트리 데이터 구조를 생성하는 단계로서, 상기 키-값 저장 트리 데이터 구조는 노드들의 세트를 포함하되, 상기 노드들의 세트에서의 노드는 키 값 세트들의 시퀀스를 포함하고, 상기 키-값 세트들의 시퀀스에서의 각 키-값 세트는 개개의 카운트 값과 연관되는 것인, 상기 키-값 저장 트리 데이터 구조를 생성하는 단계;
프로세싱 디바이스에 의해, 각 키-값 세트가 유사한 카운트 값과 연관된 미리 결정된 수의 키-값 세트들을 포함하는 키-값 세트들의 서브 시퀀스를 상기 키-값 세트들의 시퀀스가 포함하는지 여부를 검출하는 단계; 및
상기 키-값 세트들의 시퀀스가 상기 키-값 세트들의 서브 시퀀스를 포함한다는 것을 검출하는 것에 응답하여:
상기 프로세싱 디바이스에 의해, 상기 키-값 세트들의 서브 시퀀스를 병합하여 병합된 키-값 세트를 생성하는 단계;
상기 프로세싱 디바이스에 의해, 상기 병합된 키-값 세트를 상기 유사한 카운트 값에 기초하여 생성되는 새로운 카운트 값과 연관시키는 단계; 및
상기 프로세싱 디바이스에 의해, 상기 키-값 세트들의 시퀀스에서, 상기 키-값 세트들의 서브 시퀀스를 상기 병합된 키-값 세트로 대체하여 키-값 세트들의 업데이트된 시퀀스를 생성하는 단계를 포함하는, 방법. - 제12항에 있어서, 또한:
새로운 키-값 세트를 상기 키-값 세트들의 시퀀스에 덧붙임으로써 상기 노드를 업데이트하는 단계; 및
상기 새로운 키-값 세트를 초기 카운트 값과 연관시키는 단계를 포함하는, 방법. - 제12항에 있어서, 또한:
상기 노드에 대한 업데이트 결과 상기 키-값 세트들의 시퀀스에 새로운 키-값 세트가 덧붙는지 여부를 검출하는 단계; 및
상기 노드에 대한 상기 업데이트를 검출하는 것에 응답하여, 상기 새로운 키-값 세트를 초기 카운트 값과 연관시키는 단계를 포함하는, 방법. - 명령어들을 포함하는 비일시적인 기계 판독 가능한 저장 매체로서, 상기 명령어들은 프로세싱 디바이스에 의해 실행될 때, 상기 프로세싱 디바이스로 하여금:
메모리 구성요소들의 세트 상에, 서브 인덱스들의 시퀀스를 저장하기 위한 인덱스를 포함하는 인덱스 데이터 구조를 생성하게 하고 - 상기 시퀀스에서의 각 서브 인덱스는 키-값 쌍들의 세트를 저장하는 것임 -;
상기 서브 인덱스들의 시퀀스에 새로운 서브 인덱스를 첨부함으로써 상기 인덱스를 업데이트하게 하고 - 상기 새로운 서브 인덱스는 키-값 쌍들의 새로운 세트를 포함함 -;
상기 새로운 서브 인덱스를 초기 카운트 값과 연관시키게 하고;
각 서브 인덱스가 유사한 카운트 값과 연관된 미리 결정된 수의 서브 인덱스들을 포함하는 서브 인덱스들의 서브 시퀀스를 상기 서브 인덱스들의 시퀀스가 포함하는지 여부를 검출하게 하고;
상기 서브 인덱스들의 시퀀스가 상기 서브 인덱스들의 서브 시퀀스를 포함하는 것을 검출하는 것에 응답하여:
상기 서브 인덱스들의 서브 시퀀스를 병합하여 병합된 서브 인덱스를 생성하게 하고;
상기 병합된 서브 인덱스를 상기 유사한 카운트 값에 기초하여 생성되는 새로운 카운트 값과 연관시키게 하며;
상기 서브 인덱스들의 시퀀스 내에서, 상기 서브 인덱스들의 서브 시퀀스를 상기 병합된 서브 인덱스 세트로 대체하여 서브 인덱스들의 업데이트된 시퀀스를 생성하게 하는 것인, 비일시적인 기계 판독 가능한 저장 매체.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/156,400 | 2018-10-10 | ||
US16/156,400 US10915546B2 (en) | 2018-10-10 | 2018-10-10 | Counter-based compaction of key-value store tree data block |
PCT/US2019/054254 WO2020076581A1 (en) | 2018-10-10 | 2019-10-02 | Counter-based compaction of key-value store tree data block |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20210058988A true KR20210058988A (ko) | 2021-05-24 |
Family
ID=70160756
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020217013687A KR20210058988A (ko) | 2018-10-10 | 2019-10-02 | 키-값 저장 트리 데이터 블록의 카운터 기반 압축 |
Country Status (5)
Country | Link |
---|---|
US (2) | US10915546B2 (ko) |
EP (1) | EP3864553A4 (ko) |
KR (1) | KR20210058988A (ko) |
CN (1) | CN113039547B (ko) |
WO (1) | WO2020076581A1 (ko) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10706105B2 (en) | 2017-02-09 | 2020-07-07 | Micron Technology, Inc. | Merge tree garbage metrics |
US10706106B2 (en) | 2017-02-09 | 2020-07-07 | Micron Technology, Inc. | Merge tree modifications for maintenance operations |
US10719495B2 (en) | 2017-02-09 | 2020-07-21 | Micron Technology, Inc. | Stream selection for multi-stream storage devices |
US10915546B2 (en) | 2018-10-10 | 2021-02-09 | Micron Technology, Inc. | Counter-based compaction of key-value store tree data block |
US11100071B2 (en) | 2018-10-10 | 2021-08-24 | Micron Technology, Inc. | Key-value store tree data block spill with compaction |
US10852978B2 (en) | 2018-12-14 | 2020-12-01 | Micron Technology, Inc. | Key-value store using journaling with selective data storage format |
US11048755B2 (en) | 2018-12-14 | 2021-06-29 | Micron Technology, Inc. | Key-value store tree with selective use of key portion |
US10936661B2 (en) | 2018-12-26 | 2021-03-02 | Micron Technology, Inc. | Data tree with order-based node traversal |
CN112015791B (zh) | 2019-05-30 | 2024-06-07 | 阿里云计算有限公司 | 数据处理方法、装置、电子设备及计算机存储介质 |
CN111625523B (zh) * | 2020-04-20 | 2023-08-08 | 沈阳派客动力科技有限公司 | 数据合成的方法、装置和设备 |
US11461299B2 (en) * | 2020-06-30 | 2022-10-04 | Hewlett Packard Enterprise Development Lp | Key-value index with node buffers |
US11514020B2 (en) * | 2020-11-13 | 2022-11-29 | International Business Machines Corporation | Tracking change data capture log history |
US11954345B2 (en) * | 2021-12-03 | 2024-04-09 | Samsung Electronics Co., Ltd. | Two-level indexing for key-value persistent storage device |
CN114281823B (zh) * | 2021-12-17 | 2023-08-29 | 北京百度网讯科技有限公司 | 表格处理方法、装置、设备、存储介质及产品 |
EP4375823A1 (en) | 2022-07-27 | 2024-05-29 | Beijing Superstring Academy of Memory Technology | Object computing and storage system, data processing method, and client and storage medium |
Family Cites Families (101)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5204958A (en) | 1991-06-27 | 1993-04-20 | Digital Equipment Corporation | System and method for efficiently indexing and storing a large database with high data insertion frequency |
US5530850A (en) | 1993-10-25 | 1996-06-25 | International Business Machines Corporation | Data storage library array with log-structured file system which allows simultaneous write and garbage collection |
US6175835B1 (en) | 1996-07-26 | 2001-01-16 | Ori Software Development, Ltd. | Layered index with a basic unbalanced partitioned index that allows a balanced structure of blocks |
US6597957B1 (en) | 1999-12-20 | 2003-07-22 | Cisco Technology, Inc. | System and method for consolidating and sorting event data |
KR100488414B1 (ko) | 2000-12-30 | 2005-05-11 | 한국전자통신연구원 | 다중탐색 트리의 노드 생성 방법, 및 그에 따라 생성된 다중탐색 트리 구조의 자료 탐색 방법 |
US7451065B2 (en) | 2002-03-11 | 2008-11-11 | International Business Machines Corporation | Method for constructing segmentation-based predictive models |
US7324120B2 (en) | 2002-07-01 | 2008-01-29 | Xerox Corporation | Segmentation method and system for scanned documents |
US7308456B2 (en) | 2002-12-19 | 2007-12-11 | International Business Machines Corporation | Method and apparatus for building one or more indexes on data concurrent with manipulation of data |
US7120637B2 (en) | 2003-05-30 | 2006-10-10 | Microsoft Corporation | Positional access using a b-tree |
US7904487B2 (en) | 2003-10-09 | 2011-03-08 | Oracle International Corporation | Translating data access requests |
US7690000B2 (en) | 2004-01-08 | 2010-03-30 | Microsoft Corporation | Metadata journal for information technology systems |
US7383276B2 (en) | 2004-01-30 | 2008-06-03 | Microsoft Corporation | Concurrency control for B-trees with node deletion |
US20070071243A1 (en) * | 2005-09-23 | 2007-03-29 | Microsoft Corporation | Key validation service |
US7660807B2 (en) | 2005-11-28 | 2010-02-09 | Commvault Systems, Inc. | Systems and methods for cataloging metadata for a metabase |
EP1855285A2 (en) | 2006-05-10 | 2007-11-14 | Nero AG | Apparatus for writing data having a data amount on a storage medium |
US20080040384A1 (en) | 2006-06-30 | 2008-02-14 | Tele Atlas North America, Inc. | Nearest search on adaptive index with variable compression |
US20080165281A1 (en) | 2007-01-05 | 2008-07-10 | Microsoft Corporation | Optimizing Execution of HD-DVD Timing Markup |
US8706914B2 (en) | 2007-04-23 | 2014-04-22 | David D. Duchesneau | Computing infrastructure |
JP4498409B2 (ja) | 2007-12-28 | 2010-07-07 | 株式会社エスグランツ | データベースのインデックスキー更新方法及びプログラム |
US8347059B2 (en) | 2008-08-15 | 2013-01-01 | International Business Machines Corporation | Management of recycling bin for thinly-provisioned logical volumes |
US20100146003A1 (en) | 2008-12-10 | 2010-06-10 | Unisys Corporation | Method and system for building a B-tree |
CN101515298B (zh) | 2009-03-30 | 2013-09-25 | 华为技术有限公司 | 基于树形数据结构节点的插入的方法和存储装置 |
GB0905457D0 (en) | 2009-03-30 | 2009-05-13 | Touchtype Ltd | System and method for inputting text into electronic devices |
US9189472B2 (en) | 2009-03-30 | 2015-11-17 | Touchtype Limited | System and method for inputting text into small screen devices |
US9298761B2 (en) | 2009-04-30 | 2016-03-29 | Hewlett Packard Enterprise Development Lp | Adaptive merging in database indexes |
US8996563B2 (en) * | 2010-04-06 | 2015-03-31 | Tokutek, Inc. | High-performance streaming dictionary |
JP5488178B2 (ja) | 2010-04-30 | 2014-05-14 | 富士通株式会社 | データ管理プログラム及び方法、並びにノード装置 |
US9355109B2 (en) | 2010-06-11 | 2016-05-31 | The Research Foundation For The State University Of New York | Multi-tier caching |
US8433695B2 (en) | 2010-07-02 | 2013-04-30 | Futurewei Technologies, Inc. | System architecture for integrated hierarchical query processing for key/value stores |
US8412689B2 (en) | 2010-07-07 | 2013-04-02 | Microsoft Corporation | Shared log-structured multi-version transactional datastore with metadata to enable melding trees |
EP2793130B1 (en) * | 2010-12-27 | 2015-12-23 | Amplidata NV | Apparatus for storage or retrieval of a data object on a storage medium, which is unreliable |
US9838242B2 (en) | 2011-04-13 | 2017-12-05 | Jetflow Technologies | Flowlet-based processing with key/value store checkpointing |
US8788505B2 (en) | 2011-04-27 | 2014-07-22 | Verisign, Inc | Systems and methods for a cache-sensitive index using partial keys |
US8595267B2 (en) | 2011-06-27 | 2013-11-26 | Amazon Technologies, Inc. | System and method for implementing a scalable data storage service |
EP2724269B1 (en) * | 2011-06-27 | 2020-02-19 | Jethrodata Ltd. | System, method and data structure for fast loading, storing and access to huge data sets in real time |
JP5524144B2 (ja) * | 2011-08-08 | 2014-06-18 | 株式会社東芝 | key−valueストア方式を有するメモリシステム |
JP5782948B2 (ja) | 2011-09-15 | 2015-09-24 | 富士通株式会社 | 情報管理方法及び情報管理装置 |
US8738657B2 (en) * | 2011-09-27 | 2014-05-27 | Hewlett-Packard Development Company, L.P. | Distribution of key values |
US8745014B2 (en) | 2011-10-19 | 2014-06-03 | Pivotal Software, Inc. | Time series data mapping into a key-value database |
US9069827B1 (en) | 2012-01-17 | 2015-06-30 | Amazon Technologies, Inc. | System and method for adjusting membership of a data replication group |
US9053140B2 (en) | 2012-02-03 | 2015-06-09 | Apple Inc. | Enhanced B-trees with record merging |
US20130279503A1 (en) | 2012-02-17 | 2013-10-24 | Rockstar Consortium Us Lp | Next Hop Computation Functions for Equal Cost Multi-Path Packet Switching Networks |
US9613104B2 (en) | 2012-02-17 | 2017-04-04 | Netflix, Inc. | System and method for building a point-in-time snapshot of an eventually-consistent data store |
TWI475412B (zh) | 2012-04-02 | 2015-03-01 | Ind Tech Res Inst | 數位內容次序調整方法和數位內容匯流器 |
US20130265305A1 (en) | 2012-04-04 | 2013-10-10 | Jon N. Hasselgren | Compressed Depth Cache |
KR101341507B1 (ko) | 2012-04-13 | 2013-12-13 | 연세대학교 산학협력단 | 수정된 b+트리 노드 검색 방법 및 장치 |
US9075710B2 (en) * | 2012-04-17 | 2015-07-07 | SanDisk Technologies, Inc. | Non-volatile key-value store |
KR20140028342A (ko) | 2012-08-28 | 2014-03-10 | 삼성전자주식회사 | 브로드캐스트 암호화를 위한 키 관리 방법 및 브로드캐스트 암호화를 이용한 메시지 전송 방법 |
US8868531B2 (en) | 2012-09-10 | 2014-10-21 | Apple Inc. | Concurrent access methods for tree data structures |
US20140222870A1 (en) | 2013-02-06 | 2014-08-07 | Lei Zhang | System, Method, Software, and Data Structure for Key-Value Mapping and Keys Sorting |
US9400816B1 (en) | 2013-02-28 | 2016-07-26 | Google Inc. | System for indexing collections of structured objects that provides strong multiversioning semantics |
US8927846B2 (en) * | 2013-03-15 | 2015-01-06 | Exomens | System and method for analysis and creation of music |
US10146818B2 (en) | 2013-03-15 | 2018-12-04 | Nec Corporation | Computing system |
US20140279944A1 (en) | 2013-03-15 | 2014-09-18 | University Of Southern California | Sql query to trigger translation for maintaining consistency of cache augmented sql systems |
EP2804114A1 (en) | 2013-05-16 | 2014-11-19 | Fujitsu Limited | Database controller, method, and program for managing a distributed data store |
US10402374B2 (en) | 2013-08-26 | 2019-09-03 | Vmware, Inc. | Log-structured storage device format |
JP6025149B2 (ja) | 2013-11-06 | 2016-11-16 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | データを管理するシステムおよび方法 |
US9367260B1 (en) | 2013-12-13 | 2016-06-14 | Emc Corporation | Dynamic replication system |
US9602407B2 (en) | 2013-12-17 | 2017-03-21 | Huawei Technologies Co., Ltd. | Trie stage balancing for network address lookup |
JP5950285B2 (ja) | 2013-12-19 | 2016-07-13 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | 予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行うための方法、並びに、当該命令を使用してツリーの検索を行うためのコンピュータ及びそのコンピュータ・プログラム |
US9524302B2 (en) | 2014-03-05 | 2016-12-20 | Scality, S.A. | Distributed consistent database implementation within an object store |
US10366070B2 (en) | 2015-02-20 | 2019-07-30 | Scality S.A. | Locking and I/O improvements of systems built with distributed consistent database implementations within an object store |
US8935257B1 (en) * | 2014-03-17 | 2015-01-13 | Linkedin Corporation | Organizing, joining, and performing statistical calculations on massive sets of data |
US9697267B2 (en) | 2014-04-03 | 2017-07-04 | Sandisk Technologies Llc | Methods and systems for performing efficient snapshots in tiered data structures |
US9411840B2 (en) | 2014-04-10 | 2016-08-09 | Facebook, Inc. | Scalable data structures |
CN105095287B (zh) | 2014-05-14 | 2018-09-28 | 华为技术有限公司 | Lsm数据合并排序方法和装置 |
CN104156278B (zh) * | 2014-08-01 | 2017-06-27 | 江苏大学 | 一种文件版本控制系统及其方法 |
US10990288B2 (en) | 2014-08-01 | 2021-04-27 | Software Ag Usa, Inc. | Systems and/or methods for leveraging in-memory storage in connection with the shuffle phase of MapReduce |
US9590948B2 (en) | 2014-12-15 | 2017-03-07 | Cisco Systems, Inc. | CCN routing using hardware-assisted hash tables |
US9858301B1 (en) | 2015-01-20 | 2018-01-02 | Amazon Technologies, Inc. | Selective flushing of a database journal for an asymmetrically-encrypted database |
EP3238106B1 (en) | 2015-03-17 | 2020-10-07 | Cloudera, Inc. | Compaction policy |
US10831736B2 (en) | 2015-03-27 | 2020-11-10 | International Business Machines Corporation | Fast multi-tier indexing supporting dynamic update |
US10740290B2 (en) | 2015-04-14 | 2020-08-11 | Jetflow Technologies | Systems and methods for key-value stores |
US10303673B2 (en) | 2015-05-11 | 2019-05-28 | Apple Inc. | Hierarchical data storage |
JP6408433B2 (ja) | 2015-07-08 | 2018-10-17 | 日本電信電話株式会社 | 負荷分散プログラムおよびサーバ |
US11461010B2 (en) | 2015-07-13 | 2022-10-04 | Samsung Electronics Co., Ltd. | Data property-based data placement in a nonvolatile memory device |
US9772906B2 (en) | 2015-07-30 | 2017-09-26 | Unitrends, Inc. | Disaster recovery systems and methods |
US10122380B2 (en) | 2015-11-16 | 2018-11-06 | International Business Machines Corporation | Compression of javascript object notation data using structure information |
EP3916536A1 (en) | 2015-12-28 | 2021-12-01 | Huawei Technologies Co., Ltd. | Data processing method and nvme storage device |
US10649658B2 (en) | 2015-12-31 | 2020-05-12 | Vmware, Inc. | File system based key value service |
US10496283B2 (en) * | 2016-01-22 | 2019-12-03 | Suraj Prabhakar WAGHULDE | Adaptive prefix tree based order partitioned data storage system |
JP6360634B2 (ja) | 2016-01-29 | 2018-07-18 | 株式会社日立製作所 | 計算機システム、及び、データ処理方法 |
US11182365B2 (en) | 2016-03-21 | 2021-11-23 | Mellanox Technologies Tlv Ltd. | Systems and methods for distributed storage of data across multiple hash tables |
US20180089074A1 (en) | 2016-09-28 | 2018-03-29 | Intel Corporation | Techniques to Manage Key-Value Storage at a Memory or Storage Device |
US10719495B2 (en) | 2017-02-09 | 2020-07-21 | Micron Technology, Inc. | Stream selection for multi-stream storage devices |
US10706105B2 (en) | 2017-02-09 | 2020-07-07 | Micron Technology, Inc. | Merge tree garbage metrics |
US10725988B2 (en) | 2017-02-09 | 2020-07-28 | Micron Technology, Inc. | KVS tree |
US10706106B2 (en) | 2017-02-09 | 2020-07-07 | Micron Technology, Inc. | Merge tree modifications for maintenance operations |
CN106970936B (zh) | 2017-02-09 | 2020-07-03 | 阿里巴巴集团控股有限公司 | 数据处理方法及装置、数据查询方法及装置 |
CN107092659B (zh) * | 2017-03-28 | 2021-05-28 | 成都优易数据有限公司 | 一种通用的树形结构存储解析方法 |
US10235257B1 (en) | 2017-07-19 | 2019-03-19 | EMC IP Holding Company LLC | Facilitation of replication progress tracking |
US10579633B2 (en) * | 2017-08-31 | 2020-03-03 | Micron Technology, Inc. | Reducing probabilistic filter query latency |
WO2019084465A1 (en) | 2017-10-27 | 2019-05-02 | Streamsimple, Inc. | CONTINUOUS DIFFUSION MICRO-SERVICES FOR FLOW PROCESSING APPLICATIONS |
US20190034427A1 (en) * | 2017-12-28 | 2019-01-31 | Intel Corporation | Data management system employing a hash-based and tree-based key-value data structure |
US11204905B2 (en) | 2018-06-27 | 2021-12-21 | Datastax, Inc. | Trie-based indices for databases |
US11100071B2 (en) | 2018-10-10 | 2021-08-24 | Micron Technology, Inc. | Key-value store tree data block spill with compaction |
US10915546B2 (en) | 2018-10-10 | 2021-02-09 | Micron Technology, Inc. | Counter-based compaction of key-value store tree data block |
US11048755B2 (en) | 2018-12-14 | 2021-06-29 | Micron Technology, Inc. | Key-value store tree with selective use of key portion |
US10852978B2 (en) | 2018-12-14 | 2020-12-01 | Micron Technology, Inc. | Key-value store using journaling with selective data storage format |
US10936661B2 (en) | 2018-12-26 | 2021-03-02 | Micron Technology, Inc. | Data tree with order-based node traversal |
WO2020190558A1 (en) | 2019-03-15 | 2020-09-24 | Fungible, Inc. | Providing scalable and concurrent file systems |
-
2018
- 2018-10-10 US US16/156,400 patent/US10915546B2/en active Active
-
2019
- 2019-10-02 WO PCT/US2019/054254 patent/WO2020076581A1/en unknown
- 2019-10-02 EP EP19870984.2A patent/EP3864553A4/en not_active Withdrawn
- 2019-10-02 CN CN201980074795.1A patent/CN113039547B/zh active Active
- 2019-10-02 KR KR1020217013687A patent/KR20210058988A/ko active IP Right Grant
-
2021
- 2021-01-11 US US17/146,222 patent/US11599552B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
EP3864553A4 (en) | 2022-07-06 |
US20210133208A1 (en) | 2021-05-06 |
CN113039547B (zh) | 2022-06-28 |
EP3864553A1 (en) | 2021-08-18 |
US10915546B2 (en) | 2021-02-09 |
CN113039547A (zh) | 2021-06-25 |
US20200117744A1 (en) | 2020-04-16 |
US11599552B2 (en) | 2023-03-07 |
WO2020076581A1 (en) | 2020-04-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113039547B (zh) | 键值存储存储器系统、方法及相关存储媒体 | |
KR102665979B1 (ko) | 압축한 키-값 저장소 트리 데이터 블록 유출 | |
CN113196260B (zh) | 能够选择性使用键部分的键值存储树 | |
US10725930B2 (en) | Logical to physical memory address mapping tree | |
CN113196259B (zh) | 使用以选择性数据存储格式进行日志记录的键值存储 | |
US11657092B2 (en) | Data tree with order-based node traversal | |
JP5996088B2 (ja) | 暗号ハッシュ・データベース | |
US8065304B2 (en) | Using asymmetric memory | |
KR20170009706A (ko) | 중복 데이터를 감소시키기 위한 저장 장치 및 그것의 동작 방법 | |
KR102302426B1 (ko) | 저장 디바이스 상의 네임스페이스에서의 오류 검사 | |
CN117121107A (zh) | 使用内容可寻址存储器的用于经排序字符串表的密钥存储 | |
US20220050807A1 (en) | Prefix probe for cursor operations associated with a key-value database system | |
CN113126909B (zh) | 使用已删除记录跨度的光标查找操作 | |
Wang | OpenKV: LSM-tree-based key-value store for open-channel SSD | |
CN113010447A (zh) | 用于存储器子系统的媒体管理的快照读取优化 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right |