KR102266756B1 - Kvs 트리 - Google Patents
Kvs 트리 Download PDFInfo
- Publication number
- KR102266756B1 KR102266756B1 KR1020197026327A KR20197026327A KR102266756B1 KR 102266756 B1 KR102266756 B1 KR 102266756B1 KR 1020197026327 A KR1020197026327 A KR 1020197026327A KR 20197026327 A KR20197026327 A KR 20197026327A KR 102266756 B1 KR102266756 B1 KR 102266756B1
- Authority
- KR
- South Korea
- Prior art keywords
- key
- kvset
- node
- value
- tree
- 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/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/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
KVS 트리 및 이 트리에 대한 동작이 본 명세서에 설명된다. 적어도 하나의 기계 판독 가능 매체에 키-값 데이터 구조로 저장하기 위해 키-값 세트(kvset)가 수신된다. 상기 kvset는 고유한 키를 값으로 매핑하는 것을 포함하고 여기서 상기 kvset의 키 및 값은 불변이다. 상기 키-값 데이터 구조는 kvset의 시간 순서화된 시퀀스를 포함하는 상기 트리의 노드를 갖는 트리로 조직된다. 상기 kvset는 일단 수신되면 상기 트리의 루트-노드의 kvset의 시퀀스에 기록된다.
Description
우선권 적용
본 출원은 전체 내용이 본 명세서에 병합된 2017년 2월 9일자로 출원된 미국 특허 출원 번호 15/428,877의 우선권의 이익을 주장한다.
기술 분야
본 명세서에 기술된 실시형태는 일반적으로 키-값 데이터 저장소(key-value data store)에 관한 것으로, 보다 구체적으로는 KVS 트리(tree)를 구현하는 것에 관한 것이다.
데이터 구조(data structure)는 다양한 방식으로 거기에 저장된 데이터와 상호 작용할 수 있는 데이터 조직이다. 데이터 구조는, 예를 들어 이진 탐색 트리(binary search tree)에서 데이터를 효율적으로 탐색할 수 있고, 예를 들어, 링크된 리스트(list)로 희소 데이터를 효율적으로 저장할 수 있고, 또는 특히 B-트리로 탐색 가능한 데이터를 효율적으로 저장할 수 있도록 설계될 수 있다.
키-값 데이터 구조는 키-값 쌍을 받아들이고 키에 대한 질의(query)에 응답하도록 구성된다. 키-값 데이터 구조는 키가 각각의 값을 링크하는(또는 포함하는) 리스트로 저장되는 사전(dictionary)(예를 들어, 맵(map), 해시 맵(hash map) 등)과 같은 구조를 포함할 수 있다. 이러한 구조는 내부 메모리에서(예를 들어, 저장 매체와 달리 주 메모리 또는 시스템 상태 메모리에서) 유용하지만, 영구 저장 매체에서(예를 들어, 온-디스크(on-disk)에서) 이러한 구조를 저장하는 표현은 비효율적일 수 있다. 따라서 로그(log) 기반 저장 구조의 클래스가 도입되었다. 일례는 로그 구조화된 병합 트리(log structured merge tree)(LSM 트리)이다.
다양한 LSM 트리 구현이 있었지만 많은 구현이 키-값 쌍이 키 정렬된(sorted) 내부 메모리 구조로 수용되는 설계를 따른다. 내부 메모리 구조가 가득 차면 데이터는 자식 노드(child node) 중에 분배된다. 분배는 자식 노드의 키가 자식 노드 자체 내에 뿐만 아니라 자식 노드들 간에 순서화되도록 구성된다. 예를 들어, 3개의 자식 노드를 갖는 제1 트리-레벨에서, 가장 왼쪽에 있는 자식 노드에서 가장 큰 키는 중간에 있는 자식 노드의 가장 작은 키보다 더 작고, 중간에 있는 자식 노드에서 가장 큰 키는 가장 오른쪽에 있는 자식 노드의 가장 작은 키보다 더 작다. 이러한 구조를 이용하면 두 키를 효율적으로 탐색할 수 있을 뿐만 아니라 데이터 구조의 키 범위도 효율적으로 탐색할 수 있다. 한편, 미국 특허출원공개공보 제2014/0074841호 및 제2014/0222870호는 본 출원에 대한 선행기술문헌에 해당한다.
도면은 반드시 축척에 맞게 그려진 것은 아니며, 여기서 동일한 참조 부호는 여러 도면에서 유사한 구성 요소를 나타낼 수 있다. 다른 글자 접미부(suffix)를 갖는 동일한 숫자는 유사한 구성 요소의 상이한 경우를 나타낼 수 있다. 도면은 일반적으로 본 명세서에서 논의된 다양한 실시형태를 제한하는 것이 아니라 예시하는 것으로서 도시한다.
도 1은 일 실시형태에 따라 KVS 트리의 일례를 도시하는 도면;
도 2는 일 실시형태에 따라 다중-스트림 저장 디바이스에 기록(write)하는 일례를 도시하는 블록도;
도 3은 일 실시형태에 따라 다중-스트림 저장 디바이스에 기록하는 것을 용이하게 하는 방법의 일례를 도시하는 도면;
도 4는 일 실시형태에 따라 키 및 값을 저장하는 조직의 일례를 도시하는 블록도;
도 5는 일 실시형태에 따라 키-블록(key-block) 및 값-블록(value-block)을 구성하는 일례를 도시하는 블록도;
도 6은 일 실시형태에 따라 KB 트리의 일례를 도시하는 도면;
도 7은 일 실시형태에 따라 KVS 트리의 인수(KVS tree ingestion)를 도시하는 블록도;
도 8은 일 실시형태에 따라 KVS 트리를 인수하는 방법의 일례를 도시하는 도면;
도 9는 일 실시형태에 따라 키 압축(key compaction)을 도시하는 블록도;
도 10은 일 실시형태에 따라 키 압축을 위한 방법의 일례를 도시하는 도면;
도 11은 일 실시형태에 따라 키-값 압축을 도시하는 블록도;
도 12는 일 실시형태에 따라 키-값 압축을 위한 방법의 일례를 도시하는 도면;
도 13은 일 실시형태에 따라 스필 값(spill value) 및 트리와의 관계의 일례를 도시하는 도면;
도 14는 일 실시형태에 따라 스필 값 함수를 위한 방법의 일례를 도시하는 도면;
도 15는 일 실시형태에 따라 스필 압축을 도시하는 블록도;
도 16은 일 실시형태에 따라 스필 압축을 위한 방법의 일례를 도시하는 도면;
도 17은 일 실시형태에 따라 호이스트 압축(hoist compaction)을 도시하는 블록도;
도 18은 일 실시형태에 따라 호이스트 압축을 위한 방법의 일례를 도시하는 도면;
도 19는 본 발명의 일 실시형태에 따라 KVS 트리에 유지 관리(maintenance)를 수행하는 방법을 도시하는 도면;
도 20은 일 실시형태에 따라 KVS 트리 동작을 수정하는 방법의 일례를 도시하는 도면;
도 21은 일 실시형태에 따라 키 탐색을 도시하는 블록도;
도 22는 일 실시형태에 따라 키 탐색을 수행하는 방법의 일례를 도시 하는 도면;
도 23은 일 실시형태에 따라 키 스캔(key scan)을 도시하는 블록도;
도 24는 일 실시형태에 따라 키 스캔을 도시하는 블록도;
도 25는 일 실시형태에 따라 접두부 스캔(prefix scan)을 도시하는 블록도; 및
도 26은 하나 이상의 실시형태를 구현할 수 있는 기계의 일례를 도시하는 블록도.
도 1은 일 실시형태에 따라 KVS 트리의 일례를 도시하는 도면;
도 2는 일 실시형태에 따라 다중-스트림 저장 디바이스에 기록(write)하는 일례를 도시하는 블록도;
도 3은 일 실시형태에 따라 다중-스트림 저장 디바이스에 기록하는 것을 용이하게 하는 방법의 일례를 도시하는 도면;
도 4는 일 실시형태에 따라 키 및 값을 저장하는 조직의 일례를 도시하는 블록도;
도 5는 일 실시형태에 따라 키-블록(key-block) 및 값-블록(value-block)을 구성하는 일례를 도시하는 블록도;
도 6은 일 실시형태에 따라 KB 트리의 일례를 도시하는 도면;
도 7은 일 실시형태에 따라 KVS 트리의 인수(KVS tree ingestion)를 도시하는 블록도;
도 8은 일 실시형태에 따라 KVS 트리를 인수하는 방법의 일례를 도시하는 도면;
도 9는 일 실시형태에 따라 키 압축(key compaction)을 도시하는 블록도;
도 10은 일 실시형태에 따라 키 압축을 위한 방법의 일례를 도시하는 도면;
도 11은 일 실시형태에 따라 키-값 압축을 도시하는 블록도;
도 12는 일 실시형태에 따라 키-값 압축을 위한 방법의 일례를 도시하는 도면;
도 13은 일 실시형태에 따라 스필 값(spill value) 및 트리와의 관계의 일례를 도시하는 도면;
도 14는 일 실시형태에 따라 스필 값 함수를 위한 방법의 일례를 도시하는 도면;
도 15는 일 실시형태에 따라 스필 압축을 도시하는 블록도;
도 16은 일 실시형태에 따라 스필 압축을 위한 방법의 일례를 도시하는 도면;
도 17은 일 실시형태에 따라 호이스트 압축(hoist compaction)을 도시하는 블록도;
도 18은 일 실시형태에 따라 호이스트 압축을 위한 방법의 일례를 도시하는 도면;
도 19는 본 발명의 일 실시형태에 따라 KVS 트리에 유지 관리(maintenance)를 수행하는 방법을 도시하는 도면;
도 20은 일 실시형태에 따라 KVS 트리 동작을 수정하는 방법의 일례를 도시하는 도면;
도 21은 일 실시형태에 따라 키 탐색을 도시하는 블록도;
도 22는 일 실시형태에 따라 키 탐색을 수행하는 방법의 일례를 도시 하는 도면;
도 23은 일 실시형태에 따라 키 스캔(key scan)을 도시하는 블록도;
도 24는 일 실시형태에 따라 키 스캔을 도시하는 블록도;
도 25는 일 실시형태에 따라 접두부 스캔(prefix scan)을 도시하는 블록도; 및
도 26은 하나 이상의 실시형태를 구현할 수 있는 기계의 일례를 도시하는 블록도.
LSM 트리는 데이터를 대량으로 기록하는 것이 예상되고 또한 데이터에 효율적으로 액세스하는 것이 예상되는 대중적인 데이터 저장 구조로 되었다. 이들 특징을 지원하기 위해, LSM의 부분들은 이 부분들이 유지되는 매체에 대해 조정되고, 백그라운드 프로세스는 일반적으로 상이한 부분들 간에 (예를 들어, 내부 메모리 부분으로부터 온-디스크 부분으로) 데이터 이동을 처리한다. 본 명세서에서, 내부 메모리란 랜덤 액세스 및 바이트 어드레싱 가능 디바이스(예를 들어, 정적 랜덤 액세스 메모리(static random access memory: SRAM) 또는 동적 랜덤 액세스 메모리(dynamic random access memory: DRAM))를 말하고, 온-디스크란 블록 어드레싱 가능 디바이스(예를 들어, 하드 디스크 드라이브, 컴팩트 디스크, 디지털 다용도 디스크, 또는 플래시 메모리 기반 디바이스와 같은 솔리드 스테이트 드라이브(Solid-State Drive: SSD))를 말하고, 이는 미디어 디바이스 또는 저장 디바이스라고도 지칭된다. LSM 트리는 내부 메모리 디바이스에 의해 제공된 준비된 액세스를 이용하여 들어오는 데이터를 키별로 정렬하여 대응하는 값에 준비된 액세스를 제공한다. 데이터가 온-디스크 부분에 병합될 때 상주하는 온-디스크 데이터는 새로운 데이터와 병합되고 블록으로 다시 디스크에 기록된다.
LSM 트리는 다수의 데이터베이스 및 대용량 저장매체(예를 들어, 클라우드 저장매체) 설계의 근간을 이루는 대중적인 구조로 되었지만, 이 트리는 일부 단점을 가지고 있다. 첫째, 내부 구조를 키별로 정렬하여 유지하기 위해 새로운 데이터를 오래된 데이터와 항상 병합하는 것으로 인해 상당한 기록 증폭이 발생한다. 기록 증폭은 주어진 저장 기술에 의해 부과되는 데이터에 대한 최소 기록 수가 증가되는 것이다. 예를 들어, 데이터를 저장하기 위해 데이터는 적어도 한번 디스크에 기록된다. 이는 예를 들어 이미 기록된 데이터의 끝 부분에 최근 데이터 조각을 간단히 붙이는 것에 의해 수행될 수 있다. 그러나 이 구조는 탐색 속도가 느리고(예를 들어, 이는 데이터의 양에 따라 선형적으로 증가함), 데이터가 변경되거나 삭제될 때 비효율적일 수 있다. LSM 트리는 새로운 데이터와 병합될 데이터를 디스크로부터 판독하고 나서 이 데이터를 다시 디스크에 재기록할 때 기록 증폭을 증가시킨다. 하드 디스크 드라이브의 조각 모음이나 SSD의 가비지 수집(garbage collection)과 같은 저장 디바이스의 활동이 포함되면 기록 증폭 문제는 악화될 수 있다. 특히 이러한 디바이스는 기록의 수의 함수로서 "마모"될 수 있으므로 SSD에서 기록 증폭은 매우 유해할 수 있다. 즉, SSD는 기록 면에서 측정할 때 제한된 수명을 갖는다. 따라서 SSD에서 기록 증폭은 기본 하드웨어의 사용 가능 수명을 단축시킬 수 있다.
LSM 트리에 따른 제2 문제는 병합을 수행하는 동안 대량의 공간을 소비할 수 있다는 것을 포함한다. LSM 트리는 온-디스크 부분이 키별로 분류되는 것을 보장한다. 온-디스크에 상주하는 데이터의 양이 많으면 병합을 수행하는 데 소비되는 임시 또는 스크래치 공간의 양이 많아질 수 있다. 이것은 온-디스크 부분을 중복되지 않는 구조로 분할하여 데이터 서브세트(subset)에 병합을 수행함으로써 다소 완화될 수 있지만 구조 오버헤드와 성능 사이의 균형은 달성하기 어려울 수 있다.
LSM 트리에 따른 제3 문제는 기록 처리량이 제한될 수 있다는 것을 포함한다. 이 문제는 전체 LSM 데이터를 본질적으로 항상 정렬하는 특성에 기인한다. 따라서 내부 메모리 부분을 압도하는 대량의 기록은 시간이 많이 걸릴 수 있는 병합 동작으로 내부 메모리 부분이 소거될 때까지 기다려야 한다. 이 문제를 해결하기 위해 이 시나리오에서 병합 문제를 피하기 위해 더 작은 데이터 삽입을 조작하는 기록 버퍼(write buffer: WB) 트리가 제안되었다. 구체적으로 WB 트리는 들어오는 키를 해싱하여 데이터를 확산시키고 키-해시 및 값 조합을 더 작은 입력 세트(intake set)로 저장한다. 이러한 세트는 키-해시 값에 따라 여러 번 병합되거나 자식 노드에 기록될 수 있다. 이렇게 하면 LSM 트리의 값 비싼 병합 동작을 피하면서 특정 키를 효율적이고 효과적으로 조회할 수 있다. 그러나 WB 트리를 키-해시로 정렬하면 예를 들어 키의 범위를 탐색할 때 발생하는 것과 같이 값 비싼 전체 트리를 스캔해야 키-해시에 의해 직접 참조되지 않은 값을 찾을 수 있다.
위에서 언급된 문제를 해결하기 위해, KVS 트리 및 대응하는 동작이 본 명세서에 설명된다. KVS 트리는 트리의 내용이 아니라 키의 미리 결정된 유도에 기초하여 부모와 자식 사이에 연결을 갖는 노드를 포함하는 트리 데이터 구조이다. 노드는 키-값 세트(kvset)의 시간 정렬된 시퀀스를 포함한다. kvset는 키 정렬된 구조의 키-값 쌍을 포함한다. Kvset는 또한 한번 기록되면 불변(immutable)이다. KVS 트리는 kvset를 효율적으로 탐색할 수 있도록 kvset를 노드에 유지하고 kvset는 정렬된 키뿐만 아니라, 일례에서, 키 메트릭(key metric)(예를 들어, 블룸 필터(bloom filter), 최소 및 최대 키 등)을 포함함으로써 WB 트리 탐색을 개선하면서 WB 트리의 기록 처리량을 달성한다. 많은 예에서, KVS 트리는 값으로부터 키를 분리하고 더 작은 kvset 집합을 병합함으로써 LSM 트리의 임시 저장 문제를 개선할 수 있다. 추가적으로, 설명된 KVS 트리는 kvset에 다양한 유지 관리 동작을 통해 기록 증폭을 줄일 수 있다. 또한 노드 내 kvset는 불변이므로 SSD에서 기록 마모와 같은 문제는 데이터 구조에 의해 관리되어, 디바이스 자체의 가비지 수집 활동을 줄일 수 있다. 이는 내부 디바이스 자원(예를 들어, 버스 대역폭, 처리 사이클 등)을 확보하여 외부 드라이브 성능(예를 들어, 판독 또는 기록 속도)을 향상시키는 추가된 장점을 제공한다. KVS 트리 및 이 트리에 대한 동작의 추가 상세와 예시적인 구현예는 아래에 설명된다.
도 1은 일 실시형태에 따라 KVS 트리(100)의 일례를 도시한다. KVS 트리(100)는 트리로 조직된 키-값 데이터 구조이다. 키-값 데이터 구조로서, 값은 값을 참조하는 대응하는 키와 함께 트리(100)에 저장된다. 구체적으로, 키-엔트리(key-entry)는 값에 대한 참조와 같은 키 및 추가 정보를 모두 포함하는데 사용되지만, 달리 언급되지 않는 한, 키-엔트리는 간략화를 위해 간단히 키라고 지칭된다. 키 자체는 트리(100) 내에서 전체 순서를 갖는다. 따라서, 키는 서로 간에 정렬될 수 있다. 키는 또한 서브-키(sub-key)로 분할될 수 있다. 일반적으로, 서브-키는 키의 중첩되지 않는 부분들이다. 일례에서, 키의 전체 순서는 다수의 키들 사이에 동일한 서브-키를 비교하는 것(예를 들어, 키의 제1 서브-키는 다른 키의 제1 서브-키와 비교된다)에 기초한다. 일례에서, 키 접두부는 키의 시작 부분이다. 키 접두부는 사용될 때 하나 이상의 서브-키로 구성될 수 있다.
트리(100)는 노드(110)와 같은 하나 이상의 노드를 포함한다. 노드(110)는 불변 키-값 세트(kvset)의 시간 순서화된 시퀀스를 포함한다. 도시된 바와 같이, kvset(115)는 이것이 시퀀스 중 가장 새로운 것임을 나타내기 위해 'N' 배지(badge)를 포함하는 반면, kvset(120)는 이것이 시퀀스 중 가장 오래된 것임을 나타내기 위해 'O' 배지를 포함한다. Kvset(125)는 이것이 시퀀스에서 중간 것임을 나타내기 위해 'I' 배지를 포함한다. 이들 배지는 전체적으로 kvset 라벨을 지정하는 데 사용되지만, 다른 배지(예를 들어, 'X')는, 단순히 익명의 kvset를 나타내는 틸드(tilde) '~'가 아닌 한, 시퀀스에서 그 위치(예를 들어, 새로운, 중간, 오래된 등)가 아닌 특정 kvset를 나타낸다. 아래에서 보다 상세히 설명되는 바와 같이, 더 오래된 키-값 엔트리는 트리(100)에서 더 하위에서 발생한다. 따라서 값을 트리-레벨에서 위로 가져가면, 예를 들어 L2로부터 L1로 가져가면, 수신자 노드에서 가장 오래된 위치에 새로운 kvset가 생성된다.
노드(110)는 또한 노드의 kvset의 키-값 쌍을 노드(110)의 임의의 하나의 자식 노드로 매핑하는 결정적 매핑(determinative mapping)을 포함한다. 본 명세서에서 사용된 결정적 매핑이란 키-값 쌍이 주어지면 외부 개체가 트리(100)의 내용을 알지 않고도 가능한 자식 노드의 트리(100)를 통한 경로를 추적할 수 있다는 것을 의미한다. 예를 들어, 이것은 트리의 탐색 최적화된 구조를 유지하기 위해 트리의 내용이 주어진 키의 값이 속하는 위치를 결정할 수 있는 B-트리와는 상당히 다르다. 대신에, 여기서, 결정적 매핑은, 예를 들어, 키-값 쌍이 주어지면 최대 트리-레벨(예를 들어, 트리 깊이)이 단지 L1에만 있더라도 이 쌍이 매핑할 수 있는 L3에서 자식을 계산할 수 있는 규칙을 제공한다. 일례에서, 결정적 매핑은 키의 부분의 해시의 부분을 포함한다. 따라서, 서브-키는 매핑 세트에 도달하기 위해 해싱될 수 있다. 이 세트의 부분은 트리의 임의의 주어진 레벨에 사용될 수 있다. 일례에서, 키의 부분은 전체 키이다. 전체 키를 사용하지 않을 이유는 없다.
일례에서, 해시는 해시의 부분을 포함하는 다수의 중첩되지 않는 부분을 포함한다. 일례에서, 다수의 중첩되지 않는 부분 각각은 트리의 레벨에 대응한다. 일례에서, 해시의 부분은 노드의 레벨에 의해 다수의 중첩되지 않는 부분으로부터 결정된다. 일례에서, 노드에 대한 자식 노드의 최대 수는 해시의 부분의 크기에 의해 한정된다. 일례에서, 해시의 부분의 크기는 비트의 수이다. 이러한 예는 8개의 비트를 초래하는 키의 해시를 취함으로써 설명될 수 있다. 이 8개의 비트는 처음 2개의 비트, 비트 3 내지 비트 6(그 결과 4개의 비트) 및 비트 7 및 비트 8의 3개의 세트로 분할될 수 있다. 자식 노드는 제1 레벨(예를 들어, L1)의 자식이 두 개의 비트 이름을 갖고, 제2 레벨(예를 들어, L2)의 자식이 4 비트 이름을 갖고, 제3 레벨(예를 들어, L3)의 자식이 2 비트 이름을 갖도록 비트 세트에 기초하여 색인을 생성할 수 있다. 확장된 논의는 도 13 및 도 14와 관련하여 아래에 포함된다.
kvset는 트리(100)의 노드에 조직된 키 및 값 저장소이다. kvset의 불변성은 kvset가 일단 노드에 배치되면 변경되지 않는다는 것을 의미한다. 그러나, kvset는 삭제될 수 있고, 그 내용의 일부 또는 전부는 새로운 kvset 등에 추가될 수 있다. 일례에서, kvset의 불변성은 또한 kvset 내에 포함된 임의의 제어 또는 메타-데이터로 확장된다. 이는 일반적으로 메타-데이터가 적용되는 내용이 변하지 않아서 종종 메타-데이터는 이 점에서 정적일 수도 있기 때문에 가능하다.
또한, KVS 트리(100)는 트리(100) 전체에 걸쳐 키에 고유성을 요구하지는 않지만, kvset는 단 하나의 키만을 갖는다는 것이 주목된다. 즉, 주어진 kvset의 모든 키는 kvset의 다른 키와 다르다. 이 마지막 언급은 특정 kvset에 대해 참(true)이며, 따라서 예를 들어 kvset가 버전으로 관리되는 경우에는 적용되지 않을 수 있다. Kvset 버전 관리는 데이터의 스냅샷을 생성하는 데 유용할 수 있다. 버전으로 관리되는 kvset의 경우, kvset의 키의 고유성은 kvset 식별자(ID)와 버전의 조합에 의해 결정된다. 그러나, 2개의 상이한 kvset(예를 들어, kvset(115) 및 kvset(120))은 각각 동일한 키를 포함할 수 있다.
일례에서, kvset는 kvset의 키-값 쌍의 키 엔트리를 저장하기 위해 키-트리를 포함한다. 다양한 데이터 구조가 이진 탐색 트리, B-트리 등과 같이 키-트리(이는 심지어 트리가 아닐 수도 있음)에서 고유한 키를 효율적으로 저장하고 검색하는 데 사용될 수 있다. 일례에서, 키는 키-트리의 리프 노드(leaf node)에 저장된다. 일례에서, 키-트리의 임의의 서브트리(subtree)에서 최대 키는 가장 오른쪽에 있는 자식의 가장 오른쪽 엔트리에 있다. 일례에서, 키-트리의 제1 노드의 가장 오른쪽 에지(edge)는 키-트리의 서브-노드(sub-node)에 링크된다. 일례에서, 키-트리의 서브-노드에 루트(root)를 둔 서브트리의 모든 키는 키 트리의 제1 노드에 있는 모든 키보다 더 크다. 이들 마지막 일부 예는 도 6과 관련하여 후술되는 바와 같이 KB 트리의 특징을 도시한다.
일례에서, kvset의 키 엔트리는 기본 키-블록(primary key-block) 및 0개 이상의 확장 키-블록(extension key-block)을 포함하는 키-블록 세트에 저장된다. 일례에서, 키-블록 세트의 멤버는 SSD, 하드 디스크 드라이브 등과 같은 저장 매체를 위한 미디어 블록에 대응한다. 일례에서, 각각의 키-블록은 이를 키-블록으로 식별하기 위한 헤더(header)를 포함한다. 일례에서, 기본 키-블록은 kvset의 하나 이상의 확장 키-블록에 대한 미디어 블록 식별자의 리스트를 포함한다.
일례에서, 기본 키-블록은 kvset의 키-트리에 대한 헤더를 포함한다. 헤더는 키 또는 일반적으로 kvset와 보다 쉽게 상호 작용할 수 있게 하는 다수의 값을 포함할 수 있다. 일례에서, 기본 키-블록 또는 헤더는 kvset의 키-트리에서 가장 낮은 키의 사본을 포함한다. 여기서, 가장 낮은 키는 트리의 미리 설정된 정렬 순서(예를 들어, 트리(100)에서 키의 전체 순서)에 의해 결정된다. 일례에서, 기본 키-블록은 kvset의 키-트리에서 가장 높은 키의 사본을 포함하고, 가장 높은 키는 트리의 미리 설정된 정렬 순서에 의해 결정된다. 일례에서, 기본 키-블록은 kvset의 키-트리에 대한 미디어 블록 식별자의 리스트를 포함한다. 일례에서, 기본 키-블록은 kvset의 블룸 필터를 위한 블룸 필터 헤더를 포함한다. 일례에서, 기본 키-블록은 kvset의 블룸 필터에 대한 미디어 블록 식별자의 리스트를 포함한다.
일례에서, kvset의 값은 값-블록의 세트에 저장된다. 여기서, 값-블록의 세트의 멤버는 저장 매체를 위한 미디어 블록에 대응한다. 일례에서, 각각의 값-블록은 이를 값-블록으로 식별하기 위한 헤더를 포함한다. 일례에서, 값 블록은 값들 사이를 분리함이 없이 하나 이상의 값에 대한 저장 구획을 포함한다. 따라서, 제1 값의 비트는 이들 사이에 경계부(guard), 구역(container) 또는 다른 구분자(delimiter) 없이 저장 매체의 제2 값의 비트로 이어진다. 일례에서, 기본 키-블록은 값 블록의 세트에서 값-블록에 대한 미디어 블록 식별자의 리스트를 포함한다. 따라서, 기본 키-블록은 값-블록에 대한 저장소 참조를 관리한다.
일례에서, 기본 키-블록은 kvset에 대한 메트릭의 세트를 포함한다. 일례에서, 메트릭의 세트는 kvset에 저장된 키의 총 수를 포함한다. 일례에서, 메트릭의 세트는 kvset에 저장된 삭제 표시 값(tombstone value)을 갖는 다수의 키를 포함한다. 본 명세서에서 사용된 삭제 표시란 키에 대응하는 값이 삭제되었음을 나타내는 데이터 마커(data marker)이다. 일반적으로, 삭제 표시는 키 엔트리에 상주하여, 이 키-값 쌍에 소비되는 값-블록 공간이 없다. 삭제 표시의 목적은 트리(100)로부터 값을 제거하는 값 비싼 동작을 피하면서 값이 삭제된 것을 표시하는 것이다. 따라서, 시간 순서화된 탐색을 사용하여 삭제 표시를 만나면, 키-값 쌍의 만료된 버전이 트리(100)에서 더 오래된 위치에 존재하더라도 대응하는 값이 삭제된 것을 알 수 있다.
일례에서, 기본 키-블록에 저장된 메트릭의 세트는 kvset에 저장된 키에 대한 모든 키 길이의 합을 포함한다. 일례에서, 메트릭의 세트는 kvset에 저장된 키의 모든 값 길이의 합을 포함한다. 이 마지막 두 개의 메트릭은 kvset에서 소비되는 저장 매체의 대략적인 (또는 정확한) 양을 제공한다. 일례에서, 메트릭의 세트는 kvset의 값-블록에서 참조되지 않은 데이터(예를 들어, 참조되지 않은 값)의 양을 포함한다. 이 마지막 메트릭은 유지 관리 동작에서 교정될 수 있는 공간의 추정치를 제공한다. 키-블록 및 값-블록의 추가적인 상세는 도 4 및 도 5와 관련하여 아래에서 논의된다.
일례에서, 트리(100)는 적어도 하나의 기계 판독 가능 매체의 제1 컴퓨터 판독 가능 매체에 있는 제1 루트(105), 및 적어도 하나의 컴퓨터 판독 가능 매체의 제2 컴퓨터 판독 가능 매체에 있는 제2 루트(110)를 포함한다. 일례에서, 제2 루트는 제1 루트의 유일한 자식이다. 일례에서, 제1 컴퓨터 판독 가능 매체는 바이트 어드레싱 가능하고, 제2 컴퓨터 판독 가능 매체는 블록 어드레싱 가능하다. 이것은 도 1에 도시되고 여기서 노드(105)는 내부 메모리 위치를 나타내기 위해 MEM 트리-레벨에 있는 반면, 노드(110)는 트리(100)의 루트 온-디스크 요소에 있는 것을 나타내기 위해 L0에 있다.
상기 설명은 KVS 트리(100)의 다양한 조직 속성을 설명한다. 트리 유지 관리(예를 들어, 최적화, 가비지 수집 등), 탐색 등과 같은, 트리(100)와 상호 작용하는 동작은 도 7 내지 도 25와 관련하여 아래에서 논의된다. 이러한 주제로 진행하기 전에, 도 2 및 도 3은 다중 스트림 저장 디바이스의 효과적인 사용을 구현하기 위해 KVS 트리(100)의 구조를 이용하는 기술을 도시한다.
플래시 메모리 또는 SSD를 포함하는 저장 디바이스는 유사한 수명을 갖는 데이터가 플래시 소거 블록으로 그룹화되는 경우 더 효율적으로 동작하고 더 큰 내구성을 가질 수 있다(예를 들어, "마모되지 않을 수 있다"). 다른 비 휘발성 매체를 포함하는 저장 디바이스는 또한 SMR(shingled magnetic recording) 하드 디스크 드라이브(hard-disk drive: HDD)와 같이 유사한 수명을 갖는 데이터 그룹으로부터 이익을 얻을 수 있다. 이와 관련하여 데이터가 동시에 또는 비교적 작은 시간 간격 내에 삭제되면 데이터는 유사한 수명을 갖는다. 저장 디바이스에서 데이터를 삭제하는 방법은 저장 디바이스에서 데이터를 명시적으로 할당 해제하거나, 논리적으로 덮어 쓰기하거나, 또는 물리적으로 덮어 쓰기하는 동작을 포함할 수 있다.
저장 디바이스는 내부에 저장될 다양한 데이터의 수명을 일반적으로 알지 못할 수 있으므로, 저장 디바이스는 데이터와 관련된 논리적 수명 그룹을 식별하는 데이터 액세스 커맨드(예를 들어, 판독 또는 기록)를 위한 인터페이스를 제공할 수 있다. 예를 들어, 산업 표준 SCSI 및 제안된 NVMe 저장 디바이스 인터페이스는 저장 디바이스에 기록될 데이터, 및 이 데이터에 대응하는 스트림이라고 지칭되는 수명 그룹에 대한 숫자 스트림 식별자(스트림 ID)를 포함하는 기록 커맨드를 지정한다. 복수의 스트림을 지원하는 저장 디바이스는 다중-스트림 저장 디바이스이다.
온도는 데이터를 분류하기 위한 안정성 값이며, 이 값은 임의의 주어진 시간 간격 내에 데이터가 삭제될 상대적인 확률에 대응한다. 예를 들어, 고온(HOT) 데이터는 1분 내에 삭제(또는 변경)될 것으로 예상되는 것일 수 있는 반면, 저온(COLD) 데이터는 1시간 동안 지속될 것으로 예상되는 것일 수 있다. 일례에서, 유한한 세트의 안정성 값이 이러한 분류를 지정하는데 사용될 수 있다. 일례에서, 안정성 값 세트는 {고온, 온난(WARM), 저온}일 수 있고, 여기서 주어진 시간 간격 내에, 고온으로 분류된 데이터는 온난으로 분류된 데이터보다 삭제될 확률이 더 높고, 온난으로 분류된 데이터는 저온으로 분류된 데이터보다 삭제될 확률이 더 높다.
도 2 및 도 3은 주어진 안정성 값뿐만 아니라 하나 이상의 KVS 트리에 대한 데이터의 하나 이상의 속성에 기초하여 상이한 스트림 ID를 상이한 기록에 할당하는 것을 처리한다. 따라서, 이전의 예를 계속하면, 주어진 저장 디바이스에 대해, 스트림 식별자의 제1 세트는 고온으로 분류된 데이터에 대한 기록 커맨드와 함께 사용될 수 있고, 스트림 식별자의 제2 세트는 온난으로 분류된 데이터에 대한 기록 커맨드와 함께 사용될 수 있고, 스트림 식별자의 제3 세트는 저온으로 분류된 데이터에 대한 기록 커맨드와 함께 사용될 수 있는데, 여기서 스트림 식별자는 이 3개의 세트 중 기껏 하나의 세트에 속한다.
다음의 용어는 편의상 도 2 및 도 3의 다중-스트림 저장 디바이스 시스템 및 기술을 논의할 때 제공된다:
DID는 저장 디바이스에 대한 고유한 디바이스 식별자이다.
SID는 주어진 저장 디바이스에서 스트림에 대한 스트림 식별자이다.
TEMPSET는 온도 값의 유한 집합이다.
TEMP는 TEMPSET의 요소이다.
FID는 KVS 트리의 집합에 대한 고유한 포리스트(forest) 식별자이다.
TID는 KVS 트리에 대한 고유한 트리 식별자이다. KVS 트리(100)는 TID를 갖는다.
LNUM은 주어진 KVS 트리 내 레벨 수이며, 여기서 편의상, KVS 트리의 루트 노드는 트리-레벨(0)에 있는 것으로 고려되고, 루트 노드의 자식 노드(만약 있다면)는 트리-레벨(1)에 있는 것으로 고려되고, 이와 같이 계속된다. 따라서, 도시된 바와 같이, KVS 트리(100)는 트리-레벨(L0(노드(110)를 포함함) 내지 L3)을 포함한다.
NNUM은 주어진 KVS 트리에서 주어진 레벨에 주어진 노드에 대한 숫자이며, 편의상, NNUM은 0 내지 (노드카운트(NodeCount)(LNUM)-1) 범위의 숫자일 수 있고, 여기서 노드카운트(LNUM)는 트리-레벨(LNUM)에서 노드의 총 수이고, 여기서 KVS 트리(100)의 모든 노드는 튜플(tuple)(LNUM, NNUM)에 의해 고유하게 식별된다. 도 1에 도시된 바와 같이, 노드(110)에서 시작하여 상위에서 하위로, 왼쪽에서 오른쪽으로 진행하는 노드 튜플의 전체 리스트는 다음과 같을 수 있다:
L0(루트):(0,0)
L1:(1,0),(1,1),(1,2),(1,3),(1,4)
L2:(2,0),(2,1),(2,2),(2,3)
L3:(3,0),(3,1),(3,2),(3,3)
KVSETID는 고유한 kvset 식별자이다.
WTYPE은 아래에 논의된 KBLOCK 또는 VBLOCK 값이다.
WLAST는 아래에 논의된 부울리안 값(참 또는 거짓)이다.
도 2는 일 실시형태에 따라 다중 스트림 저장 디바이스(예를 들어, 디바이스(260 또는 265))에 기록하는 일례를 도시하는 블록도이다. 도 2는 다수의 KVS 트리, KVS 트리(205) 및 KVS 트리(210)를 도시한다. 도시된 바와 같이, 각각의 트리는 각각 기록 동작(215 및 220)을 수행하고 있다. 이들 기록 동작은 저장 서브시스템(storage subsystem)(225)에 의해 처리된다. 저장 서브시스템은 예를 들어 디바이스(260)를 위한 디바이스 드라이버일 수 있고, 예를 들어, 운영 체제, 네트워크 연결 저장 디바이스 등에서 발견되는 것과 같은 다수의 디바이스(예를 들어, 디바이스(260) 및 디바이스(265))를 관리하는 저장 제품일 수 있다. 시간에 맞게 저장 서브시스템(225)은 동작(250 및 255)에서 각각 저장 디바이스에 대한 기록을 완료한다. 스트림-매핑 회로(230)는 디바이스 기록(250)에 사용되기 위해 스트림 ID를 주어진 기록(215)에 제공한다.
KVS 트리(205)에서, kvset의 불변성은 전체 kvset가 한번에 기록되거나 삭제되게 한다. 따라서, kvset를 포함하는 데이터는 유사한 수명을 갖는다. 새로운 kvset를 포함하는 데이터는 소거 코딩 또는 RAID와 같은 기술을 사용하여 단일 저장 디바이스 또는 여러 저장 디바이스(예를 들어, 디바이스(260) 및 디바이스(265))에 기록될 수 있다. 또한, kvset의 크기는 임의의 주어진 디바이스 기록(250)보다 더 클 수 있어서, kvset를 기록하는 동작은 다수의 기록 커맨드를 주어진 저장 디바이스(260)로 보내는 동작을 포함할 수 있다. 스트림-매핑 회로(230)의 동작을 용이하게 하기 위해, 각각의 이러한 기록 커맨드(250)에 대해 스트림 ID를 선택하기 위해 다음 중 하나 이상이 제공될 수 있다:
A) 기록되고 있는 kvset의 KVSETID;
B) 저장 디바이스의 DID;
C) KVS 트리가 속하는 포리스트의 FID;
D) KVS 트리의 TID;
E) kvset를 포함하는 KVS 트리 내 노드의 LNUM;
F) kvset를 포함하는 KVS 트리 내 노드의 NNUM;
G) WTYPE은 기록 커맨드가 DID 상의 KVSETID에 대한 키-블록에 대한 경우 KBLOCK이고, 또는 기록 커맨드가 DID 상의 KVSETID에 대한 값-블록에 대한 경우 VBLOCK이다;
H) WLAST는 기록 커맨드가 DID 상의 KVSETID에 대한 마지막 명령인 경우 참이고, 그렇지 않은 경우 거짓이다.
일례에서, 각각의 이러한 기록 커맨드에 대해, 스트림-매핑 튜플이라고 지칭되는 튜플(DID, FID, TID, LNUM, NNUM, KVSETID, WTYPE, WLAST)은 스트림-매핑 회로(230)로 송신될 수 있다. 스트림-매핑 회로(230)는 이후 기록 커맨드(250)와 함께 사용할 저장 서브시스템(225)을 위한 스트림 ID로 응답할 수 있다.
스트림-매핑 회로(230)는 전자 하드웨어로 구현된 제어기(235), 액세스 가능한 스트림 ID(A-SID) 테이블(240), 및 선택된 스트림 ID(S-SID) 테이블(245)을 포함할 수 있다. 제어기(235)는 스트림-매핑 튜플을 입력(input)으로서 받아들이고 스트림 ID로 응답하도록 배열된다. 일례에서, 제어기(235)는 복수의 KVS 트리(205 및 210)를 저장하는 복수의 저장 디바이스(260 및 265)로 구성된다. 제어기(235)는 (예를 들어, 구성, 질의 등에 의해) 액세스 가능한 디바이스를 위한 구성을 획득하도록 배열된다. 제어기(235)는 또한 안정성 값의 세트(TEMPSET)를 구성하도록 배열되고, TEMPSET 내의 각각의 값(TEMP)에 대해 이 값에 의해 분류된 데이터에 대해 사용하기 위해 주어진 저장 디바이스 상의 스트림의 분율(fraction), 수 또는 수의 다른 결정자(determiner)를 구성하도록 배열된다.
일례에서, 제어기(235)는 온도 할당 방법을 획득(예를 들어, 구성, 메시지 등을 통해 수신하거나, 구성 디바이스, 펌웨어 등으로부터 검색)하도록 배열된다. 온도 할당 방법은 이 예에서 기록 요청(215)에 안정성 값을 할당하기 위해 사용될 수 있다. 일례에서, 스트림-매핑 튜플은 DID, FID, TID, LNUM, NNUM, KVSETID, WTYPE 또는 WLAST 중 임의의 하나 이상을 포함할 수 있고, TEMPSET로부터 안정성 값(TEMP)을 선택하기 위해 제어기(235)에 의해 실행되는 온도 할당 방법에 대한 입력으로서 사용될 수 있다. 일례에서, KVS 트리 스코프(scope)는 기록되는 KVS 트리 구성 요소(예를 들어, kvset)에 특정된 기록을 위한 파라미터의 집합이다. 일례에서, KVS 트리 스코프는 FID, TID, LNUM, NNUM 또는 KVSETID 중 하나 이상을 포함한다. 따라서, 이 예에서, 스트림-매핑 튜플은 KVS 트리 스코프의 구성 요소뿐만 아니라 DID, WLAST 또는 WTYPE과 같은 디바이스 특정 또는 기록 특정 구성 요소를 포함할 수 있다. 일례에서, 안정성 또는 온도, 스코프 튜플(TSCOPE)은 스트림-매핑 튜플로부터 유도된다. 다음은 TSCOPE를 만드는 데 사용될 수 있는 성분 KVS 트리 스코프 구성 요소의 예이다:
A) (FID, TID, LNUM)으로 연산된 TSCOPE;
B) (LNUM)으로 연산된 TSCOPE;
C) (TID)로 연산된 TSCOPE;
D) (TID, LNUM)으로 연산된 TSCOPE; 또는
E) (TID, LNUM, NNUM)으로 연산된 TSCOPE.
일례에서, 제어기(235)는 정적 온도 할당 방법을 구현할 수 있다. 정적 온도 할당 방법은 예를 들어, 구성 파일, 데이터베이스, KVS 트리 메타 데이터, 또는 KVS 트리(105) TID 내의 메타 데이터, 또는 KVS 트리 TID에 저장된 메타데이터를 포함하는 다른 데이터베이스로부터 선택된 TEMP를 판독할 수 있다. 이 예에서, 이들 데이터 소스는 TSCOPE로부터 안정성 값으로 매핑을 포함한다. 일례에서, 매핑은 기록 요청이 도달할 때 안정성 값의 할당을 가속하기 위해 (예를 들어, 제어기(235)가 활성화될 때 또는 나중에 동작하는 동안 동적으로) 캐싱될 수 있다.
일례에서, 제어기(235)는 동적 온도 할당 방법을 구현할 수 있다. 동적 온도 할당 방법은 kvset가 TSCOPE에 기록되는 빈도에 기초하여 선택된 TEMP를 연산할 수 있다. 예를 들어, 제어기(235)가 주어진 TSCOPE에 대한 온도 할당 방법을 실행하는 빈도는 TEMPSET 내의 TEMP 주위에서 측정되고 클러스터링될 수 있다. 따라서, 이러한 연산은, 예를 들어, kvset가 TSCOPE에 기록되는 빈도를 포함하는 빈도 범위에 의해 TEMP의 값이 결정되도록 빈도 범위 세트 및 각각의 빈도 범위로부터 안정성 값으로의 매핑을 한정할 수 있다.
제어기(235)는 스트림 할당 방법을 획득(예를 들어, 구성, 메시지 등을 통해 수신하거나, 구성 디바이스, 펌웨어 등으로부터 검색)하도록 배열된다. 스트림 할당 방법은 스트림 ID를 생성하기 위해 (예를 들어, 온도 할당으로부터) 안정성 값뿐만 아니라 기록(215)의 KVS 트리(205) 양태를 소비한다. 일례에서, 제어기(235)는 스트림 할당 방법에서 스트림-매핑 튜플(예를 들어, KVS 트리 스코프를 포함함)을 사용하여 스트림 ID를 선택할 수 있다. 일례에서, 안정성 값과 함께 DID, FID, TID, LNUM, NNUM, KVSETID, WTYPE 또는 WLAST 중 임의의 하나 이상이 제어기(235)에 의해 실행된 스트림 할당 방법에서 스트림 ID를 선택하는데 사용될 수 있다. 일례에서, 스트림-스코프 튜플 SSCOPE는 스트림-매핑 튜플로부터 유도된다. 다음은 SSCOPE를 만드는 데 사용될 수 있는 예시적인 성분 KVS 트리 스코프 구성 요소이다:
A) (FID, TID, LNUM, NNUM)으로 연산된 SSCOPE
B) (KVSETID)로 연산된 SSCOPE
C) (TID)로 연산된 SSCOPE
D) (TID, LNUM)으로 연산된 SSCOPE
E) (TID, LNUM, NNUM)으로 연산된 SSCOPE
F) (LNUM)으로 연산된 SSCOPE
제어기(235)는 입력을 받아들이기 전에 A-SID 테이블(240) 및 S-SID 테이블(245)을 초기화하도록 배열될 수 있다. A-SID 테이블(240)은, 튜플(DID, TEMP, SID)에 대한 엔트리를 저장할 수 있고 DID 및 TEMP에 대해 지정된 값을 갖는 엔트리를 검색할 수 있는 데이터 구조(테이블, 사전 등)이다. 표기법 A-SID(DID, TEMP)란, 만약 있다면, DID 및 TEMP에 대해 지정된 값을 갖는 A-SID 테이블(240) 내 모든 엔트리를 말한다. 일례에서, A-SID 테이블(240)은 각각의 구성된 저장 디바이스(260 및 265) 및 TEMPSET 내 온도 값에 대해 초기화될 수 있다. A-SID 테이블(240)의 초기화는 다음과 같이 진행될 수 있다: 각각의 구성된 저장 디바이스(DID)에 대해, 제어기(235)는,
A) SCOUNT라고 지칭되는, DID에서 이용 가능한 스트림의 수를 획득하고;
B) DID 상의 SCOUNT 스트림 각각에 대해 고유한 SID를 획득하고; 및
C) TEMPSET 내 각각의 값(TEMP)에 대해,
a) TCOUNT라고 지칭되는, TEMP에 대해 구성된 결정자에 따라 TEMP에 의해 분류된 데이터에 얼마나 많은 SCOUNT 스트림을 사용할지를 연산하고; 및
b) A-SID 테이블(240)에 아직 입력되지 않은 DID에 대해 TCOUNT SID를 선택하고, DID에 대해 선택된 각각의 TCOUNT SID에 대해, (DID, TEMP, SID)에 대한 A-SID 테이블(240)에 하나의 엔트리(예를 들어, 행)를 생성하도록 배열될 수 있다.
따라서, 일단 초기화되면, A-SID 테이블(240)은 각각의 구성된 저장 디바이스 DID에 대한 엔트리를 포함하고, 고유한 SID가 할당된 TEMPSET 내의 값(TEMP)을 포함한다. 구성된 저장 디바이스(260)에 이용 가능한 스트림의 수를 획득하는 기술 및 각각에 사용 가능한 SID는 저장 디바이스 인터페이스에 따라 다르지만, 이들은 다중 스트림 저장 디바이스의 인터페이스를 통해 용이하게 액세스 가능하다.
S-SID 테이블(245)은 이미 사용 중인 스트림의 레코드(예를 들어, 이미 주어진 기록의 일부)를 유지한다. S-SID 테이블(245)은, 튜플(DID, TEMP, SSCOPE, SID, 타임스탬프)에 대한 엔트리를 저장할 수 있고, DID, TEMP 및 선택적으로 SSCOPE에 지정된 값을 갖는 엔트리를 검색 또는 삭제할 수 있는 데이터 구조(테이블, 사전 등)이다. 표기법 S-SID(DID, TEMP)는 만약 있다면 DID 및 TEMP에 대해 지정된 값을 갖는 S-SID 테이블(245) 내 모든 엔트리를 말한다. A-SID 테이블(240)과 같이, S-SID 테이블(245)은 제어기(235)에 의해 초기화될 수 있다. 일례에서, 제어기(235)는 각각의 구성된 저장 디바이스(260 및 265)에 대해 S-SID 테이블(245) 및 TEMPSET 내 온도 값을 초기화하도록 배열된다.
전술한 바와 같이, S-SID 테이블(245) 내 엔트리는 기록 동작을 위한 현재 또는 이미 할당된 스트림을 나타낸다. 따라서, 일반적으로, S-SID 테이블(245)은 개시 후에는 비어 있고, 엔트리는 스트림 ID가 할당될 때 제어기(235)에 의해 생성된다.
일례에서, 제어기(235)는 정적 스트림 할당 방법을 구현할 수 있다. 정적 스트림 할당 방법은 주어진 DID, TEMP 및 SSCOPE에 대해 동일한 스트림 ID를 선택한다. 일례에서, 정적 스트림 할당 방법은 S-SID(DID, TEMP)가 SSCOPE에 대한 엔트리를 갖는지 여부를 결정할 수 있다. 순응하는 엔트리가 없다면, 정적 스트림 할당 방법은 A-SID(DID, TEMP)로부터 스트림 ID SID를 선택하고 (DID, TEMP, SSCOPE, SID, 타임스탬프)에 대한 S-SID 테이블(245)에 엔트리를 생성하고, 여기서 타임스탬프는 선택 후 현재 시간이다. 일례에서, A-SID(DID, TEMP)로부터 선택하는 동작은 랜덤하거나 또는 라운드 로빈 프로세스의 결과이다. S-SID 테이블(245)로부터 엔트리가 발견되거나 생성되면, 스트림 ID SID는 저장 서브시스템(225)으로 반환된다. 일례에서, WLAST가 참이면 (DID, TEMP, SSCOPE)에 대한 S-SID 테이블(245) 내 엔트리가 삭제된다. 이 마지막 예는 저장 서브시스템(225)에 알려진 것이 아니라 트리(205)에 알려진 것일 수 있는 kvset 등에 대한 기록(215)의 완료를 알리기 위해 WLAST를 갖는 것이 유용하다는 것을 보여준다.
일례에서, 제어기(235)는 최근에 최소로 사용된(least recently used: LRU) 스트림 할당 방법을 구현할 수 있다. LRU 스트림 할당 방법은 비교적 작은 시간 간격 내에서 주어진 DID, TEMP 및 SSCOPE에 대해 동일한 스트림 ID를 선택한다. 일례에서, LRU 할당 방법은 S-SID(DID, TEMP)가 SSCOPE에 대한 엔트리를 갖는지 여부를 결정한다. 엔트리가 존재하면, LRU 할당 방법은 이 엔트리에서 스트림 ID를 선택하고, S-SID 테이블(245)에서 이 엔트리의 타임스탬프를 현재 시간으로 설정한다.
SSCOPE 엔트리가 S-SID(DID, TEMP)에 있지 않으면, LRU 스트림 할당 방법은 엔트리 S-SID(DID, TEMP)의 수가 엔트리 A-SID(DID, TEMP)의 수와 동일한지 여부를 결정한다. 만약 그렇다면, LRU 할당 방법은 가장 오래된 타임스탬프를 갖는 S-SID(DID, TEMP) 내 엔트리로부터 스트림 ID SID를 선택한다. 여기서, S-SID 테이블(245) 내 엔트리는 새로운 엔트리(DID, TEMP, SSCOPE, SID, 타임스탬프)로 대체되고, 여기서 타임스탬프는 선택 후의 현재 시간이다.
A-SID(DID, TEMP) 엔트리보다 더 적은 수의 S-SSID(DID, TEMP) 엔트리가 있다면, 방법은 선택된 스트림 ID를 갖는 S-SID(DID, TEMP) 내 엔트리가 없도록 A-SID(DID, TEMP)로부터 스트림 ID SID를 선택하고, (DID, TEMP, SSCOPE, SID, 타임스탬프)에 대한 S-SID 테이블(245) 내 엔트리를 생성하며, 여기서 타임스탬프는 선택 후의 현재 시간이다.
S-SID 테이블(245)로부터 엔트리가 발견되거나 생성되면, 스트림 ID SID는 저장 서브시스템(225)으로 반환된다. 일례에서, WLAST가 참이면, (DID, TEMP, SSCOPE)에 대한 S-SID 테이블(245) 내 엔트리가 삭제된다.
동작 시, 제어기(235)는 기록 요청(215)의 일부로서 수신된 주어진 스트림-매핑 튜플에 대해 안정성 값을 할당하도록 구성된다. 일단 안정성 값이 결정되면, 제어기(235)는 SID를 할당하도록 배열된다. 온도 할당 및 스트림 할당 방법은 각각 A-SID 테이블(240) 및 S-SID 테이블(245)을 참조하고 업데이트할 수 있다. 일례에서, 제어기(235)는 또한 저장 서브시스템(225)과 같은 요청자에게 SID를 제공하도록 배열된다.
KVS 트리 스코프에 기초하여 스트림 ID를 사용하면 동일한 데이터가 다중 스트림 저장 디바이스(260)에서 소거 블록(270)에 공존될 수 있다. 이렇게 하면 디바이스의 가비지 수집이 줄어들어 디바이스의 성능과 수명이 향상될 수 있다. 이러한 장점은 다수의 KVS 트리로 확장될 수 있다. KVS 트리는 포리스트 또는 그로브(grove)에서 사용될 수 있고, 이에 의해 여러 KVS 트리가 파일 시스템과 같은 단일 구조를 구현하는 데 사용된다. 예를 들어, 하나의 KVS 트리는 블록 수를 키로 사용하고 블록의 비트를 값으로 사용할 수 있는 반면, 제2 KVS 트리는 파일 경로를 키로 사용하고 블록 수의 리스트를 값으로 사용할 수 있다. 이 예에서, 경로에 의해 참조되는 주어진 파일의 kvset 및 블록 수를 보유한 kvset는 유사한 수명을 가질 가능성이 있다. 따라서 상기 FID를 포함.
전술한 구조 및 기술은 플래시 저장 디바이스와 같은 저장 디바이스 및 KVS 트리를 구현하는 시스템에서 많은 장점을 제공한다. 일례에서, 하나 이상의 저장 디바이스에 저장된 여러 KVS 트리를 구현하는 컴퓨팅 시스템은 KVS 트리의 지식을 사용하여 다중-스트림 저장 디바이스에서 스트림을 보다 효율적으로 선택할 수 있다. 예를 들어, 시스템은 KVS 트리에 실행되는 동시 기록 동작(예를 들어, 인수 또는 압축)의 수가 이 기록 동작에 의해 기록되는 kvset 데이터에 할당된 온도 분류를 위해 예비된 임의의 주어진 저장 디바이스의 스트림 수에 따라 제한되도록 구성될 수 있다. 이것은 kvset 내에서 이 데이터의 예상 수명이 kvset가 완전히 기록되고 삭제되는 것과 동일하기 때문에 가능하다. 다른 곳에서 언급한 바와 같이, 키와 값은 분리될 수 있다. 따라서, 키 기록은 이하에서 논의되는 키 압축이 수행될 때 값 수명보다 더 짧을 수 있는 수명과 동일한 수명을 가질 수 있다. 추가적으로, 트리-레벨은 실험적으로 더 높은 트리-레벨에 있는 더 젊은 데이터보다 더 긴 수명을 갖는 데이터 수명, 더 오래된 데이터, 및 그리하여 더 큰 (예를 들어, 더 깊은) 트리-레벨을 나타내는 강력한 표시인 것으로 보인다.
이하의 시나리오는 기록을 제한하기 위해 스트림-매핑 회로(230)의 동작을 더 설명할 수 있으며, 다음을 고려할 수 있다:
A) 고온으로 분류된 데이터에 사용되는 지정된 저장 디바이스에 H 스트림을 갖고, 저온으로 분류된 데이터에 사용되는 지정된 저장 디바이스에 C 스트림을 갖는 온도 값{고온, 저온};
B) 임의의 KVS 트리에서 L0에 기록된 데이터에는 고온의 온도 값을 할당하고, 임의의 KVS 트리에서 L1 이상에 기록된 데이터에는 저온의 온도 값을 할당하는, (LNUM)으로 연산된 TSCOPE로 구성된 온도 할당 방법;
C) (TID, LNUM)으로 연산된 SSCOPE로 구성된 LRU 스트림 할당 방법.
이 경우에, 모든 KVS 트리에 대한 동시 인수 및 압축 동작, 즉 기록을 생성하는 동작의 총 수는 다음 조건을 따르는데, 즉 모든 인수 동작을 위한 데이터는 KVS 트리에서 레벨 0에 기록되어 고온으로 분류되기 때문에 모든 KVS 트리에 대한 동시 인수 동작은 기껏 H이고, 모든 스필 압축을 위한 데이터 및 다른 압축 동작의 대부분은 레벨 1 이상에 기록되어 저온으로 분류되기 때문에 모든 KVS 트리에 대한 동시 압축 동작은 기껏 C이다.
KVS 트리 및 제어기(235)의 특정 구현 상세에 따라 다른 이러한 제한이 가능하고 유리할 수 있다. 예를 들어, 상기와 같이 구성된 제어기(235)가 주어지면, (TID, LNUM)으로 연산된 SSCOPE로 LRU 스트림을 할당해도 TID에서 주어진 KVSET에 대한 마지막 기록을 수신할 때 불필요한 S-SID 테이블(245) 엔트리를 제거하기 위해 스트림-매핑 튜플에서 WLAST를 이용하지 못하여 최적이 아닌 SID를 선택할 수 있기 때문에, 인수 동작의 수는 H의 분율(예를 들어, 1/2)이고 압축 동작의 수는 C의 분율(예를 들어, 3/4)인 것이 유리할 수 있다.
스트림-매핑 회로(230)의 동작이 KVS 트리와 관련하여 전술되었지만, LSM 트리 구현과 같은 다른 구조도 본 명세서에 제시된 개념으로부터 동등하게 이익을 얻을 수 있다. 많은 LSM 트리 변형예는 키-값 쌍 및 삭제 표시의 집합을 저장하여, 인수 동작 또는 가비지 수집 동작(종종 압축 또는 병합 동작이라고 지칭됨)에 의해 생성될 수 있고 이후 나중에 후속 인수 동작 또는 가비지 수집 동작의 결과로 전체가 삭제될 수 있다. 그리하여 이러한 집합을 포함하는 데이터는 KVS 트리에서 kvset를 포함하는 데이터와 같이 유사한 수명을 갖는다. 따라서, 위의 스트림-매핑 튜플과 유사한 튜플은 대부분 다른 LSM 트리 변형예에 한정될 수 있고, 여기서 KVSETID는 주어진 LSM 트리 변형예에서 인수 동작 또는 가비지 수집 동작에 의해 생성된 키-값 쌍 또는 삭제 표시의 집합에 대한 고유 식별자로 대체될 수 있다. 스트림-매핑 회로(230)는 키-값 쌍 및 삭제 표시의 이러한 집합을 포함하는 데이터를 저장하는데 사용되는 복수의 기록 커맨드에 대한 스트림 식별자를 선택하기 위해 설명된 바와 같이 사용될 수 있다.
도 3은 일 실시형태에 따라 다중-스트림 저장 디바이스에 기록하는 것을 용이하게 하는 방법(300)의 일례를 도시한다. 방법(300)의 동작은 도 26과 관련하여 아래를 포함하여, 본 명세서 전반에 걸쳐 설명된 것과 같은 전자 하드웨어(예를 들어, 회로)로 구현된다. 방법(300)은 도 2와 관련하여 상기 논의를 구현하는 다수의 예를 제공한다.
동작(305)에서, 다중 스트림 저장 디바이스에 대한 KVS 트리 기록 요청의 통지가 수신된다. 일례에서, 통지는 기록 요청의 데이터에 대응하는 KVS 트리 스코프를 포함한다. 일례에서, KVS 트리 스코프는 데이터의 kvset에 대응하는 kvset ID; 데이터에 대응하는 KVS 트리의 노드에 대응하는 노드 ID; 데이터에 대응하는 트리-레벨에 대응하는 레벨 ID; KVS 트리의 트리 ID; KVS 트리가 속하는 포리스트에 대응하는 포리스트 ID; 또는 데이터에 대응하는 유형 중 적어도 하나를 포함한다. 일례에서, 유형은 키-블록 유형 또는 값-블록 유형이다.
일례에서, 통지는 다중 스트림 디바이스에 대한 디바이스 ID를 포함한다. 일례에서, 통지는 kvset ID에 의해 식별된 kvset를 다중 스트림 저장 디바이스에 기록하기 위해 기록 요청 시퀀스에서 마지막 기록 요청에 대응하는 WLAST 플래그를 포함한다.
동작(310)에서, 스트림 식별자(ID)가 KVS 트리 스코프 및 기록 요청의 안정성 값에 기초하여 기록 요청에 할당된다. 일례에서, 안정성 값을 할당하는 동작은 트리-레벨에 대응하는 레벨 ID에 대한 안정성 값을 할당하는 빈도 세트를 유지하는 동작으로서, 빈도 세트의 각각의 멤버는 고유한 레벨 ID에 대응하는, 상기 유지하는 동작; KVS 트리 스코프의 레벨 ID에 대응하는 빈도 세트로부터 빈도를 검색하는 동작; 및 빈도에 기초하여 안정성 값을 빈도 범위로 매핑하는 것으로부터 안정성 값을 선택하는 동작을 포함한다.
일례에서, KVS 트리 스코프 및 기록 요청의 안정성 값에 기초하여 기록 요청에 스트림 ID를 할당하는 동작은 KVS 트리 스코프로부터 스트림-스코프 값을 생성하는 동작을 포함한다. 일례에서, 스트림-스코프 값은 데이터의 레벨 ID를 포함한다. 일례에서, 스트림-스코프 값은 데이터의 트리 ID를 포함한다. 일례에서, 스트림-스코프 값은 데이터의 레벨 ID를 포함한다. 일례에서, 스트림-스코프 값은 데이터의 노드 ID를 포함한다. 일례에서, 스트림-스코프 값은 데이터의 kvset ID를 포함한다.
일례에서, KVS 트리 스코프 및 기록 요청의 안정성 값에 기초하여 기록 요청에 스트림 ID를 할당하는 동작은 스트림-스코프 값을 사용하여 선택된 스트림 데이터 구조에서 조회를 수행하는 동작을 더 포함한다. 일례에서, 선택된 스트림 데이터 구조에서 조회를 수행하는 동작은 선택된 스트림 데이터 구조에서 스트림-스코프 값을 찾지 못하는 동작; 안정성 값을 사용하여 이용 가능한 스트림 데이터 구조에서 조회를 수행하는 동작; 스트림 ID를 포함하는 조회의 결과를 수신하는 동작; 및 스트림 ID, 스트림-스코프 값, 및 엔트리가 추가된 시간의 타임스탬프를 포함하는 선택된 스트림 데이터 구조에 엔트리를 추가하는 동작을 포함한다. 일례에서, 이용 가능한 스트림 데이터 구조의 다수의 엔트리는 안정성 값에 대응하고, 조회 결과는 다수의 엔트리로부터 엔트리를 라운드-로빈 방식으로 선택된 것이나 또는 랜덤 방식으로 선택된 것 중 적어도 하나이다. 일례에서, 이용 가능한 스트림 데이터 구조는 다중 스트림 저장 디바이스로부터 이용 가능한 다수의 스트림을 획득하는 동작; 다중 스트림 저장 디바이스로부터 이용 가능한 모든 스트림의 스트림 ID를 획득하는 동작으로서, 각각의 스트림 ID는 고유한, 상기 획득하는 동작; 안정성 값 그룹에 스트림 ID를 추가하는 동작; 및 각각의 스트림 ID에 대해 이용 가능한 스트림 데이터 구조에 레코드를 생성하는 동작으로서, 상기 레코드는 스트림 ID, 다중 스트림 저장 디바이스의 디바이스 ID, 및 스트림 ID의 안정성 값 그룹에 대응하는 안정성 값을 포함하는, 상기 생성하는 동작에 의해 초기화될 수 있다.
일례에서, 선택된 스트림 데이터 구조에서 조회를 수행하는 동작은 선택된 스트림 데이터 구조에서 스트림-스코프 값을 찾지 못하는 동작; 선택된 스트림 데이터 구조로부터 또는 선택된 스트림 데이터 구조의 내용에 기초하여 이용 가능한 스트림 데이터 구조로부터 스트림 ID를 찾는 동작; 및 스트림 ID, 스트림-스코프 값, 및 엔트리가 추가된 시간의 타임스탬프를 포함하는 선택된 스트림 데이터 구조에 대한 엔트리를 생성하는 동작을 포함한다. 일례에서, 선택된 스트림 데이터 구조로부터 또는 선택된 스트림 데이터 구조의 내용에 기초하여 이용 가능한 스트림 데이터 구조로부터 스트림 ID를 찾는 동작은 선택된 스트림 데이터 구조로부터의 제1 엔트리 수와, 이용 가능한 스트림 데이터 구조로부터의 제2 엔트리 수를 비교하여, 제1 엔트리 수와 제2 엔트리 수가 동일하다고 결정하는 동작; 안정성 값에 대응하는 선택된 스트림 데이터 구조로부터 엔트리 그룹을 찾는 동작; 및 가장 오래된 타임스탬프를 갖는 엔트리 그룹 내 엔트리의 스트림 ID를 반환하는 동작을 포함한다. 일례에서, 선택된 스트림 데이터 구조로부터 또는 선택된 스트림 데이터 구조의 내용에 기초하여 이용 가능한 스트림 데이터 구조로부터 스트림 ID를 찾는 동작은 선택된 스트림 데이터 구조로부터의 제1 엔트리 수와 이용 가능한 스트림 데이터 구조로부터의 제2 엔트리 수를 비교하여, 제1 엔트리 수와 제2 엔트리 수가 동일하지 않다고 결정하는 동작; 안정성 값 및 선택된 스트림 데이터 구조의 엔트리의 스트림 ID를 사용하여 이용 가능한 스트림 데이터 구조에서 조회를 수행하는 동작; 선택된 스트림 데이터 구조의 엔트리에 없는 스트림 ID를 포함하는 조회의 결과를 수신하는 동작; 및 스트림 ID, 스트림-스코프 값, 및 엔트리가 추가된 시간의 타임스탬프를 포함하는 엔트리를 선택된 스트림 데이터 구조에 추가하는 동작을 포함한다.
일례에서, KVS 트리 스코프 및 기록 요청의 안정성 값에 기초하여 기록 요청에 스트림 ID를 할당하는 동작은 선택된 스트림 데이터 구조로부터 스트림-스코프에 대응하는 스트림 ID를 반환하는 동작을 더 포함한다. 일례에서, 선택된 스트림 데이터 구조로부터 스트림-스코프에 대응하는 스트림 ID를 반환하는 동작은 스트림 ID에 대응하는 선택된 스트림 데이터 구조의 엔트리에 대한 타임스탬프를 업데이트하는 동작을 포함한다. 일례에서, 기록 요청은 WLAST 플래그를 포함하고, 선택된 스트림 데이터 구조로부터 스트림-스코프에 대응하는 스트림 ID를 반환하는 동작은 스트림 ID에 대응하는 선택된 스트림 데이터 구조로부터 엔트리를 제거하는 동작을 포함한다.
일례에서, 방법(300)은 임계값을 초과하는 타임스탬프를 갖는 엔트리를 선택된 스트림 데이터 구조로부터 제거하는 동작을 포함하도록 확장될 수 있다.
동작(315)에서, 스트림 ID는 기록 요청에 스트림을 할당하는 것을 조절하기 위해 반환되고, 여기서 스트림을 할당하는 동작은 다중 스트림 저장 디바이스의 기록 동작을 수정한다.
일례에서, 방법(300)은 KVS 트리 스코프에 기초하여 안정성 값을 할당하는 동작을 포함하도록 선택적으로 확장될 수 있다. 일례에서, 안정성 값은 미리 한정된 세트의 안정성 값 중 하나이다. 일례에서, 미리 한정된 세트의 안정성 값은 고온, 온난 및 저온을 포함하고, 여기서 고온은 다중 스트림 저장 디바이스의 데이터의 예상 수명이 가장 낮은 것을 나타내고, 저온은 다중 스트림 저장 디바이스에서 데이터의 예상 수명이 가장 높은 것을 나타낸다.
일례에서, 안정성 값을 할당하는 동작은 KVS 트리 스코프의 부분을 사용하여 데이터 구조로부터 안정성 값을 찾는 동작을 포함한다. 일례에서, KVS 트리 스코프의 부분은 데이터의 레벨 ID를 포함한다. 일례에서, KVS 트리 스코프의 부분은 데이터 유형을 포함한다.
일례에서, KVS 트리 스코프의 부분은 데이터의 트리 ID를 포함한다. 일례에서, KVS 트리 스코프의 부분은 데이터의 레벨 ID를 포함한다. 일례에서, KVS 트리 스코프의 부분은 데이터의 노드 ID를 포함한다.
도 4는 일 실시형태에 따라 키 및 값을 저장하는 조직의 일례를 나타내는 블록도이다. kvset는 키를 보유할 키-블록(필요에 따라 삭제 표시와 함께) 및 값을 보유할 값-블록을 사용하여 저장될 수 있다. 주어진 kvset에 대해, 키-블록은 단일 키를 효율적으로 찾고, 키의 범위를 찾고, 또는 키 삭제 표시를 포함하여 kvset에 있는 모든 키의 전체 순서를 생성하고, 및 만약 있다면 이 키와 관련된 값을 획득하기 위해 색인 및 다른 정보(예를 들어, 블룸 필터)를 더 포함할 수 있다.
단일 kvset는 도 4에 도시되어 있다. 키-블록은 헤더(405)를 포함하는 기본 키 블록(410), 및 확장 헤더(417)를 포함하는 확장 키-블록(415)을 포함한다. 값 블록은 값(425, 430, 435 및 445)뿐만 아니라 헤더(420 및 440)를 각각 포함한다. 제2 값 블록은 자유 공간(450)을 더 포함한다.
kvset의 트리 표현은 키-블록(410 및 415)에 걸쳐 있는 것으로 도시되어 있다. 이 도시에서, 리프 노드는 값(425, 430, 435 및 445)에 대한 값 참조(VID), 및 삭제 표시를 갖는 두 개의 키를 포함한다. 이것은 일례에서, 삭제 표시가 값 블록에서 대응하는 값을 갖고 있지 않지만 이것이 키-값 쌍의 유형으로 지칭될 수 있는 것을 도시한다.
값 블록의 도시는 각각의 값 블록이 묘사(delineation)없이 서로 인접하여 이어지는 헤더 및 값을 가질 수 있는 것을 보여준다. 값(425)과 같은 값에 대한 값 블록 내 특정 비트에 대한 참조는 일반적으로 대응하는 키 엔트리에, 예를 들어, 오프셋 및 크기 포맷으로 저장된다.
도 5는 일 실시형태에 따라 키-블록 및 값-블록에 대한 구성의 일례를 도시하는 블록도이다. 도 5의 키-블록 및 값 블록 구성은 확장 키-블록 및 값-블록의 일반적으로 간단한 특성을 도시한다. 구체적으로, 각각은 일반적으로 유형(예를 들어, 키-블록 또는 값-블록) 및 아마도 크기, 저장 위치 또는 다른 메타 데이터를 식별하기 위한 헤더를 갖는 간단한 저장 구역이다. 일례에서, 값-블록은 이것이 값-블록임을 나타내는 매직 넘버를 갖는 헤더(540), 및 값의 비트를 저장하는 저장부(545)를 포함한다. 키-확장 블록은 이것이 확장 블록임을 나타내는 헤더(525)를 포함하고, KB 트리, B-트리 등과 같은 키 구조(530)의 부분을 저장한다.
기본 키-블록은 단순히 키 구조를 저장하는 것에 더하여 많은 kvset 메타 데이터에 대한 위치를 제공한다. 기본 키-블록은 키 구조(520)의 루트를 포함한다. 기본 키 블록은 헤더(505), 블룸 필터(510) 또는 키 구조(515)의 부분을 더 포함할 수 있다.
블룸 필터(510) 또는 루트 노드(520)의 블록과 같이 기본 키-블록의 구성 요소에 대한 참조는 헤더(505)에 포함된다. kvset 크기, 값-블록 어드레스, 압축 성능 또는 사용과 같은 메트릭이 헤더(505)에 더 포함될 수 있다.
블룸 필터(510)는 kvset가 생성될 때 연산되고, 키 구조에 탐색을 수행하지 않고 키가 kvset에 없는지 여부를 확인하는 준비 메커니즘을 제공한다. 이러한 진보는 아래에 언급된 바와 같이 스캔 동작에서 더 큰 효율을 허용한다.
도 6은 일 실시형태에 따라 KB 트리(600)의 일례를 도시한다. kvset의 키-블록에 사용할 예시적인 키 구조는 KB 트리이다. KB 트리(600)는 B+ 트리와 구조적으로 유사하다. 일례에서, KB 트리(600)는 4096 바이트 노드(예를 들어, 노드(605, 610 및 615))를 갖는다. KB 트리의 모든 키는 리프 노드(예를 들어, 노드(615))에 있다. 내부 노드(예를 들어, 노드(610))는 트리(600)를 내비게이션하기 위해 선택된 리프 노드 키의 사본을 갖는다. 키 조회 결과는 일례에서, 값-블록 ID, 오프셋 및 길이에 대한 것일 수 있는 값 참조이다.
KB 트리(600)는 다음의 특성을 갖는다:
A) 에지 키(K)의 자식 노드에 루트를 둔 서브트리의 모든 키는 K보다 작거나 같다.
B) 임의의 트리 또는 서브트리의 최대 키는 가장 오른쪽의 리프 노드에서 가장 오른쪽에 있는 엔트리이다.
C) 자식(R)을 가리키는 가장 오른쪽 에지를 가진 노드(N)가 주어지면, 노드(R)에 루트를 둔 서브트리의 모든 키는 노드(N)에 있는 모든 키보다 더 크다.
KB 트리(600)는 적절한 "에지" 키를 발견하기 위해 루트 노드(605) 내 키들 중에서 이진 탐색을 통해 탐색될 수 있다. 에지 키의 자식으로의 링크를 따를 수 있다. 이러한 절차는 리프 노드(615)에서 매칭하는 것이 발견되거나 매칭하는 것이 발견되지 않을 때까지 반복된다.
kvset는 일단 생성되면 변치 않기 때문에, KB 트리(600)를 생성하는 동작은 시간에 따라 변하는 다른 트리 구조와는 다를 수 있다. KB 트리(600)는 상향식으로 생성될 수 있다. 일례에서, 하나의 노드인 루트 노드(605)가 남아 있을 때까지, 리프 노드(615)가 먼저 생성되고 나서 부모(610)가 생성되는 등 이와 같이 계속된다. 일례에서, 생성은 하나의 빈 리프 노드인 현재 노드에서 시작된다. 각각의 새로운 키가 현재 노드에 추가된다. 현재 노드가 가득 차면 새로운 리프 노드가 생성되고 이는 현재 노드로 된다. 마지막 키가 추가되면 모든 리프 노드가 완료된다. 이 시점에서, 그 다음 레벨 위쪽에 있는 노드(즉, 리프 노드의 부모)는 각각의 리프 노드로부터의 최대 키를 입력 스트림으로 사용하여 유사한 방식으로 생성된다. 이러한 키가 모두 소진되면 이 레벨이 완료된다. 이 프로세스는 가장 최근에 생성된 레벨이 루트 노드(605)인 단일 노드로 구성될 때까지 반복된다.
생성 동안, 현재의 키-블록이 가득 차게 되면, 새로운 노드가 확장 키-블록에 기록될 수 있다. 일례에서, 제1 키-블록으로부터 제2 키-블록으로 횡단하는 에지는 제2 키-블록에 대한 참조를 포함한다.
도 7은 일 실시형태에 따라 KVS 트리 인수를 나타내는 블록도이다. KVS 트리에서, 새로운 kvset를 루트 노드(730)에 기록하는 프로세스는 인수(ingest)라고 지칭된다. 키-값 쌍(705)(삭제 표시를 포함함)은 KVS 트리의 내부 메모리(710)에 누적되고, 가장 새로운 것(715)으로부터 가장 오래된 것(720)으로 순서화된 kvset로 조직된다. 일례에서, kvset(715)은 키-값 쌍을 동기적으로 받아들이도록 변경될 수 있다. 이것은 KVS 트리에서 유일하게 변경 가능한 kvset 변형이다.
인수(725)는 주 메모리(710)에서 가장 오래된 kvset(720)의 키-값 쌍 및 삭제 표시를 KVS 트리의 루트 노드(730)의 새로운(그리고 가장 새로운) kvset(735)에 기록하고 나서 주 메모리(710)로부터 이 kvset(720)를 삭제한다.
도 8은 일 실시형태에 따라 KVS 트리를 인수하는 방법(800)의 일례를 도시한다. 방법(800)의 동작은 도 26과 관련하여 아래를 포함하여 본 명세서 전반에 걸쳐 설명된 것과 같은 전자 하드웨어(예를 들어, 회로)로 구현된다.
동작(805)에서, 키-값 세트(kvset)가 키-값 데이터 구조로 저장하기 위해 수신된다. 여기서 키-값 데이터 구조는 트리로 조직되고, kvset는 고유한 키를 값으로 매핑하는 것을 포함한다. kvset의 키와 값은 불변이며, 트리의 노드는 kvset의 시간 순서화된 시퀀스를 갖는다.
일례에서, kvset가 적어도 하나의 저장 매체에 기록될 때, kvset는 불변이다. 일례에서, kvset의 키 엔트리는 기본 키-블록 및 0개 이상의 확장 키-블록을 포함하는 키-블록의 세트에 저장된다. 여기서, 키-블록의 세트의 멤버는 적어도 하나의 저장 매체를 위한 미디어 블록에 대응하고, 각각의 키-블록은 이를 키-블록으로 식별하기 위한 헤더를 포함한다.
일례에서, 기본 키-블록은 kvset의 하나 이상의 확장 키-블록에 대한 미디어 블록 식별자의 리스트를 포함한다. 일례에서, 기본 키-블록은 값 블록 세트의 값-블록에 대한 미디어 블록 식별자의 리스트를 포함한다. 일례에서, 기본 키-블록은 kvset의 키-트리에서 가장 낮은 키의 사본을 포함하며, 가장 낮은 키는 트리의 미리 설정된 정렬 순서에 의해 결정된다. 일례에서, 기본 키-블록은 kvset의 키-트리에서 가장 높은 키의 사본을 포함하며, 가장 높은 키는 트리의 미리 설정된 정렬 순서에 의해 결정된다. 일례에서, 기본 키-블록은 kvset의 키-트리에 대한 헤더를 포함한다. 일례에서, 기본 키-블록은 kvset의 키-트리에 대한 미디어 블록 식별자의 리스트를 포함한다. 일례에서, 기본 키-블록은 kvset의 블룸 필터에 대한 블룸 필터 헤더를 포함한다. 일례에서, 기본 키-블록은 kvset의 블룸 필터에 대한 미디어 블록 식별자의 리스트를 포함한다.
일례에서, 값은 값-블록 세트(805)에 저장된다(동작 805). 여기서, 값-블록 세트의 멤버는 적어도 하나의 저장 매체를 위한 미디어 블록에 대응하고 각각의 값-블록은 이를 값-블록으로 식별하기 위한 헤더를 포함한다. 일례에서, 값 블록은 값들 사이를 분리함이 없이 하나 이상의 값에 대한 저장 구획을 포함한다.
일례에서, 기본 키-블록은 kvset에 대한 메트릭의 세트를 포함한다. 일례에서, 메트릭의 세트는 kvset에 저장된 키의 총 수를 포함한다. 일례에서, 메트릭의 세트는 kvset에 저장된 삭제 표시 값을 갖는 다수의 키를 포함한다. 일례에서, 메트릭의 세트는 kvset에 저장된 키에 대한 모든 키 길이의 합을 포함한다. 일례에서, 메트릭의 세트는 kvset에 저장된 키에 대한 모든 값 길이의 합을 포함한다. 일례에서, 메트릭의 세트는 kvset의 값-블록에서 참조되지 않은 데이터의 양을 포함한다.
동작(810)에서, kvset는 트리의 루트-노드의 kvset의 시퀀스에 기록된다.
방법(800)은 동작(815-825)을 포함하도록 확장될 수 있다.
동작(815)에서, 키-값 데이터 구조로 저장하기 위한 키 및 대응하는 값이 수신된다.
동작(820)에서, 키 및 값은 예비 kvset에 배치되고, 예비 kvset는 변경 가능하다. 일례에서, 예비 루트 노드에 기록하는 속도(rate)는 임계값을 초과한다. 이 예에서, 방법(800)은 키-값 데이터 구조에 대한 기록 요청을 스로틀링(throttle)하도록 확장될 수 있다.
동작(825)에서, kvset는 메트릭에 도달할 때 키-값 데이터 구조에 기록된다. 일례에서, 메트릭은 예비 루트 노드의 크기이다. 일례에서, 메트릭은 경과 시간이다.
일단 인수가 발생하면, 다양한 유지 관리 동작이 KVS 트리를 유지하기 위해 사용될 수 있다. 예를 들어, 키가 하나의 시간에 제1 값으로 기록되고 나중 시간에 제2 값으로 기록되면 제1 키-값 쌍을 제거하는 것에 의해 공간이 확보되거나 탐색 시간이 단축된다. 이러한 문제 중 일부를 해결하기 위해 KVS 트리는 압축을 사용할 수 있다. 여러 가지 압축 동작의 상세는 도 9 내지 도 18과 관련하여 아래에서 논의된다. 도시된 압축 동작은 병합 동안 키 또는 키-값 쌍과 같은 더 이상 사용되지 않은 데이터(obsolete data)를 제거할 수 있기 때문에 가비지 수집 형태이다.
압축은 예를 들어 노드의 kvset가 지정된 또는 연산된 기준을 충족할 때 다양한 트리거링(triggering) 조건 하에서 발생한다. 이러한 압축 기준의 예는 kvset의 총 크기 또는 kvset의 가비지 양을 포함한다. kvset의 가비지의 일례는 예를 들어, 더 새로운 kvset의 키-값 쌍 또는 삭제 표시에 의해 더 이상 사용되지 않게 된 하나의 kvset의 키-값 쌍 또는 삭제 표시이거나 또는 특히 TTL(time-to-live) 제약 조건을 위반한 키-값 쌍이다. kvset의 가비지의 다른 예는 키 압축으로부터 기인한 값-블록에서 참조되지 않은 데이터(참조되지 않은 값)이다.
일반적으로, 압축 동작에의 입력은 압축 기준이 충족되는 시간에 노드에 있는 kvset의 일부 또는 전부이다. 이들 kvset는 병합 세트(merge set)라고 지칭되고, 두 개 이상의 kvset의 시간 연속 시퀀스를 포함한다.
새로운 데이터가 인수될 때 압축이 일반적으로 트리거링되므로, 방법(800)은 압축을 지원하도록 확장될 수 있지만, 예를 들어, 자유 처리 자원이 있거나 또는 유지 관리를 수행하는 다른 편리한 시나리오가 있을 때 다음 동작이 더 트리거링될 수 있다.
따라서, KVS 트리가 압축될 수 있다. 일례에서, 압축하는 동작은 트리거에 응답하여 수행된다. 일례에서, 트리거는 시간 기간의 만료이다.
일례에서, 트리거는 노드의 메트릭이다. 일례에서, 메트릭은 노드의 kvset의 총 크기이다. 일례에서, 메트릭은 노드의 kvset의 수이다. 일례에서, 메트릭은 노드의 참조되지 않은 값의 총 크기이다. 일례에서, 메트릭은 참조되지 않은 값의 수이다.
도 9는 일 실시형태에 따라 키 압축을 나타내는 블록도이다. 키 압축은 병합 세트로부터 키 및 삭제 표시를 판독하지만 값을 판독하지는 않고, 더 이상 사용되지 않은 모든 키 또는 삭제 표시를 제거하고, 결과 키와 삭제 표시를 하나 이상의 새로운 kvset에 (예를 들어, 새로운 키-블록에 기록하는 것에 의해) 기록하고, 노드로부터 키 저장소를 삭제하지만 값을 삭제하지는 않는다. 새로운 kvset는 노드에서 가장 새로운 것으로부터 가장 오래된 것으로 kvset의 논리적 순서 내에 내용과 배치 면에서 병합 세트를 원자적으로 대체하고 이와 논리적으로 동등하다.
도시된 바와 같이, kvset(KVS3(가장 새로운 것), KVS2 및 KVS1(가장 오래된 것))는 노드에 대해 키 압축을 받는다. 이러한 kvset의 키 저장소들이 병합되면 키(A 및 B)에 충돌이 발생한다. 새로운 kvset인 KVS4(아래에 예시됨)는 각각의 병합된 키들 중 하나의 키만을 포함할 수 있어서, 충돌은 각각 키(A)와 키(B)에 대한 값 ID(10)와 값 ID(11)를 참조하는 가장 최근(도시된 바와 같이 가장 왼쪽에 있는) 키에서 해결된다. 키(C)는 충돌이 없어서 새로운 kvset에 포함된다. 따라서 새로운 kvset인 KVS4의 부분인 키 엔트리는 상위 노드에서 가려진다(shaded).
설명을 위해, KVS4는 노드 내의 KVS1, KVS2 및 KVS3에 걸치는 것으로 도시되고, 값 엔트리는 노드 내의 유사한 위치에 도시된다. 이 위치의 목적은 값이 키 압축에서는 변하지 않고 단지 키만이 변한다는 것을 입증한다. 아래에 설명된 바와 같이, 이것은 임의의 주어진 노드에서 탐색된 kvset의 수를 줄임으로써 보다 효율적인 탐색을 제공하고, 또한 유지 관리 동작을 지시하는 데 유용한 통찰력을 제공할 수 있다. 또한 값(20 및 30)은 파선으로 도시되어, 노드에서 지속되지만 각각의 키 엔트리가 압축에서 제거되었기 때문에 키 엔트리에 의해 더 이상 참조되지 않는다는 것을 나타낸다는 것이 주목된다.
추가된 kvset는, 정의상, 키 압축으로부터 기인한 kvset(예를 들어, KVS4)보다 논리적으로 더 새로운 것이기 때문에 압축 동안 새로운 kvset(예를 들어, KVS5)가 KVS3 또는 KVS4의 가장 새로운 위치에 (예를 들어, 왼쪽으로) 배치될 수 있기 때문에 키 압축은 차단성이 아니다.
도 10은 일 실시형태에 따라 키 압축을 위한 방법(1000)의 일례를 도시한다. 방법(1000)의 동작은 도 26과 관련하여 아래를 포함하여 본 명세서 전체에 걸쳐 설명된 것과 같은 전자 하드웨어(예를 들어, 회로)로 구현된다.
동작(1005)에서, 노드에 대한 kvset의 시퀀스로부터 kvset의 서브세트가 선택된다. 일례에서, kvset의 서브세트는 연속적인 kvset이고, 가장 오래된 kvset를 포함한다.
동작(1010)에서, 충돌 키 세트가 찾아진다. 충돌 키 세트의 멤버는 노드에 대한 kvset의 시퀀스에서 적어도 두 개의 kvset에 있는 키 엔트리를 포함한다.
동작(1015)에서, 충돌 키 세트의 각각의 멤버에 대한 가장 최근의 키 엔트리가 새로운 kvset에 추가된다. 일례에서, 노드는 자식을 갖지 않고, kvset의 서브세트가 가장 오래된 kvset를 포함하는 경우, 충돌 키 세트의 각각의 멤버에 대한 가장 최근의 키 엔트리를 새로운 kvset에 기록하고, 충돌 키 세트에 없는 kvset의 서브세트의 멤버에 있는 각각의 키에 대한 엔트리를 새로운 kvset에 기록하는 동작은 삭제 표시를 포함하는 임의의 키 엔트리를 생략하는 동작을 포함한다. 일례에서, 노드는 자식을 갖지 않고, kvset의 서브세트가 가장 오래된 kvset를 포함하는 경우, 충돌 키 세트의 각각의 멤버에 대한 가장 최근의 키 엔트리를 새로운 kvset에 기록하고, 충돌 키 세트에 없는 kvset의 서브세트의 멤버에 있는 각각의 키에 대한 엔트리를 새로운 kvset에 기록하는 동작은 만료된 임의의 키 엔트리를 생략하는 동작을 포함한다.
동작(1020)에서, 충돌 키 세트에 없는 kvset의 서브세트의 멤버에 있는 각각의 키의 엔트리는 새로운 kvset에 추가된다. 일례에서, 동작(1020 및 1015)은 엔트리를 새로운 kvset에 추가하기 위해 동시에 동작할 수 있다.
동작(1025)에서, kvset의 서브세트는, 새로운 kvset를 기록하고 kvset의 서브세트를 제거(예를 들어, 삭제, 삭제 표시하는 등을 수행)함으로써 새로운 kvset로 대체된다.
도 11은 일 실시형태에 따라 키-값 압축을 도시하는 블록도이다. 키 값 압축은 값을 처리할 때의 키 압축과는 다르다. 키-값 압축은 병합 세트로부터 키-값 쌍과 삭제 표시를 판독하고, 더 이상 사용되지 않은 키-값 쌍 또는 삭제 표시를 제거하고, 결과 키-값 쌍과 삭제 표시를 동일한 노드의 하나 이상의 새로운 kvset에 기록하며, 노드로부터 병합 세트를 포함하는 kvset를 삭제한다. 새로운 kvset는 노드에서 가장 새로운 것으로부터 오래된 것으로 kvset의 논리적 순서 내에서 내용 및 배치 모두에서 병합 세트를 원자적으로 대체하고 이와 논리적으로 동등하다.
도시된 바와 같이, kvset(KVS3, KVS2 및 KVS1)는 병합 세트를 포함한다. 가려진 키 엔트리와 값은 병합 세트에 유지되고 새로운 KVS4에 배치되고, KVS3, KVS2 및 KVS1을 대체하기 위해 노드에 기록된다. 다시, 키 압축과 관련하여 위에서 예시된 바와 같이, 키(A 및 B)에 대한 키 충돌은 가장 최근의 엔트리에서 해결된다. 키-값 압축이 키 압축과 다른 점은 참조되지 않은 값을 제거하는 것에 있다. 따라서, 여기서 KVS4는 현재 키와 값을 보유하는 데 필요한 공간만을 소비하는 것으로 설명된다.
실제로, 예를 들어, 키 및 값이 키-블록 및 값-블록에 별개로 저장될 때, KVS4는 (키 압축 결과와 같은) 새로운 키-블록 및 (키 압축 결과와 달리) 새로운 값 블록을 모두 포함한다. 그러나, 다시 키-값 압축은 추가된 kvset가 키-값 압축의 결과인 KVS4보다 논리적으로 더 새로운 것이므로 키-값 압축이 실행되는 동안 추가적인 kvset를 노드에 기록하는 것을 차단하지 않는다. 따라서, KVS4는 노드의 가장 오래된 위치(예를 들어, 오른쪽)에 도시된다.
도 12는 일 실시형태에 따라 키-값 압축을 위한 방법(1200)의 일례를 도시한다. 방법(1200)의 동작은 도 26과 관련하여 아래를 포함하여 본 명세서 전반에 걸쳐 설명된 것과 같은 전자 하드웨어(예를 들어, 회로)로 구현된다.
동작(1205)에서, 노드에 대한 kvset의 시퀀스로부터 kvset의 서브세트(예를 들어, 병합 세트)가 선택된다. 일례에서, kvset의 서브세트는 연속적인 kvset이고, 가장 오래된 kvset를 포함한다.
동작(1210)에서, 충돌 키 세트가 찾아진다. 충돌 키 세트의 멤버는 노드에 대한 kvset의 시퀀스에서 적어도 두 개의 kvset에 있는 키 엔트리를 포함한다.
동작(1215)에서, 충돌 키 세트의 각각의 멤버에 대해 가장 최근의 키 엔트리 및 대응하는 값이 새로운 kvset에 추가된다. 일례에서, 노드가 자식을 갖지 않고 병합 세트가 가장 오래된 kvset를 포함하는 경우, 충돌 키 세트의 각각의 멤버에 대한 가장 최근의 키 엔트리를 새로운 kvset에 기록하고, 충돌 키 세트에 없는 kvset의 서브세트의 멤버에 있는 각각의 키에 대한 엔트리를 새로운 kvset에 기록하는 동작은 삭제 표시를 포함하는 임의의 키 엔트리를 생략하는 동작을 포함한다. 일례에서, 노드가 자식을 갖지 않고, 병합 세트가 가장 오래된 kvset를 포함하는 경우, 충돌 키 세트의 각각의 멤버에 대한 가장 최근의 키 엔트리를 새로운 kvset에 기록하고, 충돌 키 세트에 없는 kvset의 서브세트의 멤버에 있는 각각의 키에 대한 엔트리를 새로운 kvset에 기록하는 동작은 만료된 임의의 키 엔트리를 생략하는 동작을 포함한다.
동작(1220)에서, 충돌 키 세트에 없는 kvset의 서브세트의 멤버에서 각각의 키에 대한 엔트리 및 값이 새로운 kvset에 추가된다.
동작(1225)에서, kvset의 서브세트는, 새로운 kvset를 (예를 들어, 저장매체에) 기록하고 kvset의 서브세트를 제거함으로써 새로운 kvset로 대체된다.
도 15 내지 도 18과 관련하여 아래에 논의된 스필 압축 및 호이스트 압축은 결과 kvset가 자식 노드 또는 부모 노드에 각각 배치되는 키-값 압축의 형태이다. 각각이 트리를 순회(traverse)하고 KVS 트리가 부모와 자식 사이에 결정적 매핑을 시행하기 때문에, 이 결정적 매핑에 대한 간략한 논의가 여기서 이들 다른 압축 동작을 논의하기 전에 제시된다.
도 13은 일 실시형태에 따라 스필 값 및 트리와의 관계의 일례를 도시한다. 결정적 매핑은 키가 주어지면 KVS 트리의 내용에 관계없이 키-값 쌍이 매핑될 자식이 어느 것인지를 알 수 있는 것을 보장한다. 스필 함수는 키를 받아들이고, KVS 트리에 대한 결정적 매핑에 대응하는 스필 값을 생성한다. 일례에서, 스필 함수는 키와 현재 트리-레벨을 모두 받아들이고, 이 트리-레벨에서 이 키에 대한 부모 또는 자식 노드에 특정된 스필 값을 생성한다.
설명을 위해, 간단한 결정적 매핑(도 13에 도시되지 않음)은, 예를 들어, 키가 알파벳 문자로 구성된 경우, 각각의 트리-레벨이 알파벳의 각각의 글자에 대한 자식을 포함하고, 매핑은 키의 문자를 차례로 사용하는데, 예를 들어, 제1 문자는 L1 자식을 결정하고, 제2 문자는 L2 자식을 결정하는 등, 이와 같은 방식으로 진행되는, 알파벳 매핑을 포함할 수 있다. KVS 트리의 결정적 매핑을 간단히 충족시키지만, 이 기술은 강성, 트리의 불균형, 및 트리 패닝(tree fanning)의 제어 결여로 인해 다소 어려움을 겪는다.
더 나은 기술은 키에 해시를 수행하고 각각의 트리-레벨 매핑을 위해 해시 부분을 지정하는 것이다. 이것은, 키가 트리를 순회할 때 키가 (적절한 해시 기술을 취하면) 고르게 분산되는 것과, 임의의 주어진 트리-레벨에서 해시 부분의 크기를 선택함으로써 팬 아웃(fan-out)이 제어되는 것을 보장한다. 나아가, 해시 기술은 일반적으로 결과 해시의 크기를 구성할 수 있어서, 예를 들어, 적절한 수의 비트가 보장될 수 있어서, 위에서 논의한 간단한 기술에 따른 문제를 피하는데, 여기서 짧은 단어(예를 들어, "상기")는 3 레벨 트리에만 충분한 문자를 갖는다.
도 13은 트리의 L1, L2 및 L3에 각각 대응하는 부분(1305, 1310 및 1315)을 갖는 키 해시의 결과를 도시한다. 주어진 트리 해시에서, 트리의 순회(traversal)는 파선과 노드를 따라 진행된다. 구체적으로, 루트 노드(1320)에서 시작하여, 부분(1305)은 노드(1325)로 순회를 지시한다. 다음에, 부분(1310)은 노드(1330)로 순회를 지시한다. 순회는 도시된 키 해시의 크기 및 배분(apportionment)에 기초하여 가능한 트리의 가장 깊은 레벨에서 부분(1315)이 노드(1335)를 향할 때 완료된다.
일례에서, 주어진 키(K)에 대해, 키(K)(또는 키(K)의 서브키)의 해시는 키(K)의 스필 값이라고 지칭된다. 두 개의 다른 키가 동일한 스필 값을 가질 수 있다는 것이 주목된다. 서브 키가 스필 값을 생성하는 데 사용되는 경우 아래 논의된 것처럼 접두부 스캔 또는 삭제 표시를 사용하는 것이 종종 바람직하다.
일례에서, 주어진 KVS 트리에 대해, 주어진 키(K)의 스필 값은 일정하고, 스필 값의 이진 표현은 B 비트를 포함한다. 이 예에서, 스필 값의 B 비트는 0 내지 (B-1)로 번호가 매겨진다. 또한 이 예에서, KVS 트리는 트리-레벨(L)에 있는 노드가 모두 같은 수의 자식 노드를 갖고, 이 자식 노드 수는 2 이상의 2의 정수 제곱이도록 구성된다. 이 구성에서, 키 분배를 위한 키(K)의 스필 값의 비트는 아래에 예시된 바와 같이 사용될 수 있다.
KVS 트리에서 레벨(L)에 있는 노드에 대해, 2^E(L)가 노드에 대해 구성된 자식 노드의 수이고, 여기서 2^E(L)>=2이다. 그리고 KVS 트리에서 주어진 노드와 주어진 키(K)에 대해 키(K)의 스필 값은 스필 압축에 사용되는 노드의 자식 노드를 다음과 같이 지정한다:
A) 레벨 0: 스필 값 비트 0 내지 (E(0) - 1)는 키(K)의 자식 노드 수를 지정한다;
B) 레벨 1: 스필 값 비트 E(0) 내지 (E(0) + E(1) - 1)은 키(K)의 자식 노드 수를 지정하고; 및
C) 레벨 L(L > 1): 스필 값 비트 합(E(0),...,E(L-1)) 내지 (합(E(0), ..., E(L)) - 1)는 키(K)의 자식 노드 수를 지정한다.
아래의 표는 7개의 레벨, 키(K), 및 키(K)의 16 비트 스필 값을 갖는 KVS 트리가 주어진 상기 기수(radix) 기반 키 분배 기술의 특정 예를 도시한다:
여기서 레벨은 KVS 트리에서의 레벨 수이다; 자식 노드 카운트는 지정된 레벨에서 모든 노드에 대해 구성된 자식 노드의 수이다; 스필 값 비트는 지정된 레벨에서 스필 압축이 키 분배를 위해 사용하는 스필 값 비트 수이다; 키(K) 스필 값은 주어진 키(K)에 주어진 16 비트 스필 값의 이진 표현으로, 구체적으로 0110011110100011이다, 명확함을 위해 스필 값은 지정된 레벨에서 키 분배를 위해 스필 압축이 사용하는 비트로 분할된다; 그리고 선택된 자식 노드는 주어진 스필 값을 갖는 (다시 사용되는(non-obsolete)) 키-값 쌍 또는 삭제 표시에 대해 스필 압축이 선택하는 자식 노드 수이고, 이것은 임의의 (다시 사용되는) 키-값 쌍 또는 주어진 키(K)와 함께 삭제 표시를 포함할 뿐만 아니라 동일한 스필 값을 가질 수 있는 키(K)와는 다른 키를 포함한다.
일례에서, 주어진 KVS 트리에 대해, 스필 값 연산 및 스필 값 크기(비트 단위)는 모든 키에 대해 동일할 수 있다. 전술한 바와 같이, 적절한 해시를 사용하면, 예를 들어, 각각의 레벨에서 노드에 대해 원하는 수의 트리-레벨 및 원하는 수의 자식 노드를 수용하기에 충분한 스필 값 크기를 보장하면서도, 스필 값의 비트의 수를 제어할 수 있다. 일례에서, 주어진 KVS 트리에 대해, 키(K)에 대한 스필 값은 필요에 따라 연산되거나 또는 저장 매체에 저장(예를 들어, 캐싱)될 수 있다.
도 14는 일 실시형태에 따라 스필 값 함수를 위한 방법(1400)의 일례를 도시한다. 방법(1400)의 동작은 도 26과 관련하여 아래를 포함하여 본 명세서 전반에 걸쳐 설명된 것과 같은 전자 하드웨어(예를 들어, 회로)로 구현된다.
동작(1405)에서, 키의 부분이 추출된다. 일례에서, 키의 부분은 전체 키이다.
동작(1410)에서, 스필 값은 키의 부분으로부터 유도된다. 일례에서, 키의 부분으로부터 스필 값을 유도하는 동작은 키의 부분의 해시를 수행하는 동작을 포함한다.
동작(1415)에서, 스필 값의 부분은 부모 노드의 트리-레벨에 기초하여 반환된다. 일례에서, 부모 노드의 트리-레벨에 기초하여 스필 값의 부분을 반환하는 동작은 미리 설정된 배분을 스필 값에 적용하는 동작, 및 미리 설정된 배분 및 부모 노드의 트리-레벨에 대응하는 스필 값의 부분을 반환하는 동작을 포함한다. 여기서 미리 설정된 배분은 트리의 각각의 레벨에 적용되는 스필 값의 부분을 한정한다.
일례에서, 미리 설정된 배분은 트리-레벨의 적어도 일부에 대한 자식 노드의 최대 수를 한정한다. 일례에서, 미리 설정된 배분은 트리의 최대 깊이를 한정한다. 일례에서, 미리 설정된 배분은 비트 카운트의 시퀀스를 한정하고, 각각의 비트 카운트는 비트의 수를 지정하고, 상기 시퀀스는 낮은 트리-레벨로부터 높은 트리 레벨로 순서화되되, 가장 낮은 트리-레벨의 스필 값 부분이 상기 스필 값의 시작에서 시작하는 제1 비트 카운트와 동일한 비트의 수와 같고, n번째 트리-레벨의 스필 값 부분이 제1 비트 카운트에서 시작하고 n에서 1을 뺀 비트 카운트에서 끝나는 비트 카운트의 합의 스필 값으로 오프셋을 갖는 비트 카운트의 시퀀스에서 n번째 비트 카운트와 같도록 순서화된다.
도 15는 일 실시형태에 따라 스필 압축을 나타내는 블록도이다. 위에서 언급된 바와 같이, 스필 압축은 결과 kvset를 배치하기 위해 (자식 노드로) 트리 순회와 키-값 압축의 조합이다. 따라서 스필 압축(또는 단순히 스필)은 병합 세트로부터 키-값 쌍과 삭제 표시를 판독하고, 더 이상 사용되지 않은 모든 키-값 쌍 또는 삭제 표시(가비지)를 제거하고, 결과 키-값 쌍과 삭제 표시를, 병합 세트를 포함하는 노드의 자식 노드의 일부 또는 전부에서 새로운 kvset에 기록하고, 병합 세트를 포함하는 kvset를 삭제한다. 이러한 새로운 kvset는 병합 세트를 원자적으로 대체하고 이와 논리적으로 동등하다.
스필 압축은 병합 세트의 키-값 쌍 및 삭제 표시를, 병합 세트를 포함하는 노드의 자식 노드에 분배하는 결정론적 기술을 사용한다. 구체적으로, 스필 압축은 주어진 노드 및 주어진 키(K)에 대해 스필 압축이 임의의 (다시 사용되는) 키-값 쌍 또는 키(K)와 함께 삭제 표시를 이 노드의 동일한 자식 노드에 항상 기록하도록 임의의 키 분배 방법을 사용할 수 있다.
바람직한 실시형태에서, 스필 압축은 아래에 상세히 제시된 예의 것과 같이 기수 기반 키 분배 방법을 사용한다.
스필의 이해를 용이하게 하기 위해, 부모 노드는 병합 세트를 포함하는 2개의 kvset를 포함한다. 두 kvset에서 키-값 쌍(1505, 1510 및 1515)은 부모 노드의 4개의 자식 노드 중 3개의 노드에 각각 대응하는 00X, 01X 및 11X의 스필 값을 각각 갖는다. 따라서, 키-값 쌍(1505)은 새로운 kvset(X)에 배치되고, 키-값 쌍(1510)은 새로운 kvset(Y)에 배치되고, 키-값 쌍(1515)은 새로운 kvset(Z)에 배치되고, 각각의 새로운 kvset는 스필 값에 대응하는 자식에게 기록된다. 또한 새로운 kvset는 각각의 자식 노드에서 가장 새로운 것(예를 들어, 가장 왼쪽에 있는 것)에 기록된다는 것이 주목된다.
일례에서, 스필 압축을 위한 병합 세트는 병합 세트를 포함하는 노드에서 가장 오래된 kvset를 포함해야 한다. 일례에서, 병합 세트를 포함하는 노드가 스필 압축의 시작 시에 자식 노드를 갖지 않으면 구성된 수의 자식 노드가 생성된다.
상기에서 논의된 다른 압축과 마찬가지로, 정의상, 추가된 kvset는 스필 압축을 위한 병합 세트에 포함되지 않기 때문에 그리고 이러한 추가된 kvset는 스필 압축으로부터 기인한 kvset보다 논리적으로 더 새로운 것이기 때문에 스필 압축이 실행되는 동안 새로운 kvset가 스필 압축을 위한 병합 세트를 포함하는 노드에 추가될 수 있다.
도 16은 일 실시형태에 따라 스필 압축을 위한 방법(1600)의 일례를 도시한다. 방법(1600)의 동작은 도 26과 관련하여 아래를 포함하여 본 명세서 전반에 걸쳐 설명된 것과 같은 전자 하드웨어(예를 들어, 회로)로 구현된다.
동작(1605)에서, kvset의 시퀀스의 서브세트가 선택된다. 일례에서, 서브세트는 가장 오래된 kvset를 더 포함하는 연속적인 kvset를 포함한다.
동작(1610)에서, kvset의 서브세트의 각각의 kvset에 있는 각각의 키에 대해 자식-매핑이 계산된다. 여기서, 자식 매핑은 부모 노드의 트리-레벨과 특정 키에 기초하여 부모 노드로부터 자식 노드로 매핑하는 결정적 맵이다.
동작(1615)에서, 키 및 대응하는 값은 각각의 kvset 세트가 정확히 하나의 자식 노드로 매핑되는 자식-매핑에 기초하여 kvset에 수집된다. 키 충돌은 이 수집 동안 발생될 수 있다. 도 10 및 도 12와 관련하여 위에서 논의된 바와 같이, 이러한 충돌은 더 새로운 키 입력에서 해결된다.
동작(1620)에서, kvset는 각각의 자식 노드에서 kvset의 각각의 시퀀스에서 가장 새로운 위치에 기록된다.
동작(1625)에서, kvset의 서브세트는 루트 노드로부터 제거된다.
방법(1600)은 자식 노드의 메트릭이 스필 동작의 동작 후에 임계값을 초과한 것에 응답하여 자식 노드에 제2 스필 동작을 수행하는 동작을 포함하도록 확장될 수 있다.
도 17은 일 실시형태에 따라 호이스트 압축을 나타내는 블록도이다. 호이스트 압축은 새로운 kvset가 부모 노드에 기록된다는 점에서 스필 압축과는 다르다. 따라서, 호이스트 압축 또는 단순히 호이스트는 병합 세트로부터 키-값 쌍과 삭제 표시를 판독하고, 더 이상 사용되지 않은 모든 키-값 쌍 또는 삭제 표시를 제거하며, 결과 키-값 쌍과 삭제 표시를, 병합 세트를 포함하는 노드의 부모 노드에 있는 새로운 kvset에 기록하고, 병합 세트를 포함하는 kvset를 삭제한다. 이러한 새로운 kvset는 병합 세트를 원자적으로 대체하고 이와 논리적으로 동등하다.
KVS 트리에서 kvset는 트리의 루트로부터 리프까지 가장 새로운 것으로부터 가장 오래된 것으로 조직되기 때문에, 호이스트 압축은 병합 세트를 포함하는 노드에 가장 새로운 kvset를 포함하고, 호이스트 압축으로부터 기인한 kvset는 노드의 부모 노드에서 kvset의 시퀀스에서 가장 오래된 위치에 배치된다. 위에서 논의한 다른 압축과 달리, 압축되고 있는 노드로부터 가장 새로운 kvset가 병합 세트에 있는 것을 보장하기 위해, 호이스트 압축이 실행되고 있는 동안 병합 세트를 포함하는 노드에 새로운 kvset가 추가될 수는 없다. 따라서, 호이스트 압축은 차단성 압축이다.
도시된 바와 같이, KVS(1705 및 1710)의 키-값 쌍은 새로운 KVS(M)(1715)에 병합되고 kvset의 부모 노드의 시퀀스에서 가장 오래된 위치에 저장된다. 예를 들어 KVS 트리의 레벨의 수를 줄여서 KVS 트리에서 키를 탐색하는 효율을 높이는 것이 목적인 경우 호이스트 압축이 병합 세트에 적용될 수 있다.
도 18은 일 실시형태에 따라 호이스트 압축을 위한 방법(1800)의 일례를 도시한다. 방법(1800)의 동작은 도 26과 관련하여 아래를 포함하여 본 명세서 전반에 걸쳐 설명된 것과 같은 전자 하드웨어(예를 들어, 회로)로 구현된다. 일례에서,
동작(1805)에서, 새로운 kvset를 자식 노드에 기록하지 않고 새로운 kvset를 생성하기 위해 자식 노드에 키 및 값 압축이 수행된다.
동작(1810)에서, 새로운 kvset는 노드의 kvset의 시퀀스에 대해 가장 오래된 위치에서 노드에 기록된다.
키-값 압축, 스필 압축 및 호이스트 압축 동작은 병합 세트로부터 더 이상 사용되지 않은 키-값 쌍 및 삭제 표시를 물리적으로 제거하여 KVS 트리에 저장된 키-값 데이터의 양(예를 들어, 바이트 단위)을 줄일 수 있다. 이렇게 할 때, 이러한 압축 동작은 예를 들어, 병합 세트에서 값-블록으로부터 다시 사용되는 값을 판독하고, 이러한 값을 압축 동작으로부터 기인한 kvset의 값-블록에 기록한다.
대조적으로, 키 압축 동작은 키(및 삭제 표시)를 물리적으로 제거할 수 있지만 병합 세트로부터 값을 논리적으로만 제거할 수 있다. 따라서, 값은 물리적으로 키 압축으로부터 기인한 kvset에 유지된다. 키 압축은 예를 들어 키-값 압축 동작에 의해 발생된 값-블록의 추가적인 판독 및 기록을 피하면서 이 노드에서 kvset의 수를 줄임으로써 병합 세트를 포함하는 노드에서 키를 탐색하는 효율을 증가시킬 수 있다. 또한, 키 압축은 향후 유지 관리 동작에 유용한 정보를 제공한다. 키 압축은 위에서 설명한 키-블록 및 값-블록에서 키와 값이 분리된 것으로 인해 KVS 트리에 의해 고유하게 지원된다.
전술한 KVS 트리 유지 관리 기술(예를 들어, 압축)은 트리거 조건이 충족될 때 동작한다. 유지 관리가 발생할 때 및 발생하는 곳(예를 들어, 발생하는 노드)을 제어하는 동작은 처리 또는 시간, 소비된 공간 대 증가된 공간, 또는 탐색 효율에 최적화를 제공할 수 있다. 유지 관리 동안 또는 인수 동안 수집된 일부 메트릭은 나중에 유지 관리 동작을 최적화하는 시스템 능력을 향상시킬 수 있다. 여기서, 이러한 메트릭은 메트릭 연산 방식에 따라 가비지 메트릭 또는 추정된 가비지 메트릭이라고 지칭된다. 이러한 가비지 메트릭의 예는 노드에서 더 이상 사용되지 않은 키-값 쌍 및 삭제 표시의 수 또는 이들이 소비하는 저장 매체의 양, 및 노드에서 값-블록에서 참조되지 않는 데이터에 의해 소비되는 저장 매체의 양을 포함한다. 이러한 가비지 메트릭은, 예를 들어, 키-값 압축, 스필 압축 또는 호이스트 압축을 노드의 kvset에 수행하는 것에 의해 제거될 수 있는 가비지의 양을 나타낸다.
다시, 주어진 KVS 트리에 대해, 그 노드에 대해 가비지 메트릭을 연산하거나 추정하는 동작은 다음 사항을 실용적이게 하는 것을 포함하여 여러 장점을 제공한다:
A) 대부분의 가비지가 있는 노드에 가비지 수집 동작을 우선 적용하는데, 특히 키-값 압축, 스필 압축 및 호이스트 압축과 같은 더 이상 사용되지 않은 키-값 쌍과 삭제 표시를 물리적으로 제거하는 가비지 수집 동작을 우선 적용한다. 이러한 방식으로 가비지 수집 동작을 우선 적용하면 효율이 향상되고 관련 기록 증폭이 줄어든다; 또는
B) 유효한 키-값 쌍의 수와 KVS 트리에서 더 이상 사용되지 않은 키-값 쌍의 수 및 각각의 카테고리에서 소비된 저장 매체의 양을 추정한다. 이러한 추정은 KVS 트리의 용량 이용률을 보고하는 데 유용하다.
일부 경우에 KVS 트리에서 주어진 노드에 대한 가비지 메트릭을 직접 연산하는 것이 유리한 반면, 다른 경우에는 이를 추정하는 것이 유리하다. 그리하여 가비지 메트릭을 연산하고 추정하는 것을 모두 수행하는 기술은 아래에 설명된다.
가비지 메트릭의 수집을 용이하게 하기 위해, 일부 kvset 통계가 수집되거나 유지될 수 있다. 일례에서, 이러한 통계는 예를 들어 kvset의 기본 키-블록 헤더에서 kvset 세트 자체 내에 유지된다. 아래에서는 유지될 수 있는 kvset 통계의 비-제한적인 리스트이다:
A) 키-값 쌍의 수
B) 키 삭제 표시의 수
C) 키-값 쌍 및 삭제 표시를 위한 모든 키를 저장하는 데 필요한 용량
D) 키-값 쌍의 모든 값을 저장하는 데 필요한 용량
E) 최소값, 최대값, 중앙값(median) 및 평균값(mean)을 포함한 키 크기 통계
F) 최소값, 최대값, 중앙값 및 평균값을 포함한 값 크기 통계
G) kvset가 키 압축의 결과인 경우 참조되지 않은 값의 카운트 및 참조되지 않은 값이 소비하는 카운트.
H) 임의의 키-값 쌍의 최소 및 최대 TTL(time-to-live) 값.
KVS 트리는 키-값 쌍을 저장할 때 사용자가 TTL 값을 지정할 수 있게 하고, 키-값 쌍은 수명이 초과되면 압축 동작 동안 제거된다.
연산된 가비지 메트릭은 알려진 결과를 생성하기 위해 알려진 양의 연산을 포함한다. 예를 들어, kvset에서 더 이상 사용되지 않은 n 비트가 있는 것으로 알려진 경우 kvset를 키-값으로 압축하면 n 비트가 자유롭게 된다. 연산된 가비지 메트릭에 대한 메트릭의 소스는 키 압축이다. 키 압축은 더 이상 사용되지 않은 키-값 쌍과 삭제 표시를 논리적으로 제거하고, 병합 세트로부터 중복 키를 물리적으로 제거한다. 그러나 참조되지 않은 데이터는 키 압축으로부터 기인한 kvset의 값-블록에 남아 있을 수 있다. 따라서, 키 압축하면 새로운 kvset에서 참조되지 않은 값과 그 크기를 알 수 있다. 이러한 값의 크기를 알면 다른 압축 하에서 확보될 수 있는 저장 카운트를 정확히 할 수 있다. 따라서, KVS 트리에서 병합 세트에 키 압축을 실행할 때, 각각의 결과 kvset에 대한 가비지 메트릭이 각각의 kvset에 레코딩될 수 있다. 키 압축으로부터 유지될 수 있는 예시적인 가비지 메트릭은 다음 사항을 포함한다:
A) kvset에서 참조되지 않은 값의 카운트
B) kvset에서 참조되지 않은 값의 바이트
일례에서, 병합 세트에 제1 키 압축이 주어지고, 제1 키 압축과 동일한 노드에 제2 키 압축이 주어지고, 여기서 제2 키 압축을 위한 병합 세트는 제1 키 압축으로부터 기인한 kvset를 포함하면, 제1 키 압축으로부터 레코드된 가비지 메트릭이 제2 키 압축으로부터 레코드된 동일한 가비지 메트릭에 추가될 수 있다. 예를 들어, 제1 키 압축 동작으로 인해 참조되지 않은 값의 Ucnt 카운트를 지정하는 관련된 키 압축 가비지 메트릭을 갖는 단일 kvset(S)가 생성된 경우, Ucnt는 제2 키 압축 동작으로부터 기인한 키 압축 가비지 메트릭에서 참조되지 않은 값의 카운트에 포함될 수 있다.
일례에서, KVS 트리의 주어진 노드에 대해, 키 압축 동작을 위한 병합 세트가 노드의 모든 kvset를 포함하면, 레코드된 키 압축 가비지 메트릭은 다음 사항을 포함할 수 있다:
A) 노드에서 참조되지 않은 값의 카운트
B) 노드에서 참조되지 않은 값의 바이트
주어진 노드의 모든 kvset가 키 압축 동작의 결과인 경우, 노드에 대한 키 압축 가비지 메트릭은 노드의 각각의 개별 kvset로부터의 동일한 키 압축 가비지 메트릭의 합인 것이 명백하다.
추정된 가비지 메트릭은 노드에 압축을 수행한 것으로부터 이득을 추정하는 값을 제공한다. 일반적으로 추정된 가비지 메트릭은 키 압축을 수행하지 않고 수집된다. 아래의 용어는 아래 논의에서 사용된다:
A) T = 주어진 노드에서 kvset의 수
B) S(j) = 주어진 노드에서의 kvset이고, 여기서 S(1)는 가장 오래된 kvset이고, S(T)는 가장 새로운 것이다.
C) KVcnt(S(j)) = S(j)에서 키-값 쌍의 수
D) NKVcnt = 범위 1 내지 T에서 j에 대한 합(KVcnt(S(j)))
E) Kcap(S(j)) = S(j)에 대한 모든 키를 바이트 단위로 저장하는 데 필요한 용량
F) NKcap = 범위 1 내지 T에서 j에 대한 합(Kcap(S(j)))
G) Vcap(S(j)) = S(j)에 대한 모든 값을 바이트 단위로 저장하는 데 필요한 용량
H) NVcap = 범위 1 내지 T에서 j에 대한 합(Vcap(S(j)))
I) NKVcap = NKcap + NVcap
추정된 가비지 메트릭의 형태는 과거의 가비지 메트릭(historical garbage metric)이다. 과거의 가비지 수집 정보는 KVS 트리에서 주어진 노드에 대한 가비지 메트릭을 추정하는 데 사용될 수 있다. 이러한 과거의 가비지 수집 정보의 예는 다음 사항을 포함하지만 이에 국한되는 것은 아니다:
A) 주어진 노드에서 가비지 수집 동작의 이전 실행에서 더 이상 사용되지 않은 키-값 쌍의 분율의 단순 평균, 누적 평균 또는 가중 이동 평균; 또는
B) 주어진 노드와 동일한 레벨의 KVS 트리에 있는 임의의 노드에서 가비지 수집 동작의 이전 실행에서 더 이상 사용되지 않은 키-값 쌍의 분율의 단순 평균, 누적 평균 또는 가중 이동 평균.
상기 예에서, 가비지 수집 동작은 키 압축, 키-값 압축, 스필 압축 또는 호이스트 압축을 포함하지만 이에 국한되지는 않는다.
KVS 트리에 노드가 주어지면, 과거의 가비지 수집 정보 및 kvset 통계는 노드에 대해 추정된 가비지 메트릭을 생성하기 위한 정보를 제공한다.
일례에서, 과거의 가비지 메트릭을 생성하기 위해 노드 단순 이동 평균(NodeSMA)이 수행될 수 있다. 여기서, NSMA(E) = 주어진 노드에서 가비지 수집 동작의 가장 최근의 E 실행에서 더 이상 사용되지 않은 키-값 쌍의 분율의 평균값이라고 하고, 여기서 E는 구성 가능하다. 이 예에서, 주어진 노드에 대한 NodeSMA 추정된 가비지 메트릭은 다음 사항을 포함할 수 있다:
A) NKVcnt * NSMA(E) 노드에서 더 이상 사용되지 않은 키-값 쌍의 카운트;
B) NKVcap * NSMA(E) 노드에서 더 이상 사용되지 않은 키-값 데이터의 바이트;
C) NKVcnt-(NKVcnt * NSMA(E)) 노드에서 유효한 키-값 쌍의 카운트; 또는
D) NKVcap-(NKVcap * NSMA(E)) 노드에서 유효한 키-값 데이터의 바이트.
과거의 가비지 메트릭에 대한 또 다른 변형은 레벨 단순 이동 평균(LevelSMA) 가비지 메트릭을 포함한다. 이 예에서, LSMA(E) = 주어진 노드와 동일한 레벨의 KVS 트리에 있는 임의의 노드에서 가비지 수집 동작의 가장 최근의 E 실행에서 더 이상 사용되지 않은 키-값 쌍의 분율의 평균값이라 하고, 여기서 E는 구성 가능하다. 이 예에서, 주어진 노드에 대한 LevelSMA 추정된 가비지 메트릭은 다음 사항을 포함할 수 있다:
A) NKVcnt * LSMA(E) 노드에서 더 이상 사용되지 않은 키-값 쌍의 카운트;
B) NKVcap * LSMA(E) 노드에서 더 이상 사용되지 않은 키-값 데이터의 바이트;
C) NKVcnt-(NKVcnt * LSMA(E)) 노드에서 유효한 키-값 쌍의 카운트; 또는
D) NKVcap-(NKVcap * LSMA(E)) 노드에서 유효한 키-값 데이터의 바이트.
과거의 가비지 메트릭의 상기 예는 비 제한적인 것이어서 수집되는 메트릭의 유형을 예시하는 것이다. 다른 예시적인 과거의 가비지 메트릭은 노드 누적 이동 평균(Node Cumulative Moving Average: NodeCMA) 가비지 메트릭, 노드 가중 이동 평균(Node Weighted Moving Average: NodeWMA) 가비지 메트릭, 레벨 누적 이동 평균(Level Cumulative Moving Average: LevelCMA) 가비지 메트릭, 또는 레벨 가중 이동 평균(Level Weighted Moving Average: LevelWMA) 가비지 메트릭을 포함할 수 있다.
키에 대한 kvset에 블룸 필터를 유지하는 KVS 트리에 이용 가능한 추정된 가비지 메트릭의 다른 변형예는 블룸 필터 가비지 메트릭이다. 위에서 언급한 바와 같이 KVS 트리의 일례에서, 주어진 kvset는 kvset가 주어진 키를 포함할 수 있는지 여부를 효율적으로 결정하기 위해 블룸 필터를 포함하고, 여기서 kvset에서 각각의 키에 대해 kvset에 대한 블룸 필터에 하나의 엔트리가 있다. 이러한 블룸 필터는 KVS 트리에서 지정된 노드에 대한 가비지 메트릭을 추정하는 데 사용될 수 있다. KVS 트리의 특정 노드에 대해 문헌(Papapetrou, Odysseas, et al., Cardinality Estimation and Dynamic Length Adaptation for Bloom Filters, Distributed and Parallel Databases, 201)에 논의된 바와 같은 기술이 노드를 포함하는 kvset에서 블룸 필터에 의해 표현되는 키 세트의 교차점의 카디널리티(cardinality)를 근사화하는 데 사용될 수 있다. 이 근사화된 값은 본 명세서에서 노드의 블룸 추정된 카디널리티라고 지칭된다.
KVS 트리에 노드가 주어지면, 노드의 블룸 추정된 카디널리티 및 kvset 통계는 노드에 대한 추정된 가비지 메트릭이 여러 방식으로 생성될 수 있게 한다. 예시적인 블룸 필터 가비지 메트릭은 블룸델타(BloomDelta) 가비지 메트릭을 포함한다. NBEC = 주어진 노드에서 T개의 kvset의 블룸 추정된 카디널리티라고 하고, Fobs = 주어진 노드에서 더 이상 사용되지 않은 키-값 쌍의 분율의 추정치인 (NKVcnt - NBEC)/NKVcnt라고 한다. 이 예에서, 주어진 노드에 대한 블룸델타 가비지 메트릭은 다음 사항을 포함할 수 있다:
A) NKVcnt-NBEC 노드에서 더 이상 사용되지 않은 키-값 쌍의 카운트;
B) NKVcap * Fobs 노드에서 더 이상 사용되지 않은 키-값 데이터의 바이트;
C) NBEC 노드에서 유효한 키-값 쌍의 카운트; 또는
D) NKVcap-(NKVcap * Fobs) 노드에서 유효한 키-값 데이터의 바이트.
2개 이상의 이러한 필터로 표현되는 키 세트의 교차점의 카디널리티를 근사화하는 것이 가능한 블룸 필터와는 다른 확률론적 필터는 추정된 가비지 메트릭에서 블룸 필터의 대체물로서 사용될 수 있다.
연산된 및 추정된 가비지 메트릭은 다른 형태의 추정된 가비지 메트릭을 포함하는 것으로 인해 추정된 가비지 메트릭의 다른 형태인 하이브리드 가비지 메트릭을 생성하도록 결합될 수 있다. 예를 들어, T개의 kvset를 포함하는 노드가 주어지면, 키 압축 가비지 메트릭이 W(여기서 W < T)개의 이들 kvset에 대해 이용 가능한 경우, 노드에 대한 하이브리드 가비지 메트릭은 다음과 같이 생성될 수 있다. 키 압축 가비지 메트릭이 이용 가능한 노드의 W개의 kvset에 대해,
A) KGMOcnt = W개의 kvset에서 더 이상 사용되지 않은 키-값 쌍의 카운트의 추정치 + W개의 kvset 각각으로부터의 참조되지 않은 값의 카운트의 합;
B) KGMOcap = W개의 kvset에서 더 이상 사용되지 않은 키-값 데이터의 바이트의 추정치 + W개의 kvset 각각으로부터 참조되지 않은 값의 바이트의 합;
C) KGMVcnt = W개의 kvset에서 유효한 키-값 쌍의 카운트의 추정치; 및
D) KGMVcap = W개의 kvset에서 유효한 키-값 데이터의 바이트의 추정치.
추정된 가비지 메트릭은 W개의 kvset가 노드에서 유일한 kvset이라는 가정 하에 위에서 논의된 기술 중 하나를 사용하여 생성될 수 있다.
키 압축 가비지 메트릭이 이용 가능하지 않은 노드의 (T-W)개의 kvset에 대해,
A) EGMOcnt = (T-W)개의 kvset에서 더 이상 사용되지 않은 (가비지) 키-값 쌍의 카운트의 추정치;
B) EGMOcap = (T-W)개의 kvset에서 더 이상 사용되지 않은 (가비지) 키-값 데이터의 바이트의 추정치;
C) EGMVcnt = (T-W)개의 kvset에서 유효한 키-값 쌍의 카운트의 추정치; 및
D) EGMVcap = (T-W)개의 kvset에서 유효한 키-값 데이터의 바이트의 추정치.
이 추정된 가비지 메트릭은 (T-W)개의 kvset가 노드에서 유일한 kvset라는 가정 하에 위에서 논의된 기술 중 하나를 사용하여 생성될 수 있다. 이러한 파라미터가 주어지면, 주어진 노드에 대한 하이브리드 가비지 메트릭은 다음 사항을 포함할 수 있다:
A) KGMOcnt + EGMOcnt 노드에서 더 이상 사용되지 않은 키-값 쌍의 카운트;
B) KGMOcap + EGMOcap 노드에서 더 이상 사용되지 않은 키-값 데이터의 바이트;
C) KGMVcnt + EGMVcnt 노드에서 유효한 키-값 쌍의 카운트; 또는
D) KGMVcap + EGMVcap 노드에서 유효한 키-값 데이터의 바이트.
가비지 메트릭은 가비지 수집 동작의 오버헤드를 정당화하기에 충분한 양의 가비지를 갖는 트리-레벨 또는 노드에 가비지 수집 동작을 우선 적용할 수 있다. 이러한 방식으로 가비지 수집 동작을 우선 적용하면 효율이 향상되고 관련 기록 증폭이 줄어든다. 또한 트리에서 유효한 키-값 쌍의 수와 더 이상 사용되지 않은 키-값 쌍의 수 및 각각의 카테고리에 의해 소비되는 저장 매체의 양을 추정하는 것이 트리의 용량 이용률을 보고하는 데 유용하다.
도 19는 일 실시형태에 따라 KVS 트리에 유지 관리를 수행하는 방법(1900)의 일례를 도시한다. 방법(1900)의 동작은 도 26과 관련하여 아래를 포함하여 본 명세서 전반에 걸쳐 설명된 것과 같은 전자 하드웨어(예를 들어, 회로)로 구현된다.
동작(1905)에서, KVS 트리의 노드에 kvset가 기록된다. kvset를 생성하는 일부로서, kvset 메트릭의 세트가 kvset에 연산된다. 일례에서, kvset 메트릭의 세트는 kvset에 다수의 키-값 쌍을 포함한다. 일례에서, kvset 메트릭의 세트는 kvset에 다수의 삭제 표시를 포함한다. 일례에서, kvset 메트릭의 세트는 키-값 쌍 및 삭제 표시에 대한 모든 키 엔트리를 kvset에 저장하는 저장 용량을 포함한다. 일례에서, kvset 메트릭의 세트는 kvset에서 키-값 쌍의 모든 값에 대한 저장 용량을 포함한다.
일례에서, kvset 메트릭의 세트는 kvset에서 키에 대한 키 크기 통계를 포함한다. 일례에서, 키 크기 통계는 최대값, 최소값, 중앙값 또는 평균값 중 적어도 하나를 포함한다. 일례에서, kvset 메트릭의 세트는 kvset의 키에 대한 값 크기 통계를 포함한다. 일례에서, 값 크기 통계는 최대값, 최소값, 중앙값 또는 평균값 중 적어도 하나를 포함한다.
일례에서, kvset 메트릭의 세트는 kvset에 키-값 쌍에 대한 최소 또는 최대 TTL(time-to-live) 값을 포함한다. TTL은 인수 동작이 키-값 쌍이 유효한 기간을 지정하는 경우에 유용할 수 있다. 따라서, 키-값 쌍이 만기된 후에는 이것은 압축 동작을 통해 교정의 주요 대상이 된다.
일례에서, kvset는 압축 동작에 응답하여 생성된다. 여기서, 압축 동작은 키 압축, 키-값 압축, 스필 압축 또는 호이스트 압축 중 적어도 하나이다. 일례에서, 압축 동작은 키 압축이다. 이 예에서, kvset 메트릭의 세트는 키 압축의 결과로서 kvset에 참조되지 않은 값의 메트릭을 포함할 수 있다. 일례에서, 참조되지 않은 값 메트릭은 참조되지 않은 값의 카운트 또는 참조되지 않은 값에 의해 소비된 저장 용량 중 적어도 하나를 포함한다. 본 명세서에 사용된 바와 같이, 소비된 저장 용량은 경우에 따라 키 엔트리 또는 값을 보유하기 위해 기본 저장 디바이스에 의해 사용되는 비트, 바이트, 블록 등의 단위로 측정된다.
일례에서, kvset가 압축 동작에 의해 생성된 경우, kvset 메트릭의 세트는 kvset에서 더 이상 사용되지 않은 키-값 쌍의 추정치를 포함할 수 있다. 본 명세서에 사용된 바와 같이, 압축은 압축을 받는 병합 세트에서 더 이상 사용되지 않은 (예를 들어, 폐기된) 키-값 쌍에 대한 통찰력만을 얻을 뿐 현재 키-값 쌍이 압축의 일부가 아닌 더 새로운 kvset의 엔트리에 의해 더 이상 사용되지 않게 되었는지 여부를 알 수 없기 때문에 추정치가 된다. 일례에서, 더 이상 사용되지 않은 키-값 쌍의 추정치는 kvset에 포함되지 않은 이전 압축 kvset로부터 다수의 키 엔트리를 합산함으로써 계산될 수 있다. 따라서, 압축의 일부로서, 병합 세트에 대한 다수의 더 이상 사용되지 않은 쌍이 알려져 있고, 생성된 kvset에서 더 이상 사용되지 않은 데이터의 추정치로서 사용될 수 있다. 유사하게, kvset에서 유효한 키-값 쌍의 추정치는, kvset에 포함되어 kvset 메트릭의 세트의 일부인 이전 압축 kvset로부터 다수의 키 엔트리를 합산함으로써 계산될 수 있다. 일례에서, kvset 메트릭의 세트는 kvset에서 더 이상 사용되지 않은 키-값 쌍의 추정된 저장 크기를 포함한다. 일례에서, kvset에서 유효한 키-값 쌍의 추정된 저장 크기를 포함하고, 유효한 키-값 쌍의 추정된 저장 크기는 kvset에 포함된 이전 압축 kvset로부터 키 엔트리와 이에 대응하는 값의 저장 크기를 합산함으로써 계산된다. 키 압축이 수행되지 않는 한, 더 이상 사용되지 않은 추정 값이 압축에서 제거되므로 이 추정치는 과거의 메트릭에 사용될 수 있다. 그러나, 노드가 압축에서 규칙적인 (예를 들어, 과거의) 성능을 갖는 경우 이 성능이 향후에도 계속될 것으로 가정할 수 있다.
일례에서, kvset 메트릭의 세트는 kvset에 (예를 들어, 기본 키 블록 헤더에) 저장된다. 일례에서, kvset 메트릭의 세트는 노드에 저장되고 kvset에는 저장되지 않는다. 일례에서, kvset 메트릭의 서브세트는 kvset에 저장되고, kvset 메트릭의 제2 서브세트는 노드에 저장된다.
동작(1910)에서, kvset가 노드에 추가된다. 일반적으로, 일단 노드에 추가되면, kvset는 또한 (예를 들어, 온-디스크 저장 매체에) 기록된다.
동작(1915)에서, 노드는 kvset 메트릭의 세트의 메트릭에 기초하여 압축 동작을 위해 선택된다. 따라서, kvset 메트릭 또는 아래에서 논의되는 노드 메트릭, 또는 이들 둘 다는 가비지 콜렉터 또는 유사한 트리 유지 관리 프로세스에 의해 판단하는데 기여할 수 있다. 일례에서, 압축 동작을 위한 노드를 선택하는 동작은 다수의 노드에 대한 kvset 메트릭의 세트를 수집하는 동작, kvset 메트릭의 세트에 기초하여 다수의 노드를 정렬하는 동작, 및 정렬로부터 정렬 순서에 기초하여 다수의 노드의 서브세트를 선택하는 동작을 포함한다. 이 예에서, 동작(1920)은 노드에 대한 압축 동작을 수행하는 동작이 (노드를 포함하는) 다수의 노드의 서브세트에서 각각의 노드에 압축 동작을 수행하는 동작을 포함하도록 구현될 수 있다. 일례에서, 다수의 노드의 서브세트의 카디널리티는 성능 값에 의해 설정된다. 일례에서, 성능 값은 복구된 공간에 의해 측정된 압축을 수행하는 효율이다. 이것은 종종 임계값으로 구현될 수 있다. 일례에서, 주어진 압축 동작을 수행할지 여부에 대한 판단에 도달하기 위해 압축 동작에서 교정될 용량의 추정치 및 기본 저장 디바이스에 남아 있는 더 이상 사용되지 않은 저장 용량과 같은 다수의 파라미터를 받아들이는 임계값 함수가 사용될 수 있다.
동작(1920)에서, 압축 동작이 노드에 수행된다. 일례에서, 압축 동작의 유형(예를 들어, 키 압축 키-값 압축, 스필 압축 또는 호이스트 압축)은 kvset 메트릭의 세트 내의 메트릭에 기초하여 선택된다.
방법(1900)의 동작은 노드에 kvset를 추가한 것에 응답하여 노드 메트릭을 수정하는 동작을 포함하도록 확장될 수 있다. 일례에서, 노드 메트릭은 노드를 포함하는 노드 그룹에 수행된 이전 압축에 따라 kvset에서 추정된 더 이상 사용되지 않은 키-값 쌍의 분율의 값을 포함한다. 일례에서, 값은 단순 평균이다. 일례에서, 값은 이동 평균이다. 일례에서, 값은 가중 평균이다. 일례에서, 값은 노드에 대한 가장 최근의 이전 압축의 설정 수에 따라 kvset에서 더 이상 사용되지 않은 추정된 키-값 쌍의 분율의 평균값이다. 일례에서, 값은 노드의 트리-레벨에서 모든 노드에 대해 가장 최근의 이전 압축의 세트 수에 따라 kvset에서 더 이상 사용되지 않은 추정된 키-값 쌍의 분율의 평균값이다.
일례에서, 노드 그룹은 노드만을 포함한다. 일례에서, 노드 그룹은 노드의 트리-레벨의 모든 노드를 포함한다. 일례에서, 노드 메트릭은 압축 동작으로부터 기인한 kvset 메트릭의 세트에서 동일한 메트릭과 노드에 수행된 압축 동작으로부터의 이전 kvset 메트릭의 합을 포함한다.
일례에서, 노드 메트릭은 kvset에서 및 노드의 다른 kvset에서 동일한 것인 키의 추정된 수를 포함한다. 일례에서, 키의 추정된 수는, kvset로부터 제1 키 블룸 필터를 획득하고, 다른 kvset로부터 제2 키 블룸 필터를 획득하고, 제1 키 블룸 필터와 제2 키 블룸 필터를 교차시켜 노드 블룸 필터 추정된 카디널리티(NBEC)를 생성함으로써 계산된다. 이 예가 두 개의 kvset 사이인 것(예를 들어, 두 개의 kvset로부터 두 개의 블룸 필터와만 교차하는 것)으로 기록되었지만, 블룸 필터가 교차 부분인 모든 kvset에 공통적인 키의 수의 추정치를 나타내는 NBEC에 도달하기 위해 임의의 수의 kvset 블룸 필터가 교차될 수 있다.
일례에서, 노드 메트릭은 노드에서 더 이상 사용되지 않은 키-값 쌍의 수를 추정하기 위해 NKVcnt 값으로부터 NBEC를 감산하는 것을 포함한다. 여기서, NKVcnt 값은 NBEC를 생성하기 위해 블룸 필터가 교차하는 노드의 각각의 kvset에서 키 값 쌍의 총 카운트이다. 일례에서, 노드 메트릭은 NKVcap 값에 Fobs 값을 곱하는 것을 포함한다. 여기서, NKVcap 값은 NBEC를 생성하기 위해 블룸 필터가 교차하는 노드에서 각각의 kvset의 키와 값이 사용하는 총 저장 용량이고, Fobs 값은 NKVcnt 값으로부터 NBEC를 감산하고 NKVcnt로 나눈 결과이며, 여기서 NKVcnt 값은 NBEC를 생성하기 위해 블룸 필터가 교차하는 노드의 각각의 kvset에서 키 값 쌍의 총 카운트이다.
일례에서, 노드 메트릭은 노드에 저장된다. 여기서, 노드 메트릭은 다른 노드의 노드 메트릭과 함께 저장된다. 일례에서, 노드 메트릭은 트리-레벨에 저장되고, 트리-레벨은 KVS 트리의 레벨의 모든 노드에 공통적이다.
전술된 가비지 수집 메트릭 및 이를 KVS 트리 성능을 향상시키는데 사용하는 것은 특정 상황에서 KVS 트리 또는 내부 요소(예를 들면, 삭제 표시)의 바닐라(vanilla) 동작을 수정함으로써 다수의 방식으로 보조될 수 있다. 예는 삭제 표시 가속, 업데이트 삭제 표시, 접두부 삭제 표시, 또는 불변 데이터 KVS 트리를 포함할 수 있다.
삭제 표시는 KVS 트리에서 삭제된 키-값을 나타낸다. 삭제 표시가 KVS 트리의 리프에서 압축되고, 압축이 리프에서 가장 오래된 kvset를 포함하는 경우, 이것은 실제로 제거되지만 그렇지 않은 경우 탐색에서 반환되는 키에 대해 더 이상 사용되지 않을 수 있는 값을 방지하기 위해 남아 있다. 키 압축 또는 키-값 압축으로 자식 노드를 갖는 노드에서 병합 세트에 삭제 표시가 생성될 때, 삭제 표시 가속화는 KVS 트리에서 스필 압축에 사용된 키 분배 방법에 따르는 일부 또는 모든 자식 노드에서 하나 이상의 새로운 kvset에 다시 사용되는 삭제 표시를 기록하는 것을 포함한다.
키 압축 또는 키-값 압축 동작을 위한 병합 세트가 병합 세트를 포함하는 노드에서 가장 오래된 kvset를 포함하는 경우, 가속된 삭제 표시(만약 있다면)가 이 노드의 압축 작업에 의해 생성된 새로운 kvset에 포함될 필요가 없다. 그렇지 않고, 키 압축 또는 키-값 압축 동작을 위한 병합 세트가 병합 세트를 포함하는 노드에서 가장 오래된 kvset를 포함하지 않는 경우, 가속된 삭제 표시(만약 있다면)는 또한 이 노드의 압축 동작에 의해 생성된 새로운 kvset에 포함된다. KVS 트리에서 더 오래된 영역으로 가속화된 삭제 표시를 분배하면 원래 삭제 표시가 자식 노드로 푸시될 것을 기다리지 않고 자식 노드에서 키-값 쌍을 제거함으로써 가비지 수집이 용이해질 수 있다.
키 압축 또는 키-값 압축 동작은 삭제 표시 가속화를 수행할지 여부를 결정하기 위해 지정된 또는 연산된 기준을 적용할 수 있다. 이러한 삭제 표시 가속 기준의 예로는, 병합 세트에서 다시 사용되는 삭제 표시의 수 및 알려진 또는 추정일 수 있는 병합 세트에서 삭제 표시에 의해 논리적으로 삭제된 키-값 데이터의 양(예를 들어, 바이트)을 포함하지만 이에 국한되는 것은 아니다.
원래의 인수 값이 삭제 표시가 아니더라도, 업데이트 삭제 표시는 가속화된 삭제 표시와 유사하게 동작한다. 본질적으로, 새로운 값이 KVS 트리에 추가되면 이 키의 모든 이전 값이 가비지로 수집될 수 있다. 가속화된 삭제 표시와 유사하게 삭제 표시를 트리 아래쪽으로 푸시하면 이러한 자식 노드를 압축하여 더 이상 사용되지 않은 값을 제거할 수 있다.
일례에서, KVS 트리에서, 인수 동작은 새로운 kvset를 루트 노드에 추가하고, 이 새로운 kvset에서 키(K)를 갖는 키-값 쌍은 이것이 키-값 쌍을 이전 인수 동작에 포함된 키(K)로 대체하는 업데이트 키-값 쌍이라는 것을 나타내는 플래그 또는 다른 표시자를 포함한다. 이 표시자는 정확한 것으로 예상되지만 요구 사항은 아니다. 키(K)를 갖는 업데이트 키-값 쌍이 인수 동작에 포함되고 루트 노드가 자식 노드를 갖는 경우, 인수 동작은 또한 KVS 트리에서 스필 압축에 사용되는 키 분배 방법에 따라 루트 노드의 자식 노드에 있는 새로운 kvset에 키(K)에 대한 키 삭제 표시, 업데이트 삭제 표시를 기록할 수 있다.
일례에서, 대안적으로, 루트 노드에서 병합 세트에 키 압축 또는 키-값 압축 동작은, 키(K)로 업데이트 키-값 쌍을 처리한 것에 응답하여, 또한 다시 업데이트 삭제 표시라고 지칭되는 키(K)에 대한 키 삭제 표시를, KVS 트리에서 스필 압축에 사용된 키 분배 방법에 따라 루트 노드의 자식 노드에 있는 새로운 kvset에 기록할 수 있다. 일례에서, 키(K)를 갖는 주어진 업데이트 키-값 쌍에 대해 키(K)에 대해 기껏 하나의 대응하는 업데이트 삭제 표시가 기록된다.
KVS 트리 접두부 동작이 도 25와 관련하여 아래에서 논의되지만, 개념은 삭제 표시에도 사용될 수 있다. 접두부 동작에서 키의 일부인 접두부가 매칭을 위해 사용된다. 일반적으로, 키의 접두부 부분은 전체적으로 스필 값을 생성하는 데 사용되지만, 더 작은 부분이 사용될 수 있고, 이 경우 접두부 경로가 소비된 후 더 깊은 트리 결정은 모든 자식으로 팬 아웃된다. 접두부 삭제 표시는 하나의 엔트리가 많은 키-값 쌍의 삭제를 나타내도록 다수의 값과 매칭하는 접두부의 능력을 사용한다.
일례에서, 스필 압축은 키의 제1 서브 키의 스필 값에 기초한 키 분배 방법을 사용하며, 여기서 제1 서브 키는 키 접두부이다. 접두부 삭제 표시는 키 접두부를 포함하는 논리적 레코드이며, 접두부로 시작하는 모든 키와, 만약 있다면 그 관련 값이 특정 시점에서 KVS 트리로부터 논리적으로 삭제된 것을 나타낸다. 접두부 삭제 표시는 하나를 초과하는 유효한 키-값 쌍을 논리적으로 삭제할 수 있는 반면 키 삭제 표시는 정확히 하나의 유효한 키-값 쌍을 논리적으로 삭제할 수 있다는 것을 제외하고는 접두부 삭제 표시는 KVS 트리에서 키 삭제 표시와 동일한 목적으로 기능한다. 이 예에서, 스필 압축은 접두부로 지정된 제1 서브 키 값을 사용하여 접두부 삭제 표시에 대한 스필 값을 생성하기 때문에, 모든 키-값 쌍, 키 삭제 표시, 또는 동등한 제1 서브 키 값을 가진 접두부 삭제 표시는 동등한 스필 값 값들을 갖기 때문에 KVS 트리의 레벨을 통해 동일한 경로를 취한다.
일례에서, 삭제 표시 가속은 키 삭제 표시뿐만 아니라 접두부 삭제 표시에 적용될 수 있다. 접두부 삭제 표시는 후속 가비지 수집 동작에서 더 이상 사용되지 않은 많은 수의 키-값 쌍 또는 삭제 표시를 물리적으로 제거할 수 있기 때문에 삭제 표시 가속 기준을 적용할 때 접두부 삭제 표시는 키 삭제 표시와 다르게 처리될 수 있다.
전술한 삭제 표시 가속 기술은 더 많은 수의 kvset를 생성하여 비효율적일 수 있다. 데이터를 기록하는 애플리케이션은 이전에 기록된 데이터의 크기를 인식할 수 있으므로 삭제 표시는 애플리케이션으로부터 교체하고 있는 데이터의 크기를 포함할 수 있다. 이 정보는 시스템이 위에서 논의한 삭제 표시 가속을 수행할지 (또는 업데이트 표시 삭제를 생성할지) 여부를 결정하는 데 사용될 수 있다.
일부 데이터는 불변일 수 있다. 불변의 키-값 데이터의 일부 예로는 특히 시계열 데이터, 로그 데이터, 센서 데이터, 기계 생성 데이터, 및 데이터베이스 추출, 변환, 및 로드(extract, transform, and load)(ETL) 프로세스의 출력 등을 포함한다. 일례에서, KVS 트리는 불변의 키-값 데이터를 저장하도록 구성될 수 있다. 이러한 구성에서, 인수 동작으로 KVS 트리에 추가된 kvset는 삭제 표시를 포함하지 않는 것으로 예상되지만, 요구 사항은 아니다.
일례에서, KVS 트리는 KVS 트리를 포함하는 저장 매체의 용량에 의해서만 제한되는 불변 데이터의 양을 저장하도록 구성될 수 있다. KVS 트리의 이러한 구성에서 실행되는 유일한 가비지 수집 동작은 키 압축이다. 여기서, 키 압축은 루트 노드에서 kvset의 수를 줄임으로써 KVS 트리에서 키 탐색 효율을 높이기 위해 수행된다. 스필 압축이 없으면 루트 노드가 KVS 트리에서 유일한 노드가 된다는 것이 주목된다. 일례에서, 압축 기준은 루트 노드에서의 kvset의 수, 또는 최소값, 최대값, 평균 및 평균 탐색 시간과 같은 키 탐색 시간 통계를 포함할 수 있다. 이러한 통계는 예를 들어, 키 압축 후, 인수 동작 후, 구성된 시간 간격이 만료된 경우, 또는 구성된 수의 키 탐색을 수행한 후, 특정 이벤트에서 재설정될 수 있다. 일례에서, 키 압축을 위한 병합 세트는 루트 노드에서 kvset의 일부 또는 전부를 포함할 수 있다.
일례에서, KVS 트리는 선입 선출(FIFO) 방식으로 KVS 트리로부터 키-값 쌍을 제거함으로써 시행될 수 있는 보유 기준에 의해 제한되는 불변 데이터의 양을 저장하도록 구성될 수 있다. 이러한 보유 기준의 예는 KVS 트리에서 키-값 쌍의 최대 카운트; KVS 트리에서 키-값 데이터의 최대 바이트; 또는 KVS 트리에서 키-값 쌍의 최대 수명을 포함한다.
KVS 트리의 이러한 구성에서, 실행되는 유일한 가비지 수집 동작은 키 압축이다. 여기서, 키 압축은 루트 노드의 kvset의 수를 줄여 KVS 트리에서 키 탐색 효율을 높이기 위해 그리고 보유 기준을 시행하기 위해 FIFO 방식으로 KVS 트리로부터 키-값 쌍을 쉽게 제거하기 위해 수행된다. 일례에서, 압축 기준은 키 압축을 위한 병합 세트를 포함하는, 루트 노드 내 2개 이상의 연속적인 kvset가 보유 증분이라고 지칭되는 보유 기준의 구성된 분율을 충족할 때마다 키 압축이 실행되도록 지정할 수 있다. 다음은 보유 요구 사항의 일부 예이다:
A) 보유 기준이 KVS 트리에서 W개의 키-값 쌍이고, 보유 증분은 0.10 * W개의 키-값 쌍인 경우, 두 개 이상의 연속적인 kvset(병합 세트)가 결합된 0.10 * W 키-값 쌍 카운트를 갖는 경우 키 압축이 실행된다;
B) 보유 기준이 KVS 트리에서 키-값 데이터의 X 바이트이고, 보유 증분은 0.20 * X 키-값 데이터 바이트인 경우, 두 개 이상의 연속적인 kvset(병합 세트)가 결합된 0.20 * X 키-값 데이터 바이트를 갖는 경우 키 압축이 실행된다; 또는
C) 보유 기준이 KVS 트리에서 Y 일(day)의 키-값 데이터이고, 보유 증분은 0.15 * Y 일의 키-값 데이터인 경우, 두 개 이상의 연속적인 kvset(병합 세트)가 결합된 0.15 * Y 일의 키-값 데이터를 갖는 경우 키 압축이 실행된다.
키 압축을 위한 병합 세트가 구성된 보유 증분을 정확하게 충족할 것을 요구하는 것이 비실용적인 경우가 있을 수 있다. 따라서, 일례에서, 보유 증분을 근사화한 것이 사용될 수 있다.
KVS 트리, 및 각각 구성된 보유 증분 아래에 있는 kvset의 인수 동작의 시퀀스가 주어진 경우, 위에서 설명한 키 압축 동작을 실행하면 루트 노드에 있는 kvset가 각각 보유 증분을 충족시키거나 근사하게 된다. 이 결과에 대한 예외는 결합 시 보유 증분 미만일 수 있는 가장 새로운 kvset일 수 있다. 이러한 가능한 결과에도 불구하고, KVS 트리가 적어도 보유 증분만큼 보유 기준을 초과할 때마다 KVS 트리에서 가장 오래된 kvset가 삭제될 수 있다. 예를 들어, 보유 기준이 KVS 트리에서 W개의 키-값 쌍이고, 구성된 보유 증분이 0.10 * W개의 키-값 쌍인 경우, KVS 트리의 루트 노드에 있는 kvset는 결합 시 0.10 * W개의 키-값 쌍 미만을 가질 수 있는 가장 새로운 kvset를 제외하고는 각각 약 0.10 * W개의 키-값 쌍을 갖는다. 그 결과, KVS 트리가 적어도 0.10 * W개의 키-값 쌍만큼 W개의 키-값 쌍을 초과할 때마다 KVS 트리에서 가장 오래된 kvset가 삭제될 수 있다.
삭제 표시 가속, 업데이트 가속 또는 접두부 삭제 표시의 가비지 수집 촉진자(facilitator)는 KVS 트리와는 다른 키-값 저장소에 적용될 수 있다. 예를 들어, 삭제 표시 가속 또는 업데이트 삭제 표시는, 판독하는 것과 동일한 트리-레벨에 키-값 데이터를 기록하고, KVS 트리에서 키 압축 또는 키-값 압축과 유사하게 동작하는 하나 이상의 가비지 수집 동작으로 LSM 트리 변형에 적용될 수 있다. 업데이트 삭제 표시는 삭제 표시를 루트 노드의 자식 노드로 인수할 수 있는 LSM 트리 변형에 적용될 수도 있다. 다른 예에서, 접두부 삭제 표시는, (공통인) 레벨마다 단 하나의 노드만을 갖거나 또는 서브 키와 같은 키의 부분에 기초하여 자식 노드를 선택하는 키 분배 방법을 구현하는 LSM 트리 변형에 사용될 수 있다. 다른 예에서, 삭제 표시 삭제 크기는 삭제 표시 가속을 사용하여 LSM 트리 변형에 적용될 수 있다. 또한, 불변 키-값 데이터에 대한 가비지 수집을 최적화하는 기술은 KVS 트리에서의 키 압축과 유사하게 키-값 데이터의 값을 판독하거나 기록하지 않는 가비지 수집 동작으로 LSM 트리 변형에 적용될 수 있다.
이러한 가비지 수집 촉진자를 구현하면 KVS 트리 또는 데이터 구조에서 가비지 수집의 효율이 향상된다. 예를 들어, 삭제 표시 가속을 사용하면 키 압축, 키-값 압축 또는 유사한 동작을 적용할 때 발생할 수 있는 것보다 더 빨리 낮은 레벨의 트리에 삭제 표시가 기록되고, 이에 따라 트리의 모든 레벨에서 가비지를 더 빨리 제거할 수 있다. 키 압축 또는 유사한 동작과 함께 사용되는 삭제 표시 가속은 스필 압축으로부터 발생할 수 있는 것보다 기록 증폭이 훨씬 더 적은 결과를 달성한다. 다른 예에서, 접두부 삭제 표시를 사용하면 단일 삭제 표시 레코드가 많은 수의 관련 키-값 쌍을 논리적으로 삭제할 수 있고, 업데이트 삭제 표시는 키-값 쌍을 업데이트하는데 삭제 표시 가속의 장점을 제공하고, 삭제 표시 삭제 크기는 삭제 표시 가속 기준을 평가할 때 정확도를 향상시키고, 및 불변 키-값 데이터에 가비지 수집을 최적화하는 기술은 키-값 데이터의 값에 대해 일(1)의 기록-증폭을 야기한다.
도 20은 일 실시형태에 따라 KVS 트리 동작을 수정하는 방법(2000)의 일례를 도시한다. 방법(2000)의 동작은 도 26과 관련하여 아래를 포함하여 본 명세서 전반에 걸쳐 설명된 것과 같은 전자 하드웨어(예를 들어, 회로)로 구현된다. 방법(2000)은 KVS 트리에서 삭제 표시 가속, 업데이트 가속(예를 들어, 삭제 표시 업데이트), 접두부 삭제 표시 및 불변의 키-값 데이터와 관련하여 전술한 다수의 특징을 구현하기 위한 동작을 포함한다.
동작(2005)에서, KVS 트리 요청이 수신된다. 일례에서, 이 요청은 키 접두부와 삭제 표시를 포함하고, 파라미터 세트는 삭제 표시를 접두부-삭제 표시로 한정하는 멤버를 요청에 갖고, KVS 트리에서 요청을 실행하는 동작은 접두부-삭제 표시를 KVS 트리의 kvset에 기록하는 동작을 포함한다. 일례에서, 접두부-삭제 표시는 키를 비교하는 KVS 트리 동작에서 접두부-삭제 표시의 키 접두부와 동일한 접두부를 가진 임의의 키와 매칭한다.
일례에서, 요청은 키를 포함하고, 파라미터 세트는 삭제 표시 가속을 지정하는 멤버를 포함하고; KVS 트리에 요청을 실행하는 동작은 키에 스필 함수를 수행함으로써 지정된 적어도 하나의 자식 노드에 삭제 표시를 기록하는 동작을 포함한다. 스필 함수는, 도 13과 관련하여 전술한 바와 같이, 키(또는 키의 일부)를 입력으로서 취하고 스필 값을 생성하는 함수이다. 일례에서, 삭제 표시는 키에 스필 함수를 수행함으로써 지정된 모든 현존 자식 노드에 기록된다. 일례에서, 요청은 삭제 표시를 포함한다. 일례에서, 요청은 값을 포함한다.
동작(2010)에서, KVS 트리의 파라미터 세트가 수신된다.
동작(2015)에서 파라미터에 따라 KVS 트리의 동작을 수정함으로써 KVS 트리에 요청이 수행된다.
일례에서, 요청은 키, 삭제 표시, 및 키에 대응하는 KVS 트리의 값의 저장 크기를 포함한다. 여기서, 파라미터 세트는 가비지 수집 통계 저장을 지정하는 멤버를 갖고, KVS 트리에 요청을 실행하는 동작은 KVS 트리에 대한 데이터 구조의 키 및 저장 크기를 저장하는 동작을 포함한다. 일례에서, 삭제 표시는 접두부-삭제 표시이다.
일례에서, 파라미터 세트는 KVS 트리가 불변임을 지정하는 멤버를 포함하고, KVS 트리에 요청을 실행하는 동작은 KVS 트리의 루트 노드에 요청을 기록하는 동작을 포함한다. 여기서, KVS 트리가 불변인 경우 루트 노드는 KVS 트리의 유일한 노드이다.
일례에서, KVS 트리는 KVS 트리가 불변일 경우에만 키 압축을 사용한다. 일례에서, 방법(2000)은 KVS 트리가 불변인 것에 응답하여 키 탐색 통계를 저장하도록 확장될 수 있다. 일례에서, 키 탐색 통계는 최소값, 최대값, 평균 또는 평균 탐색 시간 중 적어도 하나이다. 일례에서, 키 탐색 통계는 루트 노드의 kvset의 수이다.
일례에서, KVS 트리가 불변일 때, 방법(2000)은 키 탐색 통계가 임계값을 충족한 것에 응답하여 키 압축을 수행하도록 확장될 수 있다. 일례에서, 키 압축은 압축, 인수, 지정된 수의 탐색 후, 또는 지정된 시간 간격 후, 중 적어도 하나에 응답하여 키 탐색 통계를 재설정하는 동작을 포함할 수 있다.
일례에서, 파라미터 세트의 제2 멤버는 KVS 트리가 선입 선출에 기초하여 요소를 제거하도록 지정하고, 파라미터 세트의 제3 멤버는 KVS 트리의 보유 제약을 지정하고, KVS 트리는 유지 제약에 기초하여 kvset에 키 압축을 수행하고, KVS 트리는 보유 제약이 위반될 때 가장 오래된 kvset를 제거한다. 일례에서, 보유 제약은 키-값 쌍의 최대 수이다. 일례에서, 보유 제약은 키-값 쌍의 최대 수명이다. 일례에서, 보유 제약은 키-값 쌍이 소비하는 최대 저장 값이다.
일례에서, 보유 제약에 기초하여 kvset에 키 압축을 수행하는 동작은 그룹 세트 - 보유 제약의 분율에 근사한 그룹 세트의 각각의 멤버의 요약된 메트릭 - 을 생성하기 위해 연속적인 kvset를 그룹화하는 동작 및 그룹 세트의 각각의 멤버에 키 압축을 수행하는 동작을 포함한다.
도 21은 일 실시형태에 따라 키 탐색을 나타내는 블록도이다. 탐색은, 루트 노드에서 가장 새로운 kvset에서 시작하고, 키가 발견되거나 리프 노드에서 가장 오래된 kvset가 키를 갖지 않을 때까지 점진적으로 이전 kvset로 이동함으로써 진행된다. 부모-자식 키 매핑의 결정적 특성으로 인해, 단 하나의 리프만이 탐색되며 이 리프에서 가장 오래된 kvset는 가장 오래된 키 엔트리를 갖는다. 따라서 설명된 탐색 경로를 따르고 키를 발견할 수 없는 경우 키는 KVS 트리에 없다.
탐색은 키에 대해 가장 새로운 키 엔트리가 발견되자마자 중지된다. 따라서, 탐색 경로는 가장 새로운 것으로부터 가장 오래된 것으로 이동하고, 키의 키 엔트리가 발견되자마자 중지한다. 이 거동은 더 이상 사용되지 않은 키-값 쌍이 KVS 트리로부터 즉시 제거될 필요가 없기 때문에 kvset의 불변성을 유지할 수 있게 한다. 대신에, 더 새로운 값 또는 삭제를 나타내는 삭제 표시가 더 새로운 kvset에 배치되고 처음 발견되면, KVS 트리에 여전히 상주하는 이전 키-쌍 버전과 상관없이 질의에 정확히 응답하게 된다.
일례에서, 키(K)에 대한 탐색은 현재 노드를 루트 노드로 설정함으로써 수행될 수 있다. 키-값 쌍 또는 키(K)와 함께 삭제 표시가 현재 노드에서 발견되면 탐색이 완료되고 관련된 값 또는 "키를 찾을 수 없음" 표시가 각각 결과로서 반환된다. 키(K)를 찾을 수 없으면 현재 노드는 키(K) 및 스필 압축에 사용된 키 분배 방법에 의해 결정된 바에 따라 노드의 자식으로 설정된다.
이러한 자식 노드가 존재하지 않으면, 탐색은 완료되고, "키를 찾을 수 없음" 표시가 결과이다. 그렇지 않으면, 현재 노드의 kvset에서 키(K)에 대한 탐색이 수행되고 프로세스가 반복된다. 개념적으로, KVS 트리에서 키(K)를 탐색하는 것은 KVS 트리를 통해 동일한 경로를 따르고 모든 키-값 쌍 또는 키(K)와 함께 삭제 표시는 스필 압축의 결과로 취한다.
키에 기초하여 부모와 자식 사이에 결정적 매핑을 수행하는 것으로 인해, 키-값 쌍 또는 키(K)와 함께 삭제 표시가 발견되거나, KVS 트리에서 마지막 (예를 들어, 가장 큰 번호가 매겨진) 레벨의 노드가 탐색될 때까지 KVS 트리에서 레벨마다 단 하나의 노드만이 탐색된다. 따라서, 탐색은 매우 효율적이다.
도 22는 일 실시형태에 따라 키 탐색을 수행하는 방법(2200)의 일례를 도시한다. 방법(2200)의 동작은 도 26과 관련하여 아래를 포함하여 본 명세서 전반에 걸쳐 설명된 것과 같은 전자 하드웨어(예를 들어, 회로)로 구현된다.
동작(2205)에서 키를 포함하는 탐색 요청이 수신된다.
동작(2210)에서 루트 노드가 현재 노드로 선택된다.
동작(2215)에서 현재 노드가 검사된다.
동작(2220)에서, 검사는 현재 노드의 가장 새로운 kvset에 대한 질의로 시작한다.
판단(2225)에서, 키가 발견되지 않으면, 방법(2200)은 판단(2240)으로 진행하고, 그렇지 않고 키가 발견되면 판단(2230)으로 진행한다.
판단(2230)에서, 키에 대응하는 키 엔트리가 삭제 표시를 포함하거나 참조한다면, 방법(2200)은 결과(2260)로 진행하고, 그렇지 않으면 결과(2235)로 진행한다.
결과(2235)에서, 키에 대한 가장 새로운 키 엔트리에 대응하는 값이 탐색 요청에 대한 응답으로 반환된다.
판단(2240)에서, 현재 노드에 kvset가 더 있다면, 방법(2200)은 동작(2245)으로 진행하고, 그렇지 않으면 판단(2250)으로 진행한다.
동작(2245)에서, 방법(2200)은 키에 질의하기 위해 현재 노드에서 그 다음 가장 새로운 kvset를 선택하고 판단(2225)으로 진행한다.
판단(2250)에서, 현재 노드가 키에 대한 스필 함수와 매칭하는 자식 노드를 갖지 않는다면, 방법(2200)은 결과(2260)로 진행하고, 그렇지 않으면 동작(2255)으로 진행한다.
동작(2255)에서, 키에 대한 스필 함수와 매칭하는 자식 노드는 현재 노드로 설정되고 방법(2200)은 동작(2215)으로 진행한다.
결과(2260)에서, 탐색 요청에 대한 응답으로 "키를 찾을 수 없음"과 같은 탐색에 대해 부정적인 표시가 반환된다.
스캔 동작은 다수의 키를 찾고 있는 탐색과는 다르다. 일반적인 스캔 동작은 탐색이 범위를 한정하는 다수의 키를 지정하는 키 범위를 탐색하는 동작을 포함할 수 있다. 일반적으로, 스캔은 기준을 지정하고 기준을 충족하는 kvs 트리의 모든 키 결과를 예상한다.
도 23은 일 실시형태에 따라 키 스캔을 나타내는 블록도이다. 키 스캔 또는 단순히 스캔은 스캔 기준을 충족하는 (예를 들어, 지정된 범위 내에 있는) 키 엔트리를 포함하는 KVS 트리의 모든 노드에서 모든 kvset를 식별한다. kvset의 키 저장소는 특정 키에 대한 효율적인 탐색을 허용하지만 스캔 기준을 충족하는 모든 키를 찾는 것을 보장하면 모든 kvset를 탐색하게 된다. 그러나 kvset에 키-값을 저장하는 키 정렬된 특성으로 인해 스캔은 모든 키를 조회하지 않고도 신속하게 결정할 수 있다. 이것은 예를 들어 키-값 쌍이 키 정렬된 구조로 저장되는 것이 아니라 키-해시 충돌을 해결하기 위해 키가 유지되므로 WB 트리에서 제공하는 능력보다 여전히 더 낫다. 따라서, WB 트리의 모든 키는 스캔을 충족하기 위해 판독되어야 한다.
KVS 트리에서, 스캔을 용이하게 하기 위해, 키는 키 정렬된 순서로 kvset에 저장된다. 따라서, 주어진 키는 로그 시간에 찾을 수 있고 범위 내의 키(예를 들어, 범위에서 가장 높은 키 및 가장 낮은 키)도 또한 신속하게 결정될 수 있다. 또한, 도 1 내지 도 5와 관련하여 전술된 예시적인 kvset 메타 데이터는 스캔 속도를 더욱 높이기 위해 사용될 수 있다. 예를 들어, kvset가 kvset에 포함된 최소 및 최대 키 값을 유지하는 경우 스캔은 kvset에서 지정된 범위를 충족하는 키가 없다는 것을 신속히 결정할 수 있다. 유사하게, kvset 키의 블룸 필터를 유지하는 것을 사용하면 특정 키가 주어진 kvset의 키 저장소에 없다는 것을 신속하게 결정할 수 있다.
일례(도시되지 않음)에서, 상기를 제외하고, 스캔은 모든 노드가 방문되는 것을 제외하고는 탐색과 매우 유사하게 진행될 수 있다. 따라서, 스캔은 기준을 필요로 하는 모든 키에 대해 가장 새로운 레코드를 kvset로부터 판독하고, 여기서 주어진 키(K)에 대해 가장 새로운 레코드는 키-값 쌍 또는 키 삭제 표시일 수 있다. 위에서 언급한 바와 같이, KVS 트리의 주어진 노드 내에서 kvset는 가장 새로운 것에서부터 가장 오래된 것으로 순서화되고, 레벨(L + 1)에 있는 노드의 kvset는 레벨(L)에 있는 노드의 kvset보다 더 오래된 것이다. 기준을 충족하는 키가 발견된 후, 요청자에게 결과 세트가 반환된다.
모든 노드에서 모든 kvset의 방문이 스캔에서 발생하는 것을 실현할 때, 바로 위에서 설명된 탐색-같은 스캔이 개선될 수 있다. 따라서, 일례에서, kvset는 동시에 판독될 수 있다. 모든 kvset의 동시 판독은 매우 큰 버퍼(예를 들어, 반환된 결과의 저장 위치)를 초래할 수 있다. 그러나 이것은 주어진 kvset에 스캔 기준을 충족하는 (예를 들어, 범위 내에) 키가 있는지 여부를 신속하게 결정할 수 있는 능력으로 완화될 수 있다. 따라서 모든 kvset를 방문할 수 있지만 기준을 충족하는 키가 있는 kvset만이 판독된다. 이 예는 도 23에 도시되어 있다. 구체적으로, 판독기는 모든 kvsest(예를 들어, 파선 및 파선 kvset)를 동시에 방문하지만 kvset(파선 kvset)의 서브세트만을 판독한다. 이 기술은 프로그램이 그 다음 키 또는 이전 키를 요구할 수 있는 반복자 스타일 의미론을 지원한다. kvset에서 키의 정렬된 특성은 그 다음 키를 맹렬히 식별할 수 있게 하고, 키에 충돌이 있는 경우(예를 들어, 동일한 키에 다수의 엔트리가 있는 경우), 이 값은, 가장 새로운 값이 반복자가 이 키를 건너뛰고 그 다음 키에 가장 새로운 값을 제공하는 경우인 삭제 표시가 아닌 한, 프로그램으로 반환될 가장 새로운 것이다.
일례에서, 스캔은 키 범위(또는 다른 기준)를 포함하는 스캔 요청을 수신하는 동작을 포함할 수 있다.
스캔은 노드 세트의 각각의 kvset로부터 범위에 의해 지정된 키를 트리로부터 발견된 세트로 수집함으로써 진행한다. 일례에서, 노드 세트는 트리 내 모든 노드를 포함한다.
스캔은 삭제 표시가 아닌 키에 대한 가장 최근의 엔트리에 대응하는 키-값 쌍을 유지함으로써 발견된 세트를 결과 세트로 줄임으로써 진행된다.
스캔은 결과 세트를 반환함으로써 완료된다.
도 24는 일 실시형태에 따라 키 스캔을 나타내는 블록도이다. 도 24는 도 23과 다른 관점을 제공한다. 스캔 기준은 A 내지 K의 키이다. 스캔은 루트 노드의 가장 새로운 kvset로 시작하고, 이는 KVS 트리에서 가장 새로운 kvset인, kvset 12이다. 일례에서, kvset 12의 키 메트릭은 적어도 일부 키가 기준을 충족하는 것을 신속히 결정할 수 있다. 구체적으로, 이 예에서는 이들은 키(A 및 B)이다. 스캔은 KVS 트리의 상위(루트)에서 하위(리프)까지 각각의 노드에서 가장 새로운 것으로부터 가장 오래된 kvset로 진행된다. 키(A, B, C, E 및 K)는 노드에 걸쳐 다수의 kvset로 나타난다는 것이 주목된다. 스캔은 각각 가장 새로운 것(예를 들어, 선택된 키)만을 보유한다. 따라서, 결과 세트는 키(A 및 B)의 경우 kvset 12, 키(C)의 경우 kvset 11, 키(E)의 경우 kvset 10, 및 키(K)의 경우 kvset 6에서 발견되는 이러한 키에 대한 값을 포함한다. 그러나, 이러한 키 중 임의의 키에 대한 이러한 kvset의 키 엔트리가 삭제 표시를 포함하거나 참조하는 경우 이 키는 결과 세트로부터 생략된다. kvset 5에서 키(D)의 고유성은 키(D)가 삭제 표시를 참조하지 않는다고 가정하면 결과 세트에 값이 포함되는 것을 수반한다.
도 25는 일 실시형태에 따라 접두부 스캔을 나타내는 블록도이다. 접두부 스캔은 KVS 트리에서 모든 키-값 쌍(만약 있다면)을 찾는데, 여기서 키는 모두 지정된 접두부에서 시작한다. 접두부는 전체 키보다 더 작아서 다수의 키와 매칭할 수 있지만, 키의 접두부 부분은 스필 값을 생성하기 위해 스필 함수에 의해 사용되는 키 부분보다 적어도 커야 한다. 따라서, 스필 함수가 키의 제1 서브키를 사용하는 경우 접두부는 제1 서브키를 포함한다(그리고 추가 서브키를 포함할 수 있다). 이러한 요구 조건에 의해 접두부의 경로의 노드만이 방문되기 때문에 결정적 매핑이 단순 스캔 성능보다 접두부 탐색 성능이 향상될 수 있다.
일례에서, 스필 값은 키의 제1 서브키에 기초한다. 이 예에서 지정된 접두부는 키의 제1 서브키에 대한 값을 포함한다. 이 예에서, 접두부 스캔은 지정된 접두부에서 시작하는 키-값 쌍 또는 키와 함께 삭제 표시를 포함하는 KVS 트리의 모든 노드에서 모든 kvset를 식별함으로써 진행될 수 있다. 단순 스캔과 달리 접두부 스캔은 KVS 트리의 모든 노드를 방문하지 않는다. 오히려, 검사된 노드는 접두부를 한정하는 제1 서브키 값의 스필 값에 의해 결정된 경로를 따르는 노드에 한정될 수 있다. 일례에서, 제1 서브키를 사용하는 대신에 접미부 스캔을 수행하기 위해 스필 값에 마지막 서브키를 사용할 수 있다. 이 예에서, 지정된 접미부는 키의 마지막 서브키에 대한 값을 포함한다. 스필 값을 계산하는데 사용된 특정 서브키에 기초하여 추가적인 다양한 스캔이 구현될 수 있다.
다시, 단순 스캔과 유사하게, 스캔을 구현하기 위해 키 또는 키-값 쌍을 검색하는 다수의 방법이 있다. 일례에서, 예시된 바와 같이, 접두부에 의해 제공되는 스필 값 경로를 따르는 노드(파선 에지가 있는 노드)를 동시에 방문하고(파선), 이 노드 내의 kvset는 스캔 기준을 충족하는 키에 대해 테스트되고, 테스트를 통과한 kvset(파선 에지가 있는 kvset)가 판독된다.
조사되는 노드의 수가 KVS 트리의 레벨마다 하나로 제한되기 때문에 그리고 kvset 키 저장소 내의 키가 일반적으로 접두부와 매칭하는 키를 쉽게 식별할 수 있는 구조로 저장되기 때문에 접두부 스캔은 극히 효율적이다. 추가적으로, 키 스캔과 관련하여 위에서 설명한 kvset 메트릭이 또한 탐색 속도를 높이는 데 도움이 될 수 있다.
접두부 스캔은 키 접두부를 갖는 스캔 요청을 수신하는 것을 포함할 수 있다. 여기서, 탐색될 노드-세트는 키 접두부에 대응하는 각각의 노드를 포함한다. 일례에서, 키 접두부와 노드의 대응은 키 접두부로부터 유도된 스필 값의 부분에 의해 결정되며, 스필 값의 부분은 주어진 노드의 트리-레벨에 의해 결정된다.
접두부 스캔은 노드 세트의 각각의 kvset로부터 접두부에 의해 지정된 키를 트리로부터 발견된 세트로 수집함으로써 진행된다.
접두부 스캔은, 삭제 표시가 아니고 보다 최근의 삭제 표시에 의해 삭제되지 않는 키에 대한 가장 최근의 엔트리에 대응하는 키-값 쌍을 유지함으로써 발견된 세트를 결과 세트로 줄임으로써 진행된다.
접두부 스캔은 결과 세트를 반환함으로써 완료된다.
전술한 바와 같이, KVS 트리는 온-디스크 상에 키-값 데이터를 저장하는 강력한 구조를 제공한다. KVS 트리는 이러한 구조의 단점없이 LSM 트리 및 WB 트리의 많은 장점을 포함한다. 예를 들어, 압축으로 인한 저장 공간 또는 기록 증폭과 관련하여 KVS 트리에서, 노드의 크기는 압축에 사용되는 임시 저장 용량의 최대량을 제한하도록 쉽게 제어될 수 있다. 또한, 키 압축은 값-블록을 판독 및 기록하지 않고 노드에서 탐색 효율을 높이기 위해 사용될 수 있고, 이에 의해 압축으로 인한 판독 증폭 및 기록 증폭이 줄어든다. 전통적인 LSM 트리에서, 압축에 필요한 임시 저장 용량의 양뿐만 아니라 판독 증폭 및 기록 증폭의 양은, 압축되는 트리-레벨의 키-값 용량의 양에 비례할 수 있는데, 이는 LSM 트리에서 트리-레벨의 키-값 용량이 일반적으로 트리에서 더 깊이 각각의 트리-레벨에서 기하급수적으로 성장하도록 구성되는 것에 의해 악화된다.
키 탐색 효율과 관련하여, KVS 트리에서, 키(K)를 탐색하는 동작은 트리-레벨마다 단 하나의 노드만을 탐색하는 동작을 포함하는데, 이는 KVS 트리의 전체 키 중 적은 분율만을 나타낸다. 전통적인 LSM 트리에서 키(K)를 탐색하려면 각각의 레벨의 모든 키를 탐색할 것을 요구한다.
전술한 바와 같이, 접두부 스캔 효율과 관련하여, KVS 트리의 일례는 KVS 트리에서 전체 키의 작은 분율만을 나타내는 트리-레벨마다 단 하나의 노드만을 탐색함으로써 지정된 접두부에서 시작하는 모든 키를 찾을 수 있다. 전통적인 LSM 트리에서, 지정된 접두부에서 시작하는 모든 키를 찾으려면 각각의 레벨의 모든 키를 탐색할 것을 요구한다.
스캔 효율과 관련하여, 전술한 KVS 트리의 일례는 kvset의 데이터를 활용함으로써 주어진 범위에 있는 또는 지정된 접두부에서 시작하는 모든 키를 찾을 수 있다. WB 트리에서는 키는 순서화되어 있지 않으므로 이러한 동작들 중 어느 동작이라도 효율적으로 구현할 수 없다. 따라서, 이러한 스캔을 수행하려면 WB 트리에서 트리의 모든 엔트리를 검색하고 검사해야 한다.
압축 성능과 관련하여, KVS 트리에서, 키, 키-값, 및 - 호이스트 압축을 제외하고 - 스필 압축 유지 기술은 노드에서 kvset의 시간 정렬된 특성으로 인해 차단성이 아니다. 따라서, 새로운 kvset를 가장 새로운 위치에 간단히 배치함으로써 키, 키-값 또는 스필 압축이 수행되는 노드에 새로운 kvset가 추가될 수 있다. WB 트리에서 압축은 차단성 동작이다.
도 26은 본 명세서에 논의된 기술(예를 들어, 방법론) 중 임의의 하나 이상을 수행할 수 있는 예시적인 기계(2600)의 블록도를 도시한다. 대안적인 실시형태에서, 기계(2600)는 독립형 디바이스로서 동작하거나 다른 기계에 연결(예를 들어, 네트워크로 연결)될 수 있다. 네트워크로 전개될 때, 기계(2600)는 서버-클라이언트 네트워크 환경에서 서버 기계, 클라이언트 기계 또는 이들 둘 다의 능력으로 동작할 수 있다. 일례에서, 기계(2600)는 피어-투-피어(peer-to-peer)(P2P)(또는 다른 분산된) 네트워크 환경에서 피어 기계로서 작용할 수 있다. 기계(2600)는 개인용 컴퓨터(PC), 태블릿 PC, 셋톱 박스(STB), 개인 휴대 정보 단말기(PDA), 휴대 전화, 웹 기기, 네트워크 라우터, 스위치 또는 브리지, 또는 이 기계가 취할 조치를 지정하는 명령(순차적 또는 다른 방식)을 실행할 수 있는 임의의 기계일 수 있다. 또한, 단 하나의 기계만이 도시되어 있지만, "기계"라는 용어는 또한, 예를 들어, 클라우드 컴퓨팅, SaaS(Software as a Service), 다른 컴퓨터 클러스터 구성과 같이 본 명세서에 논의된 임의의 하나 이상의 방법론을 수행하는 명령 세트(또는 복수 세트)를 개별적으로 또는 공동으로 실행하는 임의의 기계의 집합을 포함하는 것으로 이해된다.
본 명세서에 기술된 예는 로직 또는 다수의 구성 요소 또는 메커니즘을 포함하거나 이에 의해 동작할 수 있다. 회로부는 하드웨어(예를 들어, 단순 회로, 게이트, 로직 등)를 포함하는 유형의 개체로 구현된 회로의 집합이다. 회로부의 멤버는 시간이 지남에 따라 유연할 수 있다. 회로부는 동작 시 단독으로 또는 조합하여 지정된 동작을 수행할 수 있는 멤버를 포함한다. 일례에서, 회로부의 하드웨어는 특정 동작(예를 들어, 하드 와이어)을 수행하도록 불변적으로 설계될 수 있다. 일례에서, 회로부의 하드웨어는 특정 동작의 명령을 인코딩하도록 물리적으로 수정된 (예를 들어, 자기적, 전기적, 불변의 덩어리 입자를 이동 가능하게 배치하는 것 등을 통해 수정된) 컴퓨터 판독 가능 매체를 포함하는 가변적으로 연결된 물리적 구성 요소(예를 들어, 실행 유닛, 트랜지스터, 간단한 회로 등)를 포함할 수 있다. 물리적 구성 요소를 연결할 때 하드웨어 성분의 기본 전기 속성이 예를 들어 절연체로부터 전도체로 또는 그 반대로 변한다. 이 명령에 의해 내장 하드웨어(예를 들어, 실행 유닛 또는 로딩 메커니즘)는 동작 시에 특정 동작의 부분을 수행하기 위해 가변 연결을 통해 하드웨어에서 회로부의 멤버를 생성할 수 있다. 따라서, 컴퓨터 판독 가능 매체는 디바이스가 동작할 때 회로부의 다른 구성 요소와 통신 가능하게 연결된다. 일례에서, 임의의 물리적 구성 요소는 하나를 초과하는 회로부의 하나를 초과하는 멤버에 사용될 수 있다. 예를 들어, 동작 시에, 실행 유닛은 하나의 시점에서 제1 회로부의 제1 회로에서 사용될 수 있고, 제1 회로부의 제2 회로에 의해, 또는 다른 시간에 제2 회로부의 제3 회로에 의해 재사용될 수 있다.
기계(예를 들어, 컴퓨터 시스템)(2600)는 하드웨어 프로세서(2602)(예를 들어, 중앙 처리 유닛(CPU), 그래픽 처리 유닛(GPU), 하드웨어 프로세서 코어 또는 이들의 임의의 조합), 주 메모리(2604) 및 정적 메모리(2606)를 포함할 수 있고, 이들 중 일부 또는 전부는 상호 링크(예를 들어, 버스)(2608)를 통해 서로 통신할 수 있다. 기계(2600)는 디스플레이 유닛(2610), 영숫자 입력 디바이스(2612)(예를 들어, 키보드) 및 사용자 인터페이스(UI) 내비게이션 디바이스(2614)(예를 들어, 마우스)를 더 포함할 수 있다. 일례에서, 디스플레이 유닛(2610), 입력 디바이스(2612) 및 UI 내비게이션 디바이스(2614)는 터치스크린 디스플레이일 수 있다. 기계(2600)는 저장 디바이스(예를 들어, 구동 유닛)(2616), 신호 생성 디바이스(2618)(예를 들어, 스피커), 네트워크 인터페이스 디바이스(2620), 및 하나 이상의 센서(2621), 예를 들어, GPS(Global Positioning System) 센서, 나침반, 가속도계 또는 기타 센서를 추가로 포함할 수 있다. 기계(2600)는 하나 이상의 주변 디바이스(예를 들어, 프린터, 카드 리더기 등)와 통신하거나 제어하기 위해 직렬(예를 들어, 범용 직렬 버스(USB)), 병렬 또는 다른 유선 또는 무선 연결(예를 들어, 적외선(IR), 근거리 통신(NFC) 등)과 같은 출력 디바이스(2628)를 포함할 수 있다.
저장 디바이스(2616)는 본 명세서에 설명된 기술 또는 기능 중 임의의 하나 이상에 의해 구현되거나 이용되는 하나 이상의 데이터 구조 또는 명령(2624)(예를 들어, 소프트웨어) 세트가 저장되는 기계 판독 가능 매체(2622)를 포함할 수 있다. 명령(2624)은 또한 기계(2600)에 의해 실행되는 동안 주 메모리(2604) 내에, 정적 메모리(2606) 내에, 또는 하드웨어 프로세서(2602) 내에 완전히 또는 적어도 부분적으로 상주할 수 있다. 일례에서, 하드웨어 프로세서(2602), 주 메모리(2604), 정적 메모리(2606) 또는 저장 디바이스(2616)의 하나의 또는 임의의 조합은 기계 판독 가능 매체를 구성할 수 있다.
기계 판독 가능 매체(2622)는 단일 매체로 도시되어 있지만, "기계 판독 가능 매체"라는 용어는 하나 이상의 명령(2624)을 저장하도록 구성된 단일 매체 또는 다중 매체(예를 들어, 중앙 집중식 또는 분산식 데이터베이스 및/또는 관련 캐시 및 서버)를 포함할 수 있다.
"기계 판독 가능 매체"라는 용어는, 기계(2600)에 의해 실행될 명령을 저장, 인코딩 또는 운반할 수 있고 기계(2600)로 하여금 본 발명의 기술 중 임의의 하나 이상을 수행하게 할 수 있고 또는 이러한 명령에 의해 사용되거나 이 명령과 관련된 데이터 구조를 저장, 인코딩 또는 운반할 수 있는 임의의 매체를 포함할 수 있다. 비 제한적인 기계 판독 가능 매체의 예로는 솔리드 스테이트 메모리, 및 광학 및 자기 매체를 포함할 수 있다. 일례에서, 대량 기계 판독 가능 매체는 불변(예를 들어, 정지) 질량을 갖는 복수의 입자를 갖는 기계 판독 가능 매체를 포함한다. 따라서, 대량 기계 판독 가능 매체는 일시적인 전파 신호가 아니다. 대량 기계 판독 가능 매체의 특정 예는 비 휘발성 메모리, 예를 들어, 반도체 메모리 디바이스(예를 들어, EPROM(Electrically Programmable Read-Only Memory), EEPROM(Electrically Erasable Programmable Read-Only Memory)) 및 플래시 메모리 디바이스; 내부 하드 디스크 및 이동식 디스크와 같은 자기 디스크; 광 자기 디스크; 및 CD-ROM 및 DVD-ROM 디스크를 포함할 수 있다.
명령(2624)은 다수의 전송 프로토콜(예를 들어, 프레임 릴레이, 인터넷 프로토콜(IP), 전송 제어 프로토콜(TCP), 사용자 데이터그램 프로토콜(UDP), 하이퍼텍스트 전송 프로토콜(HTTP), 등) 중 임의의 하나를 사용하여 네트워크 인터페이스 디바이스(2620)를 통해 전송 매체를 사용하여 통신 네트워크(2626)를 통해 더 전송되거나 수신될 수 있다. 예시적인 통신 네트워크는 특히 근거리 통신망(LAN), 광역 통신망(WAN), 패킷 데이터 네트워크(예를 들어, 인터넷), 이동 전화 네트워크(예를 들어, 셀룰러 네트워크), 일반 전화(Plain Old Telephone)(POTS) 네트워크, 및 무선 데이터 네트워크(예를 들어, Wi-Fi로 알려진 IEEE(Institute of Electrical and Electronics Engineers) 802.11 표준 계열, WiMax로 알려진 IEEE 802.16 표준 계열), IEEE 802.15.4 표준 계열, 피어-투-피어(P2P) 네트워크를 포함할 수 있다. 일례에서, 네트워크 인터페이스 디바이스(2620)는 통신 네트워크(2626)에 연결하기 위해 하나 이상의 물리적 잭(예를 들어, 이더넷, 동축 또는 전화 잭) 또는 하나 이상의 안테나를 포함할 수 있다. 일례에서, 네트워크 인터페이스 디바이스(2620)는 단일 입력 다중 출력(SIMO), 다중 입력 다중 출력(MIMO) 또는 다중 입력 단일 출력(MISO) 기술 중 적어도 하나를 사용하여 무선으로 통신하기 위해 복수의 안테나를 포함할 수 있다. "전송 매체"라는 용어는 기계(2600)에 의해 실행될 명령을 저장, 인코딩 또는 운반할 수 있는 임의의 무형의 매체를 포함하는 것으로 해석되어야 하고, 이러한 소프트웨어의 통신을 용이하게 하기 위해 디지털 또는 아날로그 통신 신호 또는 다른 무형의 매체를 포함한다.
추가적인 설명 및
실시예
실시예 1은, 적어도 하나의 기계 판독 가능 매체에 트리로 조직된 키-값 데이터 구조로서, 상기 데이터 구조는 다수의 노드를 포함하되, 상기 다수의 노드 중 노드는 불변 키-값 세트(kvsest)의 시간 정렬된 시퀀스; 및 상기 노드의 kvset에 있는 키-값 쌍을 상기 노드의 임의의 하나의 자식 노드로 매핑하는 결정적 매핑을 포함하고, 상기 키-값 쌍은 하나의 키와 하나의 값을 포함하며, 상기 키는 상기 kvset에서 고유한 것인, 상기 키-값 데이터 구조이다.
실시예 2에 있어서, 실시예 1에서, 상기 결정적 매핑은 상기 키의 부분의 해시의 부분을 포함하는, 키-값 데이터 구조.
실시예 3에 있어서, 실시예 2에서, 상기 키의 부분은 전체 키인, 키-값 데이터 구조.
실시예 4에 있어서, 실시예 2 또는 실시예 3에서, 상기 해시는 상기 해시의 부분을 포함하는 다수의 중첩되지 않는 부분을 포함하는, 키-값 데이터 구조.
실시예 5에 있어서, 실시예 4에서, 상기 다수의 중첩되지 않는 부분 각각은 상기 트리의 레벨에 대응하는, 키-값 데이터 구조.
실시예 6에 있어서, 실시예 5에서, 상기 해시의 부분은 상기 노드의 레벨에 의해 상기 다수의 중첩되지 않는 부분으로부터 결정되는, 키-값 데이터 구조.
실시예 7에 있어서, 실시예 6에서 상기 노드에 대한 자식 노드의 최대 수는 상기 해시의 부분의 크기에 의해 한정되는, 키-값 데이터 구조.
실시예 8에 있어서, 실시예 7에서, 상기 해시의 부분의 크기는 비트의 수인, 키-값 데이터 구조.
실시예 9에 있어서, 실시예 1 내지 실시예 8 중 임의의 하나 이상에서, 상기 kvset는 상기 kvset의 키-값 쌍의 키 엔트리를 저장하기 위한 키-트리를 포함하는, 키-값 데이터 구조.
실시예 10에 있어서, 실시예 9에서, 상기 키는 상기 키-트리의 리프 노드에 저장되는, 키-값 데이터 구조.
실시예 11에 있어서, 실시예 9 내지 실시예 10 중 임의의 하나 이상에서, 상기 키-트리의 임의의 서브트리에서 최대 키는 가장 오른쪽의 자식의 가장 오른쪽 엔트리에 있는, 키-값 데이터 구조.
실시예 12에 있어서, 실시예 9 내지 실시예 11 중 임의의 하나 이상에서, 제1 노드의 가장 오른쪽에 있는 에지는 서브-노드에 링크되고, 상기 서브-노드를 루트로 하는 서브트리 내의 모든 키는 상기 제1 노드의 모든 키보다 더 큰, 키-값 데이터 구조.
실시예 13에 있어서, 실시예 1 내지 실시예 12 중 임의의 하나 이상에서, 상기 kvset의 키 엔트리는 기본 키-블록 및 0개 이상의 확장 키-블록을 포함하는 키-블록 세트에 저장되고, 상기 키-블록 세트의 멤버는 저장 매체를 위한 미디어 블록에 대응하며, 각각의 키-블록은 이를 키-블록으로 식별하기 위한 헤더를 포함하고; 상기 값은 값-블록 세트에 저장되고, 상기 값-블록 세트의 멤버는 상기 저장 매체를 위한 미디어 블록에 대응하며, 각각의 값-블록은 이를 값-블록으로 식별하기 위한 헤더를 포함하는, 키-값 데이터 구조.
실시예 14에 있어서, 실시예 13에서 값 블록은 값들 사이를 분리함이 없이 하나 이상의 값에 대한 저장 구획을 포함하는, 키-값 데이터 구조.
실시예 15에 있어서, 실시예 13 내지 실시예 14 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 kvset의 상기 하나 이상의 확장 키-블록에 대한 미디어 블록 식별자의 리스트를 포함하는, 키-값 데이터 구조.
실시예 16에 있어서, 실시예 13 내지 실시예 15 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 값 블록의 세트 내의 값-블록에 대한 미디어 블록 식별자의 리스트를 포함하는, 키-값 데이터 구조.
실시예 17에 있어서, 실시예 13 내지 실시예 16 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 kvset의 키-트리에서 가장 낮은 키의 사본을 포함하고, 상기 가장 낮은 키는 상기 트리의 미리 설정된 정렬 순서에 의해 결정되는, 키-값 데이터 구조.
실시예 18에 있어서, 실시예 13 내지 실시예 17 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 kvset의 키-트리에서 가장 높은 키의 사본을 포함하고, 상기 가장 높은 키는 상기 트리의 미리 설정된 정렬 순서에 의해 결정되는, 키-값 데이터 구조.
실시예 19에 있어서, 실시예 13 내지 실시예 18 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 kvset의 키-트리에 대한 헤더를 포함하는, 키-값 데이터 구조.
실시예 20에 있어서, 실시예 13 내지 실시예 19 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 kvset의 키-트리에 대한 미디어 블록 식별자의 리스트를 포함하는, 키-값 데이터 구조.
실시예 21에 있어서, 실시예 13 내지 실시예 20 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 kvset의 블룸 필터를 위한 블룸 필터 헤더를 포함하는, 키-값 데이터 구조.
실시예 22에 있어서, 실시예 13 내지 실시예 21 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 kvset의 블룸 필터를 위한 미디어 블록 식별자의 리스트를 포함하는, 키-값 데이터 구조.
실시예 23에 있어서, 실시예 13 내지 실시예 22 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 kvset에 대한 메트릭의 세트를 포함하는, 키-값 데이터 구조.
실시예 24에 있어서, 실시예 23에서, 상기 메트릭의 세트는 상기 kvset에 저장된 키의 총 수를 포함하는, 키-값 데이터 구조.
실시예 25에 있어서, 실시예 23 내지 실시예 24 중 임의의 하나 이상에서, 상기 메트릭의 세트는 상기 kvset에 저장된 삭제 표시 값을 갖는 다수의 키를 포함하는, 키-값 데이터 구조.
실시예 26에 있어서, 실시예 23 내지 실시예 25 중 임의의 하나 이상에서, 상기 메트릭의 세트는 상기 kvset에 저장된 키에 대한 모든 키 길이의 합을 포함하는, 키-값 데이터 구조.
실시예 27에 있어서, 실시예 23 내지 실시예 26 중 임의의 하나 이상에서, 상기 메트릭의 세트는 상기 kvset에 저장된 키에 대한 모든 키 값의 합을 포함하는, 키-값 데이터 구조.
실시예 28에 있어서, 실시예 23 내지 실시예 27 중 임의의 하나 이상에서, 상기 메트릭의 세트는 상기 kvset의 값-블록에서 참조되지 않은 데이터의 양을 포함하는, 키-값 데이터 구조.
실시예 29에 있어서, 실시예 1 내지 실시예 28 중 임의의 하나 이상에서, 상기 트리는 상기 적어도 하나의 기계 판독 가능 매체의 제1 컴퓨터 판독 가능 매체의 제1 루트, 및 상기 적어도 하나의 컴퓨터 판독 가능 매체의 제2 컴퓨터 판독 가능 매체의 제2 루트를 포함하고, 상기 제2 루트는 상기 제1 루트에 대한 유일한 자식인, 키-값 데이터 구조.
실시예 30에 있어서, 실시예 29에서, 상기 제1 컴퓨터 판독 가능 매체는 바이트 어드레싱 가능하고 상기 제2 컴퓨터 판독 가능 매체는 블록 어드레싱 가능한, 키-값 데이터 구조.
실시예 31은, 시스템으로서, 적어도 하나의 기계 판독 가능 매체에 트리로 조직된 키-값 데이터 구조로 저장하기 위한 키-값 세트(kvset)를 수신하는 동작으로서, 상기 kvset는 고유한 키를 값으로 매핑하는 것을 포함하고, 상기 kvset의 키 및 값은 불변이며, 상기 트리의 노드는 kvset의 시간 순서화된 시퀀스를 포함하는, 상기 키-값 세트를 수신하는 동작; 및 상기 트리의 루트-노드의 kvset의 시퀀스에 상기 kvset를 기록하는 동작을 수행하도록 구성된 처리 회로부를 포함하는, 시스템이다.
실시예 32에 있어서, 실시예 31에서, 상기 처리 회로부는 상기 키-값 데이터 구조로 저장하기 위해 키 및 대응하는 값을 수신하는 동작; 상기 키와 상기 값을 예비 kvset에 배치하는 동작으로서, 상기 예비 kvset는 변경 가능한, 상기 배치하는 동작; 및 메트릭에 도달하면 상기 kvset를 상기 키-값 데이터 구조에 기록하는 동작을 수행도록 구성된, 시스템.
실시예 33에 있어서, 실시예 32에서, 상기 메트릭은 예비 루트 노드의 크기인, 시스템.
실시예 34에 있어서, 실시예 32 내지 실시예 33 중 임의의 하나 이상에서, 상기 예비 루트 노드에 기록하는 속도는 임계값을 초과하고, 상기 처리 회로부는 상기 키-값 데이터 구조에 대한 기록 요청을 스로틀링하도록 구성된, 시스템.
실시예 35에 있어서, 실시예 32 내지 실시예 34 중 임의의 하나 이상에서, 상기 메트릭은 경과 시간인, 시스템.
실시예 36에 있어서, 실시예 31 내지 실시예 35 중 임의의 하나 이상에서, 상기 처리 회로부는, 제2 kvset를 수신하고; 상기 루트-노드에 대한 kvset의 시퀀스에 상기 제2 kvset를 기록하고; 그리고 상기 제2 kvset에 기록한 것에 응답하여 상기 루트-노드의 메트릭이 임계값을 초과한 것에 응답하여 상기 루트 노드에 스필 동작을 수행하도록 구성된, 시스템.
실시예 37에 있어서, 실시예 36에서, 상기 스필 동작을 수행하기 위해, 상기 처리 회로부는, 상기 kvset의 시퀀스 중에서 서브세트를 선택하는 동작으로서, 상기 서브세트는 가장 오래된 kvset를 포함하는 연속적인 kvset를 포함하는, 상기 선택하는 동작; 상기 kvset의 서브세트의 각각의 kvset에 있는 각각의 키에 대한 자식-매핑을 계산하는 동작으로서, 상기 자식 매핑은 부모 노드의 트리-레벨과 특정 키에 기초하여 상기 부모 노드로부터 자식 노드로 매핑하는 결정적 맵인, 상기 계산하는 동작; 각각의 kvset 세트가 정확히 하나의 자식 노드로 매핑되는 상기 자식-매핑에 기초하여 키 및 대응하는 값을 kvset로 수집하는 동작; 각각의 자식 노드에 있는 kvset의 각각의 시퀀스에서 가장 새로운 위치에 상기 kvset를 기록하는 동작; 및 상기 루트 노드로부터 상기 kvset의 서브세트를 제거하는 동작을 수행하도록 구성된, 시스템.
실시예 38에 있어서, 실시예 37에서, 상기 자식-매핑을 계산하기 위해, 상기 처리 회로부는 키의 부분을 추출하고; 상기 키의 부분으로부터 스필 값을 유도하고; 그리고 상기 부모 노드의 트리-레벨에 기초하여 상기 스필 값의 부분을 반환하도록 구성된, 시스템.
실시예 39에 있어서, 실시예 38에서, 상기 키의 부분은 전체 키인, 시스템.
실시예 40에 있어서, 실시예 38 내지 실시예 39 중 임의의 하나 이상에서, 상기 키의 부분으로부터 상기 스필 값을 유도하기 위해 상기 처리 회로부는 상기 키의 부분의 해시를 수행하도록 구성된, 시스템.
실시예 41에 있어서, 실시예 38 내지 실시예 40 중 임의의 하나 이상에서, 상기 부모 노드의 트리-레벨에 기초하여 상기 스필 값의 부분을 반환하기 위해 상기 처리 회로부는 미리 설정된 배분을 상기 스필 값에 적용하는 동작으로서, 상기 미리 설정된 배분은 상기 트리의 각각의 레벨에 적용되는 상기 스필 값의 부분을 한정하는, 상기 적용하는 동작; 및 상기 미리 설정된 배분 및 상기 부모 노드의 트리-레벨에 대응하는 상기 스필 값의 부분을 반환하도록 구성된, 시스템.
실시예 42에 있어서, 실시예 41에서, 상기 미리 설정된 배분은 상기 트리-레벨의 적어도 일부에 대해 자식 노드의 최대 수를 한정하는, 시스템.
실시예 43에 있어서, 실시예 41 내지 실시예 42 중 임의의 하나 이상에서, 상기 미리 설정된 배분은 상기 트리의 최대 깊이를 한정하는, 시스템.
실시예 44에 있어서, 실시예 41 내지 실시예 43 중 임의의 하나 이상에서, 상기 미리 설정된 배분은 비트 카운트의 시퀀스를 한정하고, 각각의 비트 카운트는 비트의 수를 지정하고, 상기 시퀀스는 낮은 트리-레벨로부터 높은 트리 레벨로 순서화되되, 가장 낮은 트리-레벨의 스필 값 부분이 상기 스필 값의 시작에서 시작하는 제1 비트 카운트와 동일한 비트의 수와 같고, n번째 트리-레벨의 스필 값 부분이 제1 비트 카운트에서 시작하고 n에서 1을 뺀 비트 카운트에서 끝나는 비트 카운트의 합의 스필 값으로 오프셋을 갖는 비트 카운트의 시퀀스에서 n번째 비트 카운트와 같도록 순서화된, 시스템.
실시예 45에 있어서, 실시예 36 내지 실시예 44 중 임의의 하나 이상에서, 상기 처리 회로부는 상기 스필 동작의 동작 후 상기 자식 노드의 메트릭이 임계값을 초과한 것에 응답하여 자식 노드에 제2 스필 동작을 수행하도록 구성된 것을 선택적으로 포함하는, 시스템.
실시예 46에 있어서, 실시예 31 내지 실시예 45 중 임의의 하나 이상에서, 상기 처리 회로부는 상기 트리의 노드를 압축하도록 구성된, 시스템.
실시예 47에 있어서, 실시예 46에서, 상기 노드를 압축하기 위해, 상기 처리 회로부는 키 압축을 수행하도록 구성되고, 상기 키 압축은, 상기 처리 회로부가, 상기 노드에 대해 kvset의 시퀀스로부터 kvset의 서브세트를 선택하는 동작으로서, 상기 kvset의 서브세트는 연속적인 kvset를 포함하는, 상기 kvset의 서비세트를 선택하는 동작; 충돌 키 세트를 찾는 동작으로서, 상기 충돌 키 세트의 멤버는 상기 노드에 대한 kvset의 시퀀스에서 적어도 2개의 kvset 내의 키 엔트리를 포함하는, 상기 충돌 키 세트를 찾는 동작; 상기 충돌 키 세트의 각각의 멤버에 대한 가장 최근의 키 엔트리를 새로운 kvset에 추가하는 동작; 상기 충돌 키 세트에 없는 상기 kvset의 서브세트의 멤버에 있는 각각의 키에 대한 엔트리를 상기 새로운 kvset에 추가하는 동작; 및 상기 새로운 kvset를 상기 노드에 기록하고 상기 kvset의 서브세트를 제거함으로써 상기 kvset의 서브세트를 상기 새로운 kvset로 대체하는 동작을 수행하는 동작을 포함하는, 시스템.
실시예 48에 있어서, 실시예 47에서, 상기 노드는 자식을 갖지 않고 상기 kvset의 서브세트는 상기 가장 오래된 kvset를 포함하고, 상기 충돌 키 세트의 각각의 멤버에 대한 가장 최근의 키 엔트리를 상기 새로운 kvset에 기록하고, 상기 충돌 키 세트에 없는 kvset의 서브세트의 멤버들 내의 각각의 키에 대한 엔트리를 상기 새로운 kvset에 기록하기 위해, 상기 처리 회로부는 삭제 표시를 포함하는 임의의 키 엔트리를 생략하도록 구성된, 시스템.
실시예 49에 있어서, 실시예 47 내지 실시예 48 중 임의의 하나 이상에서, 상기 노드는 자식을 갖지 않고, 상기 kvset의 서브세트는 가장 오래된 kvset를 포함하고, 상기 충돌 키 세트의 각각의 멤버에 대해 가장 최근의 키 엔트리를 상기 새로운 kvset에 기록하고, 상기 충돌 키 세트에 없는 상기 kvset의 서브세트의 멤버에 있는 각각의 키에 대한 엔트리를 상기 새로운 kvset에 기록하기 위해, 상기 처리 회로부는 만료되는 임의의 키 엔트리를 생략하도록 구성된, 시스템.
실시예 50에 있어서, 실시예 47 내지 실시예 49 중 임의의 하나 이상에서, 상기 노드를 압축하기 위해, 상기 처리 회로부는 값 압축을 수행하도록 구성되고, kvset의 키 및 값은 개별적인 어드레싱 가능 블록에 저장되며, 상기 값 압축은, 상기 처리 회로부가, 상기 새로운 kvset에 대한 키 엔트리 내의 값 참조를 새로운 블록으로 복사하는 동작, 및 상기 kvset의 서브세트에 대응하는 블록을 삭제하는 동작을 포함하는, 시스템.
실시예 51에 있어서, 실시예 46 내지 실시예 50 중 임의의 하나 이상에서, 상기 노드는 자식 노드를 포함하고, 상기 노드를 압축하는 동작은 메트릭이 임계값 미만으로 떨어지게 하고, 상기 처리 회로부는 상기 메트릭이 상기 임계값 미만으로 떨어진 것에 응답하여 상기 자식 노드에 호이스트 압축을 수행하도록 구성된, 시스템.
실시예 52에 있어서, 실시예 51에서, 상기 호이스트 압축은, 상기 처리 회로부가, 새로운 kvset를 상기 자식 노드에 기록하지 않고 상기 새로운 kvset를 생성하기 위해 상기 자식 노드에 키 및 값 압축을 수행하고; 상기 새로운 kvset를 상기 노드의 kvset의 시퀀스에 대해 가장 오래된 위치의 노드에 기록하도록 더 구성된 것을 포함하는, 시스템.
실시예 53에 있어서, 실시예 46 내지 실시예 52 중 임의의 하나 이상에서, 상기 압축은 트리거에 응답하여 수행되는, 시스템.
실시예 54에 있어서, 실시예 53에서, 상기 트리거는 시간 기간의 만료인, 시스템.
실시예 55에 있어서, 실시예 53 내지 실시예 54 중 임의의 하나 이상에서, 상기 트리거는 상기 노드의 메트릭인, 시스템.
실시예 56에 있어서, 실시예 55에서, 상기 메트릭은 상기 노드의 kvset의 총 크기인, 시스템.
실시예 57에 있어서, 실시예 55 내지 실시예 56 중 임의의 하나 이상에서, 상기 메트릭은 상기 노드의 kvset의 수인, 시스템.
실시예 58에 있어서, 실시예 55 내지 실시예 57 중 임의의 하나 이상에서, 상기 메트릭은 참조되지 않은 값의 총 크기인, 시스템.
실시예 59에 있어서, 실시예 55 내지 실시예 58 중 임의의 하나 이상에서, 상기 메트릭은 참조되지 않은 값의 수인, 시스템.
실시예 60에 있어서, 실시예 31 내지 실시예 59 중 임의의 하나 이상에서, ksvet가 상기 적어도 하나의 저장 매체에 기록될 때, 상기 kvset는 불변인, 시스템.
실시예 61에 있어서, 실시예 60에서, 상기 kvset의 키 엔트리는 기본 키-블록 및 0개 이상의 확장 키-블록을 포함하는 키-블록의 세트에 저장되고, 상기 키-블록의 세트의 멤버는 상기 적어도 하나의 저장 매체를 위한 미디어 블록에 대응하고, 각각의 키-블록은 이를 키-블록으로서 식별하기 위한 헤더를 포함하고; 값은 값-블록의 세트에 저장되고, 상기 값-블록의 세트의 멤버는 상기 적어도 하나의 저장 매체를 위한 미디어 블록에 대응하고, 각각의 값-블록은 이를 값-블록으로서 식별하기 위한 헤더를 포함하는, 시스템.
실시예 62에 있어서, 실시예 61에서 값 블록은 값들 사이를 분리함이 없이 하나 이상의 값에 대한 저장 구획을 포함하는, 시스템.
실시예 63에 있어서, 실시예 61 내지 실시예 62 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 kvset의 하나 이상의 확장 키-블록에 대한 미디어 블록 식별자의 리스트를 포함하는, 시스템.
실시예 64에 있어서, 실시예 61 내지 실시예 63 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 값 블록의 세트 내의 값-블록에 대한 미디어 블록 식별자의 리스트를 포함하는, 시스템.
실시예 65에 있어서, 실시예 61 내지 실시예 64 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 kvset의 키-트리에서 가장 낮은 키의 사본을 포함하고, 상기 가장 낮은 키는 상기 트리의 미리 설정된 정렬 순서에 의해 결정되는, 시스템.
실시예 66에 있어서, 실시예 61 내지 실시예 65 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 kvset의 키-트리에서 가장 높은 키의 사본을 포함하고, 상기 가장 높은 키는 상기 트리의 미리 설정된 정렬 순서에 의해 결정된, 시스템.
실시예 67에 있어서, 실시예 61 내지 실시예 66 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 kvset의 키-트리에 대한 헤더를 포함하는, 시스템.
실시예 68에 있어서, 실시예 61 내지 실시예 67 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 kvset의 키-트리에 대한 미디어 블록 식별자의 리스트를 포함하는, 시스템.
실시예 69에 있어서, 실시예 61 내지 실시예 68 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 kvset의 블룸 필터를 위한 블룸 필터 헤더를 포함하는, 시스템.
실시예 70에 있어서, 실시예 61 내지 실시예 69 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 kvset의 블룸 필터에 대한 미디어 블록 식별자의 리스트를 포함하는, 시스템.
실시예 71에 있어서, 실시예 61 내지 실시예 70 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 kvset에 대한 메트릭의 세트를 포함하는, 시스템.
실시예 72에 있어서, 실시예 71에서, 상기 메트릭의 세트는 상기 kvset에 저장된 키의 총 수를 포함하는, 시스템.
실시예 73에 있어서, 실시예 71 내지 실시예 72 중 임의의 하나 이상에서, 상기 메트릭의 세트는 상기 kvset에 저장된 삭제 표시 값을 갖는 다수의 키를 포함하는, 시스템.
실시예 74에 있어서, 실시예 71 내지 실시예 73 중 임의의 하나 이상에서, 상기 메트릭의 세트는 상기 kvset에 저장된 키에 대한 모든 키 길이의 합을 포함하는, 시스템.
실시예 75에 있어서, 실시예 71 내지 실시예 74 중 임의의 하나 이상에서, 상기 메트릭의 세트는 상기 kvset에 저장된 모든 키에 대한 키 값의 카운트를 포함하는, 시스템.
실시예 76에 있어서, 실시예 71 내지 실시예 75 중 임의의 하나 이상에서, 상기 메트릭의 세트는 상기 kvset의 값-블록에서 참조되지 않은 데이터의 양을 포함하는, 시스템.
실시예 77에 있어서, 실시예 31 내지 실시예 76 중 임의의 하나 이상에서, 상기 처리 회로부는 탐색 키를 포함하는 탐색 요청을 수신하는 동작; 및 전체 트리의 적어도 하나가 순회되거나 또는 상기 탐색 키의 제1 인스턴스가 상기 트리의 노드의 kvset에서 발견될 때까지 상기 트리를 순회하는 동작을 수행하도록 구성되되, 상기 트리를 순회하는 동작은, 상기 처리 회로부가, 상기 트리의 루트-노드에서 시작하는 동작; 순회되는 각각의 노드에 대해, 가장 새로운 kvset로부터 가장 오래된 kvset까지 상기 노드의 kvset를 조사하는 동작; 상기 탐색 키가 발견될 때 발견된 표시를 반환하고 순회를 중지하는 동작; 및 상기 탐색 키가 발견되지 않을 때 자식 노드로 순회를 계속하는 동작으로서, 상기 자식 노드는 존재하고 상기 자식 노드는 상기 탐색 키로부터 유도된 스필 값 및 순회되는 상기 노드의 트리-레벨에 의해 식별되는, 상기 순회를 계속하는 동작을 수행하는 동작을 포함하는, 시스템.
실시예 78에 있어서, 실시예 77에서, 상기 발견된 표시는 조사된 kvset에서 상기 탐색 키의 키-엔트리에 대응하는 값을 포함하는, 시스템.
실시예 79에 있어서, 실시예 77 내지 실시예 78 중 임의의 하나 이상에서, 상기 순회가 종료된 후에 상기 탐색 키가 발견되지 않으면, 발견되지 않은 표시를 반환하는 동작을 선택적으로 포함하는, 시스템.
실시예 80에 있어서, 실시예 79에서, 상기 발견된 표시는 상기 키-엔트리가 삭제 표시를 포함할 때 발견되지 않은 표시와 동일한, 시스템.
실시예 81에 있어서, 실시예 77 내지 실시예 80 중 임의의 하나 이상에서, 상기 kvset를 조사하는 동작은, 상기 처리 회로부가, 주어진 kvset에 대해 상기 kvset의 블룸 필터를 사용하여 상기 탐색 키가 상기 kvset에 있을 수 있는지 여부를 결정하는 동작을 포함하는, 시스템.
실시예 82에 있어서, 실시예 77 내지 실시예 81 중 임의의 하나 이상에서, 상기 kvset를 조사하는 동작은, 상기 처리 회로부가, 주어진 kvset에 대해 상기 탐색 키가 상기 kvset의 최대 키 값보다 작거나 같다고 결정하는 동작을 포함하는, 시스템.
실시예 83에 있어서, 실시예 77 내지 실시예 82 중 임의의 하나 이상에서, 상기 kvset를 조사하는 동작은, 상기 처리 회로부가, 주어진 kvset에 대해 상기 탐색 키가 상기 kvset의 최소 키 값 이상이라고 결정하는 동작을 포함하는, 시스템.
실시예 84에 있어서, 실시예 31 내지 실시예 83 중 임의의 하나 이상에서, 상기 처리 회로부는 키 기준을 포함하는 스캔 요청을 수신하고; 노드 세트의 각각의 kvset로부터 상기 키 기준에 의해 지정된 키를 상기 트리로부터 발견된 세트로 수집하고; 삭제 표시가 아닌 키에 대해 가장 최근의 엔트리에 대응하는 키-값 쌍을 유지함으로써 상기 발견된 세트를 결과 세트로 줄이고; 그리고 상기 결과 세트를 반환하도록 구성된, 시스템.
실시예 85에 있어서, 실시예 84에서, 상기 노드 세트는 상기 트리의 모든 노드를 포함하는, 시스템.
실시예 86에 있어서, 실시예 84 내지 실시예 85 중 임의의 하나 이상에서, 상기 기준은 키 접두부이고, 상기 노드-세트는 상기 키 접두부에 대응하는 각각의 노드를 포함하는, 시스템.
실시예 87에 있어서, 실시예 86에서, 상기 키 접두부와 노드의 대응은 상기 키 접두부로부터 유도된 스필 값의 부분에 의해 결정되고, 상기 스필 값의 부분은 주어진 노드의 트리-레벨에 의해 결정되는, 시스템.
실시예 88에 있어서, 실시예 84 내지 실시예 87 중 임의의 하나 이상에서, 상기 기준은 범위인, 시스템.
실시예 89는, 명령을 포함하는 적어도 하나의 기계 판독 가능 매체로서, 상기 명령은, 처리 회로부에 의해 실행될 때, 상기 기계로 하여금, 적어도 하나의 기계 판독 가능 매체에 트리로 조직된 키-값 데이터 구조로 저장하기 위한 키-값 세트(kvset)를 수신하는 동작으로서, 상기 kvset는 고유한 키를 값으로 매핑하는 매핑을 포함하고, 상기 kvset의 키 및 값은 불변이며, 상기 트리의 노드는 kvset의 시간 순서화된 시퀀스를 포함하는, 상기 키-값 세트를 수신하는 동작; 및 상기 트리의 루트-노드의 kvset의 시퀀스에 상기 kvset를 기록하는 동작을 수행하게 하는, 적어도 하나의 기계 판독 가능 매체이다.
실시예 90에 있어서, 실시예 89에서, 상기 동작은, 상기 키-값 데이터 구조로 저장하기 위한 키 및 대응하는 값을 수신하는 동작; 상기 키 및 상기 값을 예비 kvset에 배치하는 동작으로서, 상기 예비 kvset는 변경 가능한, 상기 배치하는 동작; 및 메트릭에 도달할 때 상기 kvset를 상기 키-값 데이터 구조에 기록하는 동작을 포함하는, 적어도 하나의 기계 판독 가능 매체.
실시예 91에 있어서, 실시예 90에서, 상기 메트릭은 예비 루트 노드의 크기인, 적어도 하나의 기계 판독 가능 매체.
실시예 92에 있어서, 실시예 90 내지 실시예 91 중 임의의 하나 이상에서, 상기 예비 루트 노드에 기록하는 속도는 임계값을 초과하고, 상기 동작은 상기 키-값 데이터 구조에 대한 기록 요청을 스로틀링하는 동작을 포함하는, 적어도 하나의 기계 판독 가능 매체.
실시예 93에 있어서, 실시예 90 내지 실시예 92 중 임의의 하나 이상에서, 상기 메트릭은 경과 시간인, 적어도 하나의 기계 판독 가능 매체.
실시예 94에 있어서, 실시예 89 내지 실시예 93 중 임의의 하나 이상에서, 상기 동작은, 제2 kvset를 수신하는 동작; 상기 루트-노드에 대한 kvset의 시퀀스에 상기 제2 kvset를 기록하는 동작; 및 상기 제2 kvset를 기록한 것에 응답하여 상기 루트-노드의 메트릭이 임계값을 초과한 것에 응답하여 상기 루트 노드에 스필 동작을 수행하는 동작을 포함하는, 적어도 하나의 기계 판독 가능 매체.
실시예 95에 있어서, 실시예 94에서, 상기 스필 동작은, kvset의 시퀀스에서 서브세트를 선택하는 동작으로서, 상기 서브세트는 가장 오래된 kvset를 포함하는 연속적인 kvset를 포함하는, 상기 선택하는 동작; 상기 kvset의 서브세트의 각각의 kvset에서 각각의 키에 대한 자식-매핑을 계산하는 동작으로서, 상기 자식 매핑은 부모 노드의 트리-레벨과 특정 키에 기초하여 상기 부모 노드로부터 자식 노드로 매핑하는 결정적 맵인, 상기 계산하는 동작; 각각의 kvset 세트가 정확히 하나의 자식 노드로 매핑되는 상기 자식-매핑에 기초하여 키 및 대응하는 값을 kvset로 수집하는 동작; 각각의 자식 노드에 있는 kvset의 각각의 시퀀스에서 가장 새로운 위치에 상기 kvset를 기록하는 동작; 및 상기 루트 노드로부터 kvset의 서브세트를 제거하는 동작을 포함하는, 적어도 하나의 기계 판독 가능 매체.
실시예 96에 있어서, 실시예 95에서, 상기 자식-매핑을 계산하는 동작은 키의 부분을 추출하는 동작; 상기 키의 부분으로부터 스필 값을 유도하는 동작; 및 상기 부모 노드의 상기 트리-레벨에 기초하여 상기 스필 값의 부분을 반환하는 동작을 포함하는, 적어도 하나의 기계 판독 가능 매체.
실시예 97에 있어서, 실시예 96에서, 상기 키의 부분은 전체 키인, 적어도 하나의 기계 판독 가능 매체.
실시예 98에 있어서, 실시예 96 내지 실시예 97 중 임의의 하나 이상에서, 상기 키의 부분으로부터 스필 값을 유도하는 동작은 상기 키의 부분의 해시를 수행하는 동작을 포함하는, 적어도 하나의 기계 판독 가능 매체.
실시예 99에 있어서, 실시예 96 내지 실시예 98 중 임의의 하나 이상에서, 상기 부모 노드의 트리-레벨에 기초하여 상기 스필 값의 부분을 반환하는 동작은 미리 설정된 배분을 상기 스필 값에 적용하는 동작으로서, 상기 미리 설정된 배분은 상기 트리의 각각의 레벨에 적용되는 상기 스필 값의 부분을 한정하는, 상기 적용하는 동작; 및 상기 미리 설정된 배분 및 상기 부모 노드의 트리-레벨에 대응하는 상기 스필 값의 부분을 반환하는 동작을 포함하는, 적어도 하나의 기계 판독 가능 매체.
실시예 100에 있어서, 실시예 99에서, 상기 미리-설정된 배분은 상기 트리-레벨의 적어도 일부에 대한 자식 노드의 최대 개수를 한정하는, 적어도 하나의 기계 판독 가능 매체.
실시예 101에 있어서, 실시예 99 내지 실시예 100 중 임의의 하나 이상에서, 상기 미리 설정된 배분은 상기 트리의 최대 깊이를 한정하는, 적어도 하나의 기계 판독 가능 매체.
실시예 102에 있어서, 실시예 99 내지 실시예 101 중 임의의 하나 이상에서, 상기 미리 설정된 배분은 비트 카운트의 시퀀스를 한정하고, 각각의 비트 카운트는 비트의 수를 지정하고, 상기 시퀀스는 낮은 트리-레벨로부터 높은 트리 레벨로 순서화되되, 가장 낮은 트리-레벨의 스필 값 부분이 상기 스필 값의 시작에서 시작하는 제1 비트 카운트와 동일한 비트의 수와 같고, n번째 트리-레벨의 스필 값 부분이 제1 비트 카운트에서 시작하고 n에서 1을 뺀 비트 카운트에서 끝나는 비트 카운트의 합의 스필 값으로 오프셋을 갖는 비트 카운트의 시퀀스에서 n번째 비트 카운트와 같도록 순서화된, 적어도 하나의 기계 판독 가능 매체.
실시예 103에 있어서, 실시예 94 내지 실시예 102 중 임의의 하나 이상에서, 상기 동작은 상기 스필 동작의 동작 후에 상기 자식 노드의 메트릭이 임계값을 초과한 것에 응답하여 자식 노드에 제2 스필 동작을 수행하는 동작을 포함하는, 적어도 하나의 기계 판독 가능 매체.
실시예 104에 있어서, 실시예 89 내지 실시예 103 중 임의의 하나 이상에서, 상기 동작은 상기 트리의 노드를 압축하는 동작을 포함하는, 적어도 하나의 기계 판독 가능 매체.
실시예 105에 있어서, 실시예 104에서, 상기 노드를 압축하는 동작은 키 압축을 수행하는 동작을 포함하고, 상기 키 압축은 상기 노드에 대한 kvset의 시퀀스로부터 kvset의 서브세트를 선택하는 동작으로서, 상기 kvset의 서브세트는 연속적인 kvset를 포함하는, 상기 선택하는 동작; 충돌 키 세트를 찾는 동작으로서, 상기 충돌 키 세트의 멤버는 상기 노드에 대한 kvset의 시퀀스에서 적어도 2개의 kvset 내의 키 엔트리를 포함하는, 상기 찾는 동작; 상기 충돌 키 세트의 각각의 멤버에 대한 가장 최근의 키 엔트리를 새로운 kvset에 추가하는 동작; 상기 충돌 키 세트에 없는 상기 kvset의 서브세트의 멤버에 있는 각각의 키에 대한 엔트리를 상기 새로운 kvset에 추가하는 동작; 및 상기 새로운 kvset를 상기 노드에 기록하고 상기 kvset의 서브세트를 제거함으로써 상기 kvset의 서브세트를 상기 새로운 kvset로 교체하는 동작을 포함하는, 적어도 하나의 기계 판독 가능 매체.
실시예 106에 있어서, 실시예 105에서, 상기 노드는 자식을 갖지 않고, 상기 kvset의 서브세트는 가장 오래된 kvset를 포함하고, 상기 충돌 키 세트의 각각의 멤버에 대한 가장 최근의 키 엔트리를 상기 새로운 kvset에 기록하고, 상기 충돌 키 세트에 없는 상기 kvset의 서브세트의 멤버에 있는 각각의 키에 대한 엔트리를 상기 새로운 kvset에 기록하는 동작은 삭제 표시를 포함하는 임의의 키 엔트리를 생략하는 동작을 포함하는, 적어도 하나의 기계 판독 가능 매체.
실시예 107에 있어서, 실시예 105 내지 실시예 106 중 임의의 하나 이상에서, 상기 노드는 자식을 갖지 않고, 상기 kvset의 서브세트는 가장 오래된 kvset를 포함하고, 상기 충돌 키 세트의 각각의 멤버에 대한 가장 최근의 키 엔트리를 상기 새로운 kvset에 기록하고, 상기 충돌 키 세트에 없는 상기 kvset의 서브세트의 멤버에 있는 각각의 키에 대한 엔트리를 상기 새로운 kvset에 기록하는 동작은 만료된 임의의 키 엔트리를 생략하는 동작을 포함하는, 적어도 하나의 기계 판독 가능 매체.
실시예 108에 있어서, 실시예 105 내지 실시예 107 중 임의의 하나 이상에서, 상기 노드를 압축하는 동작은 값 압축을 수행하는 동작을 포함하고, kvset의 키 및 값은 개별적인 어드레싱 가능한 블록으로 저장되고, 상기 값 압축은 상기 새로운 kvset에 대한 키 엔트리의 값 참조를 상기 새로운 블록으로 복사하는 동작, 및 상기 kvset의 서브세트에 대응하는 블록을 삭제하는 동작을 포함하는, 적어도 하나의 기계 판독 가능 매체.
실시예 109에 있어서, 실시예 104 내지 실시예 108 중 임의의 하나 이상에서, 상기 노드는 자식 노드를 포함하고, 상기 노드를 압축하는 동작은 메트릭이 임계값 미만으로 떨어지게 하고, 상기 동작은 상기 메트릭이 상기 임계값 미만으로 떨어진 것에 응답하여 상기 자식 노드에 호이스트 압축을 수행하는 동작을 포함하는, 적어도 하나의 기계 판독 가능 매체.
실시예 110에 있어서, 실시예 109에서, 상기 호이스트 압축은, 새로운 kvset를 상기 자식 노드에 기록하지 않고 상기 새로운 kvset를 생성하기 위해 상기 자식 노드에 키 및 값 압축을 수행하는 동작; 및 상기 노드의 kvset의 시퀀스에 대해 가장 오래된 위치에 있는 상기 노드에 상기 새로운 kvset를 기록하는 동작을 포함하는, 적어도 하나의 기계 판독 가능 매체.
실시예 111에 있어서, 실시예 104 내지 실시예 110 중 임의의 하나 이상에서, 상기 압축은 트리거에 응답하여 수행되는, 적어도 하나의 기계 판독 가능 매체.
실시예 112에 있어서, 실시예 111에서, 상기 트리거는 시간 기간의 만료인, 적어도 하나의 기계 판독 가능 매체.
실시예 113에 있어서, 실시예 111 내지 실시예 112 중 임의의 하나 이상에서, 상기 트리거는 상기 노드의 메트릭인, 적어도 하나의 기계 판독 가능 매체.
실시예 114에 있어서, 실시예 113에서, 상기 메트릭은 상기 노드의 kvset의 총 크기인, 적어도 하나의 기계 판독 가능 매체.
실시예 115에 있어서, 실시예 113 내지 실시예 114 중 임의의 하나 이상에서, 상기 메트릭은 상기 노드의 kvset의 수인, 적어도 하나의 기계 판독 가능 매체.
실시예 116에 있어서, 실시예 113 내지 실시예 115 중 임의의 하나 이상에서, 상기 메트릭은 참조되지 않은 값의 총 크기인, 적어도 하나의 기계 판독 가능 매체.
실시예 117에 있어서, 실시예 113 내지 실시예 116 중 임의의 하나 이상에서, 상기 메트릭은 참조되지 않은 값의 수인, 적어도 하나의 기계 판독 가능 매체.
실시예 118에 있어서, 실시예 89 내지 실시예 117 중 임의의 하나 이상에서, ksvet가 상기 적어도 하나의 저장 매체에 기록될 때, 상기 kvset는 불변인, 적어도 하나의 기계 판독 가능 매체.
실시예 119에 있어서, 실시예 118에서, 상기 kvset의 키 엔트리는 기본 키-블록 및 0개 이상의 확장 키-블록을 포함하는 키-블록의 세트에 저장되고, 상기 키-블록 세트의 멤버는 상기 적어도 하나의 저장 매체를 위한 미디어 블록에 대응하고, 각각의 키-블록은 이를 키-블록으로서 식별하기 위한 헤더를 포함하고; 값은 값-블록의 세트에 저장되고, 상기 값-블록의 세트의 멤버는 상기 적어도 하나의 저장 매체를 위한 미디어 블록에 대응하고, 각각의 값-블록은 이를 값-블록으로서 식별하기 위한 헤더를 포함하는, 적어도 하나의 기계 판독 가능 매체.
실시예 120에 있어서, 실시예 119에서 값 블록은 값들 사이를 분리함이 없이 하나 이상의 값에 대한 저장 구획을 포함하는, 적어도 하나의 기계 판독 가능 매체.
실시예 121에 있어서, 실시예 119 내지 실시예 120 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 kvset의 하나 이상의 확장 키-블록에 대한 미디어 블록 식별자의 리스트를 포함하는, 적어도 하나의 기계 판독 가능 매체.
실시예 122에 있어서, 실시예 119 내지 실시예 121 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 값 블록의 세트 내의 값-블록에 대한 미디어 블록 식별자의 리스트를 포함하는, 적어도 하나의 기계 판독 가능 매체.
실시예 123에 있어서, 실시예 119 내지 실시예 122 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 kvset의 키-트리에서 가장 낮은 키의 사본을 포함하고, 상기 가장 낮은 키는 상기 트리의 미리 설정된 정렬 순서에 의해 결정되는, 적어도 하나의 기계 판독 가능 매체.
실시예 124에 있어서, 실시예 119 내지 실시예 123 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 kvset의 키-트리에서 가장 높은 키의 사본을 포함하고, 상기 가장 높은 키는 상기 트리의 미리 설정된 정렬 순서에 의해 결정되는, 적어도 하나의 기계 판독 가능 매체.
실시예 125에 있어서, 실시예 119 내지 실시예 124 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 kvset의 키-트리에 대한 헤더를 포함하는, 적어도 하나의 기계 판독 가능 매체.
실시예 126에 있어서, 실시예 119 내지 실시예 125 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 kvset의 키-트리에 대한 미디어 블록 식별자의 리스트를 포함하는, 적어도 하나의 기계 판독 가능 매체.
실시예 127에 있어서, 실시예 119 내지 실시예 126 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 kvset의 블룸 필터에 대한 블룸 필터 헤더를 포함하는, 적어도 하나의 기계 판독 가능 매체.
실시예 128에 있어서, 실시예 119 내지 실시예 127 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 kvset의 블룸 필터에 대한 미디어 블록 식별자의 리스트를 포함하는, 적어도 하나의 기계 판독 가능 매체.
실시예 129에 있어서, 실시예 119 내지 실시예 128 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 kvset에 대한 메트릭의 세트를 포함하는, 적어도 하나의 기계 판독 가능 매체.
실시예 130에 있어서, 실시예 129에서, 상기 메트릭의 세트는 상기 kvset에 저장된 키의 총 수를 포함하는, 적어도 하나의 기계 판독 가능 매체.
실시예 131에 있어서, 실시예 129 내지 실시예 130 중 임의의 하나 이상에서, 상기 메트릭의 세트는 상기 kvset에 저장된 삭제 표시 값을 갖는 다수의 키를 포함하는, 적어도 하나의 기계 판독 가능 매체.
실시예 132에 있어서, 실시예 129 내지 실시예 131 중 임의의 하나 이상에서, 상기 메트릭의 세트는 상기 kvset에 저장된 키에 대한 모든 키 길이의 합을 포함하는, 적어도 하나의 기계 판독 가능 매체.
실시예 133에 있어서, 실시예 129 내지 실시예 132 중 임의의 하나 이상에서, 상기 메트릭의 세트는 상기 kvset에 저장된 모든 키에 대한 키 값의 카운트를 포함하는, 적어도 하나의 기계 판독 가능 매체.
실시예 134에 있어서, 실시예 129 내지 실시예 133 중 임의의 하나 이상에서, 상기 메트릭의 세트는 상기 kvset의 값-블록에서 참조되지 않은 데이터의 양을 포함하는, 적어도 하나의 기계 판독 가능 매체.
실시예 135에 있어서, 실시예 89 내지 실시예 134 중 임의의 하나 이상에서, 상기 동작은 탐색 키를 포함하는 탐색 요청을 수신하는 동작; 및 전체 트리 중 적어도 하나가 순회되거나 또는 상기 탐색 키의 제1 인스턴스가 상기 트리의 노드의 kvset에서 발견될 때까지 상기 트리를 순회하는 동작을 포함하되, 상기 트리를 순회하는 동작은, 상기 트리의 루트-노드에서 시작하는 동작; 및 순회되는 각각의 노드에 대해, 가장 새로운 kvset로부터 가장 오래된 kvset까지 상기 노드의 kvset를 조사하는 동작; 상기 탐색 키가 발견될 때 발견된 표시를 반환하고 순회를 중지하는 동작; 및 상기 탐색 키가 발견되지 않을 때 자식 노드로 순회를 계속하는 동작으로서, 상기 자식 노드는 존재하고 상기 자식 노드는 상기 탐색 키로부터 유도된 스필 값 및 상기 순회되는 노드의 트리-레벨에 의해 식별되는, 상기 순회를 계속하는 동작을 포함하는, 적어도 하나의 기계 판독 가능 매체.
실시예 136에 있어서, 실시예 135에서, 상기 발견된 표시는 조사된 kvset에서 상기 탐색 키의 키-엔트리에 대응하는 값을 포함하는, 적어도 하나의 기계 판독 가능 매체.
실시예 137에 있어서, 실시예 135 내지 실시예 136 중 임의의 하나 이상에서, 상기 순회가 종료된 후에 상기 탐색 키가 발견되지 않으면, 발견되지 않은 표시를 반환하는 동작을 선택적으로 포함하는, 적어도 하나의 기계 판독 가능 매체.
실시예 138에 있어서, 실시예 137에서, 상기 발견된 표시는 상기 키-엔트리가 삭제 표시를 포함할 때 발견되지 않은 표시와 동일한, 적어도 하나의 기계 판독 가능 매체.
실시예 139에 있어서, 실시예 135 내지 실시예 138 중 임의의 하나 이상에서, 상기 kvset를 조사하는 동작은 주어진 kvset에 대해 상기 kvset의 블룸 필터를 사용하여 상기 탐색 키가 상기 kvset에 있을 수 있는지 여부를 결정하는 동작을 포함하는, 적어도 하나의 기계 판독 가능 매체.
실시예 140에 있어서, 실시예 135 내지 실시예 139 중 임의의 하나 이상에서, 상기 kvset를 조사하는 동작은 주어진 kvset에 대해 상기 탐색 키가 상기 kvset의 최대 키 값보다 작거나 같다고 결정하는 동작을 포함하는, 적어도 하나의 기계 판독 가능 매체.
실시예 141에 있어서, 실시예 135 내지 실시예 140 중 임의의 하나 이상에서, 상기 kvset를 조사하는 동작은 주어진 kvset에 대해 상기 탐색 키가 상기 kvset의 최소 키 값보다 크거나 같다고 결정하는 동작을 포함하는, 적어도 하나의 기계 판독 가능 매체.
실시예 142에 있어서, 실시예 89 내지 실시예 141 중 임의의 하나 이상에서, 상기 동작은, 키 기준을 포함하는 스캔 요청을 수신하는 동작; 노드 세트의 각각의 kvset로부터 상기 키 기준에 의해 지정된 키를 상기 트리로부터 발견된 세트로 수집하는 동작; 삭제 표시가 아닌 키에 대한 가장 최근의 엔트리에 대응하는 키-값 쌍을 유지함으로써 상기 발견된 세트를 결과 세트로 줄이는 동작; 및 상기 결과 세트를 반환하는 동작을 포함하는, 적어도 하나의 기계 판독 가능 매체.
실시예 143에 있어서, 실시예 142에서, 상기 노드 세트는 상기 트리의 모든 노드를 포함하는, 적어도 하나의 기계 판독 가능 매체.
실시예 144에 있어서, 실시예 142 내지 실시예 143 중 임의의 하나 이상에서, 상기 키 기준은 키 접두부이고, 상기 노드-세트는 상기 키 접두부에 대응하는 각각의 노드를 포함하는, 적어도 하나의 기계 판독 가능 매체.
실시예 145에 있어서, 실시예 144에서, 상기 키 접두부와 노드의 대응은 상기 키 접두부로부터 유도된 스필 값의 부분에 의해 결정되고, 상기 스필 값의 부분은 주어진 노드의 트리-레벨에 의해 결정되는, 적어도 하나의 기계 판독 가능 매체.
실시예 146에 있어서, 실시예 142 내지 실시예 145 중 임의의 하나 이상에서, 상기 기준은 범위인, 적어도 하나의 기계 판독 가능 매체.
실시예 147은, 방법으로서, 적어도 하나의 기계 판독 가능 매체에 트리로 조직된 키-값 데이터 구조로 저장하기 위한 키-값 세트(kvset)를 수신하는 동작으로서, 상기 kvset는 고유한 키를 값으로 매핑하는 매핑을 포함하고, 상기 kvset의 키 및 값은 불변이며, 상기 트리의 노드는 kvset의 시간 순서화된 시퀀스를 포함하는, 상기 수신하는 동작; 및 상기 트리의 루트-노드의 kvset의 시퀀스에 상기 kvset를 기록하는 동작을 포함하는, 방법이다.
실시예 148에 있어서, 실시예 147에서, 상기 키-값 데이터 구조로 저장하기 위한 키 및 대응하는 값을 수신하는 동작; 상기 키 및 상기 값을 예비 kvset에 배치하는 동작으로서, 상기 예비 kvset는 변경 가능한, 상기 배치하는 동작; 및 메트릭에 도달할 때 상기 kvset를 상기 키-값 데이터 구조에 기록하는 동작을 선택적으로 포함하는, 방법.
실시예 149에 있어서, 실시예 148에서, 상기 메트릭은 예비 루트 노드의 크기인, 방법.
실시예 150에 있어서, 실시예 148 내지 실시예 149 중 임의의 하나 이상에서, 상기 예비 루트 노드에 기록하는 속도는 임계값을 초과하고, 상기 키-값 데이터 구조에 기록 요청을 스로틀링하는 동작을 포함하는, 방법.
실시예 151에 있어서, 실시예 148 내지 실시예 150 중 임의의 하나 이상에서, 상기 메트릭은 경과된 시간인, 방법.
실시예 152에 있어서, 실시예 147 내지 실시예 151 중 임의의 하나 이상에서, 제2 kvset를 수신하는 동작; 상기 루트-노드에 대한 상기 kvset의 시퀀스에 상기 제2 kvset를 기록하는 동작; 및 상기 제2 kvset를 기록한 것에 응답하여 상기 루트-노드의 메트릭이 임계값을 초과한 것에 응답하여 상기 루트 노드에 스필 동작을 수행하는 동작을 선택적으로 포함하는, 방법.
실시예 153에 있어서, 실시예 152에서, 상기 스필 동작은 상기 kvset의 시퀀스의 서브세트를 선택하는 동작으로서, 상기 서브세트는 가장 오래된 kvset를 포함하는 연속적인 kvset를 포함하는, 상기 선택하는 동작; 상기 kvset의 서브세트의 각각의 kvset에서 각각의 키에 대한 자식-매핑을 계산하는 동작으로서, 상기 자식 매핑은 부모 노드의 트리-레벨과 특정 키에 기초하여 상기 부모 노드로부터 자식 노드로 매핑하는 결정적 맵인, 상기 계산하는 동작; 각각의 kvset 세트가 정확히 하나의 자식 노드로 매핑되는 상기 자식-매핑에 기초하여 키 및 대응하는 값을 kvset에 수집하는 동작; 각각의 자식 노드에 있는 kvset의 각각의 시퀀스에서 가장 새로운 위치에 상기 kvset를 기록하는 동작; 및 상기 루트 노드로부터 상기 kvset의 서브세트를 제거하는 동작을 포함하는, 방법.
실시예 154에 있어서, 실시예 153에서, 상기 자식-매핑을 계산하는 동작은 키의 부분을 추출하는 동작; 상기 키의 부분으로부터 스필 값을 유도하는 동작; 및 상기 부모 노드의 트리-레벨에 기초하여 상기 스필 값의 부분을 반환하는 동작을 포함하는, 방법.
실시예 155에 있어서, 실시예 154에서, 상기 키의 부분은 전체 키인, 방법.
실시예 156에 있어서, 실시예 154 내지 실시예 155 중 임의의 하나 이상에서, 상기 키의 부분으로부터 상기 스필 값을 유도하는 동작은 상기 키의 부분의 해시를 수행하는 동작을 포함하는, 방법.
실시예 157에 있어서, 실시예 154 내지 실시예 156 중 임의의 하나 이상에서, 상기 부모 노드의 트리-레벨에 기초하여 상기 스필 값의 부분을 반환하는 동작은 미리 설정된 배분을 상기 스필 값에 적용하는 동작으로서, 상기 미리 설정된 배분은 상기 트리의 각각의 레벨에 적용되는 상기 스필 값의 부분을 한정하는, 상기 적용하는 동작; 및 상기 미리 설정된 배분 및 상기 부모 노드의 트리-레벨에 대응하는 상기 스필 값의 부분을 반환하는 동작을 포함하는, 방법.
실시예 158에 있어서, 실시예 157에서, 상기 미리-설정된 배분은 상기 트리-레벨의 적어도 일부에 대한 자식 노드의 최대 수를 한정하는, 방법.
실시예 159에 있어서, 실시예 157 내지 실시예 158 중 임의의 하나 이상에서, 상기 미리 설정된 배분은 상기 트리의 최대 깊이를 한정하는, 방법.
실시예 160에 있어서, 실시예 157 내지 실시예 159 중 임의의 하나 이상에서, 상기 미리 설정된 배분은 비트 카운트의 시퀀스를 한정하고, 각각의 비트 카운트는 비트의 수를 지정하고, 상기 시퀀스는 낮은 트리-레벨로부터 높은 트리 레벨로 순서화되되, 가장 낮은 트리-레벨의 스필 값 부분이 상기 스필 값의 시작에서 시작하는 제1 비트 카운트와 동일한 비트의 수와 같고, n번째 트리-레벨의 스필 값 부분이 제1 비트 카운트에서 시작하고 n에서 1을 뺀 비트 카운트에서 끝나는 비트 카운트의 합의 스필 값으로 오프셋을 갖는 비트 카운트의 시퀀스에서 n번째 비트 카운트와 같도록 순서화된, 방법.
실시예 161에 있어서, 실시예 152 내지 실시예 160 중 임의의 하나 이상에서, 상기 스필 동작의 동작 후에 상기 자식 노드의 메트릭이 임계값을 초과한 것에 응답하여 자식 노드에 제2 스필 동작을 수행하는 동작을 선택적으로 포함하는, 방법.
실시예 162에 있어서, 실시예 147 내지 실시예 161 중 임의의 하나 이상에서, 상기 트리의 노드를 압축하는 동작을 선택적으로 포함하는, 방법.
실시예 163에 있어서, 실시예 162에서, 상기 노드를 압축하는 동작은 키 압축을 수행하는 동작을 포함하고, 상기 키 압축은 상기 노드에 대한 kvset의 시퀀스로부터 kvset의 서브세트를 선택하는 동작으로서, 상기 kvset의 서브세트는 연속적인 kvset를 포함하는, 상기 선택하는 동작; 충돌 키 세트를 찾는 동작으로서, 상기 충돌 키 세트의 멤버는 상기 노드에 대한 상기 kvset의 시퀀스에서 적어도 2개의 kvset 내의 키 엔트리를 포함하는, 상기 찾는 동작; 상기 충돌 키 세트의 각각의 멤버에 대한 가장 최근의 키 엔트리를 새로운 kvset에 추가하는 동작; 상기 충돌 키 세트에 없는 상기 kvset의 서브세트의 멤버에 있는 각각의 키에 대한 엔트리를 상기 새로운 kvset에 추가하는 동작; 및 상기 새로운 kvset를 상기 노드에 기록하고 상기 kvset의 서브세트를 제거함으로써 상기 kvset의 서브세트를 상기 새로운 kvset로 교체하는 동작을 포함하는, 방법.
실시예 164에 있어서, 실시예 163에서, 상기 노드는 자식을 갖지 않고, 상기 kvset의 서브세트는 가장 오래된 kvset를 포함하고, 상기 충돌 키 세트의 각각의 멤버에 대한 가장 최근의 키 엔트리를 상기 새로운 kvset에 기록하고, 상기 충돌 키 세트에 없는 상기 kvset의 서브세트의 멤버에 있는 각각의 키에 대한 엔트리를 상기 새로운 kvset에 기록하는 동작은 삭제 표시를 포함하는 임의의 키 엔트리를 생략하는 동작을 포함하는, 방법.
실시예 165에 있어서, 실시예 163 내지 실시예 164 중 임의의 하나 이상에서, 상기 노드는 자식을 갖지 않고, 상기 kvset의 서브세트는 가장 오래된 kvset를 포함하고, 상기 충돌 키 세트의 각각의 멤버에 대해 가장 최근의 키 엔트리를 상기 새로운 kvset에 기록하고, 상기 충돌 키 세트에 없는 상기 kvset의 서브세트의 멤버에 있는 각각의 키에 대한 엔트리를 상기 새로운 kvset에 기록하는 동작은 만료된 임의의 키 엔트리를 생략하는 동작을 포함하는, 방법.
실시예 166에 있어서, 실시예 163 내지 실시예 165 중 임의의 하나 이상에서, 상기 노드를 압축하는 동작은 값 압축을 수행하는 동작을 포함하고, kvset의 키 및 값은 개별적인 어드레싱 가능한 블록으로 저장되고, 상기 값 압축은 상기 새로운 kvset에 대한 키 엔트리의 값 참조를 새로운 블록에 복사하는 동작, 및 상기 kvset의 서브세트에 대응하는 블록을 삭제하는 동작을 포함하는, 방법.
실시예 167에 있어서, 실시예 162 내지 실시예 166 중 임의의 하나 이상에서, 상기 노드는 자식 노드를 포함하고, 상기 노드를 압축하는 동작은 메트릭이 임계값 미만으로 떨어지게 하고, 상기 메트릭이 상기 임계값 미만으로 떨어진 것에 응답하여 상기 자식 노드에 호이스트 압축을 수행하는 동작을 포함하는, 방법.
실시예 168에 있어서, 실시예 167에서, 상기 호이스트 압축은 새로운 kvset를 상기 자식 노드에 기록하지 않고 상기 새로운 kvset를 생성하기 위해 상기 자식 노드에 키 및 값 압축을 수행하는 동작; 및 상기 노드의 kvset의 시퀀스에 대해 가장 오래된 위치에 있는 상기 노드에 상기 새로운 kvset를 기록하는 동작을 포함하는, 방법.
실시예 169에 있어서, 실시예 162 내지 실시예 168 중 임의의 하나 이상에서, 상기 압축은 트리거에 응답하여 수행되는, 방법.
실시예 170에 있어서, 실시예 169에서, 상기 트리거는 시간 기간의 만료인, 방법.
실시예 171에 있어서, 실시예 169 내지 실시예 170 중 임의의 하나 이상에서, 상기 트리거는 상기 노드의 메트릭인, 방법.
실시예 172에 있어서, 실시예 171에서, 상기 메트릭은 상기 노드의 kvset의 총 크기인, 방법.
실시예 173에 있어서, 실시예 171 내지 실시예 172 중 임의의 하나 이상에서, 상기 메트릭은 상기 노드의 kvset의 수인, 방법.
실시예 174에 있어서, 실시예 171 내지 실시예 173 중 임의의 하나 이상에서, 상기 메트릭은 참조되지 않은 값의 총 크기인, 방법.
실시예 175에 있어서, 실시예 171 내지 실시예 174 중 임의의 하나 이상에서, 상기 메트릭은 참조되지 않은 값의 수인, 방법.
실시예 176에 있어서, 실시예 147 내지 실시예 175 중 임의의 하나 이상에서, ksvet가 상기 적어도 하나의 저장 매체에 기록될 때, 상기 kvset는 불변인, 방법.
실시예 177에 있어서, 실시예 176에서, 상기 kvset의 키 엔트리는 기본 키-블록 및 0개 이상의 확장 키-블록을 포함하는 키-블록의 세트로 저장되고, 상기 키-블록 세트의 멤버는 상기 적어도 하나의 저장 매체를 위한 미디어 블록에 대응하고, 각각의 키-블록은 이를 키-블록으로서 식별하기 위한 헤더를 포함하고; 값은 값-블록의 세트에 저장되고, 상기 값-블록의 세트의 멤버는 상기 적어도 하나의 저장 매체를 위한 미디어 블록에 대응하고, 각각의 값-블록은 이를 값-블록으로서 식별하기 위한 헤더를 포함하는, 방법.
실시예 178에 있어서, 실시예 177에서 값 블록은 값들 사이를 분리함이 없이 하나 이상의 값에 대한 저장 구획을 포함하는, 방법.
실시예 179에 있어서, 실시예 177 내지 실시예 178 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 kvset의 하나 이상의 확장 키-블록에 대한 미디어 블록 식별자의 리스트를 포함하는, 방법.
실시예 180에 있어서, 실시예 177 내지 실시예 179 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 값 블록의 세트 내의 값-블록에 대한 미디어 블록 식별자의 리스트를 포함하는, 방법.
실시예 181에 있어서, 실시예 177 내지 실시예 180 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 kvset의 키-트리에서 가장 낮은 키의 사본을 포함하고, 상기 가장 낮은 키는 상기 트리의 미리 설정된 정렬 순서에 의해 결정되는, 방법.
실시예 182에 있어서, 실시예 177 내지 실시예 181 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 kvset의 키-트리에서 가장 높은 키의 사본을 포함하고, 상기 가장 높은 키는 상기 트리의 미리 설정된 정렬 순서에 의해 결정되는, 방법.
실시예 183에 있어서, 실시예 177 내지 실시예 182 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 kvset의 키-트리에 대한 헤더를 포함하는, 방법.
실시예 184에 있어서, 실시예 177 내지 실시예 183 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 kvset의 키-트리에 대한 미디어 블록 식별자의 리스트를 포함하는, 방법.
실시예 185에 있어서, 실시예 177 내지 실시예 184 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 kvset의 블룸 필터에 대한 블룸 필터 헤더를 포함하는, 방법.
실시예 186에 있어서, 실시예 177 내지 실시예 185 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 kvset의 블룸 필터에 대한 미디어 블록 식별자의 리스트를 포함하는, 방법.
실시예 187에 있어서, 실시예 177 내지 실시예 186 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 kvset에 대한 메트릭의 세트를 포함하는, 방법.
실시예 188에 있어서, 실시예 187에서, 상기 메트릭의 세트는 상기 kvset에 저장된 키의 총 개수를 포함하는, 방법.
실시예 189에 있어서, 실시예 187 내지 실시예 188 중 임의의 하나 이상에서, 상기 메트릭의 세트는 상기 kvset에 저장된 삭제 표시 값을 갖는 다수의 키를 포함하는, 방법.
실시예 190에 있어서, 실시예 187 내지 실시예 189 중 임의의 하나 이상에서, 상기 메트릭의 세트는 상기 kvset에 저장된 키에 대한 모든 키 길이의 합을 포함하는, 방법.
실시예 191에 있어서, 실시예 187 내지 실시예 190 중 임의의 하나 이상에서, 상기 메트릭의 세트는 상기 kvset에 저장된 모든 키에 대한 키 값의 카운트를 포함하는, 방법.
실시예 192에 있어서, 실시예 187 내지 실시예 191 중 임의의 하나 이상에서, 상기 메트릭의 세트는 상기 kvset의 값-블록에서 참조되지 않은 데이터의 양을 포함하는, 방법.
실시예 193에 있어서, 실시예 147 내지 실시예 192 중 임의의 하나 이상에서, 탐색 키를 포함하는 탐색 요청을 수신하는 동작; 및 전체 트리 중 적어도 하나가 순회되거나 또는 상기 탐색 키의 제1 인스턴스가 상기 트리의 노드의 kvset에서 발견될 때까지 상기 트리를 순회하는 동작을 선택적으로 포함하되, 상기 트리를 순회하는 동작은, 상기 트리의 루트-노드에서 시작하는 동작; 및 순회되는 각각의 노드에 대해, 가장 새로운 kvset로부터 가장 오래된 kvset까지 상기 노드의 kvset를 조사하는 동작; 상기 탐색 키가 발견될 때 발견된 표시를 반환하고 순회를 중지하는 동작; 및 상기 탐색 키가 발견되지 않을 때 자식 노드로 순회를 계속하는 동작으로서, 상기 자식 노드는 존재하고 상기 자식 노드는 상기 탐색 키로부터 유도된 스필 값 및 순회되는 상기 노드의 트리-레벨에 의해 식별되는, 상기 순회를 계속하는 동작을 포함하는, 방법.
실시예 194에 있어서, 실시예 193에서, 상기 발견된 표시는 조사된 kvset에서 상기 탐색 키의 키-엔트리에 대응하는 값을 포함하는, 방법.
실시예 195에 있어서, 실시예 193 내지 실시예 194 중 임의의 하나 이상에서, 순회가 종료된 후에 상기 탐색 키가 발견되지 않으면 발견되지 않은 표시를 반환하는 동작을 선택적으로 포함하는, 방법.
실시예 196에 있어서, 실시예 195에서, 상기 발견된 표시는 상기 키-엔트리가 삭제 표시를 포함할 때 발견되지 않은 표시와 동일한, 방법.
실시예 197에 있어서, 실시예 193 내지 실시예 196 중 임의의 하나 이상에서, 상기 kvset를 조사하는 동작은 주어진 kvset에 대해 상기 kvset의 블룸 필터를 사용하여 상기 탐색 키가 상기 kvset에 있을 수 있는지 여부를 결정하는, 방법.
실시예 198에 있어서, 실시예 193 내지 실시예 197 중 임의의 하나 이상에서, 상기 kvset를 조사하는 동작은, 주어진 kvset에 대해, 상기 탐색 키가 상기 kvset의 최대 키 값보다 작거나 같다고 결정하는 동작을 포함하는, 방법.
실시예 199에 있어서, 실시예 193 내지 실시예 198의 임의의 하나 이상에서 상기 kvset를 조사하는 동작은, 주어진 kvset에 대해, 상기 탐색 키가 상기 kvset의 최소 키 값보다 크거나 같다고 결정하는 동작을 포함하는, 방법.
실시예 200에 있어서, 실시예 147 내지 실시예 199 중 임의의 하나 이상에서, 키 기준을 포함하는 스캔 요청을 수신하는 동작; 노드 세트의 각각의 kvset로부터 상기 키 기준에 의해 지정된 키를 상기 트리로부터 발견된 세트로 수집하는 동작; 삭제 표시가 아닌 키에 대한 가장 최근의 엔트리에 대응하는 키-값 쌍을 유지함으로써 상기 발견된 세트를 결과 세트로 줄이는 동작; 및 상기 결과 세트를 반환하는 동작을 선택적으로 포함하는, 방법.
실시예 201에 있어서, 실시예 200에서, 상기 노드 세트는 상기 트리의 모든 노드를 포함하는, 방법.
실시예 202에 있어서, 실시예 200 내지 실시예 201 중 임의의 하나 이상에서, 상기 기준은 키 접두부이고, 상기 노드-세트는 상기 키-접두부에 대응하는 각각의 노드를 포함하는, 방법.
실시예 203에 있어서, 실시예 202에서, 상기 키 접두부와 노드의 대응은 상기 키 접두부로부터 유도된 스필 값의 부분에 의해 결정되고, 상기 스필 값의 부분은 주어진 노드의 트리-레벨에 의해 결정되는, 방법.
실시예 204에 있어서, 실시예 200 내지 실시예 203의 임의의 하나 이상에서 상기 기준은 범위인, 방법.
실시예 205는, 실시예 147 내지 실시예 204의 임의의 방법을 수행하는 수단을 포함하는 시스템이다.
실시예 206은, 명령을 포함하는 적어도 하나의 기계 판독 가능 매체로서, 상기 명령은 처리 회로부에 의해 실행될 때 상기 처리 회로부로 하여금 실시예 147 내지 실시예 204 중 임의의 방법을 수행하게 하는, 적어도 하나의 기계 판독 가능 매체이다.
실시예 207은 시스템으로서, 적어도 하나의 기계 판독 가능 매체에 트리로 조직된 키-값 데이터 구조로 저장하기 위한 키-값 세트(kvset)를 수신하는 수단으로서, 상기 kvset는 고유한 키를 값으로 매핑하는 매핑을 포함하고, 상기 kvset의 키 및 값은 불변이며, 상기 트리의 노드는 kvset의 시간 순서화된 시퀀스를 포함하는, 상기 키-값 세트를 수신하는 수단; 및 상기 트리의 루트-노드의 kvset의 시퀀스에 상기 kvset를 기록하는 수단을 포함하는 시스템이다.
실시예 208에 있어서, 실시예 207에서, 상기 키-값 데이터 구조로 저장하기 위해 키 및 대응하는 값을 수신하는 수단; 상기 키 및 상기 값을 예비 kvset에 배치하는 수단으로서, 상기 예비 kvset는 변경 가능한, 상기 배치하는 수단; 및 메트릭에 도달할 때 상기 키-값 데이터 구조에 상기 kvset를 기록하는 수단을 선택적으로 포함하는, 시스템.
실시예 209에 있어서, 실시예 208에서, 상기 메트릭은 예비 루트 노드의 크기인, 시스템.
실시예 210에 있어서, 실시예 208 내지 실시예 209 중 임의의 하나 이상에서, 상기 예비 루트 노드에 기록하는 속도는 임계값을 초과하고, 상기 키-값 데이터 구조에 대한 기록 요청을 스로틀링하는 수단을 포함하는, 시스템.
실시예 211에 있어서, 실시예 208 내지 실시예 210 중 임의의 하나 이상에서, 상기 메트릭은 경과 시간인, 시스템.
실시예 212에 있어서, 실시예 207 내지 실시예 211 중 임의의 하나 이상에서, 제2 kvset를 수신하는 수단; 상기 루트-노드에 대한 kvset의 시퀀스에 상기 제2 kvset를 기록하는 수단; 및 상기 제2 kvset를 기록한 것에 응답하여 상기 루트-노드의 메트릭이 임계값을 초과한 것에 응답하여 상기 루트 노드에 스필 동작을 수행하는 수단을 선택적으로 포함하는, 시스템.
실시예 213에 있어서, 실시예 212에서, 상기 스필 동작은, kvset의 시퀀스의 서브세트를 선택하는 수단으로서, 상기 서브세트는 가장 오래된 kvset를 포함하는 연속적인 kvset를 포함하는, 상기 서브세트를 선택하는 수단; 상기 kvset의 서브세트의 각각의 kvset에 있는 각각의 키에 대한 자식-매핑을 계산하는 수단으로서, 상기 자식 매핑은 부모 노드의 트리-레벨과 특정 키에 기초하여 상기 부모 노드로부터 자식 노드로 매핑하는 결정적 맵인, 상기 계산하는 수단; 각각의 kvset 세트가 정확히 하나의 자식 노드로 매핑되는 상기 자식-매핑에 기초하여 키 및 대응하는 값을 kvset로 수집하는 수단; 각각의 자식 노드에 있는 kvset의 각각의 시퀀스에서 가장 새로운 위치에 상기 kvset를 기록하는 수단; 및 상기 루트 노드로부터 상기 kvset의 서브세트를 제거하는 수단을 포함하는, 시스템.
실시예 214에 있어서, 실시예 213에서, 상기 자식-매핑을 계산하는 수단은, 키의 부분을 추출하는 수단; 상기 키의 부분으로부터 스필 값을 유도하는 수단; 및 상기 부모 노드의 트리-레벨에 기초하여 상기 스필 값의 부분을 반환하는 수단을 포함하는, 시스템.
실시예 215에 있어서, 실시예 214에서, 상기 키의 부분은 전체 키인, 시스템.
실시예 216에 있어서, 실시예 214 내지 실시예 215 중 임의의 하나 이상에서, 상기 키의 부분으로부터 상기 스필 값을 유도하는 수단은 상기 키의 부분의 해시를 수행하는 수단을 포함하는, 시스템.
실시예 217에 있어서, 실시예 214 내지 실시예 216 중 임의의 하나 이상에서, 상기 부모 노드의 트리-레벨에 기초하여 상기 스필 값의 부분을 반환하는 수단은, 미리-설정된 배분을 상기 스필 값에 적용하는 수단으로서, 상기 미리 설정된 배분은 상기 트리의 각각의 레벨에 적용되는 상기 스필 값의 부분을 한정하는, 상기 적용하는 동작; 및 상기 미리 설정된 배분 및 상기 부모 노드의 트리-레벨에 대응하는 상기 스필 값의 부분을 반환하는 수단을 포함하는, 시스템.
실시예 218에 있어서, 실시예 217에서, 상기 미리 설정된 배분은 상기 트리-레벨의 적어도 일부에 대한 자식 노드의 최대 수를 한정하는, 시스템.
실시예 219에 있어서, 실시예 217 내지 실시예 218 중 임의의 하나 이상에서, 상기 미리 설정된 배분은 상기 트리의 최대 깊이를 한정하는, 시스템.
실시예 220에 있어서, 실시예 217 내지 실시예 219 중 임의의 하나 이상에서, 상기 미리 설정된 배분은 비트 카운트의 시퀀스를 한정하고, 각각의 비트 카운트는 비트의 수를 지정하고, 상기 시퀀스는 낮은 트리-레벨로부터 높은 트리 레벨로 순서화되되, 가장 낮은 트리-레벨의 스필 값 부분이 상기 스필 값의 시작에서 시작하는 제1 비트 카운트와 동일한 비트의 수와 같고, n번째 트리-레벨의 스필 값 부분이 제1 비트 카운트에서 시작하고 n에서 1을 뺀 비트 카운트에서 끝나는 비트 카운트의 합의 스필 값으로 오프셋을 갖는 비트 카운트의 시퀀스에서 n번째 비트 카운트와 같도록 순서화된, 시스템.
실시예 221에 있어서, 실시예 212 내지 실시예 220 중 임의의 하나 이상에서, 상기 스필 동작의 동작 후에 상기 자식 노드의 메트릭이 임계값을 초과한 것에 응답하여 자식 노드에 제2 스필 동작을 수행하는 수단을 선택적으로 포함하는, 시스템.
실시예 222에 있어서, 실시예 207 내지 실시예 221 중 임의의 하나 이상에서, 상기 트리의 노드를 압축하는 수단을 선택적으로 포함하는, 시스템.
실시예 223에 있어서, 실시예 222에서, 상기 노드를 압축하는 수단은 키 압축을 수행하는 수단을 포함하고, 상기 키 압축은 상기 노드에 대한 kvset의 시퀀스로부터 kvset의 서브세트를 선택하는 동작으로서, 상기 kvset의 서브세트는 연속적인 kvset를 포함하는, 상기 선택하는 동작; 충돌 키 세트를 찾는 동작으로서, 상기 충돌 키 세트의 멤버는 상기 노드에 대한 kvset의 시퀀스에서 적어도 2개의 kvset 내의 키 엔트리를 포함하는, 상기 찾는 동작; 상기 충돌 키 세트의 각각의 멤버에 대한 가장 최근의 키 엔트리를 새로운 kvset에 추가하는 동작; 상기 충돌 키 세트에 없는 kvset의 서브세트의 멤버에 있는 각각의 키에 대한 엔트리를 상기 새로운 kvset에 추가하는 동작; 및 상기 노드에 상기 새로운 kvset를 기록하고 상기 kvset의 서브세트를 제거함으로써 상기 kvset의 서브세트를 상기 새로운 kvset로 교체하는 동작을 포함하는, 시스템.
실시예 224에 있어서, 실시예 223에서, 상기 노드는 자식을 갖지 않고, 상기 kvset의 서브세트는 가장 오래된 kvset를 포함하고, 상기 충돌 키 세트의 각각의 멤버에 대한 가장 최근의 키 엔트리를 상기 새로운 kvset에 기록하고, 상기 충돌 키 세트에 없는 kvset의 서브세트의 멤버에 있는 각각의 키에 대한 엔트리를 상기 새로운 kvset에 기록하는 수단은 삭제 표시를 포함하는 임의의 키 엔트리를 생략하는 수단을 포함하는, 시스템.
실시예 225에 있어서, 실시예 223 내지 실시예 224 중 임의의 하나 이상에서, 상기 노드는 자식을 갖지 않고, 상기 kvset의 서브세트는 가장 오래된 kvset를 포함하고, 상기 충돌 키 세트의 각각의 멤버에 대한 가장 최근의 키 엔트리를 상기 새로운 kvset에 기록하고, 상기 충돌 키 세트에 없는 kvset의 서브세트의 멤버에 있는 각각의 키에 대한 엔트리를 상기 새로운 kvset에 기록하는 수단은 만료된 임의의 키 엔트리를 생략하는 수단을 포함하는, 시스템.
실시예 226에 있어서, 실시예 223 내지 실시예 225 중 임의의 하나 이상에서, 상기 노드를 압축하는 수단은 값 압축을 수행하는 동작을 포함하고, kvset의 키 및 값은 개별적인 어드레싱 가능한 블록으로 저장되고, 상기 값 압축은 상기 새로운 kvset에 대한 키 엔트리에 있는 값 참조를 새로운 블록으로 복사하는 동작, 및 상기 kvset의 서브세트에 대응하는 블록을 삭제하는 동작을 포함하는, 시스템.
실시예 227에 있어서, 실시예 222 내지 실시예 226 중 임의의 하나 이상에서, 상기 노드는 자식 노드를 포함하고, 상기 노드를 압축하는 수단은 상기 메트릭이 임계값 미만으로 떨어지게 하고, 상기 메트릭이 상기 임계값 미만으로 떨어진 것에 응답하여 상기 자식 노드에 호이스트 압축을 수행하는 동작을 포함하는, 시스템.
실시예 228에 있어서, 실시예 227에서, 상기 호이스트 압축은, 새로운 kvset를 상기 자식 노드에 기록하지 않고 상기 새로운 kvset를 생성하기 위해 상기 자식 노드에 키 및 값 압축을 수행하는 동작; 및 상기 노드의 kvset의 시퀀스에 대해 가장 오래된 위치에 있는 상기 노드에 상기 새로운 kvset를 기록하는 동작을 포함하는, 시스템.
실시예 229에 있어서, 실시예 222 내지 실시예 228 중 임의의 하나 이상에서, 상기 압축은 트리거에 응답하여 수행되는, 시스템.
실시예 230에 있어서, 실시예 229에서, 상기 트리거는 시간 기간의 만료인, 시스템.
실시예 231에 있어서, 실시예 229 내지 실시예 230 중 임의의 하나 이상에서, 상기 트리거는 상기 노드의 메트릭인, 시스템.
실시예 232에 있어서, 실시예 231에서, 상기 메트릭은 상기 노드의 kvset의 총 크기인, 시스템.
실시예 233에 있어서, 실시예 231 내지 실시예 232 중 임의의 하나 이상에서, 상기 메트릭은 상기 노드의 kvset의 수인, 시스템.
실시예 234에 있어서, 실시예 231 내지 실시예 233 중 임의의 하나 이상에서, 상기 메트릭은 참조되지 않은 값의 총 크기인, 시스템.
실시예 235에 있어서, 실시예 231 내지 실시예 234 중 임의의 하나 이상에서, 상기 메트릭은 참조되지 않은 값의 수인, 시스템.
실시예 236에 있어서, 실시예 207 내지 실시예 235 중 임의의 하나 이상에서, ksvet가 적어도 하나의 저장 매체에 기록될 때, 상기 kvset는 불변인, 시스템.
실시예 237에 있어서, 실시예 236에서, 상기 kvset의 키 엔트리는 기본 키-블록 및 0개 이상의 확장 키-블록을 포함하는 키-블록의 세트에 저장되고, 상기 키-블록의 세트의 멤버는 상기 적어도 하나의 저장 매체를 위한 미디어 블록에 대응하고, 각각의 키-블록은 이를 키-블록으로서 식별하기 위한 헤더를 포함하고; 값은 값-블록의 세트에 저장되고, 상기 값-블록의 세트의 멤버는 상기 적어도 하나의 저장 매체를 위한 미디어 블록에 대응하고, 각각의 값-블록은 이를 값-블록으로서 식별하기 위한 헤더를 포함하는, 시스템.
실시예 238에 있어서, 실시예 237에서 값 블록은 값들 사이를 분리함이 없이 하나 이상의 값에 대한 저장 구획을 포함하는, 시스템.
실시예 239에 있어서, 실시예 237 내지 실시예 238 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 kvset의 하나 이상의 확장 키-블록에 대한 미디어 블록 식별자의 리스트를 포함하는, 시스템.
실시예 240에 있어서, 실시예 237 내지 실시예 239 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 값 블록의 세트에 있는 값-블록에 대한 미디어 블록 식별자의 리스트를 포함하는, 시스템.
실시예 241에 있어서, 실시예 237 내지 실시예 240 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 kvset의 키-트리에서 가장 낮은 키의 사본을 포함하고, 상기 가장 낮은 키는 상기 트리의 미리 설정된 정렬 순서에 의해 결정되는, 시스템.
실시예 242에 있어서, 실시예 237 내지 실시예 241 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 kvset의 키-트리에서 가장 높은 키의 사본을 포함하고, 상기 가장 높은 키는 상기 트리의 미리 설정된 정렬 순서에 의해 결정되는, 시스템.
실시예 243에 있어서, 실시예 237 내지 실시예 242 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 kvset의 키-트리에 대한 헤더를 포함하는, 시스템.
실시예 244에 있어서, 실시예 237 내지 실시예 243 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 kvset의 키-트리에 대한 미디어 블록 식별자의 리스트를 포함하는, 시스템.
실시예 245에 있어서, 실시예 237 내지 실시예 244 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 kvset의 블룸 필터에 대한 블룸 필터 헤더를 포함하는, 시스템.
실시예 246에 있어서, 실시예 237 내지 실시예 245 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 kvset의 블룸 필터에 대한 미디어 블록 식별자의 리스트를 포함하는, 시스템.
실시예 247에 있어서, 실시예 237 내지 실시예 246 중 임의의 하나 이상에서, 상기 기본 키-블록은 상기 kvset에 대한 메트릭의 세트를 포함하는, 시스템.
실시예 248에 있어서, 실시예 247에서, 상기 메트릭의 세트는 상기 kvset에 저장된 키의 총 개수를 포함하는, 시스템.
실시예 249에 있어서, 실시예 247 내지 실시예 248 중 임의의 하나 이상에서, 상기 메트릭의 세트는 상기 kvset에 저장된 삭제 표시 값을 갖는 다수의 키를 포함하는, 시스템.
실시예 250에 있어서, 실시예 247 내지 실시예 249 중 임의의 하나 이상에서, 상기 메트릭의 세트는 상기 kvset에 저장된 키에 대한 모든 키 길이의 합을 포함하는, 시스템.
실시예 251에 있어서, 실시예 247 내지 실시예 250 중 임의의 하나 이상에서, 상기 메트릭의 세트는 상기 kvset에 저장된 모든 키에 대한 키 값의 카운트를 포함하는, 시스템.
실시예 252에 있어서, 실시예 247 내지 실시예 251 중 임의의 하나 이상에서, 상기 메트릭의 세트는 상기 kvset의 값-블록에서 참조되지 않은 데이터의 양을 포함하는, 시스템.
실시예 253에 있어서, 실시예 207 내지 실시예 252 중 임의의 하나 이상에서, 탐색 키를 포함하는 탐색 요청을 수신하는 수단; 및 전체 트리 중 적어도 하나가 순회되거나 또는 상기 탐색 키의 제1 인스턴스가 상기 트리의 노드의 kvset에서 발견될 때까지 상기 트리를 순회하는 수단을 선택적으로 포함하되, 상기 트리를 순회하는 동작은, 상기 트리의 루트-노드에서 시작하는 동작; 및 순회되는 각각의 노드에 대해, 상기 노드의 kvset를 가장 새로운 kvset로부터 가장 오래된 kvset까지 조사하는 동작; 상기 탐색 키가 발견될 때 발견된 표시를 반환하고 상기 순회를 중지하는 동작; 및 상기 탐색 키가 발견되지 않을 때 자식 노드로 순회를 계속하는 동작으로서, 상기 자식 노드는 존재하고 상기 자식 노드는 상기 탐색 키로부터 유도된 스필 값 및 순회되는 상기 노드의 트리-레벨에 의해 식별되는, 상기 순회를 계속하는 동작을 포함하는, 시스템.
실시예 254에 있어서, 실시예 253에서, 상기 발견된 표시는 조사된 kvset에서 상기 탐색 키의 키-엔트리에 대응하는 값을 포함하는, 시스템.
실시예 255에 있어서, 실시예 253 내지 실시예 254 중 임의의 하나 이상에서, 상기 순회가 종료된 후에 상기 탐색 키가 발견되지 않을 때 발견되지 않은 표시를 반환하는 수단을 선택적으로 포함하는, 시스템.
실시예 256에 있어서, 실시예 255에서, 상기 발견된 표시는 상기 키-엔트리가 삭제 표시를 포함할 때 발견되지 않은 표시와 동일한, 시스템.
실시예 257에 있어서, 실시예 253 내지 실시예 256 중 임의의 하나 이상에서, 상기 kvset를 조사하는 동작은 주어진 kvset에 대해 상기 kvset의 블룸 필터를 사용하여 상기 탐색 키가 상기 kvset에 있을 수 있는지 여부를 결정하는 동작을 포함하는, 시스템.
실시예 258에 있어서, 실시예 253 내지 실시예 257 중 임의의 하나 이상에서, 상기 kvset를 조사하는 동작은 주어진 kvset에 대해 상기 탐색 키가 상기 kvset의 최대 키 값보다 작거나 같다고 결정하는 동작을 포함하는, 시스템.
실시예 259에 있어서, 실시예 253 내지 실시예 258 중 임의의 하나 이상에서, 상기 kvset를 조사하는 동작은 주어진 kvset에 대해 상기 탐색 키가 상기 kvset의 최소 키 값보다 크거나 같다고 결정하는 동작을 포함하는, 시스템.
실시예 260에 있어서, 실시예 207 내지 실시예 259 중 임의의 하나 이상에서, 키 기준을 포함하는 스캔 요청을 수신하는 수단; 노드 세트의 각각의 kvset로부터 상기 키 기준에 의해 지정된 키를 상기 트리로부터 발견된 세트로 수집하는 수단; 삭제 표시가 아닌 키에 대한 가장 최근의 엔트리에 대응하는 키-값 쌍을 유지함으로써 상기 발견된 세트를 결과 세트로 줄이는 수단; 및 상기 결과 세트를 반환하는 수단을 선택적으로 포함하는, 시스템.
실시예 261에 있어서, 실시예 260에서, 상기 노드 세트는 상기 트리의 모든 노드를 포함하는, 시스템.
실시예 262에 있어서, 실시예 260 내지 실시예 261 중 임의의 하나 이상에서, 상기 기준은 키 접두부이고, 상기 노드-세트는 상기 키 접두부에 대응하는 각각의 노드를 포함하는, 시스템.
실시예 263에 있어서, 실시예 262에서, 상기 키 접두부와 노드의 대응은 상기 키 접두부로부터 유도된 스필 값의 부분에 의해 결정되고, 상기 스필 값의 부분은 주어진 노드의 트리-레벨에 의해 결정되는, 시스템.
실시예 264에 있어서, 실시예 260 내지 실시예 263 중 임의의 하나 이상에서, 상기 기준은 범위인, 시스템.
전술한 설명은 본 명세서의 일부를 형성하는 첨부 도면에 대한 참조를 포함한다. 도면은 실시될 수 있는 특정 실시형태를 예시적으로 도시한다. 이들 실시형태는 본 명세서에서 "실시예"로도 지칭된다. 이러한 실시예는 도시되거나 설명된 것 이외의 요소를 포함할 수 있다. 그러나, 본 발명자들은 도시되거나 설명된 요소들만이 제공된 실시예를 더 고려한다. 또한, 본 발명자는 특정 실시예(또는 그 하나 이상의 양태)에 관해서 또는 도시되거나 설명된 다른 실시예(또는 그 하나 이상의 양태)에 관해서 도시되거나 설명된 요소(또는 그 하나 이상의 양태)의 임의의 조합 또는 교환을 사용하는 실시예를 더 고려한다.
본 명세서에서 언급된 모든 간행물, 특허 문헌 및 특허 문서는 본 명세서에 개별적으로 개시된 것처럼 전체 내용이 본 명세서에 병합된다. 본 명세서와 본 명세서에 병합된 문서들 사이에 상충되는 부분이 있는 경우, 본 명세서에 병합된 참조 문헌(들)은 본 명세서를 보충하는 것으로 사용된 것으로 고려되어야 하고; 만약 양립할 수 없는 경우에는 본 명세서에서 사용된 부분이 우선한다.
본 명세서에서, 단수형 요소는 특허 명세서에 일반적으로 사용되는 바와 같이 "적어도 하나" 또는 "하나 이상의"의 임의의 다른 경우 또는 사용과 독립적으로 하나 또는 하나를 초과하는 것을 포함하는 것으로 사용된다. 본 명세서에서 "또는"이라는 용어는, 달리 언급이 없는 한, "A 또는 B"라는 것은 "B가 아니고 A", "A가 아니고 B", 및 "A와 B 모두"를 포함하는 '비 배타적인 또는'을 의미하는 데 사용된다. 첨부된 청구 범위에서, "구비하는" 및 "여기서"라는 용어는 각각의 용어 "포함하는" 및 "여기서"와 균등한 영어 등가물로서 사용된다. 또한, 이하의 청구 범위에서, "구비하는" 및 "포함하는"이라는 용어는 개방형 용어인데, 즉, 청구항에서 이러한 용어 뒤에 열거된 것 이외의 요소를 포함하는 시스템, 디바이스, 물품 또는 프로세스는 여전히 그 청구항의 권리범위에 속하는 것으로 고려된다. 또한, 이하의 청구 범위에서, "제1", "제2" 및 "제3" 등의 용어는 단지 라벨로서 사용되는 것일 뿐, 물건에 수치적인 요구 조건을 부과하려고 의도된 것은 아니다.
상기 설명은 본 발명을 예시하려고 의도된 것일 뿐 본 발명을 제한하려고 의도된 것이 아니다. 예를 들어, 전술된 예(또는 하나 이상의 양태)는 서로 조합으로 사용될 수 있다. 상기 설명을 검토하면 이 기술 분야에 통상의 지식을 가진 자라면 다른 실시형태도 고려할 수 있을 것이다. 요약서는 독자가 본 발명의 특징을 신속하게 확인할 수 있도록 하기 위한 것일 뿐 청구항의 범위 또는 의미를 해석하거나 제한하는 데 사용하려고 의도된 것이 아닌 것으로 이해하면서 제출된 것이다. 또한, 상기 상세한 설명에서, 다양한 특징들이 본 발명을 간결하게 설명하기 위해 함께 그룹화되어 있을 수 있다. 이것은 청구되지 않은 개시된 특징이 임의의 청구항에 필수적이라는 것을 의미하는 것으로 해석되어서는 안 된다. 오히려, 본 발명의 대상은 특정 개시된 실시형태의 모든 특징보다 더 적을 수 있다. 따라서, 이하의 청구 범위는 상세한 설명에 포함되고, 각각의 청구항은 별개의 실시형태로서 독자적으로 존재한다. 실시형태의 범위는 청구 범위에 부여되는 균등범위와 함께 첨부된 청구 범위를 참조하여 결정되어야 한다.
Claims (45)
- 적어도 하나의 비 제한적인 기계 판독 가능 매체 상에 트리(tree)로 조직된 키-값 데이터 구조(key-value data structure)를 기록하는 적어도 하나의 비 제한적인 기계 판독 가능 매체로서, 상기 키-값 데이터 구조는 다수의 노드(node)들을 포함하되, 상기 다수의 노드들 중 노드는,
불변의 키-값 세트(kvset)들의 시간 순서화된 시퀀스 - 상기 시간 순서화된 시퀀스는 상기 시간 순서화된 시퀀스 중 한 끝 부분에 가장 오래된 kvset을 포함하고 상기 시간 순서화된 시퀀스 중 다른 한 끝 부분에 가장 새로운 kvset을 포함함 -; 및
상기 불변의 키-값 세트들의 상기 시간 순서화된 시퀀스의 kvset에 있는 키-값 쌍을 상기 노드의 임의의 하나의 자식 노드로 매핑하는 결정적 매핑(determinative mapping) - 상기 키-값 쌍은 하나의 키와 하나의 값을 포함하며, 상기 하나의 키는 상기 kvset에서 유일하고, 상기 kvset은 다수의 키-값 쌍들을 저장하고, 상기 결정적 매핑은 임의의 키-값 쌍이 상기 트리의 노드 내용과는 무관하게 상기 트리의 임의의 레벨에서 특정 자식 노드로의 상기 트리를 통한 특정 경로에 매핑하도록 규칙을 제공함 - 을 포함하는, 적어도 하나의 비 제한적인 기계 판독 가능 매체. - 제1항에 있어서, 상기 결정적 매핑은 상기 키의 부분의 해시(hash)의 부분을 포함하는, 적어도 하나의 비 제한적인 기계 판독 가능 매체.
- 제2항에 있어서, 상기 해시는 상기 해시의 부분을 포함하는 복수의 중첩되지 않는 부분들을 포함하는, 적어도 하나의 비 제한적인 기계 판독 가능 매체.
- 제3항에 있어서, 상기 복수의 중첩되지 않는 부분들 각각은 상기 트리의 레벨에 대응하는, 적어도 하나의 비 제한적인 기계 판독 가능 매체.
- 제4항에 있어서, 상기 해시의 부분은 상기 노드의 레벨에 의해 상기 복수의 중첩되지 않는 부분들로부터 결정되는, 적어도 하나의 비 제한적인 기계 판독 가능 매체.
- 제5항에 있어서, 상기 노드에 대한 자식 노드들의 최대 수는 상기 해시의 부분의 크기에 의해 한정되는, 적어도 하나의 비 제한적인 기계 판독 가능 매체.
- 제1항에 있어서, 상기 kvset는 상기 kvset의 키-값 쌍들의 키 엔트리(key entry)를 저장하기 위해 키-트리(key-tree)를 포함하는, 적어도 하나의 비 제한적인 기계 판독 가능 매체.
- 제1항에 있어서, 상기 kvset의 키 엔트리들은 기본 키-블록 및 0개 이상의 확장 키-블록들을 포함하는 키-블록들의 세트에 저장되고, 상기 키-블록들의 세트의 멤버들은 저장 매체를 위한 미디어 블록들에 대응하며, 각각의 키-블록은 이를 키-블록으로서 식별하기 위한 헤더를 포함하고;
값들은 값-블록들의 세트에 저장되고, 상기 값-블록들의 세트의 멤버들은 상기 저장 매체를 위한 미디어 블록들에 대응하며, 각각의 값-블록은 이를 값-블록으로서 식별하기 위한 헤더를 포함하는, 적어도 하나의 비 제한적인 기계 판독 가능 매체. - 제8항에 있어서, 값 블록은 값들 사이를 분리함이 없이 하나 이상의 값들에 대한 저장 구획을 포함하는, 적어도 하나의 비 제한적인 기계 판독 가능 매체.
- 제8항에 있어서, 상기 기본 키-블록은 상기 kvset의 상기 하나 이상의 확장 키-블록들에 대한 미디어 블록 식별자들의 리스트(list)를 포함하는, 적어도 하나의 비 제한적인 기계 판독 가능 매체.
- 제8항에 있어서, 상기 기본 키-블록은 상기 값 블록들의 세트에 있는 값-블록들에 대한 미디어 블록 식별자들의 리스트를 포함하는, 적어도 하나의 비 제한적인 기계 판독 가능 매체.
- 제8항에 있어서, 상기 기본 키-블록은 상기 kvset의 키-트리에서 가장 낮은 키의 사본을 포함하고, 상기 가장 낮은 키는 상기 트리의 미리 설정된 정렬 순서에 의해 결정되는, 적어도 하나의 비 제한적인 기계 판독 가능 매체.
- 제8항에 있어서, 상기 기본 키-블록은 상기 kvset의 키-트리에서 가장 높은 키의 사본을 포함하고, 상기 가장 높은 키는 상기 트리의 미리 설정된 정렬 순서에 의해 결정되는, 적어도 하나의 비 제한적인 기계 판독 가능 매체.
- 제8항에 있어서, 상기 기본 키-블록은 상기 kvset의 키-트리에 대한 헤더를 포함하는, 적어도 하나의 비 제한적인 기계 판독 가능 매체.
- 제8항에 있어서, 상기 기본 키-블록은 상기 kvset의 키-트리에 대한 미디어 블록 식별자들의 리스트를 포함하는, 적어도 하나의 비 제한적인 기계 판독 가능 매체.
- 제8항에 있어서, 상기 기본 키-블록은 상기 kvset의 블룸 필터(bloom filter)에 대한 블룸 필터 헤더를 포함하는, 적어도 하나의 비 제한적인 기계 판독 가능 매체.
- 제8항에 있어서, 상기 기본 키-블록은 상기 kvset의 블룸 필터에 대한 미디어 블록 식별자들의 리스트를 포함하는, 적어도 하나의 비 제한적인 기계 판독 가능 매체.
- 제8항에 있어서, 상기 기본 키-블록은 상기 kvset에 대한 메트릭(metric)들의 세트를 포함하는, 적어도 하나의 비 제한적인 기계 판독 가능 매체.
- 시스템으로서,
적어도 하나의 비 제한적인 기계 판독 가능 매체 상에 트리로 조직된 키-값 데이터 구조로 저장하기 위한 키-값 세트(kvset)를 수신하는 동작으로서, 상기 kvset는 고유한 키들을 값들로 매핑하는 매핑을 포함하고, 상기 kvset의 키들 및 값들은 불변이며, 상기 트리의 노드는
노드들에 결정적으로 매핑하는 키들을 갖는 키-값 쌍들을 갖는 kvset들의 시간 순서화된 시퀀스 - 상기 시간 순서화된 시퀀스는 상기 시간 순서화된 시퀀스 중 한 끝 부분에 가장 오래된 kvset을 포함하고 상기 시간 순서화된 시퀀스 중 다른 한 끝 부분에 가장 새로운 kvset을 포함함 -; 및
불변의 키-값 세트들의 상기 시간 순서화된 시퀀스의 kvset에 있는 키-값 쌍을 상기 노드의 임의의 하나의 자식 노드로 매핑하는 결정적 매핑 - 상기 키-값 쌍은 하나의 키와 하나의 값을 포함하며, 상기 하나의 키는 상기 kvset에서 유일하고, 상기 kvset은 다수의 키-값 쌍들을 저장하고, 상기 결정적 매핑은 임의의 키-값 쌍이 상기 트리의 노드 내용과는 무관하게 상기 트리의 임의의 레벨에서 특정 자식 노드로의 상기 트리를 통한 특정 경로에 매핑하도록 규칙을 제공함 - 을 포함하는, 상기 수신하는 동작; 및
상기 트리의 루트-노드의 kvset들의 시퀀스에 상기 kvset를 기록하는 동작
을 수행하는 처리 회로부를 포함하는, 시스템. - 제19항에 있어서, 상기 처리 회로부는,
탐색 키를 포함하는 탐색 요청을 수신하는 동작; 및
전체 트리 중 적어도 하나가 순회(traversed)되거나 또는 상기 탐색 키의 제1 인스턴스가 상기 트리의 노드의 kvset에서 발견될 때까지 상기 트리를 순회하는 동작을 수행하도록 구성되고,
상기 트리를 순회하기 위해, 상기 처리 회로부는,
상기 트리의 루트-노드에서 시작하는 동작; 및
순회되는 각각의 노드에 대해,
가장 새로운 kvset로부터 가장 오래된 kvset까지 상기 노드의 kvset들을 조사하는 동작;
상기 탐색 키가 발견되면 발견된 표시를 반환하고 상기 순회를 중지하는 동작; 및
상기 탐색 키가 발견되지 않을 때 자식 노드로 순회를 계속하는 동작으로서, 상기 자식 노드는 존재하고 상기 자식 노드는 상기 탐색 키로부터 유도된 스필 값(spill value) 및 순회되는 상기 노드의 트리-레벨에 의해 식별되는, 상기 순회를 계속하는 동작을 수행하도록 더 구성된 것을 포함하는, 시스템. - 제20항에 있어서, 상기 kvset들을 조사하는 동작은, 상기 처리 회로부가, 주어진 kvset에 대해 상기 kvset의 블룸 필터를 사용하여 상기 탐색 키가 상기 kvset에 있을 수 있는지 여부를 결정하는 동작을 포함하는, 시스템.
- 제20항에 있어서, 상기 kvset들을 조사하는 동작은, 상기 처리 회로부가, 주어진 kvset에 대해 상기 탐색 키가 상기 kvset의 최대 키 값보다 작거나 같다고 결정하는 동작을 포함하는, 시스템.
- 명령을 포함하는 적어도 하나의 비 제한적인 기계 판독 가능 매체로서, 상기 명령은, 처리 회로부에 의해 실행될 때, 기계로 하여금 동작들을 수행하게 하고, 상기 동작들은,
적어도 하나의 비 제한적인 기계 판독 가능 매체에 트리로 조직된 키-값 데이터 구조로 저장하기 위한 키-값 세트(kvset)를 수신하는 동작으로서, 상기 kvset는 고유한 키들을 값들로 매핑하는 매핑을 포함하고, 상기 kvset의 키들 및 값들은 불변이며, 상기 트리의 노드는
노드들에 결정적으로 매핑하는 키들을 갖는 키-값 쌍들을 갖는 kvset들의 시간 순서화된 시퀀스 - 상기 시간 순서화된 시퀀스는 상기 시간 순서화된 시퀀스 중 한 끝 부분에 가장 오래된 kvset을 포함하고 상기 시간 순서화된 시퀀스 중 다른 한 끝 부분에 가장 새로운 kvset을 포함함 -; 및
불변의 키-값 세트들의 상기 시간 순서화된 시퀀스의 kvset에 있는 키-값 쌍을 상기 노드의 임의의 하나의 자식 노드로 매핑하는 결정적 매핑 - 상기 키-값 쌍은 하나의 키와 하나의 값을 포함하며, 상기 하나의 키는 상기 kvset에서 유일하고, 상기 kvset은 다수의 키-값 쌍들을 저장하고, 상기 결정적 매핑은 임의의 키-값 쌍이 상기 트리의 노드 내용과는 무관하게 상기 트리의 임의의 레벨에서 특정 자식 노드로의 상기 트리를 통한 특정 경로에 매핑하도록 규칙을 제공함 - 을 포함하는, 상기 수신하는 동작; 및
상기 트리의 루트-노드의 kvset들의 시퀀스에 상기 kvset를 기록하는 동작
을 포함하는, 적어도 하나의 비 제한적인 기계 판독 가능 매체. - 제23항에 있어서, 상기 동작들은,
상기 키-값 데이터 구조로 저장하기 위한 키 및 대응하는 값을 수신하는 동작;
상기 키 및 상기 값을 예비 kvset에 배치하는 동작으로서, 상기 예비 kvset는 변경 가능한, 상기 배치하는 동작; 및
메트릭에 도달하면 상기 키-값 데이터 구조에 상기 kvset를 기록하는 동작을 포함하는, 적어도 하나의 비 제한적인 기계 판독 가능 매체. - 제23항에 있어서, 상기 동작들은,
제2 kvset를 수신하는 동작;
상기 루트-노드에 대한 상기 kvset들의 시퀀스에 상기 제2 kvset를 기록하는 동작; 및
상기 제2 kvset를 기록한 것에 응답하여 상기 루트-노드의 메트릭이 임계값을 초과한 것에 응답하여 상기 루트 노드에 스필 동작을 수행하는 동작을 포함하는, 적어도 하나의 비 제한적인 기계 판독 가능 매체. - 제25항에 있어서, 상기 스필 동작은,
상기 kvset들의 시퀀스의 서브세트를 선택하는 동작으로서, 상기 서브세트는 가장 오래된 kvset를 포함하는 연속적인 kvset들을 포함하는, 상기 선택하는 동작;
상기 kvset들의 서브세트의 각각의 kvset에 있는 각각의 키에 대한 자식-매핑(child-mapping)을 계산하는 동작으로서, 상기 자식 매핑은 부모 노드의 트리-레벨과 특정 키에 기초한 상기 부모 노드로부터 자식 노드로의 상기 결정적 매핑인, 상기 계산하는 동작;
각각의 kvset 세트가 정확히 하나의 자식 노드로 매핑되는 상기 자식-매핑에 기초하여 키들 및 대응하는 값들을 kvset들로 수집하는 동작;
각각의 자식 노드에 있는 kvset들의 각각의 시퀀스들에서 가장 새로운 위치에 상기 kvset들을 기록하는 동작; 및
상기 루트 노드로부터 상기 kvset들의 서브세트를 제거하는 동작을 포함하는, 적어도 하나의 비 제한적인 기계 판독 가능 매체. - 제26항에 있어서, 상기 자식-매핑을 계산하는 동작은,
키의 부분을 추출하는 동작;
상기 키의 부분으로부터 스필 값을 유도하는 동작; 및
상기 부모 노드의 트리-레벨에 기초하여 상기 스필 값의 부분을 반환하는 동작을 포함하는, 적어도 하나의 비 제한적인 기계 판독 가능 매체. - 제27항에 있어서, 상기 키의 부분으로부터 상기 스필 값을 유도하는 동작은 상기 키의 부분의 해시를 수행하는 동작을 포함하는, 적어도 하나의 비 제한적인 기계 판독 가능 매체.
- 제26항에 있어서, 상기 동작들은 상기 스필 동작의 동작 후에 자식 노드의 메트릭이 임계값을 초과한 것에 응답하여 상기 자식 노드에 제2 스필 동작을 수행하는 동작을 포함하는, 적어도 하나의 비 제한적인 기계 판독 가능 매체.
- 제23항에 있어서, 상기 동작들은 상기 트리의 노드를 압축(compacting)하는 동작을 포함하는, 적어도 하나의 비 제한적인 기계 판독 가능 매체.
- 제30항에 있어서, 상기 노드를 압축하는 동작은 키 압축을 수행하는 동작을 포함하고, 상기 키 압축은,
상기 노드에 대한 kvset들의 시퀀스로부터 kvset들의 서브세트를 선택하는 동작으로서, 상기 kvset들의 서브세트는 연속적인 kvset를 포함하는, 상기 선택하는 동작;
충돌 키들의 세트를 찾는 동작으로서, 상기 충돌 키들의 세트의 멤버들은 상기 노드에 대한 kvset들의 시퀀스에서 적어도 2개의 kvset들에 있는 키 엔트리를 포함하는, 상기 찾는 동작;
상기 충돌 키들의 세트의 각각의 멤버에 대한 가장 최근의 키 엔트리를 새로운 kvset에 추가하는 동작;
상기 충돌 키들의 세트에 없는 상기 kvset들의 서브세트의 멤버들에 있는 각각의 키에 대한 엔트리를 상기 새로운 kvset에 추가하는 동작; 및
상기 새로운 kvset를 상기 노드에 기록하고 상기 kvset들의 서브세트를 제거함으로써 상기 kvset들의 서브세트를 상기 새로운 kvset로 대체하는 동작을 포함하는, 적어도 하나의 비 제한적인 기계 판독 가능 매체. - 제30항에 있어서, 상기 노드는 자식 노드를 포함하고, 상기 노드를 압축하는 동작은 메트릭이 임계값 미만으로 떨어지게 하며, 상기 동작들은 상기 메트릭이 상기 임계값 미만으로 떨어진 것에 응답하여 상기 자식 노드에 호이스트 압축(hoist compaction)을 수행하는 동작을 포함하는, 적어도 하나의 비 제한적인 기계 판독 가능 매체.
- 제23항에 있어서, 상기 동작들은,
탐색 키를 포함하는 탐색 요청을 수신하는 동작; 및
전체 트리 중 적어도 하나가 순회되거나 또는 상기 탐색 키의 제1 인스턴스가 상기 트리의 노드의 kvset에서 발견될 때까지 상기 트리를 순회하는 동작을 포함하되,
상기 트리를 순회하는 동작은,
상기 트리의 루트-노드에서 시작하는 동작; 및
순회되는 각각의 노드에 대해,
가장 새로운 kvset로부터 가장 오래된 kvset까지 상기 노드의 kvset들을 조사하는 동작;
상기 탐색 키가 발견될 때 발견된 표시를 반환하고 상기 순회를 중지하는 동작; 및
상기 탐색 키가 발견되지 않을 때 자식 노드로 순회를 계속하는 동작으로서, 상기 자식 노드는 존재하고 상기 자식 노드는 상기 탐색 키로부터 유도된 스필 값 및 순회되는 상기 노드의 트리-레벨에 의해 식별되는, 상기 순회를 계속하는 동작을 포함하는, 적어도 하나의 비 제한적인 기계 판독 가능 매체. - 제23항에 있어서, 상기 동작들은,
키 기준을 포함하는 스캔 요청을 수신하는 동작;
노드 세트의 각각의 kvset로부터 상기 키 기준에 의해 지정된 키들을 상기 트리로부터 발견된 세트로 수집하는 동작;
삭제 표시가 아닌 키에 대한 가장 최근의 엔트리에 대응하는 키-값 쌍들을 유지함으로써 상기 발견된 세트를 결과 세트로 줄이는 동작; 및
상기 결과 세트를 반환하는 동작을 포함하는, 적어도 하나의 비 제한적인 기계 판독 가능 매체. - 방법으로서,
적어도 하나의 비 제한적인 기계 판독 가능 매체 상에 트리로 조직된 키-값 데이터 구조로 저장하기 위한 키-값 세트(kvset)를 수신하는 동작으로서, 상기 kvset는 고유한 키들을 값들로 매핑하는 매핑을 포함하고, 상기 kvset의 키들 및 값들은 불변이며, 상기 트리의 노드는
노드들에 결정적으로 매핑하는 키들을 갖는 키-값 쌍들을 갖는 kvset들의 시간 순서화된 시퀀스 - 상기 시간 순서화된 시퀀스는 상기 시간 순서화된 시퀀스 중 한 끝 부분에 가장 오래된 kvset을 포함하고 상기 시간 순서화된 시퀀스 중 다른 한 끝 부분에 가장 새로운 kvset을 포함함 -; 및
불변의 키-값 세트들의 상기 시간 순서화된 시퀀스의 kvset에 있는 키-값 쌍을 상기 노드의 임의의 하나의 자식 노드로 매핑하는 결정적 매핑 - 상기 키-값 쌍은 하나의 키와 하나의 값을 포함하며, 상기 하나의 키는 상기 kvset에서 유일하고, 상기 kvset은 다수의 키-값 쌍들을 저장하고, 상기 결정적 매핑은 상기 키-값 쌍이 상기 트리의 노드 내용과는 무관하게 상기 트리의 임의의 레벨에서 특정 자식 노드로의 상기 트리를 통한 특정 경로에 매핑하도록 규칙을 제공함 - 을 포함하는, 상기 수신하는 동작; 및
상기 트리의 루트-노드의 kvset의 시퀀스에 상기 kvset를 기록하는 동작을 포함하는, 방법. - 제35항에 있어서, 상기 트리의 노드를 압축하는 동작을 포함하는, 방법.
- 제36항에 있어서, 상기 노드를 압축하는 동작은 키 압축을 수행하는 동작을 포함하고, 상기 키 압축은,
상기 노드에 대한 kvset들의 시퀀스로부터 kvset들의 서브세트를 선택하는 동작으로서, 상기 kvset들의 서브세트는 연속적인 kvset를 포함하는, 상기 선택하는 동작;
충돌 키들의 세트를 찾는 동작으로서, 상기 충돌 키들의 세트의 멤버들은 상기 노드에 대한 kvset들의 시퀀스에 있는 적어도 2개의 kvset들에 있는 키 엔트리들을 포함하는, 상기 찾는 동작;
상기 충돌 키들의 세트의 각각의 멤버에 대한 가장 최근의 키 엔트리를 새로운 kvset에 추가하는 동작;
상기 충돌 키들의 세트에 없는 상기 kvset들의 서브세트의 멤버들에 있는 각각의 키에 대한 엔트리들을 상기 새로운 kvset에 추가하는 동작; 및
상기 노드에 상기 새로운 kvset를 기록하고 상기 kvset들의 서브세트를 제거함으로써 상기 kvset들의 서브세트를 상기 새로운 kvset로 대체하는 동작을 포함하는, 방법. - 제37항에 있어서, 상기 노드는 자식을 갖지 않고, 상기 kvset들의 서브세트는 가장 오래된 kvset를 포함하며, 상기 충돌 키들의 세트의 각각의 멤버에 대한 상기 가장 최근의 키 엔트리를 상기 새로운 kvset에 기록하고, 상기 충돌 키들의 세트에 없는 상기 kvset들의 서브세트의 멤버들에 있는 각각의 키에 대한 엔트리들을 상기 새로운 kvset에 기록하는 동작은 삭제 표시를 포함하는 임의의 키 엔트리들을 생략하는 동작을 포함하는, 방법.
- 제37항에 있어서, 상기 노드는 자식을 갖지 않고, 상기 kvset들의 서브세트는 상기 가장 오래된 kvset를 포함하고, 상기 충돌 키들의 세트의 각각의 멤버에 대한 상기 가장 최근의 키 엔트리를 상기 새로운 kvset에 기록하며, 상기 충돌 키들의 세트에 없는 상기 kvset들의 서브세트의 멤버들에 있는 각각의 키에 대한 엔트리들을 상기 새로운 kvset에 기록하는 동작은 만료된 임의의 키 엔트리들을 생략하는 동작을 포함하는, 방법.
- 제37항에 있어서, 상기 노드를 압축하는 동작은 값 압축을 수행하는 동작을 포함하고, 상기 kvset에 있는 키들 및 값들은 개별적인 어드레싱 가능한 블록들에 저장되며, 상기 값 압축은 상기 새로운 kvset에 대한 키 엔트리들 내의 값 참조들을 새로운 블록들로 복사하는 동작, 및 상기 kvset들의 서브세트에 대응하는 블록들을 삭제하는 동작을 포함하는, 방법.
- 제36항에 있어서, 상기 노드는 자식 노드를 포함하고, 상기 노드를 압축하는 동작은 메트릭이 임계값 미만으로 떨어지게 하며, 상기 메트릭이 상기 임계값 미만으로 떨어진 것에 응답하여 상기 자식 노드에 호이스트 압축을 수행하는 동작을 포함하는, 방법.
- 제41항에 있어서, 상기 호이스트 압축은,
새로운 kvset를 상기 자식 노드에 기록하지 않고 상기 새로운 kvset를 생성하기 위해 상기 자식 노드에 키 및 값 압축을 수행하는 동작; 및
상기 새로운 kvset를 상기 노드의 kvset들의 시퀀스에 대해 가장 오래된 위치에 있는 노드에 기록하는 동작을 포함하는, 방법. - 시스템으로서,
적어도 하나의 비 제한적인 기계 판독 가능 매체 상에 트리로 조직된 키-값 데이터 구조로 저장하기 위한 키-값 세트(kvset)를 수신하는 수단으로서, 상기 kvset는 고유한 키들을 값들로 매핑하는 매핑을 포함하고, 상기 kvset의 키들 및 값들은 불변이며; 상기 트리의 노드는
노드들에 결정적으로 매핑하는 키들을 갖는 키-값 쌍들을 갖는 kvset들의 시간 순서화된 시퀀스 - 상기 시간 순서화된 시퀀스는 상기 시간 순서화된 시퀀스 중 한 끝 부분에 가장 오래된 kvset을 포함하고 상기 시간 순서화된 시퀀스 중 다른 한 끝 부분에 가장 새로운 kvset을 포함함 -; 및
불변의 키-값 세트들의 상기 시간 순서화된 시퀀스의 kvset에 있는 키-값 쌍을 상기 노드의 임의의 하나의 자식 노드로 매핑하는 결정적 매핑 - 상기 키-값 쌍은 하나의 키와 하나의 값을 포함하며, 상기 하나의 키는 상기 kvset에서 유일하고, 상기 kvset은 다수의 키-값 쌍들을 저장하고, 상기 결정적 매핑은 임의의 키-값 쌍이 상기 트리의 노드 내용과는 무관하게 상기 트리의 임의의 레벨에서 특정 자식 노드로의 상기 트리를 통한 특정 경로에 매핑하도록 규칙을 제공함 - 을 포함하는, 상기 수신하는 수단; 및
상기 트리의 루트-노드의 kvset들의 시퀀스에 상기 kvset를 기록하는 수단을 포함하는, 시스템. - 제43항에 있어서,
제2 kvset를 수신하는 수단;
상기 루트 노드에 대한 상기 kvset들의 시퀀스에 상기 제2 kvset를 기록하는 수단; 및
상기 제2 kvset를 기록한 것에 응답하여 상기 루트-노드의 메트릭이 임계값을 초과한 것에 응답하여 상기 루트-노드에 스필 동작을 수행하는 수단을 포함하는, 시스템. - 제44항에 있어서, 상기 스필 동작은,
상기 kvset들의 시퀀스의 서브세트를 선택하는 수단으로서, 상기 서브세트는 가장 오래된 kvset를 포함하는 연속적인 kvset들을 포함하는, 상기 선택하는 수단;
상기 kvset들의 서브세트의 각각의 kvset에 있는 각각의 키에 대해 자식-매핑을 계산하는 수단으로서, 상기 자식 매핑은 부모 노드의 트리-레벨과 특정 키에 기초하여 상기 부모 노드로부터 자식 노드로 매핑하는 결정적 매핑인, 상기 계산하는 수단;
각각의 kvset 세트가 정확히 하나의 자식 노드로 매핑되는 상기 자식-매핑에 기초하여 키들 및 대응하는 값들을 kvset들로 수집하는 수단;
각각의 자식 노드에 있는 kvset들의 각각의 시퀀스들에서 가장 새로운 위치에 상기 kvset들을 기록하는 수단; 및
상기 루트 노드로부터 상기 kvset들의 서브세트를 제거하는 수단을 포함하는, 시스템.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/428,877 US10725988B2 (en) | 2017-02-09 | 2017-02-09 | KVS tree |
US15/428,877 | 2017-02-09 | ||
PCT/US2018/016892 WO2018148149A1 (en) | 2017-02-09 | 2018-02-05 | Kvs tree |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20190111124A KR20190111124A (ko) | 2019-10-01 |
KR102266756B1 true KR102266756B1 (ko) | 2021-06-22 |
Family
ID=63037817
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020197026327A KR102266756B1 (ko) | 2017-02-09 | 2018-02-05 | Kvs 트리 |
Country Status (5)
Country | Link |
---|---|
US (2) | US10725988B2 (ko) |
KR (1) | KR102266756B1 (ko) |
CN (1) | CN110268394B (ko) |
TW (1) | TWI682274B (ko) |
WO (1) | WO2018148149A1 (ko) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11334270B2 (en) | 2018-12-14 | 2022-05-17 | Micron Technology, Inc. | Key-value store using journaling with selective data storage format |
US11599552B2 (en) | 2018-10-10 | 2023-03-07 | Micron Technology, Inc. | Counter-based compaction of key-value store tree data block |
US11657092B2 (en) | 2018-12-26 | 2023-05-23 | Micron Technology, Inc. | Data tree with order-based node traversal |
Families Citing this family (64)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10706105B2 (en) | 2017-02-09 | 2020-07-07 | Micron Technology, Inc. | Merge tree garbage metrics |
US10719495B2 (en) | 2017-02-09 | 2020-07-21 | Micron Technology, Inc. | Stream selection for multi-stream storage devices |
US10706106B2 (en) | 2017-02-09 | 2020-07-07 | Micron Technology, Inc. | Merge tree modifications for maintenance operations |
US10725988B2 (en) | 2017-02-09 | 2020-07-28 | Micron Technology, Inc. | KVS tree |
US10187264B1 (en) * | 2017-02-14 | 2019-01-22 | Intuit Inc. | Gateway path variable detection for metric collection |
WO2018200475A1 (en) * | 2017-04-24 | 2018-11-01 | Reniac, Inc. | System and method to accelerate compaction |
CN108063756B (zh) * | 2017-11-21 | 2020-07-03 | 阿里巴巴集团控股有限公司 | 一种密钥管理方法、装置及设备 |
US10691693B2 (en) * | 2018-01-30 | 2020-06-23 | Salesforce.Com, Inc. | Cache for efficient record lookups in an LSM data structure |
US10824610B2 (en) * | 2018-09-18 | 2020-11-03 | Vmware, Inc. | Balancing write amplification and space amplification in buffer trees |
US11099771B2 (en) * | 2018-09-24 | 2021-08-24 | Salesforce.Com, Inc. | System and method for early removal of tombstone records in database |
US11100071B2 (en) | 2018-10-10 | 2021-08-24 | Micron Technology, Inc. | Key-value store tree data block spill with compaction |
CN109617669B (zh) * | 2018-11-30 | 2022-02-22 | 广州高清视信数码科技股份有限公司 | 基于hash算法的机顶盒遥控器的认证方法及终端设备 |
US11048755B2 (en) * | 2018-12-14 | 2021-06-29 | Micron Technology, Inc. | Key-value store tree with selective use of key portion |
US11113270B2 (en) | 2019-01-24 | 2021-09-07 | EMC IP Holding Company LLC | Storing a non-ordered associative array of pairs using an append-only storage medium |
CN110032549B (zh) | 2019-01-28 | 2023-10-20 | 北京奥星贝斯科技有限公司 | 分区分裂方法、装置、电子设备及可读存储介质 |
EP3731109B1 (en) * | 2019-04-26 | 2022-07-06 | Datadobi cvba | Versioned backup on object addressable storage system |
US11556271B2 (en) * | 2019-07-05 | 2023-01-17 | Samsung Electronics Co., Ltd. | Storage device storing data on key-value basis and operating method thereof |
EP3767486B1 (en) * | 2019-07-19 | 2023-03-22 | Microsoft Technology Licensing, LLC | Multi-record index structure for key-value stores |
US11216434B2 (en) | 2019-09-25 | 2022-01-04 | Atlassian Pty Ltd. | Systems and methods for performing tree-structured dataset operations |
CN111026329B (zh) * | 2019-11-18 | 2021-04-20 | 华中科技大学 | 基于主机管理瓦记录磁盘的键值存储系统及数据处理方法 |
KR20210063862A (ko) | 2019-11-25 | 2021-06-02 | 에스케이하이닉스 주식회사 | 키-값 기반의 데이터 저장 장치 및 이를 포함하는 시스템 |
EP3776250B1 (en) * | 2019-12-05 | 2022-08-24 | Alipay (Hangzhou) Information Technology Co., Ltd. | Performing map iterations in blockchain-based system |
AU2019379711B2 (en) * | 2019-12-05 | 2022-04-07 | Alipay (Hangzhou) Information Technology Co., Ltd. | Performing map iterations in a blockchain-based system |
US11379431B2 (en) * | 2019-12-09 | 2022-07-05 | Microsoft Technology Licensing, Llc | Write optimization in transactional data management systems |
KR20210075731A (ko) * | 2019-12-13 | 2021-06-23 | 삼성전자주식회사 | 스토리지 장치 및 이의 동작 방법 |
CN111399777B (zh) * | 2020-03-16 | 2023-05-16 | 平凯星辰(北京)科技有限公司 | 一种基于数据值分类的差异化键值数据存储方法 |
CN111400320B (zh) * | 2020-03-18 | 2023-06-20 | 百度在线网络技术(北京)有限公司 | 用于生成信息的方法和装置 |
US11604759B2 (en) | 2020-05-01 | 2023-03-14 | EMC IP Holding Company LLC | Retention management for data streams |
US11599546B2 (en) * | 2020-05-01 | 2023-03-07 | EMC IP Holding Company LLC | Stream browser for data streams |
US11340834B2 (en) | 2020-05-22 | 2022-05-24 | EMC IP Holding Company LLC | Scaling of an ordered event stream |
US11921683B2 (en) | 2020-06-08 | 2024-03-05 | Paypal, Inc. | Use of time to live value during database compaction |
CN112286939B (zh) * | 2020-06-12 | 2024-07-16 | 支付宝(杭州)信息技术有限公司 | 块链式账本中全局状态的哈希的生成方法、装置及设备 |
US11360992B2 (en) | 2020-06-29 | 2022-06-14 | EMC IP Holding Company LLC | Watermarking of events of an ordered event stream |
US11556513B2 (en) | 2020-06-30 | 2023-01-17 | Hewlett Packard Enterprise Development Lp | Generating snapshots of a key-value index |
US11461299B2 (en) | 2020-06-30 | 2022-10-04 | Hewlett Packard Enterprise Development Lp | Key-value index with node buffers |
US11340792B2 (en) | 2020-07-30 | 2022-05-24 | EMC IP Holding Company LLC | Ordered event stream merging |
US11599420B2 (en) | 2020-07-30 | 2023-03-07 | EMC IP Holding Company LLC | Ordered event stream event retention |
US11513871B2 (en) | 2020-09-30 | 2022-11-29 | EMC IP Holding Company LLC | Employing triggered retention in an ordered event stream storage system |
US11354444B2 (en) | 2020-09-30 | 2022-06-07 | EMC IP Holding Company LLC | Access control for an ordered event stream storage system |
US11461240B2 (en) | 2020-10-01 | 2022-10-04 | Hewlett Packard Enterprise Development Lp | Metadata cache for storing manifest portion |
US11755555B2 (en) | 2020-10-06 | 2023-09-12 | EMC IP Holding Company LLC | Storing an ordered associative array of pairs using an append-only storage medium |
US11599293B2 (en) | 2020-10-14 | 2023-03-07 | EMC IP Holding Company LLC | Consistent data stream replication and reconstruction in a streaming data storage platform |
US11354054B2 (en) | 2020-10-28 | 2022-06-07 | EMC IP Holding Company LLC | Compaction via an event reference in an ordered event stream storage system |
CN112235324B (zh) * | 2020-12-14 | 2021-03-02 | 杭州字节信息技术有限公司 | 一种基于KeyStore密钥树的密钥管理系统、更新方法、读取方法 |
US11347568B1 (en) | 2020-12-18 | 2022-05-31 | EMC IP Holding Company LLC | Conditional appends in an ordered event stream storage system |
US11816065B2 (en) | 2021-01-11 | 2023-11-14 | EMC IP Holding Company LLC | Event level retention management for data streams |
US12099513B2 (en) | 2021-01-19 | 2024-09-24 | EMC IP Holding Company LLC | Ordered event stream event annulment in an ordered event stream storage system |
US11526297B2 (en) | 2021-01-19 | 2022-12-13 | EMC IP Holding Company LLC | Framed event access in an ordered event stream storage system |
US11740828B2 (en) | 2021-04-06 | 2023-08-29 | EMC IP Holding Company LLC | Data expiration for stream storages |
US12001881B2 (en) | 2021-04-12 | 2024-06-04 | EMC IP Holding Company LLC | Event prioritization for an ordered event stream |
US11954537B2 (en) | 2021-04-22 | 2024-04-09 | EMC IP Holding Company LLC | Information-unit based scaling of an ordered event stream |
US11513714B2 (en) | 2021-04-22 | 2022-11-29 | EMC IP Holding Company LLC | Migration of legacy data into an ordered event stream |
US11741073B2 (en) | 2021-06-01 | 2023-08-29 | Alibaba Singapore Holding Private Limited | Granularly timestamped concurrency control for key-value store |
WO2022254368A2 (en) * | 2021-06-01 | 2022-12-08 | Speedb Ltd. | Lsm hybrid compaction |
US11755427B2 (en) | 2021-06-01 | 2023-09-12 | Alibaba Singapore Holding Private Limited | Fast recovery and replication of key-value stores |
US11829291B2 (en) | 2021-06-01 | 2023-11-28 | Alibaba Singapore Holding Private Limited | Garbage collection of tree structure with page mappings |
US11681460B2 (en) | 2021-06-03 | 2023-06-20 | EMC IP Holding Company LLC | Scaling of an ordered event stream based on a writer group characteristic |
US20230017732A1 (en) | 2021-07-16 | 2023-01-19 | Samsung Electronics Co., Ltd. | Key packing for flash key value store operations |
US11735282B2 (en) | 2021-07-22 | 2023-08-22 | EMC IP Holding Company LLC | Test data verification for an ordered event stream storage system |
US11853577B2 (en) | 2021-09-28 | 2023-12-26 | Hewlett Packard Enterprise Development Lp | Tree structure node compaction prioritization |
US11971850B2 (en) | 2021-10-15 | 2024-04-30 | EMC IP Holding Company LLC | Demoted data retention via a tiered ordered event stream data storage system |
KR20230070718A (ko) | 2021-11-15 | 2023-05-23 | 에스케이하이닉스 주식회사 | 테넌트를 식별하는 키-값 기반의 데이터 저장 장치 및 그 동작 방법 |
US11954345B2 (en) * | 2021-12-03 | 2024-04-09 | Samsung Electronics Co., Ltd. | Two-level indexing for key-value persistent storage device |
CN114416752B (zh) * | 2022-03-31 | 2022-07-15 | 南京得瑞芯存科技有限公司 | Kv ssd的数据处理方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100246446A1 (en) * | 2009-03-30 | 2010-09-30 | Wenhua Du | Tree-based node insertion method and memory device |
US20120223889A1 (en) * | 2009-03-30 | 2012-09-06 | Touchtype Ltd | System and Method for Inputting Text into Small Screen Devices |
US20140222870A1 (en) | 2013-02-06 | 2014-08-07 | Lei Zhang | System, Method, Software, and Data Structure for Key-Value Mapping and Keys Sorting |
Family Cites Families (50)
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 |
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 | 한국전자통신연구원 | 다중탐색 트리의 노드 생성 방법, 및 그에 따라 생성된 다중탐색 트리 구조의 자료 탐색 방법 |
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 |
EP1855281B1 (en) | 2006-05-10 | 2019-06-12 | Nero Ag | Apparatus for writing data to a medium |
AU2007269283A1 (en) | 2006-06-30 | 2008-01-10 | Tele Atlas North America, Inc. | 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 |
US8347059B2 (en) | 2008-08-15 | 2013-01-01 | International Business Machines Corporation | Management of recycling bin for thinly-provisioned logical volumes |
US8572036B2 (en) * | 2008-12-18 | 2013-10-29 | Datalight, Incorporated | Method and apparatus for fault-tolerant memory management |
US9355109B2 (en) | 2010-06-11 | 2016-05-31 | The Research Foundation For The State University Of New York | Multi-tier caching |
US10558705B2 (en) * | 2010-10-20 | 2020-02-11 | Microsoft Technology Licensing, Llc | Low RAM space, high-throughput persistent key-value store using secondary memory |
US9838242B2 (en) | 2011-04-13 | 2017-12-05 | Jetflow Technologies | Flowlet-based processing with key/value store checkpointing |
US8595267B2 (en) * | 2011-06-27 | 2013-11-26 | Amazon Technologies, Inc. | System and method for implementing a scalable data storage service |
JP5524144B2 (ja) | 2011-08-08 | 2014-06-18 | 株式会社東芝 | key−valueストア方式を有するメモリシステム |
JP5782948B2 (ja) | 2011-09-15 | 2015-09-24 | 富士通株式会社 | 情報管理方法及び情報管理装置 |
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+트리 노드 검색 방법 및 장치 |
GB201210234D0 (en) * | 2012-06-12 | 2012-07-25 | Fujitsu Ltd | Reconciliation of large graph-based data storage |
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 |
EP2731061A1 (en) * | 2012-11-07 | 2014-05-14 | Fujitsu Limited | Program, method, and database system for storing descriptions |
US9400816B1 (en) | 2013-02-28 | 2016-07-26 | Google Inc. | System for indexing collections of structured objects that provides strong multiversioning semantics |
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 |
JP6025149B2 (ja) | 2013-11-06 | 2016-11-16 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | データを管理するシステムおよび方法 |
US9524302B2 (en) | 2014-03-05 | 2016-12-20 | Scality, S.A. | Distributed consistent database implementation within an object store |
US9697267B2 (en) | 2014-04-03 | 2017-07-04 | Sandisk Technologies Llc | Methods and systems for performing efficient snapshots in tiered data structures |
CN105095287B (zh) | 2014-05-14 | 2018-09-28 | 华为技术有限公司 | Lsm数据合并排序方法和装置 |
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 |
US10346432B2 (en) | 2015-03-17 | 2019-07-09 | Cloudera, Inc. | Compaction policy |
US11461010B2 (en) | 2015-07-13 | 2022-10-04 | Samsung Electronics Co., Ltd. | Data property-based data placement in a nonvolatile memory device |
US10061629B2 (en) * | 2015-07-22 | 2018-08-28 | Optumsoft, Inc. | Compact binary event log generation |
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 |
US10496283B2 (en) * | 2016-01-22 | 2019-12-03 | Suraj Prabhakar WAGHULDE | Adaptive prefix tree based order partitioned data storage system |
US10719496B2 (en) | 2016-01-29 | 2020-07-21 | Hitachi, Ltd. | Computer system and data processing method |
US11182365B2 (en) * | 2016-03-21 | 2021-11-23 | Mellanox Technologies Tlv Ltd. | Systems and methods for distributed storage of data across multiple hash tables |
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 |
US10725988B2 (en) | 2017-02-09 | 2020-07-28 | Micron Technology, Inc. | KVS tree |
US10706105B2 (en) | 2017-02-09 | 2020-07-07 | Micron Technology, Inc. | Merge tree garbage metrics |
WO2019084465A1 (en) * | 2017-10-27 | 2019-05-02 | Streamsimple, Inc. | CONTINUOUS DIFFUSION MICRO-SERVICES FOR FLOW PROCESSING APPLICATIONS |
-
2017
- 2017-02-09 US US15/428,877 patent/US10725988B2/en active Active
-
2018
- 2018-02-05 WO PCT/US2018/016892 patent/WO2018148149A1/en active Application Filing
- 2018-02-05 KR KR1020197026327A patent/KR102266756B1/ko active IP Right Grant
- 2018-02-05 CN CN201880011122.7A patent/CN110268394B/zh active Active
- 2018-02-08 TW TW107104545A patent/TWI682274B/zh active
-
2020
- 2020-04-23 US US16/856,920 patent/US20200257669A1/en not_active Abandoned
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100246446A1 (en) * | 2009-03-30 | 2010-09-30 | Wenhua Du | Tree-based node insertion method and memory device |
US20120223889A1 (en) * | 2009-03-30 | 2012-09-06 | Touchtype Ltd | System and Method for Inputting Text into Small Screen Devices |
US20140222870A1 (en) | 2013-02-06 | 2014-08-07 | Lei Zhang | System, Method, Software, and Data Structure for Key-Value Mapping and Keys Sorting |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11599552B2 (en) | 2018-10-10 | 2023-03-07 | Micron Technology, Inc. | Counter-based compaction of key-value store tree data block |
US11334270B2 (en) | 2018-12-14 | 2022-05-17 | Micron Technology, Inc. | Key-value store using journaling with selective data storage format |
US11657092B2 (en) | 2018-12-26 | 2023-05-23 | Micron Technology, Inc. | Data tree with order-based node traversal |
Also Published As
Publication number | Publication date |
---|---|
TWI682274B (zh) | 2020-01-11 |
US10725988B2 (en) | 2020-07-28 |
CN110268394B (zh) | 2023-10-27 |
TW201841122A (zh) | 2018-11-16 |
US20200257669A1 (en) | 2020-08-13 |
US20180225315A1 (en) | 2018-08-09 |
KR20190111124A (ko) | 2019-10-01 |
WO2018148149A1 (en) | 2018-08-16 |
CN110268394A (zh) | 2019-09-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102266756B1 (ko) | Kvs 트리 | |
KR102290835B1 (ko) | 유지관리 동작들을 위한 병합 트리 수정들 | |
KR102307957B1 (ko) | 다중-스트림 저장 장치를 위한 스트림 선택 | |
KR102289332B1 (ko) | 병합 트리 가비지 메트릭스 | |
KR102462781B1 (ko) | Kvs 트리 데이터베이스 | |
JP5953277B2 (ja) | データ索引装置、データ索引方法及びプログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |