TWI682285B - 用於索引鍵值結構樹資料庫的產品、方法及機器可讀媒體 - Google Patents
用於索引鍵值結構樹資料庫的產品、方法及機器可讀媒體 Download PDFInfo
- Publication number
- TWI682285B TWI682285B TW107128396A TW107128396A TWI682285B TW I682285 B TWI682285 B TW I682285B TW 107128396 A TW107128396 A TW 107128396A TW 107128396 A TW107128396 A TW 107128396A TW I682285 B TWI682285 B TW I682285B
- Authority
- TW
- Taiwan
- Prior art keywords
- node
- index key
- item
- tree
- kvset
- 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/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9027—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/22—Indexing; Data structures therefor; Storage structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2365—Ensuring data consistency and integrity
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本文中描述一種KVS樹資料庫及對其之操作。一KVS樹資料庫係包含一基底層級及後續層級之一多級樹。該基底層級在一節點中包含一異質kvset。該異質kvset包含多個KVS樹之項目,諸如一第一KVS樹之一第一項目及一第二KVS樹之一第二項目。該後續層級包含:一第一節點,其包含該第一KVS樹之一第一同質kvset;及一第二節點,其包含該第二KVS樹之一第二同質kvset。在此,一同質kvset包含僅來自一個KVS樹之節點。該KVS樹資料庫亦包含該基底層級與該後續層級之間的項目之一第一決定性映射及後續層級之間的項目之一第二決定性映射。
Description
本文中所描述之實施例大體上係關於一種索引鍵值資料儲存庫且更具體言之係關於實施一KVS樹資料庫。
資料結構係允許以各種方式與儲存於其中之資料相互作用之資料組織。資料結構可經設計以允許諸如在二元搜尋樹中有效地搜尋資料,以允許諸如使用一連結清單有效地儲存稀疏資料,或以允許諸如使用B樹有效地儲存可搜尋資料,等等。
索引鍵值資料結構接受一索引鍵值對且經組態以回應於對索引鍵之查詢。索引鍵值資料結構可包含諸如字典(例如,圖、雜湊圖等)之結構,其中索引鍵經儲存於連結(或包含)各自值之一清單中。雖然此等結構在記憶體中(例如,在主記憶體或系統狀態記憶體而非儲存器中)係有用的,但此等結構在永久性儲存器中(例如,磁碟上)之儲存表示可係低效的。據此,已引入基於日誌之儲存結構之一類別。一實例係日誌結構化合併樹(LSM樹)。
已存在各種LSM樹實施方案,但許多LSM樹實施方案符合其中索引鍵值對經接受至一索引鍵排序之記憶體中結構中之一設計。當填充彼記憶體中結構時,在子節點之中分配資料。分配使得子節點中之索引
鍵在子節點本身內且在子節點之間排序。例如,在具有三個子節點之一第一樹層級處,一最左子節點內之最大索引鍵小於來自中間子節點之一最小索引鍵,且中間子節點中之最大索引鍵小於來自最右子節點之最小索引鍵。此結構允許有效地搜尋資料結構中之索引鍵以及索引鍵範圍兩者。
本發明之一實施例係關於一種在至少一個機器可讀媒體上之KVS樹資料庫,該KVS樹資料庫包括:一多層級樹,其包含:一基底層級,其在一節點中具有一異質索引鍵值集(kvset),該異質kvset包含一第一KVS樹之一第一項目及一第二KVS樹之一第二項目;及後續層級,其等包含至少一個後續層級,該後續層級包含:一第一KVS樹節點,其包含該第一KVS樹之一第一同質kvset;及一第二KVS樹節點,其包含該第二KVS樹之一第二同質kvset;該基底層級與該後續層級之間的項目之一第一決定性映射;及後續層級之間的項目之一第二決定性映射。
本發明之另一實施例係關於一種用來實施一KVS樹資料庫之方法,該方法包括:接收一第一項目,該第一項目包含對應於一第一KVS樹之一第一索引鍵及一第一樹識別符;接收一第二項目,該第二項目包含對應於一第二KVS樹之一第二索引鍵及一第二樹識別符;及將該第一項目及該第二項目寫入至一KVS樹資料庫之一基底層級節點中之一異質索引鍵值集(kvset),該KVS樹資料庫包含至少一個基底層級節點及至少一個後續層級節點,各後續層級節點對應於單個KVS樹且包含該單個KVS樹之同質kvset。
本發明之一進一步實施例係關於一種包含指令之機器可讀媒體,該等指令在由處理電路系統執行時引起該處理電路系統執行以下操
作,包括:接收一第一項目,該第一項目包含對應於一第一KVS樹之一第一索引鍵及一第一樹識別符;接收一第二項目,該第二項目包含對應於一第二KVS樹之一第二索引鍵及一第二樹識別符;及將該第一項目及該第二項目寫入至一KVS樹資料庫之一基底層級節點中之一異質索引鍵值集(kvset),該KVS樹資料庫包含至少一個基底層級節點及至少一個後續層級節點,各後續層級節點對應於單個KVS樹且包含該單個KVS樹之同質kvset。
100‧‧‧索引鍵值結構樹資料庫(KVDB)
105‧‧‧第一基底層級節點
110‧‧‧第二基底層級節點
115‧‧‧索引鍵值集(kvset)
120‧‧‧索引鍵值集
125‧‧‧索引鍵值集
130‧‧‧節點
135‧‧‧節點
205‧‧‧KVDB
210‧‧‧KVDB
215‧‧‧寫入操作/寫入請求
220‧‧‧寫入操作
225‧‧‧儲存子系統
230‧‧‧串流映射電路
235‧‧‧電子硬體實施控制器
240‧‧‧可存取串流ID(A-SID)表
245‧‧‧選定串流ID(S-SID)表
250‧‧‧寫入操作/器件寫入/寫入命令
255‧‧‧操作
260‧‧‧儲存器件
265‧‧‧儲存器件
270‧‧‧擦除區塊
300‧‧‧方法
305‧‧‧操作
310‧‧‧操作
315‧‧‧操作
405‧‧‧標頭
410‧‧‧主索引鍵區塊
415‧‧‧延伸索引鍵區塊
417‧‧‧延伸標頭
420‧‧‧標頭
425‧‧‧值
430‧‧‧值
435‧‧‧值
440‧‧‧標頭
445‧‧‧值
450‧‧‧自由空間
505‧‧‧索引鍵值對
510‧‧‧基底層級節點
515‧‧‧最新kvset
520‧‧‧最舊kvset/異質kvset
525‧‧‧溢出
530‧‧‧後續層級節點
535‧‧‧新kvset/同質kvset
540‧‧‧後續層級節點
545‧‧‧同質kvset
600‧‧‧方法
605‧‧‧操作
610‧‧‧操作
615‧‧‧操作
620‧‧‧操作
625‧‧‧操作
705‧‧‧節點
800‧‧‧方法
805‧‧‧操作
810‧‧‧操作
815‧‧‧操作
820‧‧‧操作
825‧‧‧操作
905‧‧‧節點
1000‧‧‧方法
1005‧‧‧操作
1010‧‧‧操作
1015‧‧‧操作
1020‧‧‧操作
1025‧‧‧操作
1101‧‧‧樹識別符(TID)
1103‧‧‧L1部分
1105‧‧‧部分
1110‧‧‧部分
1115‧‧‧部分
1120‧‧‧基底層級節點
1122‧‧‧節點
1125‧‧‧節點
1130‧‧‧節點
1135‧‧‧節點
1200‧‧‧方法
1205‧‧‧操作
1210‧‧‧操作
1215‧‧‧操作
1220‧‧‧操作
1305‧‧‧樹識別符(TID)感知索引鍵值對
1310‧‧‧樹識別符(TID)感知索引鍵值對
1315‧‧‧樹識別符(TID)感知索引鍵值對
1400‧‧‧方法
1405‧‧‧操作
1410‧‧‧操作
1415‧‧‧操作
1420‧‧‧操作
1425‧‧‧操作
1505‧‧‧索引鍵值結構(KVS)
1510‧‧‧KVS
1515‧‧‧新KVSM
1600‧‧‧方法
1605‧‧‧操作
1610‧‧‧操作
1700‧‧‧方法
1705‧‧‧操作
1710‧‧‧操作
1715‧‧‧操作
1720‧‧‧操作
1900‧‧‧方法
1905‧‧‧操作
1910‧‧‧操作
1915‧‧‧操作
1920‧‧‧操作
1925‧‧‧決策
1930‧‧‧決策
1935‧‧‧結果
1940‧‧‧決策
1945‧‧‧操作
1950‧‧‧決策
1955‧‧‧操作
1960‧‧‧結果
2100‧‧‧機器
2102‧‧‧硬體處理器
2104‧‧‧主記憶體
2106‧‧‧靜態記憶體
2108‧‧‧互連
2110‧‧‧顯示單元
2112‧‧‧字母數字輸入器件
2114‧‧‧使用者介面(UI)導覽器件
2116‧‧‧儲存器件
2118‧‧‧信號產生器件
2120‧‧‧網路介面器件
2122‧‧‧機器可讀媒體
2124‧‧‧資料結構或指令
2126‧‧‧通信網路
2128‧‧‧輸出控制器
2130‧‧‧互連
KVS1‧‧‧kvset
KVS2‧‧‧kvset
KVS3‧‧‧kvset
KVS4‧‧‧新kvset
KVS5‧‧‧新kvset
L1‧‧‧後續層級/第一層級
L2‧‧‧後續層級/第二層級
L3‧‧‧後續層級/第三層級
L4‧‧‧後續層級
T1‧‧‧索引鍵值結構(KVS)樹
T2‧‧‧KVS樹
T3‧‧‧KVS樹
X‧‧‧新kvset
Y‧‧‧新kvset
Z‧‧‧新kvset
在不必按比例繪製之圖式中,類似元件符號可描述不同視圖中之類似組件。具有不同字母下標之類似元件符號可表示類似組件之不同例項。圖式藉由實例而非限制之方式大體上繪示本文件中所論述之各項實施例。
圖1繪示根據一實施例之一KVS樹資料庫之一實例。
圖2係繪示根據一實施例之至一多串流儲存器件之一寫入之一實例之一方塊圖。
圖3繪示根據一實施例之促進寫入至一多串流儲存器件之一方法之一實例。
圖4係繪示根據一實施例之用於索引鍵及值之一儲存組織之一實例之一方塊圖。
圖5係繪示根據一實施例之KVS樹資料庫攝取之一方塊圖。
圖6繪示根據一實施例之用於KVS樹攝取之一方法之一實例。
圖7係繪示根據一實施例之索引鍵壓縮之一方塊圖。
圖8繪示根據一實施例之用於索引鍵壓縮之一方法之一實例。
圖9係繪示根據一實施例之索引鍵值壓縮之一方塊圖。
圖10繪示根據一實施例之用於索引鍵值壓縮之一方法之一實例。
圖11繪示根據一實施例之一溢出值及其與一樹資料庫之關係之一實例。
圖12繪示根據一實施例之用於一溢出值函數之一方法之一實例。
圖13係繪示根據一實施例之溢出壓縮之一方塊圖。
圖14繪示根據一實施例之用於溢出壓縮之一方法之一實例。
圖15係繪示根據一實施例之提升壓縮(hoist compaction)之一方塊圖。
圖16繪示根據一實施例之用於提升壓縮之一方法之一實例。
圖17繪示根據一實施例之用於對一KVS樹資料庫執行維護之一方法之一實例。
圖18係繪示根據一實施例之一索引鍵搜尋之一方塊圖。
圖19繪示根據一實施例之用於執行一索引鍵搜尋之一方法之一實例。
圖20係繪示根據一實施例之一索引鍵掃描之一方塊圖。
圖21係繪示可在其上實施一或多項實施例之一機器之一實例之一方塊圖。
傳統上,LSM樹已成為一流行資料儲存結構,其中預期高容量寫入且亦預期對資料之有效存取。為支援此等特徵,習知解決方案可調諧保持其等之媒體之LSM之部分,且一後台程序通常解決不同部分之間(例如,自記憶體中部分至磁碟上部分)的移動資料。在本文中,「記憶體中」指代一隨機存取且位元組可定址器件(例如,靜態隨機存取記憶體(SRAM)或動態隨機存取記憶體(DRAM));且「磁碟上」指代一區塊可定址-或大於一位元組字組可定址區域之其他者(諸如一頁面、線、字串等)-器件(例如,硬碟機、光碟、數位多功能光碟或固態硬碟(SSD),諸如一基於快閃記憶體之器件),其亦稱為媒體器件或儲存器件。LSM樹利用由記憶體中器件提供之就緒存取以按索引鍵對傳入資料排序,以提供對對應值之就緒存取。當資料經合併至磁碟上部分上時,常駐磁碟上資料與新資料合併且以區塊寫回至磁碟。
雖然LSM樹已成為數種資料庫及體積儲存(例如,雲儲存)設計之一流行結構,但其等確實具有一些缺點。首先,不斷合併新資料與舊資料以保持按索引鍵排序之內部結構導致顯著寫入放大率。寫入放大率係由一給定儲存技術強加之資料之最小寫入次數之一增加。例如,為儲存資料,將資料寫入至磁碟至少一次。例如,此可藉由僅將最新資料段附加至已寫入資料之末端來實現。然而,此結構係搜尋緩慢的(例如,其隨資料量線性地增長),且可在資料被改變或刪除時導致低效。LSM樹增加寫入放大率,因為其等自磁碟讀取資料以與新資料合併,且接著將彼資料重
新寫回至磁碟。當包含儲存器件活動(諸如重組(defragmenting)硬碟機或SSD之廢棄項目收集)時,可加劇寫入放大率問題。SSD上之寫入放大率可尤其有害,因為此等器件可依據寫入次數而「磨損」。即,SSD具有以寫入量測之一有限壽命。因此,SSD之寫入放大率致使縮短底層硬體之使用壽命。
LSM樹之第二個問題包含在執行合併時可能消耗大量空間。LSM樹確保磁碟上部分按索引鍵排序。若常駐於磁碟上之資料量為大,則可消耗大量暫時性或暫用空間來執行合併。此可藉由將磁碟上部分劃分成非重疊結構以允許資料子集之合併而稍微減輕,但可難以在結構額外耗用與效能之間達成一平衡。
LSM樹之第三個問題包含可能有限之寫入處理量。此問題源於整個LSM資料之基本上始終排序之本質。因此,覆蓋記憶體中部分之大容量寫入必須等待直至記憶體中部分用一可能耗時之合併操作清除。為解決此問題,已提出一傳統寫入緩衝器(WB)樹,其中操縱較小資料插件以避免此案例中之合併問題。具體言之,一WB樹雜湊傳入索引鍵以散佈資料,且將索引鍵雜湊及值組合儲存於較小輸入集中。此等集可在不同時間合併或基於索引鍵雜湊值寫入至子節點。此避免LSM樹之昂貴合併操作,同時在查找一特定索引鍵時係高效能的。然而,按索引鍵雜湊排序之WB樹導致昂貴之全樹掃描以定位未由一索引鍵雜湊直接引用之值,諸如在搜尋一系列索引鍵時發生。
KVS樹及對應操作使用LSM樹或相關資料結構解決上文所論述之問題。KVS樹係包含基於一索引鍵之一預定導出而非樹之內容而在一父節點與一子節點之間具有連接之節點之一樹資料結構。節點包含索引
鍵值集(kvset)之時間有序序列,亦稱為KVS。kvset在一索引鍵排序結構中包含索引鍵值對。一旦寫入,Kvset亦係不可變的。KVS樹達成WB樹之寫入處理量,同時藉由維持節點中之kvset來改良WB樹搜尋,kvset包含經排序索引鍵以及在一實例中索引鍵度量(諸如布隆(bloom)篩選、最小及最大索引鍵等),以提供kvset之有效搜尋。在許多實例中,KVS樹可藉由分離索引鍵與值且合併較小kvset集合來改良LSM樹之暫時性儲存問題。另外,所描述KVS樹可透過對kvset之各種維護操作來降低寫入放大率。此外,由於節點中之kvset係不可變的,故可由資料結構管理諸如SSD上之寫入磨損之問題,從而減少器件本身之廢棄項目收集活動。此具有釋放內部器件資源(例如,匯流排頻寬、處理循環等)之附加益處,其導致更佳外部驅動效能(例如,讀取或寫入速度)。
雖然KVS樹係用於各種儲存任務之靈活且強大之資料結構,但可藉由將多個KVS樹組合成一KVS樹資料庫(KVDB)來獲取一些更高效率,如本發明中所描述。為維持或改良KVS樹之讀取及寫入效能,KVDB將多個KVS樹之根層混合成一基底層級,該基底層級包含具有來自多個樹之項目之節點及kvset。在KVDB之基底層級外,多個KVS樹可分成相異子樹,使得此等子樹之節點之kvset係同質的(例如,含有僅一個KVS樹之項目)。換言之,一KVDB係具有一共同根結構之分離KVS樹之一森林。KVDB可提供優於KVS樹的許多優點。例如,可增大寫入效率,因為可在基底層級kvset中組合若干樹之寫入。下文描述額外KVDB優點。
本發明之實施方案描述結合項目索引鍵使用之一樹識別符(TID),以在擷取或維護(例如,壓縮)操作期間區分樹以支援基底層級之
混合樹kvset。除結合項目索引鍵使用TID之外,KVS樹操作可應用於KVDB,從而提供KVS樹之一輕量且高效彙總。與單獨KVS樹可能發生之情況相比,組合多個KVS樹允許對更大區塊中之底層媒體(例如,磁碟或其他儲存器)進行更有效之讀取及寫入操作,因為可將若干KVS樹之寫入一起緩沖且寫入至一個kvset。雖然本文中所描述之技術及結構為固態硬碟(例如,NAND FLASH器件)提供特定優點,但此等結構及技術亦可用於且有益於各種其他形式之機器可讀媒體。
圖1繪示根據一實施例之一KVDB 100之一例示性方塊圖。KVDB 100包含多個KVS樹-被繪示為T1及T2-被組織為具有KVS樹之間的一共同基底層級及分離後續層級(例如,L1、L2及L3)之一樹。值與引用值之對應索引鍵經儲存於KVDB 100中。關於所含有的KVS樹(例如,KVDB 100中之KVS樹),使用索引鍵項目來保存索引鍵及額外資訊兩者(諸如對值之一引用),然而,除非另有說明,否則為簡單起見,將索引鍵項目簡稱為索引鍵。索引鍵本身在一KVS樹內具有一總排序。因此,索引鍵可在彼此之間排序。索引鍵亦可劃分為子索引鍵。通常,子索引鍵係一索引鍵之非重疊部分。在一實例中,索引鍵之總排序係基於比較多個索引鍵之間的類似子索引鍵(例如,比較一索引鍵之一第一子索引鍵與另一索引鍵之第一子索引鍵)。在一實例中,一索引鍵首碼係一索引鍵之一開始部分。當使用一或多個子索引鍵時,索引鍵首碼可由一或多個子索引鍵組成。
KVDB 100包含一或多個節點,諸如節點105、110或130。一節點包含不可變索引鍵值集(kvset)之一時序序列。如上所述,KVDB 100與KVS樹不同之處在於在基底層級中包含異質kvset-包含來自多個
KVS樹之項目之kvset,及在後續層級中包含同質kvset-包含來自僅一個KVS樹之項目之kvset。貫穿圖,用條紋繪示異質kvset(例如,kvset 115及120),且同質kvset係實心的(例如,kvset 125)。此外,為繪示後續層級節點屬於單個KVS樹,節點在左上角包含表示其等樹隸屬關係之一徽章(例如,圖1中之T1或T2)。再者,如所繪示,kvset 115包含一「N」徽章以指示其係序列之最新kvset,而kvset 120包含一「O」徽章以指示其係序列之最舊kvset。Kvset 125包含一「I」徽章以指示其係序列中之中間kvset。全文使用此等徽章來加標籤於kvset,然而,另一徽章(諸如一「X」)表示一特定kvset而非其在一序列中之位置(例如,新、中間、舊等),除非其係一波浪號「~」,在此情況下,其僅係一匿名kvset。如下文更詳細地解釋,較舊索引鍵值項目出現在KVDB 100中所含有之KVS樹中之下部。因此,使項目上升一個層級(諸如自L2至L1)導致在接收者節點中之最舊位置中之一新kvset。
KVS樹包含將一節點中之一索引鍵映射至單個子節點之一決定性映射。因此,給定一索引鍵值對,一外部實體可在不知道可能子節點之一KVS樹之內容之情況下追蹤通過該樹之一路徑。例如,此完全不同於一B樹,其中該樹之內容將判定一給定索引鍵之值將落在何處以便維持該樹之搜尋最佳化結構。代替地,KVS樹之決定性映射提供一規則,使得例如給定一索引鍵,可計算此索引鍵將映射至之L3處之子節點,即使最大樹層級(例如,樹深度)僅在L1處。
KVDB 100亦包含決定性映射。然而,KVDB包含基底層級與一後續層級(例如,L1)之間的項目之一第一決定性映射,及後續層級之間的項目之一第二決定性映射。在一實例中,第一決定性映射係基於對應
於一項目之一KVS樹之一TID。KVDB 100被繪示為具有兩個KVS樹T1及T2。第一決定性映射將來自包含異質kvset(例如,kvset 120)之一基底層級節點(諸如節點110)之一項目映射至具有來自單個KVS樹之同質kvset之一後續層級節點(例如,節點135)。在一實例中,如用KVS樹T1所繪示,第一決定性映射可僅使用TID以將項目放置於KVS樹之單個根後續節點(例如,節點135)中。一根後續節點係具有同質kvset之一最高層級節點。然而,可存在一個以上根後續節點,如關於T2所繪示。即,第一決定性映射使用TID來為一項目選擇可能若干根後續節點之僅一者。在一實例中,TID可與項目之一索引鍵組合以將項目映射至若干節點之一者,諸如關於KVS樹T2所繪示。
為促進第一決定性映射中之TID使用,異質kvset中之項目可包含TID作為項目之部分。在一實例中,同質kvset自項目省略TID。因此,TID(在使用之情況下)係容易獲得的,且在不使用TID之情況下,藉由自一項目省略TID來節省空間。在一實例中,TID可經儲存於具有同質kvset之一節點中。此可對項目中之一節省空間提供一折衷,同時亦允許一更靈活之節點實施方案。
在一實例中,第二決定性映射係針對對應於後續層級中之節點之一KVS樹指定之一決定性映射。例如,圖1中被標記為T2之節點係使用由KVS樹T2指定之第二決定性映射之後續層級節點,且圖1中被標記為T1之節點係使用由KVS樹T1指定之第二決定性映射之後續層級節點。因此,第二決定性映射(儘管可存在一個以上)對具有同質kvset之後續層級節點進行操作。
在一KVS樹中,基底層級或根可使用一位元組可定址之第
一媒體(諸如隨機存取記憶體(RAM)或類似者)中之單個節點及一區塊可定址之第二媒體(諸如快閃儲存器)上之單個節點來組織。可在基底層級處類似地組織KVDB 100,使得節點105處在第一媒體中且全部子節點處在第二媒體中。在一實例中,KVDB 100包含若干第二媒體子節點,諸如節點110及節點130。在此實例中,KVDB 100可包含基底層級之子層級之間的一第三決定性映射,因此階層式地細分基底層級。第三決定性映射可使用TID及索引鍵之一組合來判定一給定項目映射至哪個子層級子節點,因此,第三決定性映射涉及基底層級內之父節點與子節點之間的映射。然而,自一搜尋或儲存管理角度來看,將項目均勻地散佈至基底層級之子層級中可係有益的。據此,在一實例中,第三決定性映射可忽略(例如,不使用)項目之TID。
決定性映射可基於源材料之一雜湊之一部分,諸如一TID、一索引鍵或兩者。例如,決定性映射可使用索引鍵之一部分之一雜湊之一部分。因此,一子索引鍵可經雜湊以達成一映射集。此集之一部分可用於KVDB 100之任何給定層級。在一實例中,索引鍵之部分係整個索引鍵。
在一實例中,雜湊包含多個非重疊部分,包含雜湊之部分。在一實例中,多個非重疊部分之各者對應於KVDB 100之一層級。在一實例中,藉由節點之一層級自多個非重疊部分判定雜湊之部分。在一實例中,節點之一最大子節點數目係由雜湊之部分之一大小定義。在一實例中,雜湊之部分之大小係位元數目。此等實例可藉由獲取導致8個位元之一索引鍵之一雜湊來繪示。此8個位元可劃分為以下三組:前兩個位元、第三至第六位元(導致四個位元)以及第七及第八位元。子節點可基於一組
位元集編索引,使得第一層級(例如,L1)處之子節點具有兩個位元名稱,第二層級(例如,L2)上之子節點具有四位元名稱,且第三層級(例如,L3)上之子節點具有兩個位元名稱。下文包含關於圖11及圖12之一擴展論述。
如在KVS樹中,KVDB 100之kvset係組織於KVDB 100之節點中之索引鍵及值儲存區。如上所述,KVDB 100將異質kvset新增至一KVS樹之同質kvset。kvset之不可變性意謂kvset一旦被放置於一節點中,便不會改變。然而,可刪除一kvset,可將其內容之一些或全部新增至一新kvset等。在一實例中,kvset之不可變性亦延伸至kvset內所含有之任何控制或後設資料。此通常係可能的,因為應用後設資料之內容係不變的且因此,後設資料通常在彼時亦將係靜態的。
亦應注意,KVDB 100自始至終不需要索引鍵之間的唯一性,但一給定kvset確實僅具有一索引鍵。即,一給定kvset中之每個索引鍵不同於kvset之其他索引鍵。此最後陳述適用於一特定kvset,且因此例如在版本化一kvset時可能不適用。Kvset版本化可有助於產生資料之一快照。在一版本化kvset之情況下,kvset中之一索引鍵之唯一性係由kvset識別碼(ID)及版本之一組合判定。然而,兩個不同kvset(例如,kvset 115及kvset 120)可各包含相同索引鍵。一異質kvset根據一索引鍵所屬之一KVS樹來定義彼索引鍵之唯一性。因此,異質kvset 110可適當地含有KVS樹T1及T2兩者之一索引鍵「A」,但可能不適當地含有單個KVS樹之兩個索引鍵「A」。據此,一給定索引鍵之唯一性係由一異質kvset中之TID及索引鍵之一組合判定。
KVDB 100中所含有之KVS樹並非靜態,而是動態。即,一KVS樹T1可在KVDB處於操作中之後新增至KVDB 100且稍後被刪除(例
如,被移除)。此能力係歸因於TID被附裝至項目且作為第一決定性映射之一分量。因此,通常,維護操作或度量不取決於使KVDB知道包含一特定KVS樹,而是取決於連接一給定KVS樹及其在異質kvset中之項目且選擇哪個後續層級節點屬於KVDB 100內所含有之一給定KVS樹之一共同機制。
可自KVDB刪除KVS樹。例如,為清除異質kvset,一標記刪除(tombstone)(「全部刪除」(或萬用字元)標記刪除,如本文中所使用)係指示已刪除對應於索引鍵之值之一資料標記-以便可攝取KVS樹。此標記刪除匹配給定KVS樹之任何項目。在一實例中,後設資料可相關聯於基底層級處以定義給定KVS樹之全部項目(例如,索引鍵值對)係過時的。此等動作將有效地自KVDB 100移除KVS樹,因為來自KVS樹之項目之任何查詢將失敗。然而,修剪KVS樹之後續層級(例如,移除對後續層級之引用)之一第二操作可加速資料回收或其他廢棄項目收集活動。在一實例中,修剪包含刪除KVS樹之後續層級之全部節點。在一實例中,刪除一節點包含刪除該節點內所含有之全部kvset。因此,新增KVS樹以僅攝取具有一TID之一項目且自KVDB 100刪除KVS樹係相對簡單的,因為KVDB 100經組織為共用一共同根結構之分離KVS樹之一森林。
在一實例中,一kvset包含用來儲存kvset之索引鍵值對之索引鍵項目之一索引鍵樹。可使用各種資料結構來有效地儲存及擷取索引鍵樹中之唯一索引鍵(其甚至可不係樹),諸如二元搜尋樹、B樹等。在一實例中,索引鍵經儲存於索引鍵樹之葉節點中。在一實例中,一最大索引鍵-例如,具有如由索引鍵之自然排序順序判定之最大值之一索引鍵-在索引鍵樹之任何子樹中,係在一最右子節點之一最右項目中。在一實例中,索
引鍵樹之一第一節點之一最右邊緣經連結至索引鍵樹之一子節點。在一實例中,扎根於索引鍵樹之子節點處之一子樹中之全部索引鍵大於索引鍵樹之第一節點中之全部索引鍵。
在一實例中,kvset之索引鍵項目經儲存於一組索引鍵區塊中,包含一主索引鍵區塊及零或多個延伸索引鍵區塊。在一實例中,該組索引鍵區塊之成員對應於一儲存媒體之媒體區塊,諸如一SSD、硬碟機等。在一實例中,各索引鍵區塊包含用來將其識別為一索引鍵區塊之一標頭。在一實例中,主索引鍵區塊包含kvset之一或多個延伸索引鍵區塊之一媒體區塊識別碼清單。
在一實例中,主索引鍵區塊包含kvset之一索引鍵樹之一標頭。該標頭可包含數個值以與索引鍵相互作用,或通常更容易與kvset相互作用。在一實例中,主索引鍵區塊或標頭包含kvset之一索引鍵樹中之一最低索引鍵之一複本。在此,最低索引鍵係由樹之一預設定排序順序(例如,樹100中之索引鍵之總排序)判定。在一實例中,主索引鍵區塊包含一同質kvset之一TID。在一實例中,主索引鍵區塊包含異質kvset中之項目之一組TID。在一實例中,主索引鍵區塊包含用於異質kvset中之項目之TID之一布隆篩選。在一實例中,主索引鍵區塊包含用於異質kvset中之(TID,key)項目之一布隆篩選。在一實例中,主索引鍵區塊包含kvset之一索引鍵樹中之一最高(例如,最大)索引鍵之一複本,該最高索引鍵由樹之一預設定排序順序判定。在一實例中,主索引鍵區塊包含kvset之一索引鍵樹之一媒體區塊識別碼清單。在一實例中,主索引鍵區塊包含kvset之一布隆篩選之一布隆篩選標頭。在一實例中,主索引鍵區塊包含kvset之一布隆篩選之一媒體區塊識別碼清單。
在一實例中,kvset之值經儲存於一組值區塊中。在此,該組值區塊之成員對應於儲存媒體之媒體區塊。在一實例中,各值區塊包含用來將其識別為一值區塊之一標頭。在一實例中,一值區塊包含一或多個值之一儲存區段,而在彼等值之間無分離。因此,一第一值之位元在儲存媒體上與一第二值之位元相接,而在其等之間無防護件、聯集(container)或其他定界符。在一實例中,主索引鍵區塊包含該組值區塊中之值區塊之一媒體區塊識別碼清單。因此,主索引鍵區塊管理對值區塊之儲存引用。
在一實例中,主索引鍵區塊包含用於kvset之一組度量。度量針對異質及同質kvset類似地操作,因為不考量項目之TID,惟異質kvset中之一索引鍵之唯一性包含彼索引鍵之項目之一TID除外。否則,考慮全部索引鍵值對或標記刪除,而無關於其等所屬之KVS樹。通常,一標記刪除將常駐於索引鍵項目中且此索引鍵值對將不消耗值區塊空間。標記刪除之目的係標記值之刪除,同時避免自樹清除值之可能昂貴操作。因此,當使用一時間有序搜尋遭遇標記刪除時,顯而易見,即使索引鍵值對之一期滿版本常駐於樹內之一較舊位置處,仍刪除對應值。在一實例中,該組度量包含儲存於kvset中之索引鍵之一總數目。在一實例中,該組度量包含具有儲存於kvset中之標記刪除值之索引鍵之一數目。
在一實例中,儲存於主索引鍵區塊中之該組度量包含儲存於kvset中之索引鍵之全部索引鍵長度之一總和。在一實例中,該組度量包含儲存於kvset中之索引鍵之全部值長度之一總和。此最後兩個度量給定由kvset消耗之一近似(或確切)儲存量。在一實例中,該組度量包含kvset之值區塊中之一未引用資料(例如,未引用值)量。此最後度量給定可在一維護操作中回收之空間之一估計。下文關於圖4論述索引鍵區塊及值
區塊之額外細節。
KVDB提供優於其他組合樹結構(諸如HBase或RocksDB)之優點。例如,多樹之各樹可被視為此等資料庫中之一行族。藉由組合多樹根結構,KVDB允許在一個以上KVS樹中儲存或刪除索引鍵值對之異動係原子的,而無一預寫日誌之額外耗用-其可包含額外處理、1/O或儲存容量消耗-藉由攝取與相同kvset(或原子攝取kvset之集合)中之一給定異動相關聯之全部索引鍵值對或標記刪除。此外,KVDB允許增加kvset攝取大小及因此I/O效率,因為所攝取kvset可包括與一KVDB中之任何或全部KVS樹相關聯之索引鍵值對或標記刪除。此外,KVDB能夠減少用於kvset緩衝之記憶體之總量(例如,在位元組可定址節點層級中),因為無需維持用於一KVDB中之各KVS樹之單獨kvset緩衝器,因為記憶體中基底層級中之一kvset可包括與一KVDB中之任何或全部KVS樹相關聯之索引鍵值對或標記刪除。
如上所述,KVDB 100可包含一第一電腦可讀媒體中之一基底層級節點105及一第二電腦可讀媒體中之一第二基底層級節點110。在一實例中,第二基底層級節點110係第一基底層級節點105之唯一子節點。在一實例中,第一電腦可讀媒體係位元組可定址的且第二電腦可讀媒體係區塊可定址的。第一基底層級節點105及第二基底層級節點110在不同媒體上之劃分提供數個益處。例如,修改一位元組可定址記憶體中之kvset之靈活性不影響區塊可定址儲存器上之不可變kvset之效能特性。因此,可在節點105處以一快速且有效之方式攝取資料,而KVDB 100維持區塊儲存器上之不可變kvset之寫入效能特性。如上所述,在一實例中,第一基底層級節點105可具有第二電腦可讀媒體上之若干子節點(例如,節
點110及節點130)。由於基底層級節點形成KVDB中之若干KVS樹之共同根結構,故增加基底層級節點可具有關於資料攝取或擷取效率之益處。
上文論述表明KVDB 100之各種組織屬性。下文關於圖5至圖20論述與KVDB 100相互作用之操作,諸如樹維護(例如,最佳化、廢棄項目收集等)、搜尋及擷取。在前進至此等主題之前,圖2及圖3繪示利用KVDB 100之結構來實施多串流儲存器件之一有效使用之一技術。
若具有一類似壽命之資料經分組於快閃擦除區塊中,則包括快閃記憶體或SSD之儲存器件可更有效地操作且具有更大耐久性(例如,將不「磨損」)。包括其他非揮發性媒體之儲存器件亦可受益於對具有一類似壽命之資料分組,諸如疊瓦式磁記錄(SMR)硬碟機(HDD)。在此內容背景中,若同時或在一相對小時間間隔內刪除資料,則資料具有一類似壽命。針對一些儲存器件,藉由刪除原始資料且寫入新(例如,所改變)資料來修改經儲存資料。用於刪除一儲存器件上之資料之方法可包含在儲存器件上顯式地解除分配、邏輯上覆寫或實體上覆寫資料。
由於一儲存器件通常可能不知道儲存於其中之各種資料之壽命,故該儲存器件可提供用於資料存取命令(例如,讀取或寫入)之一介面,以識別與資料相關聯之一邏輯壽命群組。例如,工業標準SCSI及所提出NVMe儲存器件介面指定包括待寫入至一儲存器件之資料之寫入命令及用於資料所對應之一壽命群組(稱為串流)之一數字串流識別符(串流ID)。支援複數個串流之一儲存器件係一多串流儲存器件。
溫度係用來對資料分類之一穩定性值,藉此該值對應於將在任何給定時間間隔內刪除資料之一相對概率。例如,可預期在一分鐘內刪除(或改變)HOT資料,而可預期COLD資料持續一小時或更長。在一實
例中,可使用一有限組之穩定性值來指定此一分類。在一實例中,該組穩定性值可為{HOT,WARM,COLD},其中在一給定時間間隔內,分類為HOT之資料被刪除之概率高於被分類為WARM之資料,繼而被刪除之概率高於被分類為COLD之資料。
圖2及圖3解決基於一給定穩定性值以及關於一或多個KVDB或KVDB內之KVS樹之資料之一或多個屬性將不同串流ID指派給不同寫入。因此,繼續先前實例,針對一給定儲存器件,一第一組串流識別符可與針對分類為HOT之資料之寫入命令一起使用,一第二組串流識別符可與針對分類為WARM之資料之寫入命令一起使用,且一第三組串流識別符可與針對分類為COLD之資料之寫入命令一起使用,其中一串流識別符在此三組之至多一者中。
為便於論述圖2及圖3之多串流儲存器件系統及技術而提供以下術語:
DID係一儲存器件之一唯一器件識別符。
SID係一給定儲存器件上之一串流之一串流識別符。
TEMPSET係一有限組之溫度值。
TEMP係TEMPSET之一元素。
FID係一KVS樹集合之一唯一森林識別符。在一實例中,FID表示一KVDB。
TID係一KVS樹之一唯一樹識別符。
LNUM係一給定KVS樹中之一層級數目,其中為方便起見,一KVS樹之(若干)區塊可定址根節點被視為在樹層級0處,根節點之子節點(若有)被視為在樹層級1處,依此類推。在一實例中,LNUM係關於
一KVDB而非其中所含有之任何KVS樹。因此,區塊可定址媒體中之(若干)第一基底層級節點係層級0,若層級更深(無論其等是基底層級還是後續層級),則LNUM隨著KVDB深度增加而遞增。
NNUM係一給定KVDB或KVS樹中之一給定層級處之一給定節點之一數目,其中為方便起見,NNUM可為0至(NodeCount(LNUM)-1)範圍內之一數字,其中NodeCount(LNUM)係一樹層級LNUM處之節點之總數目,使得KVDB或KVS樹中之每個節點係由元組(LNUM,NNUM)唯一地識別。如圖1中所繪示,開始於節點110、自上至下、自左至右前進之節點元組之完整清單將係:
L0(開始於節點110之基底層級):(0,0)、(0,1)
L1:(1,0)、(1,1)、(1,2)
L2:(2,0)、(2,1)、(2,2)、(2,3)
L3:(3,0)、(3,1)、(3,2)、(3,3)
KVSETID係一唯一kvset識別符。
WTYPE係值KBLOCK或VBLOCK,如下文所論述。
WLAST係一布林(Boolean)值(TRUE或FALSE),如下文所論述。
圖2係繪示根據一實施例之至一多串流儲存器件(例如,器件260或265)之一寫入之一實例之一方塊圖。圖2繪示多個KVDB、KVDB 205及KVDB 210。如所繪示,各KVDB分別執行一寫入操作215及220。此等寫入操作係由一儲存子系統225處置。該儲存子系統可包含諸如用於器件260之一器件驅動器、用來管理多個器件(例如,器件260及器件265)(諸如作業系統中找到之彼等器件)之一儲存控制器、網路附接儲存器件等、或此等器件之任何組合。隨著時間推移,儲存子系統225將分別在操
作250及255中完成至儲存器件260及265之寫入。串流映射電路230將一串流ID提供給待在器件寫入250中使用之一給定寫入215。
在KVDB 205中,kvset之不可變性導致一次寫入或刪除整個kvset。因此,包括一kvset之資料具有一類似壽命。可使用諸如擦除編碼或RAID之技術將包括一新kvset之資料寫入至單個儲存器件或若干儲存器件(例如,器件260及器件265)。此外,由於kvset之大小可大於任何給定器件寫入操作250,故寫入kvset可涉及將多個寫入命令引導至一給定儲存器件260。為促進串流映射電路230之操作,可使用以下一或多者來為各此寫入命令250選擇一串流ID:A)正被寫入之kvset之KVSETID;B)儲存器件之DID;C)一KVS樹所屬之森林或KVDB之FID;D)一KVS樹之TID;E)含有kvset之KVS樹中之節點之LNUM;F)含有kvset之KVS樹中之節點之NNUM;G)若寫入命令係針對DID上之KVSETID之一索引鍵區塊,則WTYPE為KBLOCK,或若寫入命令係針對DID上之KVSETID之一值區塊,則WTYPE為VBLOCKH)若寫入命令係針對DID上之一KVSETID之最後命令,則WLAST為TRUE,否則為FALSE
在一實例中,針對各此寫入命令,元組(DID,FID,TID,LNUM,NNUM,KVSETID,WTYPE,WLAST)-稱為串流映射元組-可經發送至串流映射電路230。接著,串流映射電路230可以儲存子系統225之
串流ID作出回應以與寫入命令250一起使用。為解決KVDB基底層級之異質kvset與KVDB後續層級之同質kvset之間的差異,基於kvset之類型調整元組值。例如,異質kvset之混合KVS樹性質減少或消除元組中之TID之含義。為解決此問題,可將一異質kvset中之TID之值設定為不同於一KVS樹識別符之一值。在一實例中,將TID設定為森林識別符(FID)(例如,TID被指派相同於FID之值)。在使用一KVS樹識別符之一實例中,將TID設定為KVDB中之一個KVS樹之TID。在此實例中,經選擇以表示異質kvset之KVS樹始終係相同KVS樹,此KVS樹表示異質kvset中之全部KVS樹。在一實例中,將TID設定為一恆定值,諸如零。在一實例中,用於異質kvset寫入中之TID之任何值持續用於(例如,始終用於)KVDB之異質kvset。
串流映射電路230可包含一電子硬體實施控制器235、可存取串流ID(A-SID)表240及一選定串流ID(S-SID)表245。控制器235經配置以接受一串流映射元組作為輸入且以串流ID作出回應。在一實例中,控制器235經組態至儲存複數個KVDB 205及210之複數個儲存器件260及265。控制器235經配置以獲得(例如,藉由組態、查詢等)可存取器件之一組態。控制器235亦經配置以組態該組穩定性值TEMPSET,且針對TEMPSET中之各值TEMP組態一給定儲存器件上之串流數目之一分率、數字或其他因子,以用於由彼值分類之資料。
在一實例中,控制器235經配置以獲得(例如,經由組態、訊息等接收,自組態器件、韌體等擷取)一溫度指派技術。在此實例中,該溫度指派技術將用來指派穩定性值給寫入請求215。在一實例中,一串流映射元組可包含DID、FID、TID、LNUM、NNUM、KVSETID、
WTYPE或WLAST之任何一或多者,且可用作由控制器235執行之溫度指派技術之輸入以自TEMPSET選擇一穩定性值TEMP。在一實例中,一KVS樹範疇係特定於正被寫入之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可實施一靜態溫度指派技術。該靜態溫度指派技術可例如自一組態檔案、資料庫、KVDB或KVS樹後設資料或其他資料庫(包含儲存於KVDB FID或KVS樹TID中之後設資料)讀取選定TEMP。在此實例中,此等資料源包含自TSCOPE至一穩定性值之映射。在一實例中,可(例如,在控制器235啟動時或在稍後操作期間動態地)快取該映射以在寫入請求到達時加速穩定性值之指派。
在一實例中,控制器235可實施一動態溫度指派技術。該動態溫度指派技術可基於將kvset寫入至TSCOPE之一頻率運算選定TEMP。例如,針對一給定TSCOPE執行溫度指派技術之頻率可經量測且圍繞TEMPSET中之TEMP叢集化。因此,此一運算可例如定義一組頻率
範圍及自各頻率範圍至一穩定性值之一映射,使得由含有將kvset寫入至TSCOPE之頻率之頻率範圍判定TEMP之值。
控制器235經配置以獲得(例如,經由組態、訊息等接收,自組態器件、韌體等擷取)一串流指派技術。該串流指派技術將消耗寫入215之KVDB 205(或其中含有之KVS樹)態樣以及穩定性值(例如,來自溫度指派)以產生串流ID。在一實例中,控制器235可在該串流指派技術中使用串流映射元組(例如,包含KVS樹範疇)來選擇串流ID。在一實例中,可在由控制器235執行之串流指派技術中使用DID、FID、TID、LNUM、NNUM、KVSETID、WTYPE或WLAST之任何一或多者連同穩定性值來選擇串流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)指代A-SID表240中具有DID及TEMP之指定值之全部項目(若有)。在一實例中,可針對各經組態儲存器件260及265以及TEMPSET中之溫度值初始化A-SID表240。A-SID表240初始化可如下般
進行:針對各經組態儲存器件DID,控制器235可經配置以:A)獲得DID上可用之串流之數目,稱為SCOUNT;B)獲得DID上之SCOUNT串流之各者之一唯一SID;及C)針對TEMPSET中之各值TEMP:a)根據TEMP之經組態因子,運算用於由TEMP分類之資料之SCOUNT串流之數目,稱為TCOUNT;及b)針對尚未鍵入A-SID表240中之DID選擇TCOUNT SID,且針對DID之各選定TCOUNT SID,在A-SID表240中針對(DID,TEMP,SID)產生一個項目(例如,列)。
因此,一旦被初始化,A-SID表240包含各經組態儲存器件DID之一項目及TEMPSET中被指派一唯一SID之值TEMP。用於獲得可用於一經組態儲存器件260之串流之數目及各串流之一可用SID之技術因儲存器件介面而不同,然而,此等可容易經由多串流儲存器件之介面來存取。
S-SID表245維持已在使用中之串流之一記錄(例如,已係一給定寫入之一部分)。S-SID表245係可儲存元組(DID,TEMP,SSCOPE,SID,Timestamp)之項目且可擷取或刪除具有DID、TEMP及(視情況)SSCOPE之指定值之此等項目之一資料結構(表、字典等)。記號S-SID(DID,TEMP)指代S-SID表245中具有DID及TEMP之指定值之全部項目(若有)。如同A-SID表240,S-SID表245可由控制器235初始化。在一實例中,控制器235經配置以針對各經組態儲存器件260及265以及TEMPSET中之溫度值初始化S-SID表245。
如上所述,S-SID表245中之項目表示當前或已指派用於寫
入操作之串流。因此,通常,S-SID表245在起始之後係空的,項目係在指派串流ID時由控制器235產生。
在一實例中,控制器235可實施一靜態串流指派技術。該靜態串流指派技術針對一給定DID、TEMP及SSCOPE選擇相同串流ID。在一實例中,該靜態串流指派技術可判定S-SID(DID,TEMP)是否具有SSCOPE之一項目。若不存在符合項目,則該靜態串流指派技術自A-SID(DID,TEMP)選擇一串流ID SID,且在S-SID表245中針對(DID,TEMP,SSCOPE,SID,timestamp)產生一項目,其中timestamp係選擇之後的當前時間。在一實例中,來自A-SID(DID,TEMP)之選擇係隨機的,或係一循環程序之結果。一旦找到或產生來自S-SID表245之項目,便將串流ID SID傳回至儲存子系統225。在一實例中,若WLAST為真,則刪除S-SID表245中針對(DID、TEMP、SSCOPE)之項目。此最後實例表明使WLAST發信號通知針對一kvset或類似者之一寫入215之完成(將為樹205所知但未為儲存子系統225所知)之有用性。
在一實例中,控制器235可實施一最近最少使用(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,timestamp)取代,其中timestamp係選擇之後的當前時間。
若S-SSID(DID,TEMP)項目少於A-SID(DID,TEMP)項目,則該技術自A-SID(DID,TEMP)選擇一串流ID SID,使得S-SID(DID,TEMP)中不存在具有選定串流ID之項目且在S-SID表245中針對(DID,TEMP,SSCOPE,SID,timestamp)產生一項目,其中timestamp係選擇之後的當前時間。
一旦找到或產生來自S-SID表245之項目,便將串流ID SID傳回至儲存子系統225。在一實例中,若WLAST為真,則刪除S-SID表245中針對(DID,TEMP,SSCOPE,SID,timestamp)之項目。
在操作中,控制器235經組態以針對接收為寫入請求215之部分之一給定串流映射元組指派一穩定性值。一旦判定該穩定性值,控制器235便經配置以指派SID。溫度指派技術及串流指派技術可各引用及更新A-SID表240及S-SID表245。在一實例中,控制器235亦經配置以將SID提供給一請求者,諸如儲存子系統225。
基於KVS樹範疇使用串流ID允許將類似資料共置於多串流儲存器件260上之擦除區塊270中。此減少器件上之廢棄項目收集且因此可增加器件效能及壽命。此益處可延伸至多個KVS樹。可將KVS樹用於一森林或樹林中,藉此使用若干KVS樹來實施單個結構,諸如一檔案系統。例如,一個KVS樹可將區塊編號用作索引鍵且將區塊中之位元用作一值,而一第二KVS樹可將檔案路徑用作索引鍵且將一區塊編號清單用作值。在此實例中,由路徑引用之一給定檔案之kvset及保存區塊編號之
kvset可能具有類似壽命。因此包含上述FID。KVDB中之KVS樹可或可不相關。因此,即使在一KVDB之組合內容背景中,用於串流指派之一KVS樹範疇亦可係適當的。然而,將FID用作一KVDB識別符允許流指派在KVDB或不共用一共同根系統之KVS樹集合中類似地運作。
上文所描述之結構及技術在實施KVDB之系統及儲存器件(諸如快閃儲存器件)中提供數個優點。在一實例中,實施儲存於一或多個儲存器件上之若干KVDB之一運算系統可使用KVDB(或其中含有之KVS樹)之知識來更有效地選擇多串流儲存器件中之串流。例如,該系統可經組態使得基於任何給定儲存器件上之串流之數目限制同時寫入操作(例如,攝取或壓縮)之次數,該等串流經留存用於指派給由此等寫入操作寫入之kvset資料之溫度分類。此係可能的,因為在一kvset內彼資料之預期壽命係相同的,因為kvset經完整地寫入及刪除。如別處所述,可分離索引鍵及值。因此,一kvset之一索引鍵寫入將具有可能短於例如如下文所論述般執行索引鍵壓縮時之值壽命之單個壽命。另外,樹層級看似資料壽命之一強指示;較舊資料及因此較大(例如,較深)樹層級具有長於較新資料及較高樹層級之一壽命。
以下案例可進一步闡明串流映射電路230之操作以限制寫入,考量:
A)溫度值{HOT,COLD},其中一給定儲存器件上之H串流用於分類為HOT之資料且一給定儲存器件上之C串流用於分類為COLD之資料。
B)一溫度指派方法,其係使用運算為(LNUM)之TSCOPE來組態,藉此寫入至任何KVDB中之一基底層級0之資料被指派一溫度值HOT,
且寫入至任何KVDB中之L1或更高之資料被指派一溫度值COLD。
C)一LRU串流指派方法,其係使用運算為(TID,LNUM)之SSCOPE來組態,其中TID係後續層級中之一KVS樹識別符且如上所述在基底層級(例如,具有異類kvset)中組態。
在此情況下,同時攝取及壓縮操作之總次數-產生一寫入之操作-針對全部KVDB,遵循此等條件:全部KVDB之同時攝取操作至多為H-因為用於全部攝取操作之資料經寫入至KVDB中之層級0且因此將經分類為HOT-且同時壓縮操作至多為C-因為用於全部溢出壓縮及大多數其他壓縮操作之資料經寫入至層級1或更高層級且因此將經分類為COLD。
其他此等限制係可能的且取決於KVDB及控制器235之特定實施細節可係有利的。例如,給定如上文所組態之控制器235,攝取操作之次數係H之一分率(例如,一半)且壓縮操作之次數係C之一分率(例如,四分之三)可係有利的,因為SSCOPE經運算為(TID,LNUM)之LRU串流指派可不利用一串流映射元組中之WLAST以在接收TID中之一給定KVSET之最後寫入後移除不需要之S-SID表245項目,從而導致一次最佳SID選擇。
儘管上文在KVDB及KVS樹之內容背景中描述串流映射電路230之操作,但其他結構(諸如LSM樹實施方案)可同樣受益於本文中所提出之概念。許多LSM樹變體儲存索引鍵值對及標記刪除之集合,藉此一給定集合可藉由一攝取操作或廢棄項目收集操作(通常稱為壓縮或合併操作)產生,且接著隨後由於一後續攝取操作或廢棄項目收集操作而全部被刪除。因此,包括此一集合之資料具有一類似壽命,如同包括一KVS樹中
之一kvset之資料。因此,可針對大多數其他LSM樹變體定義類似於上述串流映射元組之一元組,其中KVSETID可由用於藉由一給定LSM樹變體中之一攝取操作或廢棄項目收集操作產生之索引鍵值對或標記刪除之集合之一唯一識別符取代。接著可如所描述般使用串流映射電路230來選擇用來儲存包括索引鍵值對及標記刪除之此一集合之資料之複數個寫入命令之串流識別符。
圖3繪示根據一實施例之用來促進寫入至一多串流儲存器件之一方法300之一實例。方法300之操作係使用諸如在本申請案全文中(包含下文關於圖21)所描述之電子硬體(例如,電路)來實施。方法300提供數個實例以實施上文關於圖2之論述。
在操作305,例如,自一應用程式、作業系統、檔案系統等接收對一多串流儲存器件之一KVS樹寫入請求之通知。在一實例中,通知包含對應於寫入請求中之資料之一KVS樹範疇。在一實例中,該KVS樹範疇包含以下至少一者:對應於資料之一kvset之一kvset ID;對應於與資料對應之KVS樹之一節點之一節點ID;對應於與資料對應之一樹層級之一層級ID;KVS樹之一TID;對應於KVS樹所屬之森林之一FID;或對應於資料之一類型。在一實例中,該類型係一索引鍵區塊類型或一值區塊類型。如上所述,FID可對應於kvset所屬之一KVDB。在一實例中,將TID設定為一異質kvset中之一常數。在一實例中,將TID設定為一異質kvset中之FID。在一實例中,多個KVS樹之TID係異質kvset之KVDB中之一個選定KVS樹之TID。在此,選定TID在KVDB之壽命內不會改變(或至少在KVDB保存任何kvset時)。
在一實例中,通知包含多串流器件之一器件ID。在一實例
中,通知包含對應於一寫入請求序列中之最後寫入請求之一WLAST旗標,以將由kvset ID識別之一kvset寫入至多串流儲存器件。
在操作310,基於KVS樹範疇及寫入請求之一穩定性值將一串流識別符(ID)指派給寫入請求。在一實例中,指派該穩定性值包含:針對對應於一樹層級之一層級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包含:比較來自選定串流資料結構之項目之一第一數目與來自可用串流資料結構之項目之一第二數目,以判定項目之第一數目與之項目第二數目相等;自選定串流資料結構定位對應於穩定性值之一項目群組;及傳回該項目群組中具有最舊時間戳記之一項目之一串流ID。在一實例中,基於選定串流資料結構之內容自選定串流資料結構或一可用串流資料結構定位串流ID包含:比較來自選定串流資料結構之項目之一第一數目與來自可用串流資料結構之項目之一第二數目,以判定項目之第一數目與項目之第二數目不相等;使用選定串流資料結構之項目中之穩定性值及串流ID對可用串流資料結構執行一查找;接收包含不在選定串流資料結構之項目中之一串流ID之一查找結果;及將一項目新增至選定串流資料結構,該項目包含串流ID、串流範疇值及新增該項目之一時間之一時間戳記。
在一實例中,基於KVS樹範疇及寫入請求之穩定性值將串流ID指派給寫入請求亦包含自選定串流資料結構傳回對應於串流範疇之一
串流ID(例如,提供給一呼叫應用程式)。在一實例中,自選定串流資料結構傳回對應於串流範疇之串流ID包含更新對應於串流ID之選定串流資料結構中之一項目之一時間戳記。在一實例中,寫入請求包含一WLAST旗標,且其中自選定串流資料結構傳回對應於串流範疇之串流ID包含自選定串流資料結構移除對應於串流ID之一項目。
在一實例中,方法300可延伸至包含自選定串流資料結構移除具有超過一臨限值之一時間戳記之一項目。
在操作315,傳回串流ID以管控至寫入請求之串流指派,其中串流指派修改多串流儲存器件之一寫入操作。
在一實例中,方法300可視情況延伸至包含基於KVS樹範疇指派穩定性值。在一實例中,穩定性值係一預定義組之穩定性值之一者。在一實例中,該預定義組之穩定性值包含HOT、WARM及COLD,其中HOT指示多串流儲存器件上之資料之一最低預期壽命,且COLD指示多串流儲存器件上之資料之一最高預期壽命。
在一實例中,指派穩定性值包含使用KVS樹範疇之一部分自一資料結構定位穩定性值。在一實例中,KVS樹範疇之部分包含資料之一層級ID。在一實例中,KVS樹範疇之部分包含資料之一類型。
在一實例中,KVS樹範疇之部分包含資料之一樹ID。在一實例中,KVS樹範疇之部分包含資料之一層級ID。在一實例中,KVS樹範疇之部分包含資料之一節點ID。
圖4係繪示根據一實施例之索引鍵及值之一儲存組織之一實例之一方塊圖。可使用保存索引鍵(根據需要連同標記刪除)之索引鍵區塊及保存值之值區塊來儲存一kvset。針對一給定kvset,索引鍵區塊亦可
含有索引及其他資訊(諸如布隆篩選),其等用於有效地定位單個索引鍵,定位一索引鍵範圍,或產生kvset中之全部索引鍵(包含索引鍵標記刪除)之總排序,及用於獲得與彼等索引鍵相關聯之值(若有)。
圖4中表示單個kvset。索引鍵區塊包含包括標頭405之一主索引鍵區塊410及包括一延伸標頭417之一延伸索引鍵區塊415。值區塊分別包含標頭420及440以及值425、430、435及445。第二值區塊亦包含自由空間450。
kvset之一樹表示被繪示為跨越索引鍵區塊410及415。在此圖解中,葉節點含有對值425、430、435及445之值引用(VID),以及具有標記刪除之兩個索引鍵。此繪示:在一實例中,標記刪除在一值區塊中不具有一對應值,即使其可稱為索引鍵值對之一類型。
值區塊之圖解表明,各值區塊可具有一標頭及靠近彼此而無界限之值。對一值(諸如值425)之值區塊中之特定位元之引用通常例如以一位移及範圍格式儲存於對應索引鍵項目中。
圖5係繪示根據一實施例之KVDB攝取之一方塊圖。在一KVDB中,如同一KVS樹,將一新kvset寫入至基底層級510之程序稱為攝取。索引鍵值對505(包含標記刪除)經累積於KVDB之基底層級510中(其可在記憶體中開始),且經組織成自最新kvset 515至最舊kvset 520排序之kvset。
當(例如,用項目)填充基底層級時,溢出kvset 525將基底層級節點510中之最舊kvset 520中之索引鍵值對及標記刪除寫入至KVDB之一後續層級節點530或540中之一新(及最新)kvset 535,且接著自基底層級510刪除彼kvset 520。在基底層級內,可發生自一記憶體中節點溢出至
一區塊可定址節點之一類似形式。在此例項中,除決定性映射之外,該程序保持相同。在存在單個記憶體中節點及單個根區塊可定址節點之情況下,決定性映射僅自記憶體中節點指向根區塊可定址節點。若存在多個區塊可定址根節點,則可使用不同於基底層級與後續層級之間使用的決定性映射之一決定性映射。
不同於KVS樹操作,基底層級節點510中之kvset係異質的,含有來自一個以上KVS樹之項目(例如,索引鍵值對)。如上所述,異類kvset中之項目維持與其KVS樹之一關聯,以例如允許多個樹具有相同索引鍵(例如,索引鍵唯一性係由TID及索引鍵之一組合判定),且亦基於KVS樹關聯(例如,分別由節點530及540上之徽章指示之KVS樹T1或T2)啟用自基底層級節點510至一後續層級節點530或540之第一決定性映射(例如,由溢出kvset 525繪示)。因此,TID允許自異質kvset 520至同質kvset 535及545之溢出。
圖6繪示根據一實施例之用於KVDB攝取之一方法600之一實例。方法600之操作係使用諸如在本申請案全文中(包含下文關於圖21)所描述之電子硬體(例如,電路)來實施。
在操作605,接收一kvset以儲存於一KVDB中。在此,將KVDB組織為具有一共同根系統之KVS樹之一樹。kvset包含KVDB之基底層級處之多個KVS樹之唯一索引鍵至值之一映射。kvset之索引鍵及值係不可變的,且樹之節點具有kvset之一時間有序序列。
在一實例中,當將一kvset寫入至至少一個儲存媒體時,該kvset係不可變的。在一實例中,將kvset之索引鍵項目儲存於一組索引鍵區塊中,該組索引鍵區塊包含一主索引鍵區塊及零或多個延伸索引鍵區
塊。在此,該組索引鍵區塊之成員對應於至少一個儲存媒體之媒體區塊,其中各索引鍵區塊包含用來將其識別為一索引鍵區塊之一標頭。
在一實例中,主索引鍵區塊包含kvset之一或多個延伸索引鍵區塊之一媒體區塊識別碼清單。在一實例中,主索引鍵區塊包含該組值區塊中之值區塊之一媒體區塊識別碼清單。在一實例中,主索引鍵區塊包含kvset之一索引鍵樹中之一最低索引鍵之一複本,該最低索引鍵由樹之一預設定排序順序判定。在一實例中,主索引鍵區塊包含kvset之一索引鍵樹中之一最高索引鍵之一複本,該最高索引鍵由樹之一預設定排序順序判定。在一實例中,主索引鍵區塊包含kvset之一索引鍵樹之一標頭。在一實例中,主索引鍵區塊包含kvset之一索引鍵樹之一媒體區塊識別碼清單。在一實例中,主索引鍵區塊包含kvset之一布隆篩選之一布隆篩選標頭。在一實例中,主索引鍵區塊包含kvset之一布隆篩選之一媒體區塊識別碼清單。
在一實例中,將值儲存於一組值區塊操作605中。在此,該組值區塊之成員對應於至少一個儲存媒體之媒體區塊,其中各值區塊包含用來將其識別為一值區塊之一標頭。在一實例中,一值區塊包含一或多個值之儲存區段,而在值之間無分離。
在一實例中,主索引鍵區塊包含用於kvset之一組度量。在一實例中,該組度量包含儲存於kvset中之索引鍵之一總數目。在一實例中,該組度量包含具有儲存於kvset中之標記刪除值之索引鍵之一數目。在一實例中,該組度量包含儲存於kvset中之索引鍵之全部索引鍵長度之一總和。在一實例中,該組度量包含儲存於kvset中之索引鍵之全部值長度之一總和。在一實例中,該組度量包含kvset之值區塊中之一未引用資
料量。
在操作610,將kvset寫入至KVDB之一基底層級之一kvset序列。
方法600可經延伸以包含操作615至625。
在操作615,(例如,自一呼叫者)接收儲存於索引鍵值資料結構中之一TID、一索引鍵及一對應值。
在操作620,將TID、索引鍵及值放置於一初步kvset中,該初步kvset係可變的。在一實例中,寫入至第一基底層級節點(操作610)之一速率超過一臨限值。在此實例中,方法600可經延伸以節流(throttle)對KVDB之寫入請求。在此,節流可包含延遲至呼叫者之一傳回或應答。
在操作625,當達到一度量時,將kvset寫入至KVDB中之另一節點。在一實例中,該度量係第一基底層級節點之一大小。在一實例中,該度量係一經過時間。
一旦發生攝取,可採用各種維護操作來維持其中含有之KVDB或KVS樹。例如,若在某一時間使用一第一值寫入一索引鍵且在稍後時間使用一第二值寫入一索引鍵,則移除第一索引鍵值對將釋放空間或縮減搜尋時間。為解決一些此等問題,KVDB可使用壓縮。下文關於圖7至圖16論述若干壓縮操作之細節。所繪示之壓縮操作係廢棄項目收集之形式,因為其等可在合併期間移除過時資料,諸如索引鍵或索引鍵值對。
壓縮在各種觸發條件下發生,諸如當一節點中之kvset滿足指定或運算準則時。此壓縮準則之實例包含kvset之總大小或kvset中之廢棄項目量。kvset中之廢棄項目之一個實例係例如藉由一較新kvset中之一索引鍵值對或標記刪除或已違反一存留時間約束之一索引鍵值對等等而呈
現為過時之一個kvset中之索引鍵值對或標記刪除。kvset中之廢棄項目之另一實例係源自索引鍵壓縮之值區塊(未引用值)中之未引用資料。
通常,至一壓縮操作之輸入係在滿足壓縮準則時一節點中之一些或全部kvset。此等kvset稱為合併集且包括兩個或更多個kvset之一時間連續序列。
由於通常在攝取新資料時觸發壓縮,故方法600可經延伸以支援壓縮,然而,例如當存在自由處理資源或其他方便案例以執行維護時,亦可觸發以下操作。因此,可壓縮KVDB。在一實例中,回應於一觸發而執行壓縮。在一實例中,該觸發係一時間週期之期滿。
在一實例中,該觸發係節點之一度量。在一實例中,該度量係節點之kvset之一總大小。在一實例中,該度量係節點之kvset之一數目。在一實例中,該度量係節點之未引用值之一總大小。在一實例中,該度量係未引用值之一數目。
圖7係繪示根據一實施例之索引鍵壓縮之一方塊圖。索引鍵壓縮自合併集讀取索引鍵及標記刪除而非值(例如,壓縮全部kvset之組合),移除全部過時索引鍵或標記刪除,將所得索引鍵及標記刪除寫入至一或多個新kvset中(例如,藉由寫入至新索引鍵區塊中),自節點刪除索引鍵庫而非值。新kvset原子地取代且邏輯上等效於節點中之kvset自最新至最舊之邏輯排序內之內容及放置兩者中之合併集。在KVDB之異質kvset(例如,基底層級節點中之kvset)中,與後續層級節點中之同質kvset相比,考量一項目之TID以及索引鍵以判定過時或標記刪除匹配。
如所繪示,異質kvset KVS3(最新)、KVS2及KVS1(最舊)經歷針對節點705之索引鍵壓縮。當合併此等kvset之索引鍵儲存區時,在
索引鍵B而非索引鍵A上發生衝突,因為索引鍵A在兩個不同KVS樹中存在一次(由TID 1及TID 2表示),而索引鍵B在單個KVS樹中存在兩次(由TID 2表示)。作為新kvset,在亦考慮TID時KVS4(在節點705之較低版本中所繪示)可僅含有各合併索引鍵之一者,參考索引鍵B之值ID 11,若存在衝突,則以最近(如所繪示,最左)索引鍵為準。索引鍵A及C無衝突且因此包含於新kvset KVS4中。為繪示,將係新kvset KVS4之部分之索引鍵項目在頂部節點中加陰影。
出於闡釋性目的,KVS4被繪製為跨越節點705中之KVS1、KVS2及KVS3,且值項目被繪製在節點705中之一類似位置中。此等位置之目的表明值在一索引鍵壓縮中不會改變,相反僅索引鍵會改變。如下文所解釋,此藉由減少任何給定節點中搜尋之kvset之數目來提供一更有效搜尋,且亦可提供有價值見解以指導維護操作。亦應注意,值20係用一虛線繪示,表示其在節點中持續存在但不再由一索引鍵項目引用,因為在壓縮中移除其各自索引鍵項目。
索引鍵壓縮係非阻塞的,因為在壓縮期間可將一新kvset(例如,KVS5)放置於KVS3或KVS4之最新位置(例如,左側)中,因為根據定義,所新增kvset將在邏輯上新於源於索引鍵壓縮之kvset(例如,KVS4)。
圖8繪示根據一實施例之用於一索引鍵壓縮之一方法800之一實例。方法800之操作係使用諸如在本申請案全文中(包含下文關於圖21)所描述之電子硬體(例如,電路)來實施。
在操作805,自節點之一kvset序列選擇一kvset子集。在一實例中,該kvset子集係連續kvset且包含一最舊kvset。
在操作810,定位一組衝突索引鍵。該組衝突索引鍵之成員包含該節點之kvset序列中之至少兩個kvset中之索引鍵項目。在一KVDB之一同質kvset中,衝突可僅僅基於索引鍵。在KVDB之異質kvset中,衝突基於索引鍵及TID之一組合,使得具有相同TID之相同索引鍵係一衝突,而具有不同TID之相同索引鍵並非一衝突。
在操作815,將該組衝突索引鍵之各成員之一最新近索引鍵項目新增至一新kvset。若該新kvset係一異質kvset,則亦將對應於索引鍵之TID新增至該新kvset。在其中節點不具有子節點且kvset子集包含最舊kvset之一實例中,將該組衝突索引鍵之各成員之最新近索引鍵項目寫入至新kvset且將不在該組衝突索引鍵中之kvset子集之成員中之各索引鍵之項目寫入至新kvset包含省略包含一標記刪除之任何索引鍵項目。在其中節點不具有子節點且kvset子集包含最舊kvset之一實例中,將該組衝突索引鍵之各成員之最新近索引鍵項目寫入至新kvset且將不在該組衝突索引鍵中之kvset子集之成員中之各索引鍵之項目寫入至新kvset包含省略包含任何期滿索引鍵項目。
在操作820,將不在該組衝突索引鍵中之kvset子集之成員中之各索引鍵之項目新增至新kvset。在一實例中,操作820及815可同時操作以將項目新增至新kvset。
在操作825,藉由寫入新kvset且移除(例如,刪除、標記以便刪除等)kvset子集,用新kvset取代kvset子集。
圖9係繪示根據一實施例之索引鍵值壓縮之一方塊圖。索引鍵值壓縮在其值處理方面不同於索引鍵壓縮。索引鍵值壓縮自合併集讀取索引鍵值對及標記刪除,刪除過時索引鍵值對或標記刪除,將所得索引
鍵值對及標記刪除寫入至相同節點905中之一或多個新kvset,且自節點905刪除包括合併集之kvset。新kvset原子地取代且邏輯上等效於節點905中之kvset自最新至最舊之邏輯排序內之內容及放置兩者中之合併集。再者,在一異質節點(如圖9中所繪示),使用TID及索引鍵之一組合判定衝突。
如所繪示,kvset KVS3、KVS2及KVS1包括合併集。陰影索引鍵項目及值將保持於合併集中且放置於新KVS4中,經寫入至節點905以取代KVS3、KVS2及KVS1。再者,如上文關於索引鍵壓縮所繪示,若存在索引鍵B之索引鍵衝突,則以最新近項目為準。索引鍵值壓縮與索引鍵壓縮不同之處在於未引用值之移除。因此,在此,KVS4被繪示為僅消耗用來保存其當前索引鍵及值之空間。
在實踐中,例如,當索引鍵及值單獨儲存於索引鍵區塊及值區塊中時,KVS4包含新索引鍵區塊(如同索引鍵壓縮之結果)及新值區塊(不同於索引鍵壓縮之結果)兩者。然而,再者,在正執行索引鍵值壓縮時,索引鍵值壓縮不阻止將額外kvset寫入至節點905,因為所新增kvset在邏輯上將新於KVS4、索引鍵值壓縮之結果。據此,KVS4被繪示為在節點905之最舊位置(例如,右側)中。
圖10繪示根據一實施例之用於索引鍵值壓縮之一方法1000之一實例。方法1000之操作係使用諸如在本申請案全文中(包含下文關於圖21)所描述之電子硬體(例如,電路)來實施。
在操作1005,自節點之一kvset序列選擇一kvset子集(例如,一合併集)。在一實例中,該kvset子集係連續kvset且包含一最舊kvset。
在操作1010,定位一組衝突索引鍵。該組衝突索引鍵之成員包含該節點之kvset序列中之至少兩個kvset中之索引鍵項目。在異質kvset中,衝突索引鍵係索引鍵及TID之一匹配組合,而在同質kvset中,衝突僅僅係匹配索引鍵。
在操作1015,將該組衝突索引鍵之各成員之一最新近索引鍵項目及對應值新增至一新kvset。在其中節點不具有子節點且合併集包含最舊kvset之一實例中,將該衝突索引鍵集合之各成員之最新近索引鍵項目寫入至新kvset且將不在該組衝突索引鍵中之kvset子集之成員中之各索引鍵之項目寫入至新kvset包含省略包含一標記刪除之任何索引鍵項目。在一實例中,其中節點不具有子節點,且其中合併集包含最舊kvset,將不在該組衝突索引鍵中之kvset子集之成員中之各索引鍵之項目寫入至新kvset包含省略任何期滿索引鍵項目。
在操作1020,將不在該組衝突索引鍵中之kvset子集之成員中之各索引鍵及值之項目新增至新kvset。
在操作1025,藉由寫入新kvset(例如,至儲存器)且移除kvset子集,用新kvset取代kvset子集。
下文關於圖13至圖16所論述之溢出及提升壓縮係索引鍵值壓縮之一形式,其中所得kvset分別放置於一子節點或一父節點中。當各壓縮遍歷KVDB且KVDB執行父節點與子節點之間之一決定性映射時,在論述此等其他壓縮操作之前,在此提出此決定性映射之一簡要論述。
圖11繪示根據一實施例之一溢出值及其與一KVDB之關係之一實例。如上所述,KVDB包含一基底層級與一後續層級之間的一第一決定性映射、後續層級之間的一第二決定性映射及(可能)基底層級之間的
一第三決定性映射。決定性映射確保給定一KVS樹及一索引鍵,吾人可知一索引鍵值對將映射至哪個KVDB節點而無關於KVDB之內容。一各自溢出函數接受一索引鍵且產生對應於KVDB之決定性映射之一各自溢出值。在一實例中,溢出函數接受索引鍵及一當前樹層級兩者,且針對處於彼樹層級處之索引鍵產生特定於一父節點或一子節點之一溢出值。
藉由解釋之方式,一簡單決定性映射(圖11中未繪示)可包含例如一字母映射,其中針對由字母字元組成之索引鍵,各樹層級包含用於字母表之各字母之一子節點,且該映射依次使用索引鍵之字元;諸如第一字元判定L1子節點,第二字元判定L2子節點,等等。針對第一決定性映射,TID可前置於索引鍵。雖然簡單且滿足KVDB之決定性映射,但此技術在一定程度上遭受剛性、KVDB中之不良平衡及對扇形之控制之缺乏。
一更佳技術係對索引鍵執行一雜湊且為各樹層級映射指定雜湊之部分。此確保索引鍵在其等遍歷KVDB時均勻地擴散(假定一恰當雜湊技術),且藉由針對任何給定樹層級選擇雜湊部分之大小來控制扇出。此外,由於雜湊技術通常允許組態所得雜湊之大小,例如可確保足夠數目個位元,從而避免上文所論述之簡單技術之一問題,其中一短字(諸如「該(the)」))僅具有足夠字元用於三層級樹。再者,可在雜湊之前將TID新增至索引鍵以產生第一決定性映射。在一實例中,使用TID來識別一組子節點及對應於彼等TID之索引鍵之一雜湊,彼等TID選擇將一給定項目映射至該組子節點之哪一者。
圖11繪示一後續層級索引鍵雜湊之一結果,其中部分1103、1105、1110及1115分別對應於樹T1(具有TID 1101)之L1、L2、
L3及L4。如所繪示,T2具有單個後續層級節點以接受一基底層級至後續層級轉變。據此,T2之TID 1101對於自基底層級至T2後續層級之一索引鍵值項目轉變係決定性的。因此,無需(例如,不使用)T2之一L1部分1103類比。使用給定索引鍵雜湊及TID 1101,KVDB之一遍歷沿虛線及節點前進。具體言之,開始於一基底層級節點1120,部分1103使用第一決定性映射(例如,TID 1101及部分1103)將一T1項目遍歷引導至節點1122。接著,部分1105將T1後續層級遍歷引導至節點1125(例如,使用本文中所論述之第二決定性映射)。接著,部分1110將該遍歷引導至節點1130。該遍歷在部分1115可能基於所繪示索引鍵雜湊之大小及分派指向最深樹層級處之節點1135時完成。應注意,第二決定性映射係KVS樹特定的。因此,T2後續層級之第二決定性映射可不同於T1後續層級之第二決定性映射。
在一實例中,針對一給定索引鍵K,索引鍵K之一雜湊(或索引鍵K之一子索引鍵)稱為索引鍵K之溢出值。應注意,兩個不同索引鍵可具有相同溢出值。當採用子索引鍵來產生溢出值時,通常期望此發生以啟用如下文所論述之首碼掃描或標記刪除。再者,TID是否包含於溢出值中取決於源節點。在一實例中,TID不用於基底層級內映射或後續層級內映射之溢出值中,而是用於基底層級至後續層級映射中。
在一實例中,針對一給定KVDB,一給定索引鍵K之溢出值係一常數,且溢出值之二元表示包含B個位元。在此實例中,一溢出值中之B個位元被編號為0至(B-1)。亦在此實例中,KVDB經組態使得樹層級L處之節點皆具有相同數目個子節點,且此子節點數目係大於或等於2之2的整數次冪。此行為特定於層級移動中之索引鍵雜湊。然而,在自一
基底層級轉變至一後續層級時,亦考量KVS樹。在此,索引鍵雜湊特性將在一個KVS樹內產生上述子節點約束,然而,可存在許多KVS樹且因此總子節點計數係基於此KVS樹數目。在此組態中,可如下文所闡釋般使用用於索引鍵分配之一索引鍵K之溢出值之位元。
針對KVDB中之一層級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之子節點編號。
其中層級(Level)係KVDB內之KVS樹中之一層級編號;子節點計數(Child node count)係針對指定層級處之全部節點組態之子節點之數目;溢出值位元(Spill value bit)係溢出壓縮用於指定層級處之索引
鍵分配之溢出值位元編號;索引鍵K溢出值(Key K spill value)係給定索引鍵K之給定16位元溢出值之二元表示,尤其是0110011110100011-為清楚起見,溢出值被分段為溢出壓縮用於指定層級處之索引鍵分配之位元;且選定子節點(Child node selected)係溢出壓縮選擇用於具有給定溢出值之任何(非過時)索引鍵值對或標記刪除之子節點編號-此包含具有給定索引鍵K之全部(非過時)索引鍵值對或標記刪除,以及不同於索引鍵K之可具有相同溢出值之其他索引鍵。再者,此係索引鍵提供一決定性映射之機制。然而,在KVDB中,可在基底層級之間、在後續層級之間及在一基底層級與一後續層級之間使用不同決定性映射。
在一實例中,針對一給定KVDB及決定性映射,溢出值運算及溢出值大小(以位元為單位)對於全部索引鍵可係相同的。如上所述,使用一恰當雜湊允許控制溢出值中之位元之數目,同時亦例如確保一溢出值大小足以容納所要數目個樹層級及各層級處之節點之所要數目個子節點。在一實例中,針對一給定KVS樹,一索引鍵K之溢出值可根據需要經運算或儲存於儲存媒體(例如,快取區)上。
圖12繪示根據一實施例之用於一溢出值函數之一方法1200之一實例。方法1200之操作係使用諸如在本申請案全文中(包含下文關於圖21)所描述之電子硬體(例如,電路)來實施。
在操作1205,判定一索引鍵分配。索引鍵分配定義索引鍵之子劃分(sub-divisions),使得針對一給定節點及一給定索引鍵K,該節點之每一子節點藉由相對於該節點之索引鍵之一部分而唯一地定址。此決定性技術可取決於是否父節點及子節點為基底層級節點、是否父節點為基
底層級節點且子節點為後續層級節點或者是否父節點及子節點為後續層級節點而不同,在一實施例中,使用基於基數之索引鍵分配方法。
在操作1210,提取一索引鍵之一部分。在一實例中,索引鍵之部分係整個索引鍵。
在操作1215,使用基於一KVDB節點遍歷(例如,基底層級至後續層級)選擇之一組決定性映射之一決定性映射,自索引鍵之部分導出一溢出值。在一實例中,自索引鍵之部分導出溢出值包含執行索引鍵之部分之一雜湊。
在操作1220,基於父節點之樹層級傳回溢出值之一部分。在一實例中,基於父節點之樹層級傳回溢出值之部分包含將一預設定分派應用於溢出值,且傳回對應於預設定分派及父節點之樹層級之溢出值之部分。在此,預設定分派定義應用於KVDB之各自層級之溢出值之部分。
在一實例中,預設定分派定義至少一些樹層級之子節點之一最大數目。在一實例中,預設定分派定義樹之一最大深度。在一實例中,預設定分派定義一位元計數序列,各位元計數指定一位元數目,該序列自低樹層級至高樹層級排序,使得最低樹層級之溢出值部分等於與以溢出值之開端開始之第一位元計數相等之一位元數目,且第n樹層級之溢出值部分等於該位元序列中之第n位元計數,具有開始於第一位元計數且結束於n減去一個位元計數之位元計數之總和之溢出值之一位移。
圖13係繪示根據一實施例之自一基底層級節點至一後續層級節點之溢出壓縮之一方塊圖。如上所述,溢出壓縮係一索引鍵值壓縮與一樹遍歷(至一子節點)之一組合以放置所得kvset。因此,溢出壓縮(或僅溢出)自合併集讀取索引鍵值對及標記刪除,移除全部過時索引鍵值對或
標記刪除(廢棄項目),將所得索引鍵值對及標記刪除寫入至含有合併集之節點之一些或全部子節點中之新kvset,及刪除包括合併集之kvset。此等新kvset原子地取代且邏輯上等效於合併集。因為此溢出壓縮不在基底層級節點或後續層級節點之間,故項目之KVS樹(例如,TID)影響溢出值。後續層級節點係用其等所屬之各自KVS樹(例如,T1、T2及T3)予以加標籤。
溢出壓縮使用用於將一合併集中之索引鍵值對及標記刪除分配至含有該合併集之節點之子節點之一決定性技術。具體言之,溢出壓縮可使用任何此索引鍵分配方法,使得針對一給定節點及一給定索引鍵K,溢出壓縮始終將具有索引鍵K之任何(非過時)索引鍵值對或標記刪除寫入至彼節點之相同子節點。在一KVDB中,該決定性技術可取決於父節點及子節點是否為基底層級節點、父節點是否為一基底層級節點且子節點是否為一後續節級節點,或父節點及子節點是否為後續節級節點而不同。在一實施例中,溢出壓縮使用一基於基數之索引鍵分配方法,諸如下文詳細提出之實例中之索引鍵分配方法。
為促進理解溢出,父節點包含包括合併集之兩個kvset。兩個kvset中之TID感知索引鍵值對1305、1310及1315分別具有分別對應於父節點之四個子節點之三者之溢出值。因此,將索引鍵值對1305放置至新kvset X(一T1節點)中,將索引鍵值對1310放置至新kvset Y(亦係一T1節點)中,且將索引鍵值對1315放置至新kvset Z(一T3節點)中,其中各新kvset經寫入至對應於溢出值之子節點。亦應注意,新kvset經寫入至各自子節點中之最新(例如,最左)位置。
在一實例中,用於一溢出壓縮之合併集必須包含含有合併
集之節點中之最舊kvset。在一實例中,若含有合併集之節點在一溢出壓縮開始時不具有子節點,則產生經組態數目個子節點。
正如上文所論述之其他壓縮,當正執行溢出壓縮時,可將新kvset新增至含有用於一溢出壓縮之合併集之節點,因為根據定義,此等所新增kvset將不在用於溢出壓縮之合併集中且因為此等所新增kvset將在邏輯上新於源自溢出壓縮之kvset。
圖14繪示根據一實施例之用於溢出壓縮之一方法1400之一實例。方法1400之操作係使用諸如在本申請案全文中(包含下文關於圖21)所描述之電子硬體(例如,電路)來實施。
在操作1405,選擇kvset序列之一子集。在一實例中,該子集包含亦包含一最舊kvset之連續kvset。
在操作1410,基於基於節點之一位置選擇之一決定性映射計算kvset子集之各kvset之各索引鍵之一子映射。因此,若節點係一基底層級節點且其子節點係後續層級節點,則選擇一第一決定性映射,若節點係一後續層級節點則選擇一第二決定性映射,且若子節點係基底層級節點,則選擇一第三決定性映射。在此,子映射係基於一索引鍵、一父節點之一樹層級及(可能)一TID或類似者自該父節點至一子節點之一決定性映射。
在操作1415,基於各kvset集經映射至恰好一個子節點之子映射將索引鍵、(可能)TID及對應值收集至kvset中。在此收集期間可能發生索引鍵衝突。如上文關於圖8及10所論述,若存在此一衝突,則以較新索引鍵項目為準。
在操作1420,將kvset寫入至各自子節點中之各自kvset序
列中之一最新位置。
在操作1425,自根節點移除kvset子集。
方法1400可經延伸以包含回應於在溢出操作之操作之後一子節點之一度量超過一臨限值而對該子節點執行一第二溢出操作。
圖15係繪示根據一實施例之自一後續層級節點至一基底層級節點之提升壓縮之一方塊圖。提升壓縮與溢出壓縮不同之處在於將新kvset寫入至一父節點。因此,提升壓縮或僅提升自合併集讀取索引鍵值對及標記刪除,移除全部過時索引鍵值對或標記刪除,將所得索引鍵值對及標記刪除寫入至含有合併集之節點之父節點中之新kvset,及刪除包括合併集之kvset。此等新kvset原子地取代且邏輯上等效於合併集。在此情況下,亦將TID或類似者寫入至新kvset。
當kvset自最新至最舊組織時,一提升壓縮包含含有合併集之節點中之最新kvset,且源自提升壓縮之kvset經放置於父節點中之kvset序列中之最舊位置中。不同於上文所論述之其他壓縮,為確保來自正被壓縮之節點之最新kvset處在合併集中,在正執行提升壓縮時,無法將新kvset新增至含有合併集之節點。因此,提升壓縮係一阻塞壓縮。
如所繪示,索引鍵值對KVS 1505及1510經合併至新KVS M 1515中且儲存於父節點之kvset序列中之最舊位置中。例如,當目標係減少一KVS樹中之層級之數目且由此增大搜尋KVS樹中之索引鍵之效率時,可將一提升壓縮應用於一合併集。
圖16繪示根據一實施例之用於提升壓縮之一方法1600之一實例。方法1600之操作係使用諸如在本申請案全文中(包含下文關於圖21)所描述之電子硬體(例如,電路)來實施。
在操作1605,對子節點執行一索引鍵及值壓縮以產生一新kvset而不將新kvset寫入至子節點。
在操作1610,將新kvset寫入至節點之一kvset序列之一最舊位置中之節點。
索引鍵值壓縮、溢出壓縮及提升壓縮操作可在實體上自一合併集移除過時索引鍵值對及標記刪除,且由此可減少儲存於一KVDB中之索引鍵值資料之量(例如,以位元組為單位)。如此做,此等壓縮操作自例如合併集中之值區塊讀取非過時值,且將此等值寫入至源自壓縮操作之kvset中之值區塊。
相反,一索引鍵壓縮操作可在實體上移除索引鍵(及標記刪除),但僅在邏輯上自一合併集移除值。因此,值實體上保持於源自索引鍵壓縮之kvset中。藉由減少彼節點中之kvset之數目同時避免由例如一索引鍵值壓縮操作引發之值區塊之額外讀取及寫入,索引鍵壓縮可增大搜尋含有合併集之節點中之索引鍵之效率。此外,索引鍵壓縮提供有用資訊以用於未來維護操作。歸因於如上文所描述之索引鍵區塊及值區塊中之索引鍵及值之分離,KVDB唯一地支援索引鍵壓縮。
上文所描述之KVDB維護技術(例如,壓縮)在滿足一觸發條件時操作。控制何時及何地(例如,哪些節點)發生維護可提供對處理、或時間之最佳化及增大之空間或搜尋效率。在維護期間或在攝取期間蒐集之一些度量可增強系統最佳化後期維護操作之能力。在此,此等度量基於如何運算度量而稱為廢棄項目度量或估計廢棄項目度量。此等廢棄項目度量之實例包含一節點中之過時索引鍵值對及標記刪除之數目或其等所消耗之儲存容量之量,及一節點中之值區塊中之未引用資料所消耗之儲存容量
之量。此等廢棄項目度量指示藉由對一節點之kvset執行例如一索引鍵值壓縮、溢出壓縮或提升壓縮可消除多少廢棄項目。
再者,針對一給定KVDB,運算或估計其節點之廢棄項目度量提供若干優點,包含可進行以下操作:A)優先將廢棄項目收集操作應用於具有最多廢棄項目之彼等節點,尤其是實體上移除過時索引鍵值對及標記刪除之廢棄項目收集操作,諸如索引鍵值壓縮、溢出壓縮及提升壓縮。以此方式優先化廢棄項目收集操作可增大其等效率且降低相關聯寫入放大率;或B)估計KVDB中之有效索引鍵值對之數目及過時索引鍵值對之數目,及由各類別所消耗之儲存容量之量。此等估計可用於報告KVDB之容量利用率。在一些情況下,直接運算一給定節點之廢棄項目度量係有利的,而在其他情況下,估計廢棄項目度量係有利的。因此,下文描述用於運算廢棄項目度量之技術及估計廢棄項目度量之技術兩者。
為促進收集廢棄項目度量,可蒐集或維持一些kvset統計。在一實例中,將此等統計維持於kvset集本身內,諸如kvset之一主索引鍵區塊標頭中。下文係可維持之kvset統計之一非詳盡清單:
A)索引鍵值對之數目
B)索引鍵標記刪除之數目
C)儲存索引鍵值對及標記刪除之全部索引鍵所需之容量
D)儲存索引鍵值對之全部值所需之容量
E)索引鍵大小統計,包含最小值、最大值、中值及平均值
F)值大小統計,包含最小值、最大值、中值及平均值
G)若kvset係一索引鍵壓縮之結果,則係未引用值之計數及由未引用值所消耗之容量。
H)任何索引鍵值對之最小及最大存留時間(TTL)值。一KVS樹可允許使用者在儲存一索引鍵值對時指定一TTL值,且若超過其壽命,則在一壓縮操作期間將移除索引鍵值對。
所運算廢棄項目度量涉及運算已知量以產生一已知結果。例如,若已知在一kvset中n個過時位元,則壓縮kvset之索引鍵值將導致釋放彼n個位元。所運算廢棄項目度量之一度量源係索引鍵壓縮。索引鍵壓縮在邏輯上移除過時索引鍵值對及標記刪除,且在實體上自一合併集移除冗餘索引鍵。然而,未引用資料可保留於源自索引鍵壓縮之kvset之值區塊中。因此,索引鍵壓縮導致知道新kvset中未引用之值及其等之大小。知道彼等值之大小允許準確地計數將在其他壓縮下釋放之儲存器。因此,當對一合併集執行一索引鍵壓縮時,可將所得kvset之各者之廢棄項目度量記錄於各自kvset中。可自一索引鍵壓縮維持之例示性廢棄項目度量包含:
A)kvset中之未引用值之計數
B)kvset中之未引用值之位元組
在一實例中,給定對一合併集之一第一索引鍵壓縮且給定在相同於該第一索引鍵壓縮之節點中之一第二索引鍵壓縮(其中用於該第二索引鍵壓縮之合併集包含源自該第一索引鍵壓縮之kvset),接著可將自該第一索引鍵壓縮記錄之廢棄項目度量新增至自該第二索引鍵壓縮記錄之類似廢棄項目度量。例如,若第一索引鍵壓縮操作導致具有指定未引用值之Ucnt計數之相關聯索引鍵壓縮廢棄項目度量之單個kvset S,則Ucnt可
包含於源自第二索引鍵壓縮操作之索引鍵壓縮廢棄項目度量中之未引用值之計數中。
在一實例中,針對一給定節點,若用於一索引鍵壓縮操作之合併集包含節點中之全部kvset,則所記錄之索引鍵壓縮廢棄項目度量可包含:
A)節點中之未引用值之計數
B)節點中之未引用值之位元組
顯然,若一給定節點中之每個kvset係一索引鍵壓縮操作之結果,則該節點之索引鍵壓縮廢棄項目度量係來自該節點中之個別kvset之各者之類似索引鍵壓縮廢棄項目度量之總和。
所估計廢棄項目度量提供估計來自對一節點執行一壓縮之增益之一值。通常,在不執行一索引鍵壓縮之情況下蒐集所估計廢棄項目度量。以下術語用於下文論述中。使:
A)T=給定節點中之kvset之數目
B)S(j)=給定節點中之一kvset,其中S(1)係最舊kvset且S(T)係最新kvset
C)KVcnt(S(j))=S(j)中之索引鍵值對之數目
D)NKVcnt=和(KVcnt(S(j))),其中j在1至T之範圍內
E)Kcap(S(j))=以位元組為單位儲存S(j)之全部索引鍵所需之容量
F)NKcap=和(Kcap(S(j))),其中j在1至T之範圍內
G)Vcap(S(j))=以位元組為單位儲存S(j)之全部值所需之容量
H)NVcap=和(Vcap(S(j))),其中j在1至T之範圍內
I)NKVcap=NKcap+NVcap
一種形式之所估計廢棄項目度量係歷史廢棄項目度量。歷史廢棄項目收集資訊可用來估計一給定節點之廢棄項目度量。此歷史廢棄項目收集資訊之實例包含但不限於:A)給定節點中之廢棄項目收集操作之先前執行中之過時索引鍵值對之分率之簡單、累加或加權移動平均數;或B)相同於給定節點之KVDB層級處之任何節點中之廢棄項目收集操作之先前執行中之過時索引鍵值對之分率之簡單、累加或加權移動平均數。
在上述實例中,廢棄項目收集操作包含但不限於索引鍵壓縮、索引鍵值壓縮、溢出壓縮或提升壓縮。
給定一節點,歷史廢棄項目收集資訊及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)=相同於給定節點之KVDB層級處之任何節點中之廢棄項目收集操作之最新近E執行中之過時索引鍵值對之部分之平均值,其中E係可組態的。在此實例中,給定節點之LevelSMA估計廢棄項目度量可包含:A)節點中之過時索引鍵值對之計數NKVcnt*LSMA(E);B)節點中之過時索引鍵值資料之位元組NKVcap*LSMA(E);C)節點中之有效索引鍵值對之計數NKVcnt-(NKVcnt*LSMA(E));或D)節點中之有效索引鍵值資料之位元組NKVcap-(NKVcap*LSMA(E))。
歷史廢棄項目度量之上述實例並非詳盡性,而是繪示正蒐集度量之類型。其他例示性歷史廢棄項目度量可包含節點累加移動平均(NodeCMA)廢棄項目度量、節點加權移動平均(NodeWMA)廢棄項目度量、層級累加移動平均(LevelCMA)廢棄項目度量或層級加權移動平均(LevelWMA)廢棄項目度量。
可用於維持索引鍵之kvset中之布隆篩選之KVDB之所估計廢棄項目度量之另一變體係布隆篩選廢棄項目度量。如上所述,一給定kvset可包含用來有效地判定kvset是否可能含有一給定索引鍵之一布隆篩選,其中在kvset中存在各索引鍵之kvset之布隆篩選中之一個項目。此等布隆篩選可用來估計一給定節點之廢棄項目度量。技術-諸如在Papapetrou、Odysseas等人Cardinality Estimation and Dynamic Length Adaptation for Bloom Filters,Distributed and Parallel Databases,201中
所論述之技術可用來近似計算由包括節點之kvset中之布隆篩選表示之索引鍵集合之交集之基數。此近似值在此稱為節點之布隆估計基數。
給定一節點,該節點之布隆估計基數及kvset統計允許以若干方式產生該節點之所估計廢棄項目度量。一例示性布隆篩選廢棄項目度量包含BloomDelta廢棄項目度量。使NBEC=給定節點中之T kvset之布隆估計基數,且Fobs=(NKVcnt-NBEC)/NKVcnt,其係給定節點中之過時索引鍵值對之分率之一估計。在此實例中,給定節點之BloomDelta廢棄項目度量可包含:A)節點中之過時索引鍵值對之計數NKVcnt-NBEC;B)節點中之過時索引鍵值資料之位元組NKVcap*Fobs;C)節點中之有效索引鍵值對之計數NBEC;或D)節點中之有效索引鍵值資料之位元組NKVcap-(NKVcap*Fobs)。
概率篩選與布隆篩選不同之處在於,可近似計算由兩個或更多個此等篩選表示之索引鍵集合之交集之基數,可用作所估計廢棄項目度量中之布隆篩選之一替代物。
可組合所運算廢棄項目度量及所估計廢棄項目度量以產生混合廢棄項目度量(另一形式之所估計廢棄項目度量),此歸因於包含另一形式之所估計廢棄項目度量。例如,給定包括T kvset之一節點,若索引鍵壓縮廢棄項目度量可用於此等kvset之W且W<T,則可如下般產生節點之混合廢棄項目度量。針對可應用索引鍵壓縮廢棄項目度量之節點中之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)EGMOca=(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。
上文所描述之用於運算或估計廢棄項目度量之方法通常可
應用於KVDB之全部後續層級節點,因為後續層級表示KVDB之分離KVS樹。針對基底層級節點,此等技術亦可藉由將其等應用於異質kvset中所表示之全部KVS樹而運作-例如,藉由考量一kvset中之全部索引鍵值對或標記刪除,而無關於與其等相關聯之KVS樹。
廢棄項目度量允許優先化對具有足夠量的廢棄項目之樹層級或節點之廢棄項目收集操作以調整一廢棄項目收集操作之額外耗用。以此方式優先化廢棄項目收集操作可增大其等效率且降低相關聯寫入放大率。另外,估計樹中之有效索引鍵值對之數目及過時索引鍵值對之數目以及由各類別所消耗之儲存容量之量可用於報告樹之容量利用率。
圖17繪示根據一實施例之用於對一KVS樹執行維護之一方法1700之一實例。方法1700之操作係使用諸如在本申請案全文中(包含下文關於圖21)所描述之電子硬體(例如,電路)來實施。
在操作1705,針對一節點產生一kvset。作為kvset產生之部分,針對kvset運算一組kvset度量。在一實例中,該組kvset度量包含kvset中之索引鍵值對之一數目。在一實例中,該組kvset度量包含kvset中之標記刪除之一數目。在一實例中,該組kvset度量包含儲存kvset中之索引鍵值對及標記刪除之全部索引鍵項目之一儲存容量。在一實例中,該組kvset度量包含kvset中之索引鍵值對之全部值之一儲存容量。
在一實例中,該組kvset度量包含kvset中之索引鍵之索引鍵大小統計。在一實例中,索引鍵大小統計包含最大值、最小值、中值或平均值之至少一者。在一實例中,該組kvset度量包含kvset中之索引鍵之值大小統計。在一實例中,值大小統計包含最大值、最小值、中值或平均值之至少一者。
在一實例中,該組kvset度量包含kvset中之一索引鍵值對之一最小或最大存留時間(TTL)值。當一攝取操作指定一索引鍵值對將有效之一週期時,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度量之一第二子集經儲存於節點中。
在操作1710,將kvset新增至節點。通常,一旦新增至節點,便寫入kvset(例如,至磁碟上儲存器)。
在操作1715,基於該組kvset度量中之度量針對一壓縮操作選擇節點。因此,kvset度量或下文所論述之節點度量或兩者可促成一廢棄項目收集器或類似維護程序作出決策。在一實例中,針對該壓縮操作選擇節點包含:針對多個節點收集kvset度量集合;基於kvset度量集合對多個節點進行排序;及基於來自該排序之一排序順序選擇多個節點之一子集。在此實例中,可實施操作1720,使得對節點執行壓縮操作包含對多個節點(包含該節點)之子集中之各節點執行壓縮操作。在一實例中,由一效能值設定多個節點之子集之一基數。在一實例中,效能值係如藉由所恢復空間量測之執行壓縮之一效率。此通常可經實施為一臨限值。在一實例中,可使用一臨限函數,其接受數個參數(諸如底層儲存器件上留下之未使用儲存容量之量及在壓縮操作中回收之容量之一估計)以達到關於是否執行一給定壓縮操作之一決策。
在操作1720,對節點執行壓縮操作。在一實例中,基於該
組kvset度量中之一度量選擇壓縮操作之一類型(例如,索引鍵壓縮關、鍵值壓縮、溢出壓縮或提升壓縮)。
方法1700之操作可經延伸以包含回應於將kvset新增至節點而修改節點度量。在一實例中,節點度量包含經受對包含節點之一節點群組執行之先前壓縮之kvset中之所估計過時索引鍵值對之一分率之一值。在一實例中,該值係一簡單平均數。在一實例中,該值係一移動平均數。在一實例中,該值係一加權平均數。在一實例中,該值係經受節點之設定數目次最新近先前壓縮之kvset中之所估計過時索引鍵值對之分率之一平均值。在一實例中,該值係經受該節點之一樹層級處之全部節點之設定數目次最新近先前壓縮之kvset中之所估計過時索引鍵值對之分率之一平均值。
在一實例中,節點群組僅包含該節點。在一實例中,節點群組包含節點之一樹層級上之全部節點。在一實例中,節點度量包含源自一壓縮操作之該組kvset度量中之類似度量及來自對節點執行之壓縮操作之先前kvset度量之一總和。
在一實例中,節點度量包含在kvset及節點之一不同kvset中相同之索引鍵之一所估計數目。在一實例中,藉由以下步驟計算索引鍵之所估計數目:自kvset獲得一第一索引鍵布隆篩選;自不同kvset獲得一第二索引鍵布隆篩選;及使第一索引鍵布隆篩選及第二索引鍵布隆篩選相交以產生一節點布隆篩選估計基數(NBEC)。儘管此實例被書寫為在兩個kvset之間(例如,來自兩個kvset之僅兩個布隆篩選之交集),但任何數目個kvset布隆篩選可經相交以達到表示全部kvset(其等之布隆篩選係交集之部分)所共有之索引鍵之數目之估計之NBEC。
在一實例中,節點度量包含自一NKVcnt值減去NBEC以估計節點中之過時索引鍵值對之一數目。在此,NKVcnt值係與一布隆篩選相交以產生NBEC之節點之各kvset中之索引鍵值對之一總計數。在一實例中,節點度量包含將一NKVcap值乘以一Fobs值。在此,NKVcap值係由其中布隆篩選經相交以產生NBEC之節點之各kvset中之索引鍵及值使用之一總儲存容量,且Fobs值係自一NKVcnt值減去NBEC且除以NKVcnt之結果,其中NKVcnt值係其中布隆篩選經相交以產生NBEC之節點之各kvset中之索引鍵值對之一總計數。
在一實例中,節點度量經儲存於節點中。在此,節點度量連同來自其他節點之節點度量一起儲存。在一實例中,節點度量經儲存於一樹層級中,該樹層級為係一KVDB中之一KVS樹之一層級中之全部節點所共有。
在特定境況下,藉由修改KVDB或其中之元素(例如,標記刪除)之平常(vanilla)操作,可以數種方式協助上文所描述用來改良KVDB效能之廢棄項目收集度量及其用途。實例可包含標記刪除加速、更新標記刪除、首碼標記刪除或不可變資料KVDB。
一標記刪除表示一KVS樹中之一經刪除索引鍵值。當在該KVS樹之一葉中壓縮一標記刪除且該壓縮包含該葉中之最舊kvset時,該標記刪除實際上被移除,否則保留以防止在一搜尋中傳回索引鍵之一可能過時值。在導致具有子節點之一節點上之合併集中之一標記刪除之一索引鍵壓縮或索引鍵值壓縮中,標記刪除加速包含遵循用於溢出壓縮之索引鍵分配方法將非過時標記刪除寫入至一些或全部此等子節點中之一或多個新kvset。
若用於一索引鍵壓縮或索引鍵值壓縮操作之合併集包含含有合併集之節點中之最舊kvset,則經加速標記刪除(若有)無需包含於彼節點中藉由壓縮操作產生之新kvset中。否則,若用於一索引鍵壓縮或索引鍵值壓縮操作之合併集不包含含有合併集之節點中之最舊kvset,則經加速標記刪除(若有)亦包含於彼節點中藉由壓縮操作產生之新kvset中。將經加速標記刪除分配至KVS樹之較舊區域中藉由允許移除子節點中之索引鍵值對而不等待原始標記刪除推送至子節點來促進廢棄項目收集。
一索引鍵壓縮或索引鍵值壓縮操作可應用指定或經運算準則來判定是否亦執行標記刪除加速。此標記刪除加速準則之實例包含但不限於一合併集中之非過時標記刪除之數目及邏輯上被一合併集中之標記刪除刪除之索引鍵值資料之量(例如,以位元組為單位)(其可為已知或一估計)。
儘管原始攝取值並非係一標記刪除,更新標記刪除類似於經加速標記刪除而操作。基本上,當將一新值新增至KVS樹時,可對彼索引鍵之全部較舊值進行廢棄項目收集。沿著樹推送類似於一經加速標記刪除之一標記刪除將允許對此等子節點之壓縮移除過時值。
在一實例中,在一KVDB中,一攝取操作將一新kvset新增至基底層級節點,且在此新kvset中具有索引鍵K之一TID感知索引鍵值對包含一旗標或其他指示符,其係取代包含於一較早攝取操作中之具有索引鍵K之一索引鍵值對之一更新索引鍵值對。預期而非要求此指示符係準確的。若一攝取操作包含具有索引鍵K之一更新索引鍵值對,且若根節點具有子節點,則該攝取操作亦可遵循用於溢出壓縮之索引鍵分配方法將索引鍵K之一索引鍵標記刪除(更新標記刪除)寫入至根節點之一子節點中之一
新kvset。
在一實例中,替代地,回應於處理具有索引鍵K之一更新索引鍵值對,對根節點中之一合併集之一索引鍵壓縮或索引鍵值壓縮操作亦可遵循用於KVS樹中之溢出壓縮之索引鍵分配方法將索引鍵K之一索引鍵標記刪除(亦稱為更新標記刪除)寫入至根節點之一子節點中之一新kvset。在一實例中,對於具有索引鍵K之一給定更新索引鍵值對,針對索引鍵K寫入至多一個對應更新標記刪除。
雖然下文論述KVS樹首碼操作,但概念亦可用於標記刪除中。在首碼操作中,將索引鍵之一部分(首碼)用於匹配。通常,索引鍵之整個首碼部分用來導出溢出值,儘管一較小部分可與在消耗首碼路徑之後扇出至全部子節點之較深樹判定一起使用。首碼標記刪除使用首碼匹配多個值之能力以使單個項目表示許多索引鍵值對之刪除。
在一實例中,溢出壓縮使用基於索引鍵之第一子索引鍵之一溢出值之一索引鍵分配方法,第一子索引鍵係索引鍵首碼。首碼標記刪除係包括索引鍵首碼之一邏輯記錄,且指示以首碼開始之全部索引鍵及其等相關聯值(若有)在邏輯上已在一特定時間點被刪除。一首碼標記刪除用於與一索引鍵標記刪除相同之目的,惟一首碼標記刪除可在邏輯上刪除一個以上有效索引鍵值對而一索引鍵標記刪除可在邏輯上刪除恰好一個有效索引鍵值對除外。在此實例中,因為溢出壓縮使用由首碼指定之第一子索引鍵值產生一首碼標記刪除之一溢出值,所以具有等效第一子索引鍵值之每個索引鍵值對、索引鍵標記刪除或首碼標記刪除將採用通過KVDB之層級之相同路徑,因為其等具有等效溢出值。如上所述,TID在區分異質kvset中之標記刪除應用中起作用。
在一實例中,標記刪除加速可應用於首碼標記刪除以及索引鍵標記刪除。在應用標記刪除加速準則時,首碼標記刪除可與索引鍵標記刪除不同地處理,因為首碼標記刪除可導致在後續廢棄項目收集操作中實體上移除大數目個過時索引鍵值對或標記刪除。
上文所論述之標記刪除加速技術導致產生更大數目個kvset且因此可為低效的。因為寫入資料之一應用程式可知道先前所寫入資料之大小,故一標記刪除可包含正自應用程式取代之資料之一大小。系統可使用此資訊來判定是否執行上文所論述之標記刪除加速(或產生更新標記刪除)。
一些資料可為不可變的。不可變索引鍵值資料之一些實例包含時間序列資料、日誌資料、感測器資料、機器產生資料及資料庫提取、變換及載入(ETL)程序之輸出等等。在一實例中,一KVDB或其中之一KVS樹可經組態以儲存不可變索引鍵值資料。在此一組態中,期望而非要求藉由一攝取操作新增之kvset不含有標記刪除。
在一實例中,一KVDB或其中所含有之KVS樹可經組態以儲存僅受限於含有該KVDB之儲存媒體之容量之一不可變資料量。在此一組態中,所執行之唯一廢棄項目收集操作係索引鍵壓縮。在此,執行索引鍵壓縮以藉由減少基底層級中之kvset之數目來增大搜尋索引鍵之效率。應注意,在無溢出壓縮之情況下,基底層級節點將係KVDB中之唯一節點。在一實例中,壓縮準則可包含基底層級節點中之kvset之數目或索引鍵搜尋時間統計,諸如最小搜尋時間、最大搜尋時間、平均數搜尋時間及平均值搜尋時間。可在特定事件中(諸如在一索引鍵壓縮之後、在一攝取操作之後、在一經組態時間間隔期滿時或在執行一經組態數目次索引鍵搜
尋之後)重設此等統計。在一實例中,用於一索引鍵壓縮之合併集可包含根節點中之一些或全部kvset。
在一實例中,KVDB或其中含有之KVS樹可經組態以儲存受限於一保留準則之一不可變資料量,該保留準則可藉由以一先進先出(FIFO)方式自KVDB或KVS樹移除索引鍵值對來執行。此保留準則之實例包含:KVDB或KVS樹中之索引鍵值對之最大計數;KVDB或KVS樹中之索引鍵值資料之最大位元組;或KVDB或KVS樹中之一索引鍵值對之最大年齡。
在此一組態中,所執行之唯一廢棄項目收集操作係索引鍵壓縮。在此,執行索引鍵壓縮以既增大搜尋索引鍵之效率-藉由減少kvset之數目-又促進以一FIFO方式移除索引鍵值對以執行保留準則。在一實例中,壓縮準則可指定每當兩個或更多個連續kvset(包括用於索引鍵壓縮之合併集)滿足保留準則之一經組態分率(稱為保留增量)時執行一索引鍵壓縮。以下係保留要求之一些實例:A)若保留準則係W個索引鍵值對,且保留增量係0.10*W個索引鍵值對,則若兩個或更多個連續kvset(合併集)具有索引鍵值對之一組合0.10*W計數,則執行索引鍵壓縮;B)若保留準則係索引鍵值資料之X個位元組,且保留增量係索引鍵值資料之0.20*X個位元組,則若兩個或更多個連續kvset(合併集)具有索引鍵值資料之一組合0.20*X個位元組,則執行索引鍵壓縮;或C)若保留準則係索引鍵值資料之Y天,且保留增量係索引鍵值資料之0.15*Y天,則若兩個或更多個連續kvset(合併集)具有索引鍵值資料之一組合0.15*Y天,則執行索引鍵壓縮。
可存在其中要求用於一索引鍵壓縮之合併集精確地滿足經組態保留增量係不切實際之情況。因此,在一實例中,可使用保留增量之一近似值。
給定各低於經組態保留增量之kvset之一攝取操作序列,執行如上文所描述之索引鍵壓縮操作導致一節點中之kvset各滿足或近似保留增量。此結果之一例外狀況可為最新kvset,其等經組合可低於保留增量。儘管存在此可能結果,然每當超過保留準則達至少保留增量時,可刪除KVDB或KVS樹中之最舊kvset。例如,若保留準則係W個索引鍵值對,且經組態保留增量係0.10*W個索引鍵值對,則單個節點中之kvset將各具有近似0.10*W個索引鍵值對,經組合可少於0.10*W個索引鍵值對之最新kvset可能除外。因此,每當KVDB或KVS樹超過W個索引鍵值對達至少0.10*W個索引鍵值對時,可刪除最舊kvset。
標記刪除加速、更新加速或首碼標記刪除之廢棄項目收集促進器可應用於除KVDB或KVS樹之外之其他索引鍵值儲存區。例如,標記刪除加速或更新標記刪除可應用於具有一或多個廢棄項目收集操作之一LSM樹變體中,該一或多個廢棄項目收集操作將索引鍵值資料寫入至自其讀取索引鍵值資料之相同樹層級且類似於KVDB或KVS樹中之索引鍵壓縮或索引鍵值壓縮而操作。更新標記刪除亦可應用於允許其將標記刪除攝取至根節點之子節點中之一LSM樹變體。在另一實例中,首碼標記刪除可用於每層級僅具有一個節點(其係共同的)或實施用於基於一索引鍵之一部分(諸如一子索引鍵)選擇子節點之一索引鍵分配方法之一LSM樹變體中。在另一實例中,標記刪除刪除大小可應用於使用標記刪除加速之一LSM樹變體中。此外,用於最佳化不可變索引鍵值資料之廢棄項目收集之技術可應
用於具有一廢棄項目收集操作之一LSM樹變體,類似於一KVDB或KVS樹中之索引鍵壓縮,該廢棄項目收集操作不讀取或寫入索引鍵值資料中之值。
實施此等廢棄項目收集促進器改良一KVDB、一KVS樹或其他資料結構中之廢棄項目收集之效率。例如,標記刪除加速導致標記刪除寫入至樹之較低層級比在應用索引鍵壓縮、索引鍵值壓縮或一類似操作時原本將發生的要快,由此可在樹之全部層級處更快地消除廢棄項目。結合索引鍵壓縮或一類似操作使用之標記刪除加速達成此等結果,其中寫入放大率遠小於將源自溢出壓縮之寫入放大率。在其他實例中,首碼標記刪除允許單個標記刪除記錄在邏輯上刪除大數目個相關索引鍵值對,更新標記刪除帶來標記刪除加速更新索引鍵值對之益處,標記刪除刪除大小改良評估標記刪除加速準則時之準確性,且用於最佳化不可變索引鍵值資料之廢棄項目收集之技術導致索引鍵值資料中之值之一(1)之寫入放大率。
圖18係繪示根據一實施例之一索引鍵搜尋之一方塊圖。該搜尋藉由開始於根節點中之最新kvset且逐漸移動至較舊kvset直至找到索引鍵或葉節點中之最舊kvset不具有索引鍵而進行。歸因於父至子索引鍵映射之決定性性質,將僅搜尋一個葉,且彼葉中之最舊kvset將具有最舊索引鍵項目。因此,若遵循所繪示搜尋路徑且未找到索引鍵,則索引鍵不在KVDB中。因為KVDB包含具有異質kvset(例如,節點(0,0))之一基底層級(例如,在記憶體中或在具有或不具有子層級之區塊媒體上),故一TID或其他KVS樹識別符係結合索引鍵使用以既搜尋異質kvset又自基底層級轉變至特定於彼樹之一後續層級。
一旦找到索引鍵之最新近索引鍵項目,搜尋便停止。因
此,搜尋路徑自最新移動至最舊,且一旦索引鍵之一索引鍵項目被定位便停止。此行為允許藉由不要求立即自KVD移除一過時索引鍵值對來保留kvset之不可變性。代替地,較新值或指示刪除之一標記刪除經放置於一較新kvset中且將首先被找到,從而導致準確地回應於查詢,而無關於仍常駐於KVDB中之較舊索引鍵值對版本。
在一實例中,可藉由將一當前節點設定為基底層級之第一節點來執行針對索引鍵K之搜尋。若在當前節點中找到具有索引鍵K之一索引鍵值對或一標記刪除,則搜尋完成,且因此分別傳回相關值或「未找到索引鍵」之一指示。若未找到索引鍵K,則將當前節點設定為如由索引鍵K及用於溢出壓縮之索引鍵分配方法判定之節點之子節點。如上所述,當比較一異質kvset中之索引鍵時,結合索引鍵使用一KVS樹識別符以判定是否找到索引鍵。因此,若KVDB中具有索引鍵「A」之唯一項目係在KVS樹T2中,則在KVS樹T1中搜尋索引鍵「A」將傳回「未找到索引鍵」。因為後續層級具有單個KVS樹之同質kvset,故僅僅在索引鍵上匹配便足夠,從而僅僅以相同於一KVS樹之方式操作。
若不存在此子節點,則搜尋完成且結果係「未找到索引鍵」之一指示。否則,執行針對當前節點之kvset中之索引鍵K之搜尋,且重複程序。概念上,搜尋一KVS樹中之一索引鍵K遵循通過KVS樹之相同路徑,其中具有索引鍵K之每個索引鍵值對或標記刪除作為溢出壓縮之結果。
歸因於父節點與子節點之間基於TID及索引鍵之決定性映射,搜尋KVDB中每層級僅一個節點,直至找到具有索引鍵K之一索引鍵值對或一標記刪除,或搜尋KVDB中最後(例如,編號最大)層級中之一節
點。因此,搜尋非常有效。
圖19繪示根據一實施例之用於執行一索引鍵搜尋之一方法1900之一實例。方法1900之操作係使用諸如在本申請案全文中(包含下文關於圖21)所描述之電子硬體(例如,電路)來實施。
在操作1905,接收包含一索引鍵及KVS樹識別符之一搜尋請求。
在操作1910,選擇KVDB之基底層級中之第一節點作為當前節點。
在操作1915,檢測當前節點。
在操作1920,檢測以查詢當前節點之最新kvset開始。
在決策1925,若未找到索引鍵,則方法1900前進至決策1940,否則若找到索引鍵,則前進至決策1930。若正被搜尋之kvset係一異質kvset(例如,其在KVDB之基底層級中),則基於KVS樹識別符搜尋索引鍵。KVS樹識別符可用來過濾索引鍵結果,或其可與索引鍵組合以判定一匹配。若正被搜尋之kvset係一同質kvset,則不使用KVS樹識別符來判定是否找到索引鍵。
在決策1930,若對應於索引鍵之索引鍵項目包含或引用一標記刪除,則方法1900前進至結果1960,否則前進至結果1935。
在結果1935,響應於搜尋請求而傳回對應於索引鍵之一最新近索引鍵項目之一值。
在決策1940,若當前節點中存在更多kvset,則方法1900前進至操作1945,否則前進至決策1950。
在操作1945,方法1900選擇當前節點中之下一最新kvset
以查詢索引鍵且前進至決策1925。
在決策1950,若當前節點不具有匹配索引鍵之溢出函數之任何子節點(及在一基底層級至後續層級溢出之情況下係KVS樹識別符),則方法1900前進至結果1960,否則前進至操作1955。因此,當如上文所描述般自共同根結構(例如,基底層級)轉變至一KVS樹特定後續層級時,溢出函數取決於KVS樹識別符及索引鍵兩者。然而,在基底層級(若存在)之間或在後續層級之間,索引鍵可由溢出函數單獨使用。
在操作1955,將匹配索引鍵之溢出函數之子節點(及在一基底層級至後續層級轉變之情況下係KVS樹識別符)設定為當前節點,且方法1900前進至操作1915。
在結果1960,響應於搜尋請求而傳回搜尋之一否定指示,諸如「未找到索引鍵」。
掃描操作與搜尋不同之處在於正尋找多個索引鍵。一典型掃描操作可包含搜尋一索引鍵範圍,其中該搜尋指定多個索引鍵來限定該範圍。通常,該掃描指定一準則且預期一KVDB之一KVS樹中之全部索引鍵滿足該準則之一結果。
圖20係繪示根據一實施例之一索引鍵掃描之一方塊圖。索引鍵掃描或純掃描識別KVDB中之一KVS樹之每個節點中之每個kvset,其含有滿足掃描準則(例如,落入一指定範圍內)之一索引鍵項目。雖然kvset之索引鍵儲存區允許有效地搜尋一特定索引鍵,但為確保找到滿足掃描準則之每個索引鍵,搜尋可在其中找到彼KVS樹之項目之每個kvset。因此,針對KVS樹T2,連同對應於T2之每個後續層級節點搜尋基底層級之異質kvset(例如,在記憶體中、在磁碟上等);省略節點(1,0),
因為其對應於KVS樹T1。然而,歸因於kvset中之索引鍵值儲存之索引鍵排序性質,掃描可快速地判定滿足準則之一索引鍵是否在一給定kvset中,而無需查看每個索引鍵。此仍比由WB樹提供之能力更佳,例如,因為索引鍵值對未經儲存於一索引鍵排序結構中,而是保持索引鍵來解決索引鍵雜湊衝突。因此,必須讀取一WB樹中之每個索引鍵以滿足一掃描。
為促進掃描,索引鍵以索引鍵排序順序儲存於kvset中。因此,一給定索引鍵可以日誌時間定位,且亦可快速地判定該範圍內之索引鍵(例如,該範圍中之一最高及最低索引鍵)。此外,kvset後設資料可用來更進一步加速掃描。例如,若kvset維持kvset內所含有之一最小及最大索引鍵值,則掃描可快速地判定kvset中之索引鍵不滿足一指定範圍。類似地,維持kvset索引鍵之一布隆篩選可用來快速地判定特定索引鍵不在一給定kvset之索引鍵儲存區中。異質kvset可包含額外後設資料或排序,以解決包含來自多個KVS樹之索引鍵。例如,索引鍵可首先按TID排序,且接著按索引鍵排序。在一實例中,跨多個樹之索引鍵可連同識別一索引鍵之TID之後設資料一起排序,從而允許一使用者程序過濾索引鍵。在一實例中,提供一TID且傳回一經過濾及排序之索引鍵清單。
在一實例(未繪示)中,除上述之外,掃描可如同一搜尋般進行,惟訪問對應於KVS樹識別符之每個節點除外。因此,掃描自kvset讀取滿足準則之每個TID索引鍵組合之最新記錄,其中一給定索引鍵K之最新記錄可為一索引鍵值對或索引鍵標記刪除。如上所述,在KVDB中之一給定節點內,kvset自最新至最舊排序,且一較低層級(L+1)處之一節點中之kvset舊於一層級L處之一節點中之kvset。在找到滿足準則之索引鍵之後,其等將在一結果集合中傳回至請求者。
當意識到KVDB中之一給定KVS樹之每個節點中之每個kvset之訪問發生於一掃描中時,可改良上文所描述之似搜尋掃描。因此,在一實例中,可同時讀取其中可找到一給定KVS樹之項目之kvset。全部kvset之同時讀取可導致一非常大緩衝區(例如,所傳回結果之儲存位置)。然而,此可藉由快速地判定一給定kvset是否具有滿足掃描準則(例如,在一範圍內)之索引鍵之能力而減輕。因此,可訪問每個kvset,但僅讀取具有滿足該準則之索引鍵之彼等kvset。圖4中繪示此實例。具體言之,讀取器同時訪問KVS樹T2之全部kvsest(例如,虛線及虛線kvset),且又僅讀取kvset之一子集(虛線kvset)。此技術支援迭代器樣式語義,其中一程式可能要求下一或先前索引鍵。kvset中之索引鍵之排序性質允許快速地識別下一索引鍵,且若一索引鍵上存在衝突(例如,相同索引鍵之多個項目),哪個值係傳回至程式之最新值-除非最新值係一標記刪除,在此情況下,迭代器應略過彼索引鍵且為下一索引鍵提供最新值。
在一實例中,掃描可包含接收包含一索引鍵範圍(或其他準則)之一掃描請求。在一實例中,掃描藉由收集由自來自樹之一節點集之各kvset至一所找到集之範圍指定之索引鍵來進行。在一實例中,該節點集包含樹中之每個節點。在一實例中,掃描藉由憑藉保持對應於並非為一標記刪除之一索引鍵之一最新近項目之索引鍵值對而將所找到集精簡至一結果集來進行。掃描藉由傳回結果集而完成。
圖20中所繪示之掃描可稱為「純掃描」或「全掃描」,因為搜尋一KVS樹之每個kvset(例如,對應於該KVS樹之全部基底層級kvset及後續層級kvset)。對全掃描之一修改係一首碼掃描。一首碼掃描將全部索引鍵值對(若有)定位於一KVS樹之一KVDB中,其中索引鍵皆以一
指定首碼開始。儘管首碼小於整個索引鍵,且因此可匹配多個索引鍵,但索引鍵之首碼部分至少如由溢出函數(例如,上文所描述之第一、第二或第三決定性映射)用來產生溢出值之索引鍵之部分般大。因此,若溢出函數使用索引鍵之第一子索引鍵,則首碼包含第一子索引鍵(且可包含額外子索引鍵)。此要求允許決定性映射改良首碼掃描效能以優於純掃描效能,因為僅訪問KVDB中之KVS樹之首碼之路徑中之彼等節點。
在一實例中,溢出值係基於索引鍵之第一子索引鍵。在此實例中,一指定首碼包含索引鍵之第一子索引鍵之一值。在此實例中,首碼掃描可藉由識別對應於含有具有以指定首碼開始之一索引鍵之一索引鍵值對或標記刪除之KVS樹之KVDB之每個節點中之每個kvset來進行。如上所述,在異質kvset中,使用一KVS樹識別符來區分正被搜尋之KVS樹之索引鍵與來自並非掃描之部分之其他KVS樹之索引鍵。與純掃描相反,首碼掃描不訪問KVDB中之KVS樹之每個節點。實情係,經檢查節點可限於沿由定義首碼之值之溢出值判定之路徑之彼等節點。在一實例中,代替使用第一子索引鍵,可將最後子索引鍵用於溢出值以實現一尾碼掃描。在此實例中,一指定尾碼包含索引鍵之最後子索引鍵之一值。可基於溢出值計算中所使用之特定子索引鍵實施額外多種掃描。
一首碼掃描極其有效,既因為所檢查節點之數目限於每個KVDB層級一個節點,又因為kvset索引鍵儲存區中之索引鍵通常經儲存於允許準備識別匹配首碼之索引鍵之一結構中。另外,上文關於索引鍵掃描所論述之kvset度量亦可協助加速搜尋。
首碼掃描可包含接收具有一KVS樹識別符及一索引鍵首碼之一掃描請求。在此,一待搜尋節點集包含對應於索引鍵首碼及KVS樹識
別符之各節點。在一實例中,節點與索引鍵首碼之對應性係由自索引鍵首碼導出之一溢出值之一部分判定,該溢出值部分係由一KVS樹識別符及KVDB中之一給定節點之一層級判定。
首碼掃描藉由將由KVS樹識別符指定之索引鍵及來自節點集之各kvset之首碼收集至一所找到集中來進行。首碼掃描藉由憑藉保持對應於並非為一標記刪除且未被一更新近標記刪除刪除之一索引鍵之一最新近項目之索引鍵值對而將所找到集精簡至一結果集來進行。首碼掃描藉由傳回結果集而完成。
如上文所描述,KVDB提供一低額外耗用且資源有效之結構來儲存多個索引鍵值資料樹。KVDB樹包含KVS樹、LSM樹及WB樹之許多優點,而無此等結構之缺點。例如,關於歸因於壓縮之儲存空間或寫入放大率,在一KVDB中,可容易地控制節點之大小以限制用於壓縮之暫時性儲存容量之最大量。此外,可使用索引鍵壓縮來增大一節點中之搜尋效率而無需讀取及寫入值區塊,由此降低歸因於壓縮之讀取放大率及寫入放大率。在一傳統LSM樹中,壓縮所需之暫時性儲存容量之量以及讀取放大率及寫入放大率之量可與正被壓縮之樹層級處之索引鍵值容量之量成比例-其因一LSM樹中之樹層級之索引鍵值容量通常經組態以在該樹中更深之各樹層級處呈指數增長之事實而加劇。
關於索引鍵搜尋效率,在一KVDB中,搜尋一索引鍵K涉及每層級僅搜尋一個節點,其僅表示KVDB中之總索引鍵之一小分率。在一傳統LSM樹中,搜尋一索引鍵K要求搜尋各層級中之全部索引鍵。
關於首碼掃描效率,如上所述,KVDB允許藉由每層級僅搜尋一個節點而找到以一指定首碼開始之全部索引鍵,其僅表示KVDB中
之總索引鍵之一小分率。在一傳統LSM樹中,找到以一指定首碼開始之全部索引鍵要求搜尋各層級中之全部索引鍵。
關於掃描效率,上文所描述之KVDB允許藉由利用kvset中之資料來找到一給定範圍中或以一指定首碼開始之全部索引鍵。在一WB樹中,索引鍵係無序的,從而導致無法有效地實施此等操作之任一者。因此,在一WB樹中,必須擷取且檢查該樹之每個項目以執行此等掃描。
關於壓縮效能,在一KVDB中,索引鍵、索引鍵值及溢出壓縮維護技術(除提升壓縮之外)因節點中之kvset之時間排序性質而為非阻塞。因此,藉由僅將新kvset放置於一最新位置中,可將新kvset新增至正對其執行索引鍵、索引鍵值或溢出壓縮之節點。在一WB樹中,壓縮係一阻塞操作。
關於優於單獨KVS樹(或使用若干樹實施之其他結構,諸如LSM樹、B樹等)以支援多維資料(例如,「行族」)之益處-KVDB增大異動效率、攝取大小及記憶體使用。例如,藉由攝取與相同kvset(或原子攝取kvset之集合)中之一給定異動相關聯之全部索引鍵值對或標記刪除,可在無一預寫日誌之額外耗用(例如,包含額外處理、I/O及儲存使用)之情況下將儲存或刪除KVDB中之一個以上KVS樹中之索引鍵值對之異動製成原子的。再者,可增加kvset攝取大小及因此I/O效率,因為所攝取kvset可包括與一KVDB中之任何或全部KVS樹相關聯之索引鍵值對或標記刪除。因此,若單個KVS樹之攝取低於攝取大小之一效率臨限值(例如,正被寫入之器件之區塊大小),則來自另一KVS樹之額外項目可填充間隙。此外,用於kvset緩衝之記憶體之一總量(例如,基底層級之位元組可定址(例如,記憶體)層級)可相對於維持一KVDB中之各KVS樹之單獨kvset緩衝器而減
少,此又係因為記憶體中基底層級中之一kvset可包括與一KVDB中之任何或全部KVS樹相關聯之索引鍵值對或標記刪除。
圖21繪示一例示性機器2100之一方塊圖,可對機器2100執行本文中所論述之任何一或多種技術(例如,方法)。在替代實施例中,機器2100可操作為一獨立器件或可經連接(例如,網路連線)至其他機器。在一網路連線部署中,機器2100可作為一伺服器-客戶端網路環境中之一伺服器機器、一客戶端機器或兩者而操作。在一實例中,機器2100可充當同級間(P2P)(或其他分散式)網路環境中之一同級機器。機器2100可為一個人電腦(PC)、一平板電腦、一視訊轉換器(STB)、一個人數位助理(PDA)、一行動電話、一網路設備、一網路路由器、交換機或橋接器,或能夠執行指定待由彼機器採取之動作之(循序或以其他方式)指令之任何機器。此外,雖然僅繪示單個機器,但術語「機器」亦應被視為包含個別地或共同地執行一組指令(或多組指令)以執行本文中所論述之任何一或多種方法之任何機器集合,諸如雲運算、軟體即服務(SaaS)、其他電腦叢集組態。
如本文中所描述,實例可包含邏輯或數個組件或機構,或可藉由邏輯或數個組件或機構操作。電路系統係在包含硬體(例如,簡單電路、閘、邏輯等)之有形實體中實施之電路之一集合。電路系統成員資格可隨時間及底層硬體可變性而變通。電路系統包含可在操作時單獨地或組合地執行指定操作之成員。在一實例中,可不可變地設計電路系統之硬體以實行一特定操作(例如,硬連線)。在一實例中,電路系統之硬體可包含可變連接之實體組件(例如,執行單元、電晶體、簡單電路等),包含實體上經修改(例如,不變質量之粒子之磁性、電、可移動放置等)以編碼特
定操作之指令之一電腦可讀媒體。在連接實體組件時,一硬體構成之基本電性質例如自一絕緣體變為一導體,或反之亦然。指令使嵌入式硬體(例如,執行單元或一載入機構)能夠經由可變連接在硬體中產生電路系統成員,以在操作時實行特定操作之部分。據此,當器件操作時,電腦可讀媒體通信地耦合至電路系統之其他組件。在一實例中,實體組件之任一者可用於一個以上電路系統之一個以上成員中。例如,在操作下,執行單元可在一個時間點用於一第一電路系統之一第一電路中且在一不同時間由該第一電路系統中之一第二電路或由第二電路系統中之一第三電路重用。
機器(例如,電腦系統)2100可包含一硬體處理器2102(例如,一中央處理單元(CPU)、一圖形處理單元(GPU)、一硬體處理器核心或其等任何組合)、一主記憶體2104及一靜態記憶體2106,其等之一些或全部可經由一互連(例如,匯流排)2130彼此通信。機器2100可進一步包含一顯示單元2110、一字母數字輸入器件2112(例如,一鍵盤)及一使用者介面(UI)導覽器件2114(例如,一滑鼠)。在一實例中,顯示單元2110、輸入器件2112及UI導覽器件2114可為一觸控螢幕顯示器。機器2100可另外包含一儲存器件(例如,驅動單元)2108、一信號產生器件2118(例如,一揚聲器)、一網路介面器件2120及一或多個感測器2116,諸如一全球定位系統(GPS)感測器、指南針、加速度計或其他感測器。機器2100可包含一輸出控制器2128(諸如一串列(例如,通用串列匯流排(USB)、並列、或其他有線或無線(例如,紅外線(IR)、近場通信(NFC)等)連接)以與一或多個周邊器件(例如,一印表機、讀卡器等)通信或控制一或多個周邊器件(例如,一印表機、讀卡器等)。
儲存器件2108可包含一機器可讀媒體2122,體現本文中所
描述之任何一或多種技術或功能或由本文中所描述之任何一或多種技術或功能利用之一或多個組資料結構或指令2124(例如,軟體)經儲存在機器可讀媒體2122上。指令2124亦可在其由機器2100執行期間完全地或至少部分地常駐於主記憶體2104、靜態記憶體2106或硬體處理器2102內。在一實例中,硬體處理器2102、主記憶體2104、靜態記憶體2106或儲存器件2108之一者或任何組合可構成機器可讀媒體。
雖然機器可讀媒體2122被繪示為單個媒體,但術語「機器可讀媒體」可包含經組態以儲存一或多個指令2124之單個媒體或多個媒體(例如,一集中式或分散式資料庫,及/或相關聯快取區及伺服器)。
術語「機器可讀媒體」可包含能夠儲存、編碼或攜載由機器2100執行之指令且引起機器2100執行本發明之任何一或多種技術或能夠儲存、編碼或攜載由此等指令使用或與此等指令相關聯之資料結構之任何媒體。非限制性機器可讀媒體實例可包含固態記憶體,以及光學及磁性媒體。在一實例中,一集結型機器可讀媒體包括具有含不變(例如,靜止)質量之複數個粒子之一機器可讀媒體。據此,集結型機器可讀媒體並非係暫時性傳播信號。集結型機器可讀媒體之特定實例可包含:非揮發性記憶體,諸如半導體記憶體器件(例如,電可程式化唯讀記憶體(EPROM)、電可擦除可程式化唯讀記憶體(EEPROM))及快閃記憶體器件;磁碟,諸如內部硬碟及可抽換式磁碟;磁光碟;及CD-ROM及DVD-ROM磁碟。
指令2124可進一步透過通信網路2126使用傳輸媒體經由利用數個傳送協定之任一者(例如,訊框中繼、網際網路協定(IP)、傳輸控制協定(TCP)、使用者資料塊協定(UDP)、超文字傳送協定(HTTP)等)的網路介面器件2120加以傳輸或接收。例示性通信網路可包含一區域網路
(LAN)、一廣域網路(WAN)、一封包資料網路(例如,網際網路)、行動電話網路(例如,蜂巢式網路)、簡易老式電話(POTS)網路及無線資料網路(例如,電氣及電子工程師協會(IEEE)802.11系列標準(稱為Wi-Fi®)、IEEE 802.16系列標準(稱為WiMax®)、IEEE 802.15.4系列標準、同級間(P2P)網路,等等)。在一實例中,網路介面器件2120可包含一或多個實體插孔(例如,乙太網路、同軸或電話插孔)或一或多個天線以連接至通信網路2126。在一實例中,網路介面器件2120可包含複數個天線以使用單輸入多輸出(SIMO)、多輸入多輸出(MIMO)或多輸入單輸出(MISO)技術之至少一者進行無線通信。術語「傳輸媒體」應被視為包含能夠儲存、編碼或攜載由機器2100執行之指令之任何無形媒體,且包含促進此軟體之通信之數位或類比通信信號或其他無形媒體。
實例1係一種在至少一個機器可讀媒體上之KVS樹資料庫,該KVS樹資料庫包括:一多層級樹,其包含:一基底層級,其具有一節點中之一異質索引鍵值集(kvset),該異質kvset包含一第一KVS樹之一第一項目及一第二KVS樹之一第二項目;及後續層級,其等包含至少一個後續層級,該後續層級包含:一第一KVS樹節點,其包含該第一KVS樹之一第一同質kvset;及一第二KVS樹節點,其包含該第二KVS樹之一第二同質kvset;該基底層級與該後續層級之間的項目之一第一決定性映射;及後續層級之間的項目之一第二決定性映射。
在實例2中,實例1之標的物包含,其中該第二決定性映射係針對對應於該等後續層級中之節點之一KVS樹指定之一決定性映射。
在實例3中,實例1至2之標的物包含,其中該第一決定性映
射係基於對應於一項目之一KVS樹之一樹識別符之一決定性映射。
在實例4中,實例1至3之標的物包含,其中一異質kvset項目包含一樹識別符。
在實例5中,實例1至4之標的物包含,其中一同質kvset項目排除一樹識別符。
在實例6中,實例1至5之標的物包含,其中該基底層級包含該至少一個機器可讀媒體之一第一機器可讀媒體中之一第一子層級及該至少一個機器可讀媒體之一第二機器可讀媒體中之一第二子層級。
在實例7中,實例6之標的物包含,其中該第二子層級包含一個以上節點,且其中該基底層級包含該第一子層級與該第二子層級之間的一第三決定性映射。
在實例8中,實例7之標的物包含,其中該第三決定性映射不使用項目之樹識別符。
在實例9中,實例6至8之標的物包含,其中該第一機器可讀媒體係位元組可定址的,且其中該第二機器可讀媒體係區塊可定址的。
實例10係一種包括用來進行以下操作之處理電路系統之系統:接收一第一項目,該第一項目包含對應於一第一KVS樹之一第一索引鍵及一第一樹識別符;接收一第二項目,該第二項目包含對應於一第二KVS樹之一第二索引鍵及一第二樹識別符;及將該第一項目及該第二項目寫入至一KVS樹資料庫之一基底層級節點中之一異質索引鍵值集(kvset),該KVS樹資料庫包含至少一個基底層級節點及至少一個後續層級節點,各後續層級節點對應於單個KVS樹且包含該單個KVS樹之同質kvset。
在實例11中,實例10之標的物包含,其中該處理電路系統
壓縮該KVS樹資料庫之一節點。
在實例12中,實例11之標的物包含,其中為壓縮該樹之一節點,該處理電路系統執行一索引鍵壓縮。
在實例13中,實例12之標的物包含,其中為執行該索引鍵壓縮,該處理電路系統:跨該節點之多個kvset定位具有匹配識別符之一組項目;將該組項目之一最新項目寫入至該節點中之一新kvset;及自該節點移除該多個kvset。
在實例14中,實例13之標的物包含,其中該節點係一基底層級節點,且其中該等識別符係基於一項目之一樹識別符及索引鍵元組(TIKT)。
在實例15中,實例13至14之標的物包含,其中該索引鍵壓縮係對一後續層級節點執行,且其中該等識別符僅基於一項目之一索引鍵。
在實例16中,實例13至15之標的物包含,其中為自該節點移除該多個kvset,該處理電路系統自該節點移除對應於該多個kvset之值。
在實例17中,實例11至16之標的物包含,其中為壓縮該樹之一節點,該處理電路系統執行一溢出壓縮,包含:計算來自該節點中之一項目之一決定性映射,該決定性映射指定該節點之單個子節點;及將該項目寫入至該單個子節點。
在實例18中,實例17之標的物包含,其中該節點係一基底層級節點且該單個子節點係一後續層級節點,且其中該決定性映射係基於該項目之一樹識別符及索引鍵元組(TIKT)。
在實例19中,實例17至18之標的物包含,其中該節點及該單個子節點係後續層級節點,且其中該決定性映射僅基於該項目之一索引鍵。
在實例20中,實例19之標的物包含,其中該決定性映射基於該節點之一樹層級而變動。
在實例21中,實例20之標的物包含,其中該決定性映射係該索引鍵之一雜湊之一部分,該部分由該樹層級及該雜湊之一預設定分派指定。
在實例22中,實例21之標的物包含,其中該預設定分派定義至少一些樹層級之子節點之一最大數目。
在實例23中,實例21至22之標的物包含,其中該預設定分派定義該KVS樹之一最大深度。
在實例24中,實例11至23之標的物包含,其中為壓縮該樹之一節點,該處理電路系統執行一提升壓縮,包含將一樹識別符寫入至一項目,一父節點係一基底層級節點且該項目不具有該樹識別符時,該項目寫入至該父節點。
在實例25中,實例10至24之標的物包含,其中該處理電路系統針對一項目搜尋該KVS樹資料庫之一節點。
在實例26中,實例25之標的物包含,其中該節點係一基底層級節點,且其中一項目係藉由該項目之一樹識別符及索引鍵元組(TIKT)予以識別。
在實例27中,實例25至26之標的物包含,其中該節點係一後續層級節點,且其中一項目僅由該項目之一索引鍵識別。
在實例28中,實例25至27之標的物包含,其中為在一搜尋中自一第一節點移動至一第二節點,該處理電路系統使用來自一查詢項目之一決定性映射。
在實例29中,實例28之標的物包含,其中當該第一節點及該第二節點係基底層級節點時應用一第一決定性映射,其中當該第一節點係一基底層級節點且該第二節點係一後續層級節點時應用一第二決定性映射,且其中當第一節點及該第二節點係後續層級節點時應用一第三決定性映射。
在實例30中,實例29之標的物包含,其中該第二決定性映射使用該項目之一樹識別符。
在實例31中,實例29至30之標的物包含,其中該第一決定性映射及該第二決定性映射不使用該項目之一樹識別符。
實例32係一種用來實施一KVS樹資料庫之方法,該方法包括:接收一第一項目,該第一項目包含對應於一第一KVS樹之一第一索引鍵及一第一樹識別符;接收一第二項目,該第二項目包含對應於一第二KVS樹之一第二索引鍵及一第二樹識別符;及將該第一項目及該第二項目寫入至一KVS樹資料庫之一基底層級節點中之一異質索引鍵值集(kvset),該KVS樹資料庫包含至少一個基底層級節點及至少一個後續層級節點,各後續層級節點對應於單個KVS樹且包含該單個KVS樹之同質kvset。
在實例33中,實例32之標的物包含:壓縮該KVS樹資料庫之一節點。
在實例34中,實例33之標的物包含,其中壓縮該樹之該節點包含執行一索引鍵壓縮。
在實例35中,實例34之標的物包含,其中執行該索引鍵壓縮包含:跨該節點之多個kvset定位具有匹配識別符之一組項目;將該組項目之一最新項目寫入至該節點中之一新kvset;及自該節點移除該多個kvset。
在實例36中,實例35之標的物包含,其中該節點係一基底層級節點,且其中該等識別符係基於一項目之一樹識別符及索引鍵元組(TIKT)。
在實例37中,實例35至36之標的物包含,其中該索引鍵壓縮係對一後續層級節點執行,且其中該等識別符僅基於一項目之一索引鍵。
在實例38中,實例35至37之標的物包含,其中自該節點移除該多個kvset包含自該節點移除對應於該多個kvset之值。
在實例39中,實例33至38之標的物包含,其中壓縮該樹之該節點包含執行一溢出壓縮,包含:計算來自該節點中之一項目之一決定性映射,該決定性映射指定該節點之一單個子節點;及將該項目寫入至該單個子節點。
在實例40中,實例39之標的物包含,其中該節點係一基底層級節點且該單個子節點係一後續層級節點,且其中該決定性映射係基於該項目之一樹識別符及索引鍵元組(TIKT)。
在實例41中,實例39至40之標的物包含,其中該節點及該單個子節點係後續層級節點,且其中該決定性映射僅基於該項目之一索引鍵。
在實例42中,實例41之標的物包含,其中該決定性映射基
於該節點之一樹層級而變動。
在實例43中,實例42之標的物包含,其中該決定性映射係該索引鍵之一雜湊之一部分,該部分係由該樹層級及該雜湊之一預設定分派指定。
在實例44中,實例43之標的物包含,其中該預設定分派定義至少一些樹層級之子節點之一最大數目。
在實例45中,實例43至44之標的物包含,其中該預設分派定義該KVS樹之一最大深度。
在實例46中,實例33至45之標的物包含,其中壓縮該樹之該節點包含執行一提升壓縮,包含將一樹識別符寫入至一項目,在一父節點係一基底層級節點且該項目不具有該樹識別符時,該項目寫入至該父節點。
在實例47中,實例32至46之標的物包含,針對一項目搜尋該KVS樹資料庫之一節點。
在實例48中,實例47之標的物包含,其中該節點係一基底層級節點,且其中一項目係藉由該項目之一樹識別符及索引鍵元組(TIKT)予以識別。
在實例49中,實例47至48之標的物包含,其中該節點係一後續層級節點,且其中該項目僅由該項目之一索引鍵識別。
在實例50中,實例47至49之標的物包含,其中使用來自一查詢項目之一決定性映射以在一搜尋中自一第一節點移動至一第二節點。
在實例51中,實例50之標的物包含,其中當該第一節點及該第二節點係基底層級節點時應用一第一決定性映射,其中當該第一節點
係一基底層級節點且該第二節點係一後續層級節點時應用一第二決定性映射,且其中當第一節點及該第二節點係後續層級節點時應用一第三決定性映射。
在實例52中,實例51之標的物包含,其中該第二決定性映射使用該項目之一樹識別符。
在實例53中,實例51至52之標的物包含,其中該第一決定性映射及該第二決定性映射不使用該項目之一樹識別符。
實例54係一種包含指令之機器可讀媒體,該等指令在由一機器執行時引起該機器執行實例32至53之任何方法。
實施例55係一種包括用來執行實例32至53之任何方法之構件之系統。
實例56係一種包含指令之機器可讀媒體,該等指令在由處理電路系統執行時引起該處理電路系統執行包括以下各者之操作:接收一第一項目,該第一項目包含對應於一第一KVS樹之一第一索引鍵及一第一樹識別符;接收一第二項目,該第二項目包含對應於一第二KVS樹之一第二索引鍵及一第二樹識別符;及將該第一項目及該第二項目寫入至一KVS樹資料庫之一基底層級節點中之一異質索引鍵值集(kvset),該KVS樹資料庫包含至少一個基底層級節點及至少一個後續層級節點,各後續層級節點對應於單個KVS樹且包含該單個KVS樹之同質kvset。
在實例57中,實例56之標的物包含,其中該等操作包括壓縮該KVS樹資料庫之一節點。
在實例58中,實例57之標的物包含,其中壓縮該樹之該節點包含執行一索引鍵壓縮。
在實例59中,實例58之標的物包含,其中執行該索引鍵壓縮包含:跨該節點之多個kvset定位具有匹配識別符之一組項目;將該組項目之一最新項目寫入至該節點中之一新kvset;及自該節點移除該多個kvset。
在實例60中,實例59之標的物包含,其中該節點係一基底層級節點,且其中該等識別符係基於一項目之一樹識別符及索引鍵元組(TIKT)。
在實例61中,實例59至60之標的物包含,其中該索引鍵壓縮係對一後續層級節點執行,且其中該等識別符僅基於一項目之一索引鍵。
在實例62中,實例59至61之標的物包含,其中自該節點移除該多個kvset包含自該節點移除對應於該多個kvset之值。
在實例63中,實例57至62之標的物包含,其中壓縮該樹之該節點包含執行一溢出壓縮,包含:計算來自該節點中之一項目之一決定性映射,該決定性映射指定該節點之一單個子節點;及將該項目寫入至該單個子節點。
在實例64中,實例63之標的物包含,其中該節點係一基底層級節點且該單個子節點係一後續層級節點,且其中該決定性映射係基於該項目之一樹識別符及索引鍵元組(TIKT)。
在實例65中,實例63至64之標的物包含,其中該節點及該單個子節點係後續層級節點,且其中該決定性映射僅基於該項目之一索引鍵。
在實例66中,實例65之標的物包含,其中該決定性映射基
於該節點之一樹層級而變動。
在實例67中,實例66之標的物包含,其中該決定性映射係該索引鍵之一雜湊之一部分,該部分係由該樹層級及該雜湊之一預設定分派指定。
在實例68中,實例67之標的物包含,其中該預設定分派定義至少一些樹層級之子節點之一最大數目。
在實例69中,實例67至68之標的物包含,其中該預設定分派定義該KVS樹之一最大深度。
在實例70中,實例57至69之標的物包含,其中壓縮該樹之該節點包含執行一提升壓縮,包含將一樹識別符寫入至一項目,在一父節點係一基底層級節點且該項目不具有該樹識別符時,該項目寫入至該父節點。
在實例71中,實例56至70之標的物包含,其中該等操作包括針對一項目搜尋該KVS樹資料庫之一節點。
在實例72中,實例71之標的物包含,其中該節點係一基底層級節點,且其中一項目係藉由該項目之一樹識別符及索引鍵元組(TIKT)予以識別。
在實例73中,實例71至72之標的物包含,其中該節點係一後續層級節點,且其中一項目僅由該項目之一索引鍵識別。
在實例74中,實例71至73之標的物包含,其中使用來自一查詢項目之一決定性映射以在一搜尋中自一第一節點移動至一第二節點。
在實例75中,實例74之標的物包含,其中當該第一節點及該第二節點係基底層級節點時應用一第一決定性映射,其中當該第一節點
係一基底層級節點且該第二節點係一後續層級節點時應用一第二決定性映射,且其中當第一節點及該第二節點係後續層級節點時應用一第三決定性映射。
在實例76中,實例75之標的物包含,其中該第二決定性映射使用該項目之一樹識別符。
在實例77中,實例75至76之標的物包含,其中該第一決定性映射及該第二決定性映射不使用該項目之一樹識別符。
實例78係一種系統,其包括:用於接收一第一項目之構件,該第一項目包含對應於一第一KVS樹之一第一索引鍵及一第一樹識別符;用於接收一第二項目之構件,該第二項目包含對應於一第二KVS樹之一第二索引鍵及一第二樹識別符;及用於將該第一項目及該第二項目寫入至一KVS樹資料庫之一基底層級節點中之一異質索引鍵值集(kvset)之構件,該KVS樹資料庫包含至少一個基底層級節點及至少一個後續層級節點,各後續層級節點對應於一單個KVS樹且包含該單個KVS樹之同質kvset。
在實例79中,實例78之標的物包含,用於壓縮該KVS樹資料庫之一節點之構件。
在實例80中,實例79之標的物包含,其中用於壓縮該樹之該節點之該等構件包含用於執行一索引鍵壓縮之構件。
在實例81中,實例80之標的物包含,其中用於執行該索引鍵壓縮之該等構件包含:用於跨該節點之多個kvset定位具有匹配識別符之一組項目之構件;用於將該組項目之一最新項目寫入至該節點中之一新kvset之構件;及用於自該節點移除該多個kvset之構件。
在實例82中,實例81之標的物包含,其中該節點係一基底層級節點,且其中該等識別符係基於一項目之一樹識別符及索引鍵元組(TIKT)。
在實例83中,實例81至82之標的物包含,其中該索引鍵壓縮係對一後續層級節點執行,且其中該等識別符僅基於一項目之一索引鍵。
在實例84中,實例81至83之標的物包含,其中用於自該節點移除該多個kvset之該等構件包含用於自該節點移除對應於該多個kvset之值之構件。
在實例85中,實例79至84之標的物包含,其中用於壓縮該樹之該節點之該等構件包含執行一溢出壓縮,包含:用於計算來自該節點中之一項目之一決定性映射之構件,該決定性映射指定該節點之一單個子節點;及用於將該項目寫入至該單個子節點之構件。
在實例86中,實例85之標的物包含,其中該節點係一基底層級節點且該單個子節點係一後續層級節點,且其中該決定性映射係基於該項目之一樹識別符及索引鍵元組(TIKT)。
在實例87中,實例85至86之標的物包含,其中該節點及該單個子節點係後續層級節點,且其中該決定性映射僅基於該項目之一索引鍵。
在實例88中,實例87之標的物包含,其中該決定性映射基於該節點之一樹層級而變動。
在實例89中,實例88之標的物包含,其中該決定性映射係該索引鍵之一雜湊之一部分,該部分係由該樹層級及該雜湊之一預設定分
派指定。
在實例90中,實例89之標的物包含,其中該預設定分派定義至少一些樹層級之子節點之一最大數目。
在實例91中,實例89至90之標的物包含,其中該預設分派定義該KVS樹之一最大深度。
在實例92中,實例79至91之標的物包含,其中用於壓縮該樹之該節點之該等構件包含用於執行一提升壓縮之構件,包含將一樹識別符寫入至一項目,在一父節點係一基底層級節點且該項目不具有該樹識別符時,該項目寫入至該父節點。
在實例93中,實例78至92之標的物包含,其中該等操作包括針對一項目搜尋該KVS樹資料庫之一節點。
在實例94中,實例93之標的物包含,其中該節點係一基底層級節點,且其中一項目係藉由該項目之一樹識別符及索引鍵元組(TIKT)予以識別。
在實例95中,實例93至94之標的物包含,其中該節點係一後續層級節點,且其中一項目僅由該項目之一索引鍵識別。
在實例96中,實例93至95之標的物包含,其中使用來自一查詢項目之一決定性映射以在一搜尋中自一第一節點移動至一第二節點。
在實例97中,實例96之標的物包含,其中當該第一節點及該第二節點係基底層級節點時應用一第一決定性映射,其中當該第一節點係一基底層級節點且該第二節點係一後續層級節點時應用一第二決定性映射,且其中當第一節點及該第二節點係後續層級節點時應用一第三決定性映射。
在實例98中,實例97之標的物包含,其中該第二決定性映射使用該項目之一樹識別符。
在實例99中,實例97至98之標的物包含,其中該第一決定性映射及該第二決定性映射不使用該項目之一樹識別符。
實例100係至少一種包含指令之機器可讀媒體,該等指令在由處理電路系統執行時引起該處理電路系統執行操作以實施實例1至99之任一者。
實施例101係一種包括用來實施實例1至99之任一者之構件之裝置。
實施例102係一種用來實施實例1至99之任一者之系統。
實施例103係一種用來實施實例1至99之任一者之方法。
上文實施方式包含對形成實施方式之一部分之隨附圖式之參考。圖式藉由圖解之方式展示可實踐之特定實施例。此等實施例在本文中亦稱為「實例」。此等實例可包含除所展示或所描述元件之外之元件。然而,本發明人亦考量其中僅提供彼等所展示或所描述元件之實例。此外,本發明人亦考量關於一特定實例(或其之一或多個態樣)或關於本文中所展示或所描述之其他實例(或其之一或多個態樣)使用彼等所展示或所描述元件之任何組合或置換之實例。
本文件中所提及之全部公開案、專利及專利文件之全文如同以引用方式個別地併入般以引用方式併入本文中。本文件與彼等以參考方式併入的文件之間若有不一致的用法,此(等)併入之參考文件中之使用狀況應視為本文件用法之補充;對於矛盾的不一致,以本文件中的使用狀況為主。
在本文件中,如常見於專利文件中,術語「一(a或an)」用來包含獨立於「至少一個」或「一或多個」之任何其他例項或用法之一個或一個以上例項或用法。在本文件中,術語「或」用來指代一非排他性或,使得「A或B」包含「A但非B」、「B但非A」及「A及B」,除非另有指示。在隨附發明申請專利範圍中,術語「包含」及「其中」用作各自術語「包括」及「其中」之白話英語等效物。再者,在下文發明申請專利範圍中,術語「包含」及「包括」係開放式的,即,包含在如請求項中之此一術語後所列元件以外之元件的一系統、器件、物品或程序仍然係視為屬於該發明申請專利範圍之範疇內。此外,在下文發明申請專利範圍中,術語「第一」、「第二」及「第三」等僅用作標籤,且並非旨在對其等標的強加數字要求。
上文描述旨在闡釋性且非限制性。例如,上文所描述之實例(或其之一或多個態樣)可彼此組合使用。在檢視上文描述後,諸如一般技術者可使用其他實施例。發明摘要允許讀者能夠快速地確定本發明之性質,且在提交該發明摘要之同時應瞭解並非用於解釋或限制發明申請專利範圍之範疇或含義。再者,在上文實施方式中,各種特徵可集合在一起以簡化本發明。此不應被解譯為期望一未主張之揭示特徵係任何請求項之索引鍵。實情係,發明標的物可能在於少於一特定揭示實施例之全部特徵。因此,下文發明申請專利範圍在此併入實施方式中,其中各請求項自身作為一單獨實施例。應參考隨附發明申請專利範圍連同此等發申請專利範圍所賦予權利之等效物之全範圍來判定實施例之範疇。
100‧‧‧索引鍵值結構樹資料庫(KVDB)
105‧‧‧第一基底層級節點
110‧‧‧第二基底層級節點
115‧‧‧索引鍵值集(kvset)
120‧‧‧索引鍵值集(kvset)
125‧‧‧索引鍵值集(kvset)
130‧‧‧節點
135‧‧‧節點
L1‧‧‧後續層級/第一層級
L2‧‧‧後續層級/第二層級
L3‧‧‧後續層級/第三層級
T1‧‧‧索引鍵值結構(KVS)樹
T2‧‧‧KVS樹
Claims (42)
- 一種在至少一個機器可讀媒體上之KVS樹資料庫產品,該KVS樹資料庫包括:一多層級樹,其包含:一基底層級,其具有一節點中之一異質索引鍵值集(kvset),該異質kvset包含一第一KVS樹之一第一項目及一第二KVS樹之一第二項目;及後續層級,其等包含至少一個後續層級,該後續層級包含:一第一KVS樹節點,其包含該第一KVS樹之一第一同質kvset;及一第二KVS樹節點,其包含該第二KVS樹之一第二同質kvset;該基底層級與該後續層級之間的項目之一第一決定性映射;及後續層級之間的項目之一第二決定性映射。
- 如請求項1之KVS樹資料庫產品,其中該第二決定性映射係針對對應於該等後續層級中之節點之一KVS樹指定之一決定性映射。
- 如請求項1之KVS樹資料庫產品,其中該第一決定性映射係基於對應於一項目之一KVS樹之一樹識別符之一決定性映射。
- 如請求項1之KVS樹資料庫產品,其中一異質kvset項目包含一樹識別符。
- 如請求項1之KVS樹資料庫產品,其中一同質kvset項目排除一樹識別符。
- 如請求項1之KVS樹資料庫產品,其中該基底層級包含該至少一個機器可讀媒體之一第一機器可讀媒體中之一第一子層級及該至少一個機器可讀媒體之一第二機器可讀媒體中之一第二子層級。
- 如請求項6之KVS樹資料庫產品,其中該第二子層級包含一個以上節點,且其中該基底層級包含該第一子層級與該第二子層級之間的一第三決定性映射。
- 如請求項7之KVS樹資料庫產品,其中該第三決定性映射不使用項目之樹識別符。
- 如請求項6之KVS樹資料庫產品,其中該第一機器可讀媒體係位元組可定址的,且其中該第二機器可讀媒體係區塊可定址的。
- 一種用來實施一KVS樹資料庫之方法,該方法包括:接收一第一項目,該第一項目包含對應於一第一KVS樹之一第一索引鍵及一第一樹識別符;接收一第二項目,該第二項目包含對應於一第二KVS樹之一第二索引鍵及一第二樹識別符;及 將該第一項目及該第二項目寫入至一KVS樹資料庫之一基底層級節點中之一異質索引鍵值集(kvset),該KVS樹資料庫包含至少一個基底層級節點及至少一個後續層級節點,各後續層級節點對應於一單個KVS樹且包含該單個KVS樹之同質kvset。
- 如請求項10之方法,其包括壓縮該KVS樹資料庫之一節點。
- 如請求項11之方法,其中壓縮該樹之該節點包含執行一溢出壓縮,包含:計算來自該節點中之一項目之一決定性映射,該決定性映射指定該節點之一單個子節點;及將該項目寫入至該單個子節點。
- 如請求項12之方法,其中該節點及該單個子節點係後續層級節點,且其中該決定性映射僅基於該項目之一索引鍵。
- 如請求項11之方法,其中壓縮該樹之該節點包含執行一提升壓縮,包含將一樹識別符寫入至一項目,在一父節點係一基底層級節點且該項目不具有該樹識別符時,該項目寫入至該父節點。
- 如請求項10之方法,其包括針對一項目搜尋該KVS樹資料庫之一節點。
- 如請求項15之方法,其中該節點係一基底層級節點,且其中一項目係藉由該項目之一樹識別符及索引鍵元組(TIKT)予以識別。
- 如請求項15之方法,其中使用來自一查詢項目之一決定性映射以在一搜尋中自一第一節點移動至一第二節點。
- 如請求項17之方法,其中當該第一節點及該第二節點係基底層級節點時應用一第一決定性映射,其中當該第一節點係一基底層級節點且該第二節點係一後續層級節點時應用一第二決定性映射,且其中當第一節點及該第二節點係後續層級節點時應用一第三決定性映射。
- 如請求項18之方法,其中該第二決定性映射使用該項目之一樹識別符。
- 如請求項18之方法,其中該第一決定性映射及該第二決定性映射不使用該項目之一樹識別符。
- 一種包含指令之機器可讀媒體,該等指令在由處理電路系統執行時引起該處理電路系統執行包括以下各者之操作:接收一第一項目,該第一項目包含對應於一第一KVS樹之一第一索引鍵及一第一樹識別符;接收一第二項目,該第二項目包含對應於一第二KVS樹之一第二索引鍵及一第二樹識別符;及 將該第一項目及該第二項目寫入至一KVS樹資料庫之一基底層級節點中之一異質索引鍵值集(kvset),該KVS樹資料庫包含至少一個基底層級節點及至少一個後續層級節點,各後續層級節點對應於一單個KVS樹且包含該單個KVS樹之同質kvset。
- 如請求項21之機器可讀媒體,其中該等操作包括壓縮該KVS樹資料庫之一節點。
- 如請求項22之機器可讀媒體,其中壓縮該樹之該節點包含執行一索引鍵壓縮。
- 如請求項23之機器可讀媒體,其中執行該索引鍵壓縮包含:跨該節點之多個kvset定位具有匹配識別符之一組項目;將該組項目之一最新項目寫入至該節點中之一新kvset;及自該節點移除該多個kvset。
- 如請求項24之機器可讀媒體,其中該節點係一基底層級節點,且其中該等識別符係基於一項目之一樹識別符及索引鍵元組(TIKT)。
- 如請求項24之機器可讀媒體,其中該索引鍵壓縮係對一後續層級節點執行,且其中該等識別符僅基於一項目之一索引鍵。
- 如請求項24之機器可讀媒體,其中自該節點移除該多個kvset包含: 自該節點移除對應於該多個kvset之值。
- 如請求項22之機器可讀媒體,其中壓縮該樹之該節點包含執行一溢出壓縮,包含:計算來自該節點中之一項目之一決定性映射,該決定性映射指定該節點之一單個子節點;及將該項目寫入至該單個子節點。
- 如請求項28之機器可讀媒體,其中該節點係一基底層級節點且該單個子節點係一後續層級節點,且其中該決定性映射基於該項目之一樹識別符及索引鍵元組(TIKT)。
- 如請求項28之機器可讀媒體,其中該節點及該單個子節點係後續層級節點,且其中該決定性映射僅基於該項目之一索引鍵。
- 如請求項30之機器可讀媒體,其中該決定性映射基於該節點之一樹層級而變動。
- 如請求項31之機器可讀媒體,其中該決定性映射係該索引鍵之一雜湊之一部分,該部分係藉由該樹層級及該雜湊之一預設定分派予以指定。
- 如請求項32之機器可讀媒體,其中該預設定分派定義至少一些樹層級之子節點之一最大數目。
- 如請求項32之機器可讀媒體,其中該預設定分派定義該KVS樹之一最大深度。
- 如請求項22之機器可讀媒體,其中壓縮該樹之該節點包含執行一提升壓縮,包含將一樹識別符寫入至一項目,在一父節點係一基底層級節點且該項目不具有該樹識別符時,該項目寫入至該父節點。
- 如請求項21之機器可讀媒體,其中該等操作包括針對一項目搜尋該KVS樹資料庫之一節點。
- 如請求項36之機器可讀媒體,其中該節點係一基底層級節點,且其中一項目係藉由該項目之一樹識別符及索引鍵元組(TIKT)予以識別。
- 如請求項36之機器可讀媒體,其中該節點係一後續層級節點,且其中一項目僅由該項目之一索引鍵識別。
- 如請求項36之機器可讀媒體,其中使用來自一查詢項目之一決定性映射以在一搜尋中自一第一節點移動至一第二節點。
- 如請求項39之機器可讀媒體,其中當該第一節點及該第二節點係基底層級節點時應用一第一決定性映射,其中當該第一節點係一基底層級節點且該第二節點係一後續層級節點時應用一第二決定性映射,且其中當第 一節點及該第二節點係後續層級節點時應用一第三決定性映射。
- 如請求項40之機器可讀媒體,其中該第二決定性映射使用該項目之一樹識別符。
- 如請求項40之機器可讀媒體,其中該第一決定性映射及該第二決定性映射不使用該項目之一樹識別符。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/691,888 | 2017-08-31 | ||
US15/691,888 US10783186B2 (en) | 2017-08-31 | 2017-08-31 | Heterogenous key-value sets in tree database |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201913416A TW201913416A (zh) | 2019-04-01 |
TWI682285B true TWI682285B (zh) | 2020-01-11 |
Family
ID=65435211
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW107128396A TWI682285B (zh) | 2017-08-31 | 2018-08-15 | 用於索引鍵值結構樹資料庫的產品、方法及機器可讀媒體 |
Country Status (5)
Country | Link |
---|---|
US (2) | US10783186B2 (zh) |
KR (1) | KR102462781B1 (zh) |
CN (1) | CN111226205B (zh) |
TW (1) | TWI682285B (zh) |
WO (1) | WO2019045959A1 (zh) |
Families Citing this family (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI710954B (zh) * | 2019-07-26 | 2020-11-21 | 威聯通科技股份有限公司 | 超融合基礎架構的資料快取方法與節點、機器學習框架及檔案系統代理程式 |
US11755534B2 (en) | 2017-02-14 | 2023-09-12 | Qnap Systems, Inc. | Data caching method and node based on hyper-converged infrastructure |
US10783186B2 (en) | 2017-08-31 | 2020-09-22 | Micron Technology, Inc. | Heterogenous key-value sets in tree database |
US11269915B2 (en) * | 2017-10-05 | 2022-03-08 | Zadara Storage, Inc. | Maintaining shards in KV store with dynamic key range |
CN108063756B (zh) * | 2017-11-21 | 2020-07-03 | 阿里巴巴集团控股有限公司 | 一种密钥管理方法、装置及设备 |
CN110321297A (zh) * | 2018-03-28 | 2019-10-11 | 三星电子株式会社 | 用于将虚拟流映射到物理流上的存储装置及其操作方法 |
US11243929B2 (en) * | 2018-08-08 | 2022-02-08 | Visa International Service Association | System and method for dynamic bulk data ingestion prioritization |
US11099771B2 (en) * | 2018-09-24 | 2021-08-24 | Salesforce.Com, Inc. | System and method for early removal of tombstone records in database |
EP4284044A3 (en) | 2019-04-29 | 2024-02-21 | Telefonaktiebolaget LM Ericsson (publ) | Handling of multiple authentication procedures in 5g |
CN110362572B (zh) * | 2019-06-25 | 2022-07-01 | 浙江邦盛科技股份有限公司 | 一种基于列式存储的时序数据库系统 |
US11256719B1 (en) * | 2019-06-27 | 2022-02-22 | Amazon Technologies, Inc. | Ingestion partition auto-scaling in a time-series database |
US11256717B2 (en) * | 2019-10-21 | 2022-02-22 | Vmware, Inc. | Storage of key-value entries in a distributed storage system |
CN111399777B (zh) * | 2020-03-16 | 2023-05-16 | 平凯星辰(北京)科技有限公司 | 一种基于数据值分类的差异化键值数据存储方法 |
CN111400320B (zh) * | 2020-03-18 | 2023-06-20 | 百度在线网络技术(北京)有限公司 | 用于生成信息的方法和装置 |
US11556513B2 (en) | 2020-06-30 | 2023-01-17 | Hewlett Packard Enterprise Development Lp | Generating snapshots of a key-value index |
US20210149683A1 (en) * | 2020-12-21 | 2021-05-20 | Intel Corporation | Techniques for acceleration of a prefix-scan operation |
US20220329436A1 (en) * | 2021-04-13 | 2022-10-13 | International Business Machines Corporation | Token-based identity validation via blockchain |
CN113297136B (zh) * | 2021-05-25 | 2023-11-03 | 南京大学 | 一种面向lsm树的键值存储方法和存储系统 |
US20230017732A1 (en) | 2021-07-16 | 2023-01-19 | Samsung Electronics Co., Ltd. | Key packing for flash key value store operations |
CN113794579A (zh) * | 2021-07-26 | 2021-12-14 | 奇安信科技集团股份有限公司 | 标签创建方法、装置、设备、系统与存储介质 |
US20230054002A1 (en) * | 2021-08-18 | 2023-02-23 | Samsung Electronics Co., Ltd. | Lifecycle-aware persistent storage |
US11892992B2 (en) * | 2022-01-31 | 2024-02-06 | Salesforce, Inc. | Unique identification management |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TW200421114A (en) * | 2002-12-19 | 2004-10-16 | Ibm | Method and apparatus for building one or more indexes on data concurrent with manipulation of data |
US20150293958A1 (en) * | 2014-04-10 | 2015-10-15 | Facebook, Inc. | Scalable data structures |
US20160335299A1 (en) * | 2015-05-11 | 2016-11-17 | Apple Inc. | Hierarchical Data Storage |
US20160364421A1 (en) * | 2015-06-10 | 2016-12-15 | International Business Machines Corporation | Database index for constructing large scale data level of details |
US20170177657A1 (en) * | 2012-12-19 | 2017-06-22 | Salesforce.Com, Inc. | Systems, methods, and apparatuses for fixing logical or physical corruption in databases using lsm trees |
Family Cites Families (15)
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 |
US8996563B2 (en) * | 2010-04-06 | 2015-03-31 | Tokutek, Inc. | High-performance streaming dictionary |
US8700670B2 (en) * | 2010-04-12 | 2014-04-15 | Symantec Corporation | Insert optimization for B+ tree data structure scalability |
GB201102606D0 (en) | 2011-02-15 | 2011-03-30 | Acunu Ltd | Data storage system |
US8527544B1 (en) * | 2011-08-11 | 2013-09-03 | Pure Storage Inc. | Garbage collection in a storage system |
CN102521375B (zh) * | 2011-12-19 | 2013-12-11 | 山东中创软件商用中间件股份有限公司 | 一种目录服务数据检索方法及系统 |
CN104142958B (zh) * | 2013-05-10 | 2018-03-13 | 华为技术有限公司 | 一种键值对系统中数据的存储方法和相关装置 |
CN104424222B (zh) * | 2013-08-23 | 2019-09-13 | 华为技术有限公司 | 数据库索引方法及装置 |
CN103823865A (zh) * | 2014-02-25 | 2014-05-28 | 南京航空航天大学 | 一种数据库主存索引方法 |
US9836229B2 (en) * | 2014-11-18 | 2017-12-05 | Netapp, Inc. | N-way merge technique for updating volume metadata in a storage I/O stack |
US10891264B2 (en) * | 2015-04-30 | 2021-01-12 | Vmware, Inc. | Distributed, scalable key-value store |
CN105159915B (zh) | 2015-07-16 | 2018-07-10 | 中国科学院计算技术研究所 | 可动态适应的lsm树合并方法及系统 |
US10496283B2 (en) * | 2016-01-22 | 2019-12-03 | Suraj Prabhakar WAGHULDE | Adaptive prefix tree based order partitioned data storage system |
US9990146B2 (en) * | 2016-02-03 | 2018-06-05 | Sandisk Technologies Llc | Apparatus and method of data sequencing |
US10783186B2 (en) | 2017-08-31 | 2020-09-22 | Micron Technology, Inc. | Heterogenous key-value sets in tree database |
-
2017
- 2017-08-31 US US15/691,888 patent/US10783186B2/en active Active
-
2018
- 2018-08-07 WO PCT/US2018/045582 patent/WO2019045959A1/en active Application Filing
- 2018-08-07 CN CN201880066952.XA patent/CN111226205B/zh active Active
- 2018-08-07 KR KR1020207009185A patent/KR102462781B1/ko active IP Right Grant
- 2018-08-15 TW TW107128396A patent/TWI682285B/zh active
-
2020
- 2020-09-10 US US17/017,126 patent/US11238098B2/en active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TW200421114A (en) * | 2002-12-19 | 2004-10-16 | Ibm | Method and apparatus for building one or more indexes on data concurrent with manipulation of data |
US20170177657A1 (en) * | 2012-12-19 | 2017-06-22 | Salesforce.Com, Inc. | Systems, methods, and apparatuses for fixing logical or physical corruption in databases using lsm trees |
US20150293958A1 (en) * | 2014-04-10 | 2015-10-15 | Facebook, Inc. | Scalable data structures |
US20160335299A1 (en) * | 2015-05-11 | 2016-11-17 | Apple Inc. | Hierarchical Data Storage |
US20160364421A1 (en) * | 2015-06-10 | 2016-12-15 | International Business Machines Corporation | Database index for constructing large scale data level of details |
Also Published As
Publication number | Publication date |
---|---|
KR102462781B1 (ko) | 2022-11-04 |
US11238098B2 (en) | 2022-02-01 |
WO2019045959A1 (en) | 2019-03-07 |
US20200410005A1 (en) | 2020-12-31 |
TW201913416A (zh) | 2019-04-01 |
KR20200053512A (ko) | 2020-05-18 |
CN111226205B (zh) | 2021-08-31 |
US20190065621A1 (en) | 2019-02-28 |
CN111226205A (zh) | 2020-06-02 |
US10783186B2 (en) | 2020-09-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI682285B (zh) | 用於索引鍵值結構樹資料庫的產品、方法及機器可讀媒體 | |
TWI682274B (zh) | 鍵值儲存樹 | |
TWI702506B (zh) | 用於合併樹廢棄項目指標之系統、機器可讀媒體及機器實施之方法 | |
TWI702503B (zh) | 實施用於維護操作之合併樹修改之系統、方法及電腦可讀媒體 | |
TWI719281B (zh) | 用於串流選擇之系統、機器可讀媒體、及機器實施之方法 | |
AU2017243870A1 (en) | "Methods and systems for database optimisation" |