TW202040406A - 使用電路實現的軟體和用於金鑰—值儲存的方法 - Google Patents
使用電路實現的軟體和用於金鑰—值儲存的方法 Download PDFInfo
- Publication number
- TW202040406A TW202040406A TW109112565A TW109112565A TW202040406A TW 202040406 A TW202040406 A TW 202040406A TW 109112565 A TW109112565 A TW 109112565A TW 109112565 A TW109112565 A TW 109112565A TW 202040406 A TW202040406 A TW 202040406A
- Authority
- TW
- Taiwan
- Prior art keywords
- key
- index
- value
- ssd
- metadata
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6218—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
- G06F21/6227—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database where protection concerns the structure of data, e.g. records, types, queries
-
- 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/9014—Indexing; Data structures therefor; Storage structures hash tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- 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/2255—Hash tables
-
- 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/907—Retrieval characterised by using metadata, e.g. metadata not derived from the content or metadata generated manually
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/0644—Management of space entities, e.g. partitions, extents, pools
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0662—Virtualisation aspects
- G06F3/0667—Virtualisation aspects at data level, e.g. file, record or object virtualisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Human Computer Interaction (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Library & Information Science (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本發明揭露一種可使用電路實現的軟體。所述軟體可包括應用程式化介面(API),以從應用接收與金鑰-值固態驅動器(KV-SSD)的金鑰-值對相關的請求。金鑰-值對可包括金鑰及值;所述應用可由處理器執行。所述軟體更可包括:組合器軟體,將金鑰與索引組合以產生索引金鑰;以及執行軟體,使用索引金鑰及值在金鑰-值固態驅動器上執行操作。也提供一種用於金鑰-值儲存的方法。
Description
本發明概念一般涉及電腦系統,且更具體地說,涉及增強金鑰-值固態驅動器(KV-SSD)的功能。
金鑰-值儲存是資料庫管理系統的最簡單形式。其可儲存多對金鑰及值,也可在已知金鑰時檢索值。這些簡單的系統通常不適用於沒有附加特徵的複雜應用。例如,這些系統不支援向金鑰追加值。
仍然需要支援對金鑰-值儲存的追加操作。
根據本發明概念的態樣,提供了一種使用電路實現的軟體,包括應用程式化介面、組合器軟體和執行軟體。應用程式化介面從應用接收與金鑰-值固態驅動器的金鑰-值對相關的請求,金鑰-值對包括金鑰及值,應用由處理器執行。組合器軟體將金鑰與索引組合,以產生索引金鑰;執行軟體使用索引金鑰及值在金鑰-值固態驅動器上執行操作。
根據本發明概念的態樣,提供了一種用於金鑰-值儲存的方法,包括:從應用接收寫入請求,以將與金鑰相關聯的值儲存在金鑰-值固態驅動器上作為金鑰-值對,應用由處理器執行;確定金鑰的基本索引;將基本索引與金鑰組合以產生索引金鑰;及,在金鑰-值固態驅動器上實行儲存操作以將索引金鑰與值相關聯。
根據本發明概念的態樣,提供了一種用於金鑰-值儲存的方法,包括:從應用接收追加請求,以將第二值追加到金鑰-值固態驅動器上與金鑰相關聯的值作為金鑰-值對,應用由處理器執行;確定金鑰的最高追加索引;遞增最高追加索引以產生新的最高追加索引;將新的最高追加索引與金鑰組合以產生追加索引金鑰;及,在金鑰-值固態驅動器上實行第二儲存操作以將追加索引金鑰與第二值相關聯。
現在將詳細參考本發明概念的實施例,所述實施例的實例示於附圖中。在下面的詳細說明中,闡述許多具體細節,以能夠透徹理解本發明概念。然而,應理解,本領域中的一般技術人員可在沒有這些具體細節的情況下實踐本發明概念。在其他情況下,沒有詳細闡述眾所周知的方法、程式、元件、電路及網路,以免不必要地使實施例的各個方面模糊不清。
將理解,儘管本文中可能使用用語“第一”、“第二”等來闡述各種元件,然而這些元件不應受這些用語限制。這些用語僅用於區分各個元件。例如,在不背離本發明概念的範圍的條件下,可稱第一模組為第二模組,且相似地,可稱第二模組為第一模組。
本文中,在發明概念的說明中使用的術語僅是為了闡述特定實施例,而不旨在限制本發明概念。除非上下文中另外清楚地指出,否則在本發明概念的說明及所附權利要求書中所使用的單數形式“一(a、an)”及“所述(the)”也旨在包括複數形式。還將理解,本文中使用的用語“和/或”是指並囊括相關聯列出項中的一個或多個項的任何及所有可能的組合。將進一步理解,用語“包括(comprises和/或comprising)當在本說明書中使用時,是具體說明所陳述的特徵、整數、步驟、操作、元件和/或元件的存在,但不排除一個或多個其他特徵、整數、步驟、操作、元件、元件和/或其群組的存在或添加。圖式的元件及特徵不必按比例繪製。
在高層級上,追加功能可將每個追加寫成單獨的金鑰-值對,以使用最近最少使用的(Least Recently Used,LRU)散列表保持記憶體中(in-memory)。為了持久性,金鑰中繼資料可為寫入KV-SSD的每個值加首碼。架構可被實現為應用與金鑰-值固態驅動器(KV-SSD)之間(例如,作業系統內)的層或者實現為作業系統與KV-SSD之間(或者KV-SSD本身上的固件內)的層。
為了實行追加操作,可將單獨的金鑰值對寫入KV-SSD。原始金鑰可以追加索引的序號(‘追加索引’)的兩個位元組作為首碼,但也可支援其他長度的追加索引。當資料針對金鑰第一次被寫入KV-SSD時,所使用的追加索引可為0,或者金鑰可保持不變。
對於每個金鑰,在LRU散列表中可維持記憶體中的資料結構,以跟蹤追加。如果記憶體中的LRU散列表缺少儲存新金鑰的空間,則可選擇現有金鑰進行驅逐。以下論文中闡述的技術可被實施以在多核系統中提供併發控制:例如“CPHash:利用LRU驅逐的快取記憶體分區散列表(A cache-partitioned hash table with LRU eviction)”,麻省理工學院電氣工程及電腦科學系的茲維阿德梅特列韋利(Zviad Metreveli in the Department of Electrical Engineering and Computer Science at the Massachusetts Institute of Technology)提交的碩士論文,其併入本文供參考。散列表的大小可為可儲存在KV-SSD中的金鑰數量及系統中可用的記憶體量的函數。最近最少使用的金鑰可被驅逐,以為新金鑰騰出空間。
儲存在散列表中的中繼資料可儲存當前追加資訊及具有所有追加的資訊的自平衡二元搜尋樹(或其他資料結構)。中繼資料的示例性資料結構可為:
結構中繼資料
{
unsigned int cur_append_index;
unsigned int cur_append_offset;
unsigned int cur_append_length
bin_search_tree appends;
};
樹(或其他資料結構)中的每個節點可包含每個追加請求的序號(追加索引)、偏移及長度。中繼資料的這種表示可提高利用偏移的GET的性能。
向自平衡二元搜尋樹(或其他資料結構)中的插入可相對於追加索引單調增加。當使用自平衡二元搜尋樹時,兩個普遍選擇是平衡二元(AVL)樹及紅黑樹(Red Black tree)。AVL 樹
在AVL樹中,任何節點的兩個子樹的高度相差至多1;如果其在任何時候相差大於1,則進行再平衡以恢復這種性質。在平均情況及最差情況下,查找、插入及刪除均需要O(log n)時間,其中‘n’是操作之前樹中的節點數。插入及刪除可能需要通過一個或多個樹旋轉來使樹再平衡。紅黑樹
紅黑樹的平衡並不完美,但足以使其保證在O(log n)時間內進行搜索,其中‘n’是樹中要素的總數。插入及刪除操作以及樹的重新排列及重新著色也是在O(log n)時間內實行的。對於單調增加的資料,紅色及黑色樹在插入與查找性能之間提供良好的平衡。由於追加索引是單調增加的,因此紅色及黑色樹是跟蹤中繼資料的良好方式。
為了在所需的記憶體量與緩存未命中之間達到平衡,追加操作的最大數量可為固定的:例如,1 K(1024)個追加。追加的這一最大數量可為可配置的,且可為金鑰的數量、可用記憶體及應用的追加要求的函數。
每個追加值都可用中繼資料作為首碼,以實現持久性。序列化‘中繼資料’可被編碼,為值加首碼,並寫入KV-SSD。
重要的考慮因素可包括系統性能(將所實行的裝置讀取操作及寫入操作的數量最小化)及持久性(確保追加操作是可持久及可恢復的)。
在最優情況下,每個追加請求可向KV-SSD僅產生一個寫入輸入/輸出(Input/Output,I/O)請求。如果中繼資料在記憶體中不可用,則最差情況應引起“log n”次附加讀取,以從具有最高序號的追加中檢索中繼資料,其中‘n’是所允許的(可配置的)追加的最大數量。處理來自應用的 PUT (Key1, Value, Overwrite) 請求
1)在散列表中查找金鑰1(Key1)的中繼資料。如果在散列表中找不到Key1中繼資料,則通過實行二元搜索從KV-SSD檢索Key1中繼資料,以找到之前使用的最高追加索引。
2)如果找不到Key1中繼資料,則這必須是新金鑰,且可產生散列表中的新條目以及Key1中繼資料的新實例。
3)如果找到Key1中繼資料:
a)如果設定‘覆寫(overwrite)’標記,則刪除現有金鑰的所有追加。
b)如果未設定‘覆寫’標記,則將‘金鑰存在錯誤’返回給應用。
4)如果這是此金鑰的第一次寫入,則將追加索引設定為“0”,並將新節點(追加索引、此追加的偏移、值的長度)插入Key1中繼資料中。
5)將追加索引作為金鑰的首碼,將序列化Key1中繼資料作為值的首碼,並將其寫入KV-SSD。處理來自應用的 Append (Key1, Value) 請求
1)在散列表中查找金鑰1(Key1)的中繼資料。如果在記憶體中找不到Key1中繼資料,則通過對之前使用的最高追加索引實行二元搜索從KV-SSD檢索Key1中繼資料。
2)如果找不到Key1中繼資料,則將‘未找到金鑰錯誤’返回給應用。
3)如果找到Key1中繼資料,則遞增追加索引,並將新節點(追加索引、此追加的偏移、值的長度)插入Key1中繼資料中。
5)將追加索引作為金鑰的首碼,將序列化Key1中繼資料作為值的首碼,並將其寫入KV-SSD。處理來自應用的 Get (Key1) 請求
1)在散列表中查找Key1的中繼資料。如果在散列表中找不到Key1中繼資料,則實行二元搜索以找到最高追加索引,並從KV-SSD檢索Key1中繼資料。
2)如果在KV-SSD中找不到Key1中繼資料,則將錯誤返回給應用。
3)利用Key1中繼資料中的資訊,可通過檢索所有追加的值來組合金鑰的整個值。應用也可選擇接收能夠一次檢索一個追加的反覆運算器。
注意:KV-SSD的‘利用偏移的獲取(GET with an OFFSET)’能力可通過避免記憶體拷貝來提高性能。處理來自應用的 Delete (Key1, Value, Overwrite) 請求
1)在散列表中查找Key1的中繼資料。如果在記憶體中找不到Key1中繼資料,則通過對之前使用的最高追加索引實行二元搜索從KV-SSD檢索Key1中繼資料。
2)如果找不到Key1中繼資料,則將‘未找到金鑰錯誤’返回給應用。
3)如果找到Key1中繼資料,則刪除所述金鑰的所有追加(包括追加索引為0000的原始寫入請求)。
4)或者,由於目標是刪除所有追加請求,因此可向KV-SSD發送刪除請求,從追加索引0000開始直到KV-SSD返回‘未找到金鑰’錯誤,而無需首先搜索最高追加索引。
本發明概念的實施例支援以下技術優點。首先,本發明概念的實施例引入目前KV-SSD不提供的追加語義。其次,追加語義防止資料丟失或資料損壞(例如,在電力故障的情況下)。第三,追加語義會避免與傳統的讀取-修改-寫入序列相關聯的性能損失以將新資料追加到值。第四,追加語義能夠儲存超過KV-SSD的最大物件大小的資料值,而應用不必管理向多個物件的資料儲存。
其他優化也是可能的:
1)散列表可被週期性地清除,這可減少在電力故障及其他錯誤情況下恢復中繼資料所需的二元搜索。
2)散列表可儲存在永久記憶體中(或者儲存在主記憶體中或者KV-SSD控制器的永久記憶體內),這可避免對LRU散列表的需要以及在電力故障的情況下重建中繼資料的需要。
3)高級技術可用於將散列表及相關聯中繼資料儲存在KV-SSD上的某處,從而消除對協力廠商非揮發性記憶體技術的需要。
4)代替使用標準LRU替換演算法,從散列表中選擇要驅逐的資料可使用另一種演算法,例如加權LRU替換演算法。
5)為了避免(可配置但以其他方式固定的)追加的最大數量,可使用級聯追加來儲存更多資料。
6)在沒有任何追加的金鑰的情況下,可使用布隆篩檢程式(bloom filter)來提高性能。
7)當金鑰的中繼資料旋轉出散列表時,可使用特殊金鑰-值對(例如,使用追加索引-1及原始金鑰)來儲存金鑰的當前最高追加索引,而不是搜索KV-SSD來得到最高追加索引。然後,當中繼資料被載入回散列表時,可存取這個特殊金鑰來立即確定最高追加索引。為了避免陳舊資料,當金鑰的中繼資料被載入到散列表中時,這個特殊金鑰可被刪除。這樣,如果當中繼資料儲存在散列表中時發生電源故障(並因此丟失),則中繼資料可從儲存在KV-SSD上的中繼資料完全重建。
8)根據應用的指令或者當滿足其他條件(例如,低固態驅動器活動,或者作為垃圾收集的一部分或者以其他方式與垃圾收集相關)時,可讀取具有大量追加的金鑰,其可適合更少的物件(取決於追加的大小及SSD的最大物件大小),追加資料被合併到單個物件或更小的物件集中,然後被寫回SSD(其中原始物件及追加對於以後的垃圾收集及重複使用是無效的)。
9)作為對金鑰的GET請求的一部分,應用可為追加索引提供可選值。然後,根據實現方式和/或來自應用的其他參數,系統可返回原始資料加上直到所提供的追加索引的任何追加(並且排除來自以後的追加操作的任何資料)、與追加索引相關聯地追加的資料或者與所述追加索引以及所有後續追加操作相關聯地追加的資料。應用還可提供兩個追加索引,以指定要返回的追加操作的範圍(並排除在那些追加索引之外追加的任何資料)。追加索引可用關於要包括多少追加操作的替代指示符來替換:例如,日期/時間戳記(如果此種資訊被包括在二元搜尋樹或其他資料結構中的中繼資料/節點中)。
圖1示出根據本發明概念的實施例的機器,所述機器被設計成使用金鑰值虛擬化(KVV)層來支援對儲存在金鑰-值固態驅動器(KV-SSD)中的值的追加操作。在圖1中,示出機器105。機器105可包括處理器110。處理器110可為任何種類的處理器:例如,英特爾至強(Intel Xeon)、賽揚(Celeron)、安騰(Itanium)或淩動(Atom)處理器、高級微裝置(Advanced Micro Devices,AMD)皓龍處理器(AMD Opteron processor)、高級精簡指令集機器(Advanced RISC Machine,ARM)處理器等。儘管圖1示出機器105中的單個處理器110,但機器105可包括任何數量的處理器,每個處理器可為單核或多核處理器,且可以任何期望的組合混合。
處理器110可執行作業系統115及應用120。作業系統115可為任何期望的作業系統,除其他可能性之外,其實例可包括任何版本的微軟®
視窗®
作業系統或類似尤尼斯(Unix)的作業系統。(微軟及視窗是微軟公司在美國及其他國家的商標或注冊商標。)應用120可為可發出例如金鑰-值固態驅動器(125)(下面討論)等儲存裝置的輸入/輸出(I/O)請求的任何應用。
機器105也可包括記憶體130。記憶體130可為任何種類的記憶體,例如快閃記憶體、動態隨機存取記憶體(Dynamic Random Access Memory,DRAM)、靜態隨機存取記憶體(Static Random Access Memory,SRAM)、永久隨機存取記憶體、鐵電隨機存取記憶體(Ferroelectric Random Access Memory,FRAM)或非揮發性隨機存取記憶體(Non-Volatile Random Access Memory,NVRAM),例如磁阻隨機存取記憶體(Magnetoresistive Random Access Memory,MRAM)等。記憶體130也可為不同記憶體類型的任何期望的組合。記憶體130可由記憶體控制器135管理。
機器105還可包括金鑰-值固態驅動器(KV-SSD)125,其可由裝置驅動器140控制。例如,KV-SSD 125被示為儲存各種金鑰-值對145-1、145-2及145-3,每個金鑰-值對145-1、145-2及145-3包括金鑰(分別為150-1、150-2及150-3)及值(分別為155-1、155-2及155-3)。單個金鑰-值對145-1、145-2或145-3可儲存在KV-SSD 125上的物件中:值155-1、155-2或155-3可被寫入KV-SSD 125中的特定物理位址,且金鑰150-1、150-2或150-3可與所述物理位址相關聯地儲存,從而允許稍後容易地檢索值150-1、150-2或150-3。儘管圖1示出儲存三個金鑰-值對145-1、145-2及145-3的KV-SSD 125,但本發明概念的實施例可包括儲存任何數量的金鑰-值對的KV-SSD 125。
儘管圖1僅示出一個KV-SSD 125,但本發明概念的實施例可支援任意數量的KV-SSD 125。如下所述,多個KV-SSD 125可被虛擬化以表現為單個KV-SSD。KV-SSD 125可具有不同的製造商、型號和/或容量。此外,KV-SSD 125可包括使用類似金鑰-值儲存系統的其他儲存裝置(例如,儲存在其他類型的一個或多個儲存裝置(例如塊存取SSD或硬碟驅動器)上的金鑰-值資料庫)。
處理器110還可執行金鑰-值虛擬化(KVV)160,其可提供KV-SSD的虛擬化視圖。KVV 160可在任何期望的位置實現。例如,KVV 160可在作業系統115內實現,或者作為在處理器110上運行的作業系統115與KV-SSD 125之間的單獨層來實現。KVV 160也可使用耦合到處理器110的單獨邏輯來實現。KVV 160也可被實現為在KV-SSD 125上運行的固件(或其他軟體)的一部分。最後,KVV 160可使用作為位於處理器110與KV-SSD 125之間的硬體元件的一部分的電路來實現:例如,插入在KV-SSD 125上的連接件與機器105中的某個電路板上的連接件之間。除其他可能性之外,可用於實現KVV 160的電路的實例包括現場可程式化閘陣列(Field Programmable Gate Array,FPGA)、圖形處理單元(Graphics Processing Unit,GPU)及應用專用積體電路(Application-Specific Integrated Circuit,ASIC)。
KVV 160還可支援多個KV-SSD 125的虛擬化。例如,如果機器105包括兩個或更多個KV-SSD 125,則KVV 160可通過內嵌在應用120與KV-SSD 125之間,使其看起來好像僅存在一個KV-SSD 125(但提供多個KV-SSD 125的組合容量)。KVV 160然後可負責確定任何特定金鑰-值對所儲存之處。此種管理可以任何期望的方式來實現。由應用分配的金鑰可用於確定哪個KV-SSD 125儲存金鑰-值對:例如,金鑰可被散列,或者可使用金鑰的最低有效位將金鑰-值對映射到特定的KV-SSD。與應用相關聯的標識(ID)可用於確定哪個KV-SSD 125儲存金鑰-值對(其將在單個KV-SSD 125上保持與特定應用相關聯的所有資料)。KVV 160也可任意地將資料分配給不同的KV-SSD 125(但在這種情況下,當需要從KV-SSD 125讀取資料時,KVV 160可能需要搜索所有KV-SSD 125)。KVV 160還可使用其他技術來確定哪個KV-SSD 125應儲存特定金鑰-值對。在此檔的剩餘部分中,假設機器105僅包括單個KV-SSD 125,但本發明概念的實施例仍可通過添加適當的邏輯來包括任意數量的KV-SSD 125以確定哪個KV-SSD 125儲存哪個金鑰-值對。
記憶體130可用於儲存散列表165。散列表165可儲存關於與儲存在KV-SSD 125上的值配對的各種金鑰的中繼資料。例如,圖1將散列表165示出為分別儲存金鑰150-1及150-2的中繼資料170-1及170-2。注意到,散列表165不儲存金鑰150-3的中繼資料:這一事實表明在任何時間點,散列表165可儲存或可不儲存與儲存在KV-SSD 125上的資料相關聯的任何特定金鑰的中繼資料。
散列表165還可儲存金鑰150-1及150-2的年齡175-1及175-2。年齡175-1及175-2可儲存與金鑰150-1及150-2相關的老化資訊,然後當新金鑰的中繼資料將被儲存在散列表165中時,所述老化資訊可用於確定從散列表165中驅逐哪些中繼資料。年齡175-1及175-2可以任何期望的方式進行管理。例如,年齡175-1及175-2可儲存金鑰150-1及150-2的中繼資料最後分別從散列表165中被存取的時脈時間。或者,年齡175-1及175-2可儲存表示從金鑰150-1及150-2的中繼資料最後分別被存取以來散列表165的存取次數的值:每當金鑰的中繼資料被存取時,所述金鑰的年齡可被設定為零,且散列表165中所有其他金鑰的年齡可遞增1。也可使用其他技術來確定年齡175-1及175-2,且在一些實現方式中可省略年齡175-1及175-2而不失去功能。
因此,當應用120發出目的地為KV-SSD 125的輸入/輸出請求時,KVV 160可改為接收所述輸入/輸出請求,並根據支援資料追加請求的新語義來對其進行處理。KVV 160然後可向KV-SSD 125發出適當的輸入/輸出請求,並最終將任何結果資訊返回給應用120。
儘管圖1將機器105描繪為伺服器(其可為獨立的或機架式伺服器),但本發明概念的實施例可包括任何期望類型的機器105,而沒有限制。例如,機器105可用桌上型電腦或膝上型電腦或可受益于本發明概念的實施例的任何其他機器來替換。機器105還可包括專用可攜式電腦器、平板電腦、智慧手機及其他電腦器。
圖2示出圖1的機器的附加細節。在圖2中,典型地,機器105包括一個或多個處理器110,所述一個或多個處理器110可包括記憶體控制器135及時脈205,其可用於協調機器105的組件的操作。例如,處理器110也可耦合到記憶體130,記憶體130可包括隨機存取記憶體(RAM)、唯讀記憶體(read-only memory,ROM)或其他狀態保存媒體。處理器110還可耦合到儲存裝置125及網路連接件210,網路連接件210可為例如乙太網連接件或無線連接件。處理器110也可連接到匯流排215,匯流排215可附接到使用者介面220及輸入/輸出介面埠,所述輸入/輸出介面埠可使用輸入/輸出引擎225以及其他元件來管理。
圖3示出圖1的KV-SSD的細節。在圖3中,KV-SSD 125可包括主機介面邏輯305、KV-SSD控制器310及各種快閃記憶體晶片315-1到315-8,快閃記憶體晶片315-1到315-8可被組織成各種通道320-1到320-4。主機介面邏輯305可管理圖1的KV-SSD 125與機器105之間的通訊。KV-SSD控制器310可管理快閃記憶體晶片315-1到315-8上的讀取操作及寫入操作以及垃圾收集及其他操作。
KV-SSD控制器310可包括轉換層325。轉換層325可實行將圖1的應用120在輸入/輸出請求中所提供的金鑰轉換成儲存在KV-SSD 125上的物件的物理位址的傳統功能。KV-SSD 310還可包括處理器330,處理器330可執行支配如何使用KV-SSD 125的指令。因此,KV-SSD 125還可包括KVV 160,而不是由圖1的處理器110執行的KVV 160。為了完全支持KVV 160,KV-SSD控制器310還可包括散列表165(其可儲存在KV-SSD 125中的記憶體(揮發性或非揮發性的)中(這一記憶體在圖3中未示出))。
儘管圖3將KV-SSD 125示為包括組織成四個通道320-1到320-4的八個快閃記憶體晶片315-1到315-8,但本發明概念的實施例可支援組織成任何數量的通道的任何數量的快閃記憶體晶片。
圖4示出圖1的應用120、圖1的KVV 160及圖1的KV-SSD 125,其在圖1的KV-SSD 125上實行寫入操作。在圖4中,應用120可發送寫入請求405,寫入請求405可為向KV-SSD 125寫入資料的請求。典型地,KV-SSD 125接收結構化為PUT (key
,value
[,parameter
])的命令,其中“PUT”是命令,key
是金鑰-值對的金鑰(例如圖1的金鑰150-1、150-2及150-3),value
是金鑰-值對的值(例如圖1的值155-1、155-2及155-3),且parameter
是可選參數,但在本發明概念的各種實施例中,可使用其他語法、不同的參數名稱及不同的參數列表。可使用的示例性參數是“覆寫(overwrite)”。如果“覆寫”未被包括作為參數,且KV-SSD 125儲存具有金鑰key
的金鑰-值對,則KV-SSD 125可返回錯誤而不是實行寫入操作(省略參數“覆寫”可防止可將不同資料與KV-SSD 125上的同一金鑰相關聯的多個應用之間的衝突)。通過包括參數“覆寫”,應用120可指示包括金鑰key
的任何現有金鑰-值對可被刪除,且使用金鑰key
的新金鑰-值對可被替代使用。可使用的另一個示例性參數是指示金鑰-值對不受追加命令管制的參數。當使用這種參數時,KVV 160可簡單地將寫入請求405直接傳遞給KV-SSD 125,而無需修改。在這種情況下,應用120將自身負責處理追加(而不是依賴於KVV 160):但如果應用120知道或預期資料不會被修改,則這種成本可能是可接受的。
在本發明概念的一些實施例中,由KVV 160的應用程式化介面(API)提供的寫入請求405的語法可不同於由KV-SSD 125提供的語法。在本發明概念的其他實施例中,寫入請求405的語法可相同於由KV-SSD 125提供的語法。通過在可能的情況下使用相同的API,可避免需要軟體更新的應用以受益於KVV 160的使用。
在操作410中,KVV 160可確定基本索引以用於要在寫入請求405中寫入的金鑰-值對。此基本索引可為零,或者可使用任何其他期望的值。在操作415中,KVV 160可創建中繼資料,例如圖1的中繼資料170-1及170-2。
在寫入操作420-1中,KVV 160可發送寫入請求(再次,可能使用PUT命令或由KV-SSD 125的API提供的類似命令)以在KV-SSD 125上儲存金鑰-值對。但代替儲存由應用120在寫入請求405中發送的原始值,或者將由應用120在寫入請求405中發送的所述值與原始金鑰相關聯,KVV 160可發送儲存具有索引金鑰的修改值的請求。索引金鑰可為基本索引(如在操作410中確定的)與由應用120在寫入請求405中發送的原始金鑰的組合。類似地,修改值可為中繼資料的序列化形式與由應用120在寫入請求405中發送的原始值的組合。最後,在操作425-1中,KV-SSD 125可將寫入結果返回給KVV 160,且在操作430中,KVV 160可將寫入結果返回給應用120。
用語“組合”旨在意指用於將兩個資料片段組合的任何期望的機制。例如,索引金鑰可為基本索引與原始金鑰的串接(concatenation),而修改的資料可為序列化中繼資料與原始值的串接。或者,串接的順序可顛倒。可添加或省略分隔符號,或者可將組合的各種資料設定為固定長度,以使其可一致地產生。因此,例如,索引可為索引金鑰的前兩個位元組,其餘的索引金鑰長度由原始金鑰構成。可使用將兩個值“組合”的任何其他期望的機制:唯一的“警告(caveat)”是被“組合”的資料應是可單獨恢復的。(這種警告甚至不一定延伸到索引金鑰,因為可能不存在用於查詢哪些金鑰儲存在KV-SSD 125上的機制。由於唯一重要的方面是知道特定金鑰是否識別儲存在KV-SSD 125上的資料,因此可能唯一重要的是能夠確定性地產生金鑰而不是使所述過程逆反。因此,例如,假設散列函數在KV-SSD 125上產生唯一散列,散列函數可以某種方式應用於基本索引與原始金鑰的某種組合。)
注意到,圖4示出從KVV 160發送到KV-SSD 125的多個PUT命令。這旨在表示原始值可大於可儲存在KV-SSD 125上的單個物件中的值。例如,考慮其中KV-SSD 125具有1 GB的最大物件大小,且應用120在寫入請求405中發送2 GB值的情況。傳統上,KV-SSD 125將向應用120返回指示所述值太大而無法儲存的錯誤。但KVV 160可確定所述值太大而無法儲存在單個物件中,且可將所述值分成多個部分來分別寫入。為了類比目的,考慮KVV 160將單個寫入請求405處理成對資料的第一GB的寫入請求,然後是對資料的第二GB的追加請求。(實際上,KVV 160可需要將所述值分成三個部分,因為序列化中繼資料將佔用物件所使用的一些空間,但為了基本理解,這個考慮可被忽略。)因此,KVV 160可向KV-SSD 125發送兩個寫入操作420-1及420-2,並接收兩個結果425-1及425-2。儘管圖4示出兩個寫入操作420-1及420-2,但本發明概念的實施例可包括從KVV 160發送到KV-SSD 125的任何數量的寫入操作。
注意到,在寫入操作420-1中,使用的索引是基本索引(base index,BI),而在寫入操作420-2中,使用的索引是追加索引(append index,AI)。追加索引可以任何期望的方式確定,如同基本索引以任何期望的方式確定那樣。在本發明概念的一些實施例中,追加索引可比基本索引大1(即,基本索引的增量)。如果KVV 160需要發送兩個以上的寫入操作420-1及420-2,則可在第一個寫入操作之後為每個寫入操作遞增追加索引。這種途徑為儲存在KV-SSD 125上的物件創建唯一金鑰,儘管所有的物件都是相關的(作為對特定金鑰的早期資料的追加),但允許依序容易地重建追加(用於以後從KV-SSD 125讀取值,如下面的圖6中所論述的)。
在寫入操作420-1及420-2中,相同的中繼資料被示為用於儲存在KV-SSD 125上的修改值。這個事實在本發明概念的一些實施例中可為真實的(因為各種寫入操作是來自應用120的單個寫入請求405的結果)。在本發明概念的其他實施例中,用於修改儲存在KV-SSD 125上的值的每個部分的中繼資料可變化(例如,以模仿單獨的寫入請求及追加請求)。
圖5示出圖1的應用120、圖1的KVV 160及圖1的KV-SSD 125,其在圖1的KV-SSD 125上實行追加操作。在圖5中,應用120可發送追加請求505,追加請求505可為將資料追加到儲存在KV-SSD 125上的值的請求。由KVV 160提供的追加語法(其在KV-SSD 125的API中可能沒有類似物)可為APPEND(key
,value
)的形式,其中“APPEND”是命令,key
是金鑰-值對的金鑰(例如圖1的金鑰150-1、150-2及150-3),而value
是要追加到金鑰-值對的現有值(例如圖1的值155-1、155-2及155-3)的值。在本發明概念的實施例中,這種追加語法還可包括此處沒有論述的可選參數,且可不同於這種形式。
在操作510中,KVV 160可確定新的最高追加索引以用於要在追加請求505中寫入的金鑰-值對。此新的最高追加索引可通過識別迄今為止使用的最高追加索引,然後產生下一個追加索引(例如,通過遞增現有的最高追加索引)來確定。在操作515中,KVV 160可創建中繼資料,例如圖1的中繼資料170-1及170-2。
在寫入操作520中,KVV 160可發送寫入請求(再次,可能使用PUT命令或由KV-SSD 125的API提供的類似命令)以在KV-SSD 125上儲存金鑰-值對。如同圖4的寫入操作420-1及420-2,KVV 160可發送包括索引金鑰及修改值的寫入操作520。索引金鑰可為新的最高追加索引(如在操作510中確定的)與由應用120在追加請求505中發送的原始金鑰的組合。類似地,修改值可為中繼資料的序列化形式與由應用120在追加請求505中發送的原始值的組合。最後,在操作525中,KV-SSD 125可將寫入結果返回給KVV 160,且在操作530中,KVV 160可將寫入結果返回給應用120。
圖5僅示出從KVV 160發送到KV-SSD 125的單個寫入操作520,這意味著被追加到金鑰的值將適合KV-SSD 125上的單個對象。但與圖4的寫入請求405的處理一樣,如果需要,KVV 160可將追加值分成多個部分,將每個部分分配給唯一追加索引(並因此分配給唯一索引金鑰),並將與那些唯一索引金鑰相關聯的部分(由中繼資料修改的)儲存在KV-SSD 125上。如同圖4,當在KV-SSD 125上儲存值的各個部分時,可使用相同的中繼資料,或者當在KV-SSD 125上儲存值的不同部分時,可使用不同的中繼資料。
圖6示出圖1的應用120、圖1的KVV 160及圖1的KV-SSD 125,其在圖1的KV-SSD 125上實行讀取操作。在圖6中,應用120可發送讀取請求605,讀取請求605可為從KV-SSD 125讀取數據的請求。典型地,KV-SSD 125接收結構化為GET (key
[,parameter
])的命令,其中“GET”是命令,key
是金鑰-值對的金鑰(例如圖1的金鑰150-1、150-2及150-3),且parameter
是可選參數,但在本發明概念的各種實施例中可使用其他語法、不同的參數名稱及不同的參數列表。可使用的示例性參數是指示金鑰-值對不受追加命令管制的參數。當使用這種參數時,KVV 160可簡單地將讀取請求605直接傳遞給KV-SSD 125,而無需修改。可使用的另一個示例性參數是一個或多個追加索引,以指定要檢索的值的特定部分。例如,應用可請求在追加索引的特定範圍內發生的所有追加,或者通過特定追加索引從原始寫入請求寫入的所有資料,或者從特定追加索引直到追加結束而寫入的所有資料。在沒有這些參數的情況下,預設操作可為檢索與所述金鑰相關聯的整個值,包括所有追加。
假設讀取請求605通過最後的追加請求來請求資料,在操作610中,KVV 160可確定迄今為止使用的最高追加索引。在讀取操作615-1中,KVV 160可發送讀取請求(再次,可能使用GET命令或由KV-SSD 125的API提供的類似命令)以在KV-SSD 125上讀取與索引金鑰相關聯的值。此第一讀取請求615-1可將所述金鑰與所述金鑰的基本索引組合(如圖所示,如果應用120沒有指定要讀取的追加範圍的下端),或者其可將所述金鑰與由應用120在讀取請求605中提供的所述範圍的下端組合。類似地,在操作620-1中,KV-SSD 125可返回儲存在KV-SSD 125上的修改值。KVV 160可發送與要檢索的追加索引一樣多的讀取請求,如讀取操作615-2所示,KV-SSD 125可向其返回結果620-2:儘管圖6示出兩個讀取操作615-1及615-2,但可存在從KVV 160發送到KV-SSD 125的任何數量的讀取操作。在操作620-1及620-2中接收到修改值之後,KVV 160可從儲存在KV-SSD 125上的修改值中的中繼資料中分離出原始值(在本發明概念的一些實施例中,中繼資料可被丟棄,因為其沒有被返回給應用120)。
在操作625中,KVV 160可將這些值組合以產生完整的值(可包括與來自圖4的寫入請求405及圖5的所有後續追加請求505的值一樣多的值)。最後,在操作630中,KVV 160可將完整的值發送回應用120。
在本發明概念的一些實施例中,KVV 160還可將所述金鑰的最高追加索引返回給應用120。此資訊可能對應用120有用。例如,如果應用120需要分配記憶體來儲存返回值,則金鑰的最高追加索引與儲存在KV-SSD 125上的物件的最大大小相結合,可提供關於儲存所述值將需要多少記憶體的粗略指南。例如,如果儲存在KV-SSD 125上的物件的最大大小是1 GB,且在圖4的寫入請求405之後存在圖5的兩個追加請求505,則最高追加索引將是2。將此索引增加1(以考慮到圖4的寫入請求405)並乘以1 GB指示完全值所需的總儲存不會超過3 GB。假若KVV 160將最高追加索引返回給應用120,則KVV 160通常會在發送與所述金鑰相關聯的值(如所構造的)之前返回這個值。
圖7示出圖1的應用120、圖1的KVV 160及圖1的KV-SSD 125,其在圖1的KV-SSD 125上實行刪除操作。在圖7中,應用120可發送刪除請求705,刪除請求705可為刪除KV-SSD 125上與金鑰相關聯的資料的請求。典型地,KV-SSD 125接收結構化為ERASE (key
[,parameter
])的命令,其中“ERASE”是命令,key
是金鑰-值對的金鑰(例如圖1的金鑰150-1、150-2及150-3),且parameter
是可選參數,但在本發明概念的各種實施例中可使用其他語法、不同的參數名稱及不同的參數列表。
在操作710中,KVV 160可確定用於要在刪除請求705中刪除的金鑰-值對的最高追加索引。然後,對於每個追加索引(從基本索引開始),在操作715-1及715-2中,KVV 160可向KV-SSD 125發送刪除請求以刪除與索引金鑰相關聯的值,KV-SSD 125可在操作720-1及720-2中對其做出回應。儘管圖7示出從KVV 160發送到KV-SSD 125的兩個刪除操作,但本發明概念的實施例可包括任意數量的刪除操作(因為可存在儲存在KV-SSD 125上的任何數量的索引金鑰)。最後,在操作725中,KVV 160可將刪除請求705的結果報告給應用120。
儘管圖7示出KVV 160首先在操作710中確定迄今為止使用的最高追加索引,但這一操作可被省略。例如,KVV 160可針對每個索引金鑰簡單地向KV-SSD 125發送刪除請求,直到KV-SSD 125作出沒有找到這種金鑰的回應,此時KVV 160知道所述金鑰的所有追加已經被刪除。
圖8示出圖1的KVV 160的細節。在圖8中,KVV 160被示為包括API 805、組合器軟體810、執行軟體815、結果軟體820、中繼資料軟體825、第二組合器軟體830、散列表軟體835、驅逐軟體840、劃分軟體845及索引確定軟體850。儘管圖8示出各種元件,但並非所有元件對於每個實現方式都是必需的,且本發明概念的不同實施例可根據需要包括或省略各種元件。此外,一些(或全部)元件可組合成實現所述兩個(全部)軟體目標的單個“封裝”,和/或由一個元件實行的所述功能可使用不同的元件來實現。最後,儘管圖4中所示的各種元件都被標記為“軟體”,但本發明概念的實施例可將這些元件實現為適當程式化的電路,而不是由處理器執行的軟體:用語“軟體”旨在意謂可使用一些電路設計來實現的指令的一般概念,而不是受限於儲存在某一記憶體(或其他儲存)中並由通用處理器執行的指令。因此,“軟體”可包括儲存在作業系統檔中並由主處理器(例如中央處理器(Central Processing Unit,CPU))執行的指令、儲存在固件中並由圖1的KV-SSD 125中的處理器或GPU執行的指令、適當設計和/或程式化的FPGA或ASIC或者可理解為電腦或其等效物執行特定指令集的任何其他機制。
API 805是揭露可由圖1的應用120存取的功能的API。API 805可被設計成使其包括通常由圖1的KV-SSD 125的API提供的所有功能,加上受益於KVV 160引入的能力的一些附加功能。例如,API 805可包括與由KV-SSD 125的API提供(且以上參考圖4及圖6到圖7所述)的那些相似的PUT功能、GET功能及ERASE功能,但可包括其他功能,例如APPEND(如上參考圖5所述)。可由API 805揭露的其他功能可包括合併(CONSOLIDATE)功能(如同PUT、GET、ERASE及APPEND一樣,這種功能可使用不同的名稱來提供)。合併可用作內置的讀取-修改-擦除功能,使得應用120能夠要求KVV 160將與單個金鑰相關聯的所有追加資料合併到單個物件中。也就是說,圖1的應用120可要求KVV 160合併特定金鑰。KVV 160然後可對所述金鑰實行讀取請求(類似於上面參考圖6所述者),但代替將所述值返回給應用,KVV 160然後可對所述金鑰實行刪除請求(類似於上面參考圖7所述者),之後是對具有合併值的金鑰的寫入請求(類似於上面參考圖4所述者)。通過將所述值合併到單個物件中,圖1的KV-SSD 125上的一些空間可被釋放用於其他用途(當然,受制於在快閃記憶體裝置上實行的傳統垃圾收集)。
組合器軟體810可獲得索引及金鑰,並將所述二者組合成索引金鑰。如上所述,索引金鑰提供一種機制,通過所述機制,與同一金鑰(如圖1的應用120所提供的)相關聯的多個不同物件可儲存在圖1的KV-SSD 125上(因為圖1的KV-SSD 125不允許用給定金鑰儲存多於一個物件),且容易檢索資料。圖9示出組合器軟體810的操作:給定金鑰150-1及索引905,組合器軟體810可產生索引金鑰910。如上所述,索引金鑰910可為索引905與金鑰150-1的任何期望的組合,包括(例如)索引905與金鑰150-1的串接。
回到圖8,執行軟體815可向圖1的KV-SSD 125發送命令,並從圖1的KV-SSD 125接收結果。換句話說,執行軟體815可使用KV-SSD 125提供的功能來實現KVV 160提供的增強功能。結果軟體820可向圖1的應用120返回適合由應用120發出的請求的結果。
中繼資料軟體825可創建中繼資料,KVV 160可使用所述中繼資料來處理圖4到圖7所示的請求。圖10詳細說明此中繼資料,且示出除其他要素外,中繼資料170-1及170-2可包括追加索引905(分配給由圖1的應用120發出的特定追加請求的索引)、追加偏移1005(之前在圖4的針對此金鑰的原始寫入請求405中或者在圖5的針對此金鑰的追加請求505中寫入了多少資料)、追加長度1010(在圖5的針對此金鑰的此追加請求505中寫入了多少資料)以及追加搜索結構1015(所述資料結構儲存關於到目前為止圖5的針對此金鑰的所有追加請求505的資訊,包括圖4的針對此金鑰的原始寫入請求405)。
回到圖8,第二組合器軟體830可將序列化中繼資料與要寫入圖1的KV-SSD 125的值組合,以產生修改值。此修改值允許中繼資料及所述值二者一起儲存在圖1的KV-SSD 125上,以允許基於同一索引金鑰檢索二者。圖11示出第二組合器軟體830的操作:給定值155-1及中繼資料170-1,第二組合器軟體830可產生修改值1105。如上所述,修改值1105可為中繼資料170-1與值155-1的任何期望的組合,包括(例如)中繼資料170-1與值155-1的串接。由於組合器軟體810及第二組合器軟體830操作相同(僅針對不同的資料),因此組合器軟體810及第二組合器軟體830可為相同的軟體,而不是不同的軟體。
回到圖8,散列表軟體835可管理圖1的散列表165。此管理可包括向圖1的散列表165添加新條目,並針對給定金鑰從圖1的散列表165中查找中繼資料。例如,散列表軟體845可接收金鑰,定位相關聯的中繼資料(或者報告圖1的散列表165不儲存相關聯的中繼資料),且報告用於所述金鑰的最高追加索引:然後可使用此資訊來實行圖5的進一步追加請求505。散列表軟體845還可包括驅逐軟體840,驅逐軟體840可負責選擇圖1的散列表165中的條目用於驅逐(在這種情況下,驅逐軟體840是散列表軟體840的一部分)。
劃分軟體845可將給定值劃分成多個部分。如上面參考圖4所論述的,可能發生圖1的應用120可請求寫入比可儲存在圖1的KV-SSD 125上的單個物件中的值更大的值。劃分軟體845可將所述值劃分成多個部分,每個部分可適合圖1的KV-SSD 125上的單個對象。例如,如果圖1的KV-SSD 125上的物件的最大大小是1 GB且要儲存3 GB的值,則劃分軟體845可將所述值劃分為三個部分。劃分軟體還可考慮可與寫入之前的值的部分組合的任何序列化中繼資料的大小,因為所述資訊可影響值應劃分成多少部分。
最後,索引確定軟體850可確定給定金鑰的追加索引。索引確定軟體850可使用儲存在圖1的散列表165中的金鑰的中繼資料(這可涉及使用散列表軟體835存取所述中繼資料),或者索引確定軟體850可直接從儲存在KV-SSD 125上的物件確定此資訊。
圖12示出根據本發明概念的各種實施例,圖8的索引確定軟體850可用來確定圖1的KV-SSD 125上的金鑰的最高追加索引的不同技術。圖12示出本發明概念的各種實施例:這些實施例可以任何期望的方式組合。也就是說,這些實施例不應被認為是互相排斥的。
如圖12所示,在本發明概念的一個實施例中,索引確定軟體850可簡單地從儲存在散列表165中的中繼資料中存取最高追加索引。在本發明概念的第二實施例中,索引確定軟體850可對可儲存在KV-SSD 125上的索引實行依序搜索。例如,索引確定軟體850可將基本索引與金鑰組合(可使用圖8的組合器軟體810),並查詢KV-SSD 125以得到與所述索引金鑰相關聯的任何值。如果KV-SSD 125指示為所述索引金鑰儲存值,則索引確定軟體850可隨後遞增基本索引,將新索引與所述金鑰組合,並再次查詢KV-SSD 125。此過程可重複,直到KV-SSD 125指示在KV-SSD 125上沒有找到特定索引金鑰,此時索引確定軟體已經確定出用於所述金鑰的最高追加索引(產生成功查詢的最後索引)。在本發明概念的第三實施例中,索引確定軟體850可實行相同的依序搜索,但從可能的最高追加索引而不是基本索引開始,遞減索引而不是遞增索引,且知道當KV-SSD 125第一次指示成功查詢時已經定位了最高追加索引。
在本發明概念的第四實施例中,索引確定軟體850可實行最高追加索引的二元搜索。在二元搜索中,識別出可能的值的範圍:例如,從基本索引開始且在可能的最高追加索引結束的範圍(例如,如果圖1的KVV 160支持總共1024個寫入加追加,則為0與1023)。這個範圍可被分成兩半,且選擇中間的值(繼續以上實例,511)。然後,可將所述中間索引與所述金鑰組合以產生索引金鑰,且可查詢KV-SSD 125以得到與所述索引金鑰相關聯的任何值。如果查詢成功(也就是說,KV-SSD 125儲存所述索引金鑰的物件),則所述範圍的下端可用中間索引替換;否則,所述範圍的上端可用中間索引替換(繼續以上實例,如果沒有找到索引金鑰,則所述範圍的上端可從1023減少到511)。可重複選擇中間索引、將中間索引與金鑰組合以及查詢KV-SSD 125以得到所述索引金鑰的過程,直到所述範圍已經被減少到單個索引,然後可將所述單個索引確定為所述金鑰的最高追加索引。
在本發明概念的第五實施例中,索引確定軟體850可識別儲存所述金鑰的最高追加索引的特殊金鑰。例如,當從散列表165中驅逐特定金鑰的中繼資料時,可使用特殊金鑰來儲存此最高追加索引值。繼續以上實例,如果金鑰的追加索引可從0變化到1023,則可從-1與金鑰的組合中產生特殊金鑰(可使用圖8的組合器軟體810)。或者(由於不應使用沒有與索引組合的原始金鑰將資料寫入KV-SSD 125),因此特殊金鑰可為未經修改的原始金鑰。特殊金鑰可以任何其他期望的方式形成。通過在KV-SSD 125上的索引物件中儲存所述金鑰的最高追加索引,可使用來自KV-SSD 125的單個讀取請求來實現確定所述金鑰的最高追加索引。
本發明概念的各種實施例可提供不同級別的性能。一般來說,本發明概念的第一實施例可預期運行最快(因為對記憶體的查詢傾向於比對KV-SSD 125的查詢更快),但僅當中繼資料儲存在散列表165中時。如果中繼資料沒有儲存在散列表165中,則可需要本發明概念的另一個實施例。
上述本發明概念的第二實施例、第三實施例及第四實施例可預期花費不同的時間量。如果n
表示可能的最高追加索引(即,單個金鑰的寫入加追加的最大數量),則平均來說,本發明概念的第二實施例及第三實施例可預期需要對KV-SSD 125進行n
/2次查詢來找到最高追加索引(數學上,這可表示為Θ(n
),其識別平均情況下所需的多項式時間量)。但在最差情況下,可能需要對KV-SSD 125進行n
次查詢(在數學上,這可表示為O(n
),其識別在最差情況下所需的多項式時間量)。相反,本發明概念的第四實施例可預期在平均情況及最差情況下都需要對KV-SSD 125進行log2 n
次查詢(Θ(log2 n
)及O(log2 n
))。另一方面,在最好的情況下,本發明概念的第二實施例及第三實施例可需要對KV-SSD 125進行不超過兩次查詢來找到最高追加索引,而即使在最好的情況下,本發明概念的第四實施例仍然需要對KV-SSD 125進行log2 n
次查詢。因此,哪種途徑最好可取決於圖1的KVV 160可能預先不知道的情況。
最後,本發明概念的第五實施例可僅需要對KV-SSD 125進行一次查詢來確定最高追加索引:但與上述本發明概念的第一實施例一樣,本發明概念的第五實施例取決於儲存在KV-SSD 125上的索引物件。在本發明概念的第五實施例中,當中繼資料被載入到散列表165中時,索引物件可被刪除。(在中繼資料被載入到散列表165中並在其中更新之後,此種選擇會防止索引物件在電力故障的情況下提供陳舊資訊:在這種情況下,可搜索KV-SSD 125來重建中繼資料。)如果索引物件不儲存在KV-SSD 125上,則索引確定軟體850可需要使用不同的途徑來識別金鑰的最高追加索引。
圖13A到圖13C示出根據本發明概念的實施例,圖1的KVV 160支持圖1的KV-SSD 125上的圖4的寫入請求405的示例性程式的流程圖。在圖13A中,在方框1305中,圖1的應用120可向圖1的KVV 160發送圖4的寫入請求405,以請求圖1的值155-1在儲存在圖1的KV-SSD 125上時,與圖1的金鑰150-1配對。在方框1310中,圖1的KVV 160可確定圖1的金鑰150-1的基本索引。在方框1315中,圖8的組合器軟體810可將基本索引與圖1的金鑰150-1組合,以形成圖9的索引金鑰910。在方框1320中,圖8的中繼資料軟體825可產生圖1的金鑰150-1的圖1的中繼資料170-1。在方框1325中,圖1的KVV 160可確定圖1的值155-1是大於還是將適合KV-SSD 125上的單個對象。
如果圖1的值155-1將適合圖1的KV-SSD 125上的單個對象,則在方框1330(圖13B)中,圖8的第二組合器軟體830可將圖1的中繼資料170-1與圖1的值150-1組合,以形成圖11的修改值1105。在方框1335中,圖8的執行軟體815可在KV-SSD 125上執行儲存操作,以儲存與圖9的索引金鑰910相關聯的圖1的修改值1105。在方框1340中,圖1的KVV 160可將圖1的中繼資料170-1儲存在圖1的散列表165中。最後,在方框1345中,結果軟體820可將來自圖1的KVV 160的結果返回給圖1的應用120。
或者,如果圖1的值155-1將不適合圖1的KV-SSD 125上的單個對象,則在方框1350中,圖8的劃分軟體845可將圖1的值155-1劃分成多個部分。在方框1355中,圖3的第二組合器軟體830可將圖1的中繼資料170-1與圖1的值155-1的第一部分組合,以形成圖11的修改值1105。在方框1360中,執行軟體815可將與圖9的索引金鑰910相關聯的圖11的修改值1105儲存在圖1的KV-SSD 125上。
在方框1365(圖13C)中,圖1的KVV 160可確定圖1的值155-1的所有部分是否已經儲存在圖1的KV-SSD 125上。如果是,則在圖13B的方框1340中繼續進行處理。否則,在方框1370(圖13C)中,圖1的KVV 160可遞增或以其他方式將索引調整到新索引值。在方框1375中,圖8的組合器軟體810可將新索引與圖1的金鑰150-1組合,以形成圖9的新索引金鑰910。在方框1380中,圖3的第二組合器軟體830可將圖1的中繼資料170-1與圖1的值155-1的下一部分組合,以形成圖11的新修改值1105。在方框1385中,執行軟體815可將與圖9的新索引金鑰910相關聯的圖11的新修改值1105儲存在圖1的KV-SSD 125上,之後控制返回方框1365。
圖14A到圖14B示出根據本發明概念的實施例的將金鑰的中繼資料儲存在圖1的散列表165中的示例性程式的流程圖。在圖14A中,在方框中,圖8的散列表軟體835可檢查以查看圖1的散列表165是否已滿。如果是,則圖8的散列表軟體835需要在新的中繼資料可儲存在圖1的散列表165中之前從圖1的散列表165中驅逐條目。在方框1405中,圖8的驅逐軟體840可選擇用於驅逐的條目。圖8的驅逐軟體840可使用例如圖1的年齡175-1及175-2來幫助決定驅逐哪個條目。圖8的驅逐軟體840可選擇驅逐最近最少使用的條目或最不頻繁使用的條目,或者可使用任何其他期望的機制選擇條目。一旦被選擇,在方框1410中,圖8的驅逐軟體840可驅逐所選擇的條目。在方框1415中,圖8的執行軟體815可儲存其中繼資料正被從圖1的散列表165中驅逐的金鑰的最高追加索引:此最高追加索引可儲存在圖1的KV-SSD 125上的索引物件中。如虛線1420所示,可省略方框1415。
此時,在圖1的散列表165中存在至少一個開放的條目(或者是由於圖1的散列表165在方框1425中未滿,或者是由於在方框1410中圖8的驅逐軟體840從圖1的散列表165中驅逐出條目)。在方框1430(圖14B)中,圖8的散列表軟體835可在圖1的散列表165中選擇可用條目來儲存新的中繼資料。由於新的中繼資料尚未在圖1的散列表165中,因此圖8的散列表軟體835需要從圖1的KV-SSD 125載入中繼資料。在方框1435中,圖8的索引確定軟體850可確定其中繼資料將被儲存在圖1的散列表165中的金鑰的最高追加索引。參考以下圖18A到圖20進一步論述圖8的索引確定軟體850的操作。或者,在方框1440中,圖8的散列表軟體835可從儲存在圖1的KV-SSD 125上的索引物件存取最高追加索引。無論哪種方式,在方框1445中,可使用組合器軟體810將最高追加索引與圖1的金鑰150-1組合,以形成圖9的索引金鑰910。在方框1450中,圖8的散列表軟體835可使用圖8的執行軟體815針對圖9的索引金鑰910從圖1的KV-SSD 125存取圖11的修改值1105,之後,圖8的散列表軟體835可將圖1的中繼資料170-1與圖11的修改值1105隔離。最後,在方框1455中,圖8的散列表軟體835可將圖1的中繼資料170-1儲存在圖1的散列表165中。
圖15A到圖15B示出根據本發明概念的實施例,圖1的KVV 160支持圖1的KV-SSD 125上的圖5的追加請求505的示例性程式的流程圖。在圖15A中,在方框1505中,圖1的應用120可向圖1的KVV 160發送圖5的追加請求505。在方框1510中,圖8的索引確定軟體850可確定圖1的金鑰150-1的最高追加索引。參考以下圖18A到圖20進一步論述圖8的索引確定軟體850的操作。在方框1515中,圖1的KVV 160可遞增最高追加索引,以形成新的最高追加索引。在方框1520中,圖8的組合器軟體810可將新的最高追加索引與圖1的金鑰150-1組合,以形成圖9的索引金鑰910。在方框1525中,圖8的中繼資料軟體825可產生圖1的金鑰150-1的圖1的中繼資料170-1。
在方框1530(圖15B)中,圖8的第二組合器軟體830可將圖1的中繼資料170-1與圖1的值155-1組合,以形成圖11的修改值1105。在方框1535中,圖8的執行軟體815可發送KV-SSD 125上的儲存操作,以儲存與圖9的索引金鑰910相關聯的圖1的修改值1105。在方框1540中,可使用圖8的散列表軟體835在圖1的散列表165中儲存和/或更新圖1的中繼資料170-1。注意到,除了如果圖1的中繼資料170-1已經在圖1的散列表165中,則圖1的散列表165中的圖1的中繼資料170-1僅需要用新的中繼資料資訊(例如圖9的新的最高追加索引905及圖10的更新的追加搜索結構1015)更新,而不是直接儲存新的以外,方框1540幾乎與圖13B的方框1340相同。最後,在方框1545中,圖8的結果軟體820可將來自圖1的KVV 160的圖5的追加請求505的結果返回給圖1的應用120。
圖16A到圖16C示出根據本發明概念的實施例,圖1的KVV 160支持圖1的KV-SSD 125上的圖6的讀取請求605的示例性程式的流程圖。在圖16A中,在方框1605中,圖1的應用120可向圖1的KVV 160發送圖6的讀取請求605。在方框1610中,圖8的索引確定軟體850可確定圖1的金鑰150-1的最高追加索引。參考以下圖18A到圖20進一步論述圖8的索引確定軟體850的操作。在方框1615中,圖8的結果軟體820可向圖1的應用120報告圖1的金鑰150-1的最高追加索引。如上面參考圖6所論述的,圖1的應用120可使用此資訊來分配足夠的記憶體或其他資源來使用圖1的值155-1。如虛線1620所示,可省略方框1615。
在方框1625中,圖8的組合器軟體810可將圖1的金鑰150-1的最高追加索引與圖1的金鑰150-1組合,以形成圖9的索引金鑰910。在方框1630中,圖8的執行軟體815可使用圖9的索引金鑰910從圖1的KV-SSD 125存取圖1的中繼資料170-1,之後(在方框1635中),圖8的散列表軟體835可將圖1的中繼資料170-1儲存在圖1的散列表165中。如虛線1640所示,可省略方框1625、1630及1635。
一旦圖1的KVV 160知道圖1的金鑰150-1的最高追加索引,在方框1645(圖16B)中,圖1的KVV 160可確定圖1的金鑰150-1的基本索引。在方框1650中,圖8的組合器軟體810可將基本索引與圖1的金鑰150-1組合,以產生圖9的索引金鑰910。在方框1655中,圖8的執行軟體815可從圖1的KV-SSD 125存取圖11的修改值1105,並提取包括在圖4的原始寫入請求405中的圖1的值155-1。
在方框1660(圖16C)中,圖1的KVV 160可確定是否已經從圖1的KV-SSD 125存取了所有請求的資料。換句話說,圖1的KVV 160可將用於從圖1的KV-SSD 125存取圖1的值155-1的當前索引與圖1的金鑰150-1的最高追加索引進行比較。如果仍然存在對要從圖1的KV-SSD 125存取的圖1的金鑰150-1的圖21的追加請求505,則在方框1665中,圖1的KVV 160可將索引遞增或調整到下一個值。在方框1670中,圖1的組合器軟體810可將新索引與圖1的金鑰150-1組合,以形成圖9的新索引值910。在方框1675中,圖8的執行軟體815可從圖1的KV-SSD 125存取圖11的修改值1105,並提取包括在圖5的索引追加請求505中的圖1的值155-1,之後控制返回方框1660。
一旦圖1的KVV 160已經檢索到與圖1的金鑰150-1相關聯的所有資料,則在方框1680中,圖1的KVV 160可串接各種檢索到的值,以形成圖1的應用120所期望的值。最後,在方框1685中,圖8的結果軟體820可將組合的值返回給圖1的應用120。
注意到,圖16A到圖16C所示的示例性程式可在不首先確定圖1的金鑰150-1的最高追加索引的情況下操作。具體來說,由於圖1的KVV 160將需要從圖1的KV-SSD 125讀取原始寫入值及所有後續追加值,因此圖1的KVV 160可通過簡單地從基本索引開始依次讀取圖1的金鑰150-1的每個索引,且當圖1的KV-SSD 125報告圖1的KV-SSD 125不儲存特定索引金鑰的值時結束來操作。並且即使圖8的結果軟體820需要在組合值被返回之前向圖1的應用120報告最高追加索引,圖1的KVV 160仍可在報告最高追加索引之後臨時儲存組合值,以給予圖1的應用120使用最高追加索引的時間。
在圖16A到圖16C中,假設圖6的讀取請求605是請求金鑰150-1的整個值,從圖4的原始寫入請求405開始,且包括圖5的每個追加請求505。如果在圖6的讀取請求605中只期望這些寫入/追加請求的子集,則圖16A到圖16C中提到的基本索引可用圖1的應用120提供的較低追加索引替換,且最高追加索引可用圖1的應用120提供的較高追加索引替換。
在本發明概念的一些實施例中,圖6的讀取請求605可支援偏移參數。偏移參數可指示將僅返回資料的一部分,以開始相對於所述值的特定偏移。本發明概念的這些實施例可使用圖1的中繼資料170-1來找到儲存從所述偏移開始的資料的用於圖5的追加請求505的追加索引。也就是說,本發明概念的實施例可搜索圖1的中繼資料170-1來定點陣圖9的追加索引905,使得圖10的追加偏移1005小於或等於期望偏移,且圖10的追加偏移1005加上圖10的追加長度1010大於或等於期望偏移。此搜索可使用傳統技術以任何期望的方式實行,以存取圖10的追加搜索結構1015中的資訊。在本發明概念的這些實施例中,以上在關於圖16A到圖16C的論述中提到的基本索引然後可用包括期望偏移的追加索引替換。
圖17A到圖17C示出根據本發明概念的實施例,圖1的KVV 160支持圖1的KV-SSD 125上的圖7的刪除請求705的示例性程式的流程圖。在圖17A中,在方框1705中,圖1的應用120可向圖1的KVV 160發送圖7的刪除請求705。在方框1710中,圖8的索引確定軟體850可確定圖1的金鑰150-1的最高追加索引。參考以下圖18A到圖20進一步論述圖8的索引確定軟體850的操作。在方框1715中,圖1的KVV 160可確定圖1的金鑰150-1的基本索引。在方框1720中,圖8的組合器軟體810可將基本索引與圖1的金鑰150-1組合,以形成圖9的索引金鑰910。在方框1725中,圖8的執行軟體815可指令圖1的KV-SSD 125刪除索引金鑰。
在方框1730(圖17B)中,圖1的KVV 160可確定是否已經刪除了圖1的金鑰150-1的所有追加索引。圖1的KVV 160可通過將當前索引與圖1的金鑰150-1的最高追加索引進行比較來作出這種確定:如果當前索引小於圖1的金鑰150-1的最高追加索引,則沒有刪除圖1的金鑰150-1的所有追加索引。如果沒有刪除圖1的金鑰150-1的所有追加索引,則在方框1735中,圖1的KVV 160可將索引遞增或以其他方式修改為下一個值,且控制可返回圖17A的方框1720。否則,在方框1740中,圖8的散列表軟體835可確定圖1的金鑰150-1的圖1的中繼資料170-1是否在圖1的散列表165中。
如果圖1的中繼資料170-1在圖1的散列表165中,則在方框1745(圖17C)中,圖8的散列表軟體835可定點陣圖1的中繼資料170-1,且在方框1750中,圖8的散列表軟體835可從圖1的散列表165中移除(即,刪除)圖1的中繼資料170-1。
無論圖1的散列表165是否包含圖1的中繼資料170-1,在方框1755中,圖1的KVV 160均可形成表示可存在並儲存圖1的金鑰150-1的最高追加索引的索引物件的金鑰。然後,在方框1760中,圖8的執行軟體815可指令圖1的KV-SSD 125刪除索引物件。如虛線1765所示,可省略方框1755及1760。最後,在方框1770中,圖8的結果軟體820可將來自圖1的KVV 160的圖7的刪除請求705的結果返回給圖1的應用120。
在圖14A到圖17C中,存在包括確定金鑰的最高追加索引的一些方框。圖18A到圖20示出用於確定金鑰的最高追加索引的各種實施例。如上參考圖12所述,這些實施例可組合,且不相互排斥。
圖18A到圖18B示出根據本發明概念的實施例,圖1的KVV 160在圖1的KV-SSD 125上確定金鑰的最高追加索引的示例性程式的流程圖。在圖18A中,在方框1805中,圖8的索引確定軟體850可確定可能的最高追加索引。如上所述,圖1的KVV 160可對可實行的追加操作的數量設定限制:此限制涉及可能的最高追加索引。例如,如果對於給定金鑰允許總計1024個寫入/追加請求且基本索引是0,則可能的最高追加索引將是1023。
在方框1810中,圖8的組合軟體810可將可能的最高追加索引與圖1的金鑰150-1組合,以形成圖9的索引金鑰910。在方框1815中,圖8的執行軟體815可試圖從圖1的KV-SSD 125存取與圖9的此索引金鑰910相關聯的值。
在方框1820(圖18B)中,圖8的索引確定軟體850可確定圖1的KV-SSD 125是否儲存具有圖9的索引金鑰910的物件。如果是,則在方框1825中,所述索引是圖1的金鑰150-1的最高追加索引,且處理可結束。否則,圖1的KV-SSD 125不儲存具有圖9的索引金鑰910的物件。在方框1830中,圖8的索引確定軟體850可遞減索引,且在方框1835中,圖8的組合軟體810可將新索引與圖1的金鑰150-1組合,以形成圖1的新索引金鑰910。處理然後可返回方框1815,以查看圖1的KV-SSD 125是否儲存具有圖9的新索引金鑰910的物件。以這種方式,圖8的索引確定軟體850可反覆運算地搜索圖1的金鑰150-1的最高追加索引。
注意到,在圖18A到圖18B中,圖8的索引確定軟體850可從可能的最高追加索引開始依序向下搜索,以定點陣圖1的金鑰150-1的最高追加索引。但圖8的索引確定軟體850也可從基本索引開始依序向上搜索,遞增索引,直到圖1的KV-SSD 125指示針對特定的索引金鑰沒有找到物件,此時圖8的索引確定軟體850將知道先前的索引是所述金鑰的最高追加索引。
圖19A到圖19B示出根據本發明概念的另一實施例,圖1的KVV 160在圖1的KV-SSD 125上確定金鑰的最高追加索引的示例性程式的流程圖。在圖19A中,在方框1905中,圖8的索引確定軟體850可確定圖1的金鑰150-1的基本索引。在方框1910中,圖8的索引確定軟體850可確定圖1的金鑰150-1的可能的最高追加索引。如同圖18A的方框1805,最高追加索引可相對於圖1的KVV 160所允許的對金鑰的追加請求的最大數量來確定。其之間的方框1905及1910界定要搜索以得到圖1的金鑰150-1的最高追加索引的可能的追加索引的範圍。
在方框1915中,圖8的索引確定軟體850可檢查以查看所述範圍是否已經縮小到單個索引:即,所述範圍的下端等於所述範圍的上端。如果是,則在方框1920中,已經找到圖1的金鑰150-1的最高追加索引,且處理可結束。
否則,在方框1925(圖19B)中,圖8的索引確定軟體850可選擇所述範圍中間的索引。例如,如果低(low
)表示範圍下端的索引,且高(high
)表示範圍上端的索引,則此中間索引可計算為(高-低)÷ 2(如果所述值不是整數,則可選擇剛好高於或低於這個值的數字)。在方框1930中,圖8的組合器軟體810可將這個中間索引值與圖1的金鑰150-1組合,以形成圖9的索引金鑰910。在方框1935中,圖8的執行軟體815可試圖從圖1的KV-SSD 125存取圖9的索引金鑰910的值。在方框1940中,圖8的索引確定軟體850可確定存取是否成功:即,圖1的KV-SSD 125儲存了具有索引金鑰的物件。注意到,圖8的索引確定軟體850在此處不關心儲存在圖1的KV-SSD 125上的物件中的任何值:圖8的所有索引確定軟體850感興趣的是所述物件是否存在於圖1的KV-SSD 125上。如果存取成功,則在方框1945中,圖8的索引確定軟體850可用中間索引替換所述範圍的下端;否則,在方框1950中,圖8的索引確定軟體850可用中間索引替換所述範圍的上端。無論哪種方式,控制返回方框1915(圖19A),以查看是否已經定位了最高追加索引。
圖20示出根據本發明概念的再一實施例,圖1的KVV 160在圖1的KV-SSD 125上確定金鑰的最高追加索引的示例性程式的流程圖。在圖20中,在方框2005中,圖8的索引確定軟體850可確定與儲存在圖1的KV-SSD 125上的索引物件相關聯的金鑰,所述索引物件儲存圖1的金鑰150-1的最高追加索引。最後,在方框2010中,圖8的執行軟體815可從圖1的KV-SSD 125上的索引物件存取最高追加索引。
在圖13A到圖20中,示出本發明概念的一些實施例。但本領域中的技術人員將認識到,通過改變方框的順序、通過省略方框或者通過包括圖式中未示出的連結,本發明概念的其他實施例也是可能的。無論是否明確闡述,流程圖的所有這些變化都被認為是本發明概念的實施例。
本發明概念的實施例提供優於現有技術的技術優點。本發明概念的實施例提供一種機制,通過所述機制,資料可被追加到儲存在圖1的KV-SSD 125上的現有值。在傳統系統中,當圖1的應用120想要將新資料追加到儲存在KV-SSD 125上的值時,應用120必須讀取現有值,修改所述值以追加新資料,並將修改值儲存回圖1的KV-SSD 125上(為了重複使用原始金鑰,這需要使儲存在圖1的KV-SSD 125上的原始物件無效)。這種途徑需要由圖1的應用120向圖1的KV-SSD 125發送的讀取請求、寫入請求及刪除請求,加上對值進行修改以追加新資料所需的任何處理器週期。此外,刪除操作意謂在圖1的KV-SSD 125上存在更多儲存,其儲存需要垃圾收集的無效資料,這可為昂貴(耗時)的過程。
相反,假設圖1的中繼資料170-1儲存在圖1的散列表165中(這在大多數情況下應是正確的假設),在本發明概念的實施例中,不需要圖1的KV-SSD 125的讀取請求或刪除請求。所需要的只是圖1的KV-SSD 125的寫入請求,以儲存追加資訊。此外,修改所述值不需要處理器週期。最後,通過避免需要從圖1的KV-SSD 125中刪除物件,可減少對圖1的KV-SSD 125上的垃圾收集的需要。
追加語義還提供其他有益之處。在傳統系統中,圖1的應用120必須處理特定值可能超過圖1的KV-SSD 125上所允許的最大物件大小的可能性。利用由本發明概念的實施例提供的追加語義,圖1的KVV 160可處理特定值可能太大而不適合圖1的KV-SSD 125上的單個物件的可能性,從而消除對圖1的應用120處置這種情況的需要。
以下論述旨在提供對可在其中實施本發明概念某些方面的一個或多個合適的機器的簡短總體說明。所述一個或多個機器可至少部分地通過以下來控制:來自例如鍵盤、滑鼠等傳統輸入裝置的輸入;以及從另一機器接收到的指令、與虛擬實境(virtual reality,VR)環境的互動、生物回饋(biometric feedback)或其他輸入訊號。本文中所用用語“機器”旨在廣泛地囊括單一機器、虛擬機器器或由以通訊方式耦合的一起運行的機器、虛擬機器器或裝置形成的系統。示例性機器包括計算裝置(例如個人電腦、工作站、伺服器、可攜式電腦、掌上型裝置、電話、平板電腦(tablet)等)以及運輸裝置(例如私人或公共運輸(例如汽車、火車、計程車等))。
所述一個或多個機器可包括嵌入式控制器,例如可程式化或非可程式化邏輯裝置或陣列、應用專用積體電路(ASIC)、嵌入式電腦、智慧卡等。所述一個或多個機器可利用連接到一個或多個遠端機器(例如通過網路介面、數據機或其他通訊性耦合)的一個或多個連接。機器可通過例如內部網(intranet)、網際網路、區域網路、廣域網路等物理網路和/或邏輯網路進行互連。本領域中的技術人員將理解,網路通訊可利用各種有線和/或無線短程或長程載體及協議,所述載體及協議包括射頻(radio frequency,RF)、衛星、微波、電氣及電子工程師學會(Institute of Electrical and Electronics Engineers,IEEE)802.11、藍牙®
、光學的、紅外線的、纜線、鐳射等。
本發明概念的實施例可通過參考或結合相關聯的資料來闡述,相關聯的資料包括當由機器存取時會使機器實行任務或定義抽象資料類型或低級硬體上下文的函數、程式、資料結構、應用程式等。相關聯的資料可儲存在例如揮發性和/或非揮發性記憶體(例如,RAM、ROM等)中或其他儲存裝置及其相關聯的儲存媒體(包括硬碟驅動器、軟碟、光學儲存、磁帶、快閃記憶體、記憶棒(memory stick)、數位視訊盤、生物儲存等)中。相關聯的資料可以資料包、串列資料、並行資料、傳播訊號等形式通過傳輸環境(包括物理網路和/或邏輯網路)進行遞送,且可以壓縮或加密的格式使用。相關聯的資料可在分散式環境中使用且可儲存在本地和/或遠端以供機器存取。
本發明概念的實施例可包括有形的、非暫時性的機器可讀媒體,所述機器可讀媒體包括可由一個或多個處理器執行的指令,所述指令包括實行本文所述的本發明概念的元件的指令。
上述方法的各種操作可通過能夠實行這些操作的任何合適的手段來實行,例如各種硬體和/或軟體元件、電路和/或模組。所述軟體可包括用於實現邏輯功能的可執行指令的有序列表,且可實施在任何“處理器可讀媒體”中,以供指令執行系統、設備或裝置(例如單核或多核處理器或包含處理器的系統)使用或與前述元件結合使用。
結合本文中所揭露的實施例闡述的方法或者演算法及功能的方框或步驟可直接以硬體實施、以由處理器執行的軟體模組實施、或以二者的組合來實施。如果以軟體實施,則所述功能可作為一個或多個指令或代碼儲存在有形的非暫時性電腦可讀媒體上或通過有形的非暫時性電腦可讀媒體傳送。軟體模組可駐留在隨機存取記憶體(RAM)、快閃記憶體、唯讀記憶體(ROM)、電可程式化ROM(Electrically Programmable ROM,EPROM)、電可擦可程式化ROM(Electrically Erasable Programmable ROM,EEPROM)、暫存器、硬碟、抽取式磁碟(removable disk)、壓縮磁碟唯讀記憶體(compact disk ROM,CD ROM)或本領域中已知的任何其他形式的儲存媒體中。
已參考所示實施例闡述並示出了本發明概念的原理,將認識到,在不背離這些原理的條件下可對所示實施例進行排列及細節上的修改且可以任何期望的方式對所示實施例進行組合。且儘管以上論述著重於特定實施例,但也預期存在其他配置。具體來說,即使本文中使用例如“根據本發明概念的實施例”等表達,這些短語也意謂一般性地提及實施例的可能性,而不旨在將本發明概念限制到特定的實施例配置。本文中所用的這些用語可提及可組合到其他實施例中的相同或不同的實施例。
上述說明性實施例不應被視為對說明性實施例的本發明概念進行限制。儘管已闡述了幾個實施例,但本屬領域中的技術人員將容易理解,在不實質上背離本揭露的新穎教示及優點的條件下,可對這些實施例進行許多修改。因此,所有這些修改均旨在包含於由權利要求書所界定的本發明概念的範圍內。
本發明概念的實施例可延伸到以下陳述,但不受限制:
陳述1. 本發明概念的實施例包括使用電路實現的軟體,所述軟體包括:
應用程式化介面(API),從應用接收與金鑰-值固態驅動器(KV-SSD)的金鑰-值對相關的請求,所述金鑰-值對包括金鑰及值,所述應用由處理器執行;
組合器軟體,將所述金鑰與索引組合,以產生索引金鑰;及
執行軟體,使用所述索引金鑰及所述值在所述KV-SSD上執行操作。
陳述2. 本發明概念的實施例包括根據陳述1所述的使用電路實現的軟體,所述軟體還包括將請求的結果返回給應用的結果軟體。
陳述3. 本發明概念的實施例包括根據陳述1所述的使用電路實現的軟體,其中所述電路包括第二處理器。
陳述4. 本發明概念的實施例包括根據陳述3所述的使用電路實現的軟體,其中所述第二處理器是執行應用的處理器。
陳述5. 本發明概念的實施例包括根據陳述4所述的使用電路實現的軟體,其中所述軟體是由處理器執行的作業系統的一部分。
陳述6. 本發明概念的實施例包括根據陳述3所述的使用電路實現的軟體,其中第二處理器是KV-SSD的元件。
陳述7. 本發明概念的實施例包括根據陳述1所述的使用電路實現的軟體,其中所述電路包括現場可程式化閘陣列(FPGA)、圖形處理單元(GPU)及應用專用積體電路(ASIC)中的至少一者。
陳述8. 本發明概念的實施例包括根據陳述1所述的使用電路實現的軟體,所述軟體還包括產生金鑰的中繼資料的中繼資料軟體。
陳述9. 本發明概念的實施例包括根據陳述8所述的使用電路實現的軟體,其中中繼資料包括對金鑰-值對的追加請求的追加索引、追加偏移、追加長度及資料結構中的至少一者。
陳述10. 本發明概念的實施例包括根據陳述8所述的使用電路實現的軟體,所述軟體還包括:
將中繼資料與值組合以產生修改值的第二組合器軟體;且
執行軟體可操作以使用索引金鑰及修改值在KV-SSD上執行操作。
陳述11. 本發明概念的實施例包括根據陳述8所述的使用電路實現的軟體,所述軟體還包括散列表軟體,所述散列表軟體使用記憶體中的散列表來儲存與所述金鑰相關聯的所述中繼資料。
陳述12. 本發明概念的實施例包括根據陳述11所述的使用電路實現的軟體,其中散列表軟體包括從散列表中驅逐舊中繼資料的驅逐軟體。
陳述13. 本發明概念的實施例包括根據陳述1所述的使用電路實現的軟體,其中:
所述請求包括寫入請求及追加請求中的一者;且
執行軟體可操作以將與索引金鑰相關聯的所述值儲存在KV-SSD上。
陳述14. 本發明概念的實施例包括根據陳述13所述的使用電路實現的軟體,其中:
所述值大於KV-SSD上的對象的最大大小;
組合器軟體可操作以將金鑰與多個索引組合,從而產生多個索引金鑰;
使用電路實現的軟體還包括將所述值劃分成多個部分的劃分軟體;且
執行軟體可操作以將與所述多個索引金鑰相關聯的所述多個部分儲存在KV-SSD上。
陳述15. 本發明概念的實施例包括根據陳述14所述的使用電路實現的軟體,其中
散列表軟體可操作以在散列表中為金鑰添加條目。
陳述16. 本發明概念的實施例包括根據陳述14所述的使用電路實現的軟體,其中
散列表軟體可操作以在散列表中為金鑰更新條目。
陳述17. 本發明概念的實施例包括根據陳述1所述的使用電路實現的軟體,其中:
所述請求包括讀取請求;且
所述執行軟體可操作以讀取與所述KV-SSD上的多個索引金鑰相關聯的多個值,並將所述多個值組合以產生所述值。
陳述18. 本發明概念的實施例包括根據陳述1所述的使用電路實現的軟體,其中:
所述請求包括刪除請求;且
所述執行軟體可操作以刪除KV-SSD上的多個索引金鑰。
陳述19. 本發明概念的實施例包括根據陳述18所述的使用電路實現的軟體,其中
散列表軟體可操作以在散列表中為金鑰刪除條目。
陳述20. 本發明概念的實施例包括根據陳述1所述的使用電路實現的軟體,所述軟體還包括確定金鑰的最高追加索引的索引確定軟體。
陳述21. 本發明概念的實施例包括根據陳述20所述的使用電路實現的軟體,其中索引確定軟體可操作以從儲存在記憶體中的散列表中的金鑰的中繼資料中存取金鑰的最高追加索引。
陳述22. 本發明概念的實施例包括根據陳述20所述的使用電路實現的軟體,其中索引確定軟體可操作以搜索KV-SSD來得到金鑰的最高追加索引。
陳述23. 本發明概念的實施例包括根據陳述22所述的使用電路實現的軟體,其中索引確定軟體可操作以依序試圖存取KV-SSD上的索引金鑰,從而確定所述金鑰的最高追加索引。
陳述24. 本發明概念的實施例包括根據陳述22所述的使用電路實現的軟體,其中索引確定軟體可操作以在KV-SSD上實行索引金鑰範圍的二元搜索,從而確定最高追加索引。
陳述25. 本發明概念的實施例包括根據陳述20所述的使用電路實現的軟體,其中索引確定軟體可操作以從KV-SSD上的索引物件存取最高追加索引。
陳述26. 本發明概念的實施例包括一種方法,所述方法包括:
從應用接收寫入請求,以將與金鑰相關聯的值儲存在金鑰-值固態驅動器(KV-SSD)上作為金鑰-值對,所述應用由處理器執行;
確定所述金鑰的基本索引;
將所述基本索引與所述金鑰組合以產生索引金鑰;及
在所述KV-SSD上實行儲存操作以將所述索引金鑰與所述值相關聯。
陳述27. 本發明概念的實施例包括根據陳述26所述的方法,所述方法還包括將儲存操作的寫入結果返回給應用。
陳述28. 本發明概念的實施例包括根據陳述26所述的方法,其中:
所述方法還包括:
建立所述金鑰的第一中繼資料;及
將所述值與第一中繼資料組合以產生第一修改值;及
在所述KV-SSD上實行儲存操作以將所述索引金鑰與所述值相關聯包括在所述KV-SSD上實行所述儲存操作以將所述索引金鑰與所述第一修改值相關聯。
陳述29. 本發明概念的實施例包括根據陳述28所述的方法,其中第一中繼資料包括金鑰的基本索引。
陳述30. 本發明概念的實施例包括根據陳述29所述的方法,其中第一中繼資料還包括第一追加偏移及第一追加長度。
陳述31. 本發明概念的實施例包括根據陳述29所述的方法,其中第一中繼資料還包括對金鑰-值對的追加寫入請求的第一資料結構。
陳述32. 本發明概念的實施例包括根據陳述29所述的方法,所述方法還包括將第一中繼資料儲存在記憶體中的散列表中,第一中繼資料與所述金鑰相關聯。
陳述33. 本發明概念的實施例包括根據陳述32所述的方法,其中將第一中繼資料儲存在記憶體中的散列表中包括從散列表中驅逐與第二金鑰相關聯的現有中繼資料。
陳述34. 本發明概念的實施例包括根據陳述33所述的方法,其中從散列表中驅逐與第二金鑰相關聯的現有中繼資料包括在散列表中選擇第二金鑰作為最近最少使用的金鑰。
陳述35. 本發明概念的實施例包括根據陳述26所述的方法,其中:
所述方法還包括,至少部分地基於所述值超過所述KV-SSD上的物件的最大大小,確定儲存所述值所需的物件的數量;
將所述基本索引與所述金鑰組合以產生索引金鑰包括將多個索引與所述金鑰組合以產生多個索引金鑰,其中所述多個索引金鑰至少與儲存所述值所需的物件的數量一樣大;及
在所述KV-SSD上實行儲存操作以將所述索引金鑰與所述值相關聯包括在所述KV-SSD上實行多個儲存操作以將所述多個索引金鑰中的每一者與所述值的一部分相關聯。
陳述36. 本發明概念的實施例包括根據陳述26所述的方法,所述方法還包括繞過確定金鑰的基本索引、將基本索引與金鑰組合以產生索引金鑰以及在KV-SSD上實行儲存操作以將索引金鑰與值相關聯的操作,而代替地在KV-SSD上實行傳統儲存操作以將金鑰與值相關聯。
陳述37. 本發明概念的實施例包括根據陳述36所述的方法,其中繞過確定金鑰的基本索引、將基本索引與金鑰組合以產生索引金鑰以及在KV-SSD上實行儲存操作以將索引金鑰與值相關聯的操作,而代替地在KV-SSD上實行傳統儲存操作以將金鑰與值相關聯是至少部分地基於寫入請求指定傳統儲存操作。
陳述38. 本發明概念的實施例包括根據陳述26所述的方法,所述方法還包括:
從所述應用接收追加請求以將第二值追加到所述KV-SSD上與所述金鑰相關聯的所述值;
確定所述金鑰的最高追加索引;
遞增所述最高追加索引以產生新的最高追加索引;
將所述新的最高追加索引與所述金鑰組合以產生追加索引金鑰;及
在所述KV-SSD上實行第二儲存操作以將所述追加索引金鑰與所述第二值相關聯。
陳述39. 本發明概念的實施例包括根據陳述38所述的方法,所述方法還包括將第二儲存操作的追加結果返回給應用。
陳述40. 本發明概念的實施例包括根據陳述38所述的方法,其中:
所述方法還包括:
建立所述金鑰的第二中繼資料;及
將所述第二值與第二中繼資料組合以產生第二修改值;及
在所述KV-SSD上實行第二儲存操作以將所述追加索引金鑰與所述第二值相關聯包括在所述KV-SSD上實行所述第二儲存操作以將所述追加索引金鑰與所述第二修改值相關聯。
陳述41. 本發明概念的實施例包括根據陳述40所述的方法,其中第二中繼資料包括金鑰的追加索引。
陳述42. 本發明概念的實施例包括根據陳述41所述的方法,其中第二中繼資料還包括第二追加偏移及第二追加長度。
陳述43. 本發明概念的實施例包括根據陳述41所述的方法,其中第二中繼資料還包括對金鑰-值對的追加請求的第二資料結構。
陳述44. 本發明概念的實施例包括根據陳述41所述的方法,所述方法還包括將第二中繼資料儲存在記憶體中的散列表中,第二中繼資料與所述金鑰相關聯。
陳述45. 本發明概念的實施例包括根據陳述44所述的方法,其中將第二中繼資料儲存在記憶體中的散列表中包括從散列表中驅逐與第二金鑰相關聯的現有中繼資料。
陳述46. 本發明概念的實施例包括根據陳述45所述的方法,其中從散列表中驅逐與第二金鑰相關聯的現有中繼資料包括在散列表中選擇第二金鑰作為最近最少使用的金鑰。
陳述47. 本發明概念的實施例包括根據陳述44所述的方法,其中將第二中繼資料儲存在記憶體中的散列表中,第二中繼資料與所述金鑰相關聯,包括:
確定所述散列表不儲存與所述金鑰相關聯的所述第一中繼資料;
確定所述金鑰的所述最高追加索引;及
因應於所述金鑰的所述最高追加索引,從所述KV-SSD存取所述第一中繼資料。
陳述48. 本發明概念的實施例包括根據陳述47所述的方法,其中確定所述金鑰的所述最高追加索引包括系統地請求與來自所述KV-SSD的金鑰相關聯的資料,直到確定出所述金鑰的所述最高追加索引。
陳述49. 本發明概念的實施例包括根據陳述48所述的方法,其中系統地請求與來自所述KV-SSD的金鑰相關聯的資料,直到確定出所述金鑰的所述最高追加索引包括:
確定所述金鑰的可能的最高追加索引;
將金鑰的可能的最高追加索引與金鑰組合,以產生測試金鑰;及
試圖存取與所述測試金鑰相關聯的所述資料。
陳述50. 本發明概念的實施例包括根據陳述49所述的方法,其中系統地請求與來自所述KV-SSD的金鑰相關聯的資料,直到確定出所述金鑰的所述最高追加索引還包括:
遞減所述金鑰的可能的最高追加索引,以產生可能的新追加索引;
將金鑰的可能的新追加索引與金鑰組合,以產生新測試金鑰;
試圖存取與新測試金鑰相關聯的資料;及
至少部分地基於KV-SSD對試圖存取與新測試金鑰相關聯的資料的回應,重複遞減金鑰的可能的最高追加索引,將金鑰的可能的新追加索引與金鑰組合,以及試圖存取所述資料,直到KV-SSD報告與新測試金鑰相關聯的資料的操作。
陳述51. 本發明概念的實施例包括根據陳述48所述的方法,其中系統地請求與來自所述KV-SSD的金鑰相關聯的資料,直到確定出所述金鑰的所述最高追加索引包括:
確定所述金鑰的可能的最高追加索引的範圍;
在所述金鑰的可能的最高追加索引的所述範圍的中間選擇中間追加索引;
將所述中間追加索引與所述金鑰組合以產生測試金鑰;
試圖存取與所述測試金鑰相關聯的所述資料;
至少部分地基於所述KV-SSD對所述試圖存取與所述測試金鑰相關聯的所述資料的回應,將所述金鑰的可能的最高追加索引的所述範圍縮小到前半範圍及後半範圍中的一者;及
重複選擇中間追加索引,將所述中間追加索引與所述金鑰組合,縮小所述金鑰的可能的最高追加索引的所述範圍,以及試圖存取與所述測試金鑰相關聯的所述資料,直到所述範圍包括單個可能的最高追加索引的操作。
陳述52. 本發明概念的實施例包括根據陳述47所述的方法,其中確定金鑰的最高追加索引包括從KV-SSD上的金鑰的索引物件存取金鑰的最高追加索引。
陳述53. 本發明概念的實施例包括根據陳述44所述的方法,所述方法還包括至少部分地基於所述金鑰被選擇以從散列表中驅逐,將新的最高追加索引儲存在KV-SSD上的金鑰的索引物件中。
陳述54. 本發明概念的實施例包括根據陳述38所述的方法,所述方法還包括:
從所述應用接收讀取請求,以從所述KV-SSD讀取與所述金鑰相關聯的值;
確定所述金鑰的基本索引;
確定所述金鑰的新的最高追加索引;
將從所述金鑰的基本索引到所述金鑰的新的最高追加索引的每個索引與所述金鑰組合,以產生至少兩個索引金鑰;
在所述KV-SSD上對所述至少兩個索引金鑰中的每一者實行讀取操作,以產生至少兩個讀取值;
將所述至少兩個讀取值組合以產生所述值;及
因應於讀取請求,將所述值返回給應用。
陳述55. 本發明概念的實施例包括根據陳述54所述的方法,其中:
KV-SSD儲存與金鑰相關聯的第一中繼資料及與金鑰相關聯的第二中繼資料,第一中繼資料包括對金鑰-值對的追加請求的第一追加索引、第一偏移、第一長度及第一資料結構中的至少一者,第二中繼資料包括對金鑰-值對的追加請求的新的最高追加索引、第二偏移、第二長度及第二資料結構中的至少一者,第二中繼資料也儲存在記憶體中的散列表中;及
確定金鑰的新的最高追加索引包括從散列表中的第二中繼資料確定金鑰的新的最高追加索引。
陳述56. 本發明概念的實施例包括根據陳述54所述的方法,所述方法還包括將與金鑰相關聯的第二中繼資料儲存在記憶體中的散列表中,第二中繼資料包括對金鑰-值對的追加請求的新的最高追加索引、第二偏移、第二長度及第二資料結構中的至少一者。
陳述57. 本發明概念的實施例包括根據陳述56所述的方法,其中將第二中繼資料儲存在記憶體中的散列表中包括從散列表中驅逐與第二金鑰相關聯的現有中繼資料。
陳述58. 本發明概念的實施例包括根據陳述57所述的方法,其中從散列表中驅逐與第二金鑰相關聯的現有中繼資料包括在散列表中選擇第二金鑰作為最近最少使用的金鑰。
陳述59. 本發明概念的實施例包括根據陳述56所述的方法,其中將第二中繼資料儲存在記憶體中的散列表中,第二中繼資料與所述金鑰相關聯,包括:
確定所述散列表不儲存與所述金鑰相關聯的所述第二中繼資料;及
因應於所述金鑰的新的最高追加索引,從所述KV-SSD存取所述第二中繼資料。
陳述60. 本發明概念的實施例包括根據陳述59所述的方法,其中確定所述金鑰的所述最高追加索引包括系統地請求與來自所述KV-SSD的金鑰相關聯的資料,直到確定出所述金鑰的所述新的最高追加索引。
陳述61. 本發明概念的實施例包括根據陳述60所述的方法,其中系統地請求與來自所述KV-SSD的金鑰相關聯的資料,直到確定出所述金鑰的新的最高追加索引包括:
確定所述金鑰的可能的最高追加索引;
將金鑰的可能的最高追加索引與金鑰組合,以產生測試金鑰;及
試圖存取與所述測試金鑰相關聯的所述資料。
陳述62. 本發明概念的實施例包括根據陳述61所述的方法,其中系統地請求與來自所述KV-SSD的金鑰相關聯的資料,直到確定出所述金鑰的所述最高追加索引還包括:
遞減所述金鑰的可能的最高追加索引,以產生可能的新追加索引;
將金鑰的可能的新追加索引與金鑰組合,以產生新測試金鑰;
試圖存取與新測試金鑰相關聯的資料;及
至少部分地基於KV-SSD對試圖存取與新測試金鑰相關聯的資料的回應,重複遞減金鑰的可能的最高追加索引,將金鑰的可能的新追加索引與金鑰組合,以及試圖存取所述資料,直到KV-SSD報告與新測試金鑰相關聯的資料的操作。
陳述63. 本發明概念的實施例包括根據陳述60所述的方法,其中系統地請求與來自所述KV-SSD的金鑰相關聯的資料,直到確定出所述金鑰的新的最高追加索引包括:
確定所述金鑰的可能的最高追加索引的範圍;
在所述金鑰的可能的最高追加索引的所述範圍的中間選擇中間追加索引;
將所述中間追加索引與所述金鑰組合以產生測試金鑰;
試圖存取與所述測試金鑰相關聯的所述資料;
至少部分地基於所述KV-SSD對所述試圖存取與所述測試金鑰相關聯的所述資料的回應,將所述金鑰的可能的最高追加索引的所述範圍縮小到前半範圍及後半範圍中的一者;及
重複選擇中間追加索引,將所述中間追加索引與所述金鑰組合,縮小所述金鑰的可能的最高追加索引的所述範圍,以及試圖存取與所述測試金鑰相關聯的所述資料,直到所述範圍包括單個可能的最高追加索引的操作。
陳述64. 本發明概念的實施例包括根據陳述59所述的方法,其中確定金鑰的新的最高追加索引包括從KV-SSD上的金鑰的索引物件存取金鑰的新的最高追加索引。
陳述65. 本發明概念的實施例包括根據陳述56所述的方法,所述方法還包括至少部分地基於金鑰被選擇以從散列表中驅逐,將新的最高追加索引儲存在KV-SSD上的金鑰的索引物件中。
陳述66. 本發明概念的實施例包括根據陳述54所述的方法,所述方法還包括將新的最高追加索引返回給應用。
陳述67. 本發明概念的實施例包括根據陳述66所述的方法,其中將新的最高追加索引返回給應用包括在因應於讀取請求將所述值返回給應用之前將新的最高追加索引返回給應用。
陳述68. 本發明概念的實施例包括根據陳述38所述的方法,所述方法還包括:
從所述應用接收刪除請求,以刪除在金鑰-值固態驅動器(KV-SSD)上作為金鑰-值對的與金鑰相關聯的值;
確定所述金鑰的基本索引;
將所述基本索引與所述金鑰組合以產生第一索引金鑰;
在所述KV-SSD上對所述第一索引金鑰實行第一刪除操作;
確定所述金鑰的至少一個追加索引;
將所述至少一個追加索引與所述金鑰組合,以產生至少一個第二索引金鑰;及
在所述KV-SSD上對所述至少一個第二索引金鑰實行至少一個第二刪除操作。
陳述69. 本發明概念的實施例包括根據陳述68所述的方法,所述方法還包括將第一刪除操作及所述至少一個第二刪除操作的刪除結果返回給應用。
陳述70. 本發明概念的實施例包括根據陳述68所述的方法,所述方法還包括:
在記憶體中的散列表中定位中繼資料,所述中繼資料與金鑰相關聯;及
從記憶體中的散列表中移除中繼資料。
陳述71. 本發明概念的實施例包括根據陳述68所述的方法,所述方法還包括:
識別儲存在KV-SSD上的金鑰的索引物件;及
從KV-SSD中刪除金鑰的索引物件。
陳述72. 本發明概念的實施例包括一種方法,所述方法包括:
從應用接收追加請求,以將第二值追加到金鑰-值固態驅動器(KV-SSD)上與金鑰相關聯的值作為金鑰-值對,所述應用由處理器執行;
確定所述金鑰的最高追加索引;
遞增所述最高追加索引以產生新的最高追加索引;
將所述新的最高追加索引與所述金鑰組合以產生追加索引金鑰;及
在所述KV-SSD上實行第二儲存操作以將所述追加索引金鑰與所述第二值相關聯。
陳述73. 本發明概念的實施例包括根據陳述72所述的方法,所述方法還包括將第二儲存操作的追加結果返回給應用。
陳述74. 本發明概念的實施例包括根據陳述72所述的方法,其中:
所述KV-SSD儲存與所述金鑰相關聯的第一中繼資料,所述第一中繼資料包括對所述金鑰-值對的追加請求的最高追加索引、第一偏移、第一長度及第一資料結構中的至少一者;
所述方法還包括:
建立所述金鑰的第二中繼資料;及
將所述第二值與第二中繼資料組合以產生第二修改值;及
在所述KV-SSD上實行第二儲存操作以將所述追加索引金鑰與所述第二值相關聯包括在所述KV-SSD上實行所述第二儲存操作以將所述追加索引金鑰與所述第二修改值相關聯。
陳述75. 本發明概念的實施例包括根據陳述74所述的方法,其中第二中繼資料包括金鑰的新的最高追加索引。
陳述76. 本發明概念的實施例包括根據陳述75所述的方法,其中第二中繼資料還包括第二追加偏移及第二追加長度。
陳述77. 本發明概念的一個實施例包括根據陳述75所述的方法,其中第二中繼資料還包括對金鑰-值對的追加請求的第二資料結構。
陳述78. 本發明概念的實施例包括根據陳述75所述的方法,所述方法還包括將第二中繼資料儲存在記憶體中的散列表中,第二中繼資料與所述金鑰相關聯。
陳述79. 本發明概念的實施例包括根據陳述78所述的方法,其中將第二中繼資料儲存在記憶體中的散列表中包括從散列表中驅逐與第二金鑰相關聯的現有中繼資料。
陳述80. 本發明概念的實施例包括根據陳述79所述的方法,其中從散列表中驅逐與第二金鑰相關聯的現有中繼資料包括在散列表中選擇第二金鑰作為最近最少使用的金鑰。
陳述81. 本發明概念的實施例包括根據陳述78所述的方法,其中將第二中繼資料儲存在記憶體中的散列表中,第二中繼資料與所述金鑰相關聯,包括:
確定所述散列表不儲存與所述金鑰相關聯的所述第一中繼資料;
確定所述金鑰的所述最高追加索引;及
因應於所述金鑰的所述最高追加索引,從所述KV-SSD存取所述第一中繼資料。
陳述82. 本發明概念的實施例包括根據陳述81所述的方法,其中確定所述金鑰的所述最高追加索引包括系統地請求與來自所述KV-SSD的金鑰相關聯的資料,直到確定出所述金鑰的所述最高追加索引。
陳述83. 本發明概念的實施例包括根據陳述82所述的方法,其中系統地請求與來自所述KV-SSD的金鑰相關聯的資料,直到確定出所述金鑰的所述最高追加索引包括:
確定所述金鑰的可能的最高追加索引;
將金鑰的可能的最高追加索引與金鑰組合,以產生測試金鑰;及
試圖存取與所述測試金鑰相關聯的所述資料。
陳述84. 本發明概念的實施例包括根據陳述83所述的方法,其中系統地請求與來自所述KV-SSD的金鑰相關聯的資料,直到確定出所述金鑰的所述最高追加索引還包括:
遞減所述金鑰的可能的最高追加索引,以產生可能的新追加索引;
將金鑰的可能的新追加索引與金鑰組合,以產生新測試金鑰;
試圖存取與新測試金鑰相關聯的資料;及
至少部分地基於KV-SSD對試圖存取與新測試金鑰相關聯的資料的回應,重複遞減金鑰的可能的最高追加索引,將金鑰的可能的新追加索引與金鑰組合,以及試圖存取所述資料,直到KV-SSD報告與新測試金鑰相關聯的資料的操作。
陳述85. 本發明概念的實施例包括根據陳述82所述的方法,其中系統地請求與來自所述KV-SSD的金鑰相關聯的資料,直到確定出所述金鑰的最高追加索引包括:
確定所述金鑰的可能的最高追加索引的範圍;
在所述金鑰的可能的最高追加索引的所述範圍的中間選擇中間追加索引;
將所述中間追加索引與所述金鑰組合以產生測試金鑰;
試圖存取與所述測試金鑰相關聯的所述資料;
至少部分地基於所述KV-SSD對試圖存取與所述測試金鑰相關聯的所述資料的回應,將所述金鑰的可能的最高追加索引的所述範圍縮小到前半範圍及後半範圍中的一者;及
重複選擇中間追加索引,將所述中間追加索引與所述金鑰組合,縮小所述金鑰的可能的最高追加索引的所述範圍,以及試圖存取與所述測試金鑰相關聯的所述資料,直到所述範圍包括單個可能的最高追加索引的操作。
陳述86. 本發明概念的實施例包括根據陳述81所述的方法,其中確定金鑰的最高追加索引包括從KV-SSD上的金鑰的索引物件存取金鑰的最高追加索引。
陳述87. 本發明概念的實施例包括根據陳述78所述的方法,所述方法還包括至少部分地基於金鑰被選擇以從散列表中驅逐,將新的最高追加索引儲存在KV-SSD上的金鑰的索引物件中。
陳述88. 本發明概念的實施例包括一種方法,所述方法包括:
從應用接收讀取請求,以從金鑰-值固態驅動器(KV-SSD)讀取與金鑰相關聯的值作為金鑰-值對,所述應用由處理器執行;
確定所述金鑰的基本索引;
確定所述金鑰的最高追加索引;
將從所述金鑰的基本索引到所述金鑰的最高追加索引的每個索引與所述金鑰組合,以產生至少兩個索引金鑰;
在所述KV-SSD上對所述至少兩個索引金鑰中的每一者實行讀取操作,以產生至少兩個讀取值;
將所述至少兩個讀取值組合以產生所述值;及
因應於讀取請求,將所述值返回給應用。
陳述89. 本發明概念的實施例包括根據陳述88所述的方法,其中:
KV-SSD儲存與金鑰相關聯的第一中繼資料及與金鑰相關聯的第二中繼資料,第一中繼資料包括對金鑰-值對的追加請求的第一追加索引、第一偏移、第一長度及第一資料結構中的至少一者,第二中繼資料包括對金鑰-值對的追加請求的最高追加索引、第二偏移、第二長度及第二資料結構中的至少一者,第二中繼資料也儲存在記憶體中的散列表中;且
確定金鑰的最高追加索引包括從散列表中的第二中繼資料確定金鑰的最高追加索引。
陳述90. 本發明概念的實施例包括根據陳述88所述的方法,所述方法還包括將第二中繼資料儲存在記憶體中的散列表中,第二中繼資料包括對金鑰-值對的追加請求的最高追加索引、第二偏移、第二長度及第二資料結構中的至少一者。
陳述91. 本發明概念的實施例包括根據陳述90所述的方法,其中將第二中繼資料儲存在記憶體中的散列表中包括從散列表中驅逐與第二金鑰相關聯的現有中繼資料。
陳述92. 本發明概念的實施例包括根據陳述91所述的方法,其中從散列表中驅逐與第二金鑰相關聯的現有中繼資料包括在散列表中選擇第二金鑰作為最近最少使用的金鑰。
陳述93. 本發明概念的實施例包括根據陳述90所述的方法,其中將第二中繼資料儲存在記憶體中的散列表中,第二中繼資料與所述金鑰相關聯,包括:
確定所述散列表不儲存與所述金鑰相關聯的所述第二中繼資料;及
因應於所述金鑰的所述最高追加索引,從所述KV-SSD存取所述第二中繼資料。
陳述94. 本發明概念的實施例包括根據陳述93所述的方法,其中確定所述金鑰的所述最高追加索引包括系統地請求與來自所述KV-SSD的金鑰相關聯的資料,直到確定出所述金鑰的所述最高追加索引。
陳述95. 本發明概念的實施例包括根據陳述94所述的方法,其中系統地請求與來自所述KV-SSD的金鑰相關聯的資料,直到確定出所述金鑰的所述最高追加索引包括:
確定所述金鑰的可能的最高追加索引;
將金鑰的可能的最高追加索引與金鑰組合,以產生測試金鑰;及
試圖存取與所述測試金鑰相關聯的所述資料。
陳述96. 本發明概念的實施例包括根據陳述95所述的方法,其中系統地請求與來自所述KV-SSD的金鑰相關聯的資料,直到確定出所述金鑰的所述最高追加索引還包括:
遞減所述金鑰的可能的最高追加索引,以產生可能的新追加索引;
將金鑰的可能的新追加索引與金鑰組合,以產生新測試金鑰;
試圖存取與新測試金鑰相關聯的資料;及
至少部分地基於KV-SSD對試圖存取與新測試金鑰相關聯的資料的回應,重複遞減金鑰的可能的最高追加索引,將金鑰的可能的新追加索引與金鑰組合,以及試圖存取所述資料,直到KV-SSD報告與新測試金鑰相關聯的資料的操作。
陳述97. 本發明概念的實施例包括根據陳述94所述的方法,其中系統地請求與來自所述KV-SSD的金鑰相關聯的資料,直到確定出所述金鑰的所述最高追加索引包括:
確定所述金鑰的可能的最高追加索引的範圍;
在所述金鑰的可能的最高追加索引的所述範圍的中間選擇中間追加索引;
將所述中間追加索引與所述金鑰組合以產生測試金鑰;
試圖存取與所述測試金鑰相關聯的所述資料;
至少部分地基於所述KV-SSD對試圖存取與所述測試金鑰相關聯的所述資料的回應,將所述金鑰的可能的最高追加索引的所述範圍縮小到前半範圍及後半範圍中的一者;及
重複選擇中間追加索引,將所述中間追加索引與所述金鑰組合,縮小所述金鑰的可能的最高追加索引的所述範圍,以及試圖存取與所述測試金鑰相關聯的所述資料,直到所述範圍包括單個可能的最高追加索引的操作。
陳述98. 本發明概念的實施例包括根據陳述93所述的方法,其中確定金鑰的最高追加索引包括從KV-SSD上的金鑰的索引物件存取金鑰的最高追加索引。
陳述99. 本發明概念的實施例包括根據陳述90所述的方法,所述方法還包括至少部分地基於金鑰被選擇以從散列表中驅逐,將最高追加索引儲存在KV-SSD上的金鑰的索引物件中。
陳述100. 本發明概念的實施例包括根據陳述88所述的方法,所述方法還包括將最高追加索引返回給應用。
陳述101. 本發明概念的實施例包括根據陳述100所述的方法,其中將最高追加索引返回給應用包括在因應於讀取請求將值返回給應用之前將最高追加索引返回給應用。
陳述102. 本發明概念的實施例包括一種方法,所述方法包括:
從應用接收刪除請求,以刪除在金鑰-值固態驅動器(KV-SSD)上作為金鑰-值對的與金鑰相關聯的值,所述應用由處理器執行;
確定所述金鑰的基本索引;
將所述基本索引與所述金鑰組合以產生第一索引金鑰;
在所述KV-SSD上對所述第一索引金鑰實行刪除操作;
確定所述金鑰的至少一個追加索引;
將所述至少一個追加索引與所述金鑰組合,以產生至少一個第二索引金鑰;及
在所述KV-SSD上對所述至少一個第二索引金鑰實行至少一個刪除操作。
陳述103. 本發明概念的實施例包括根據陳述102所述的方法,所述方法還包括將第一刪除操作及所述至少一個第二刪除操作的刪除結果返回給應用。
陳述104. 本發明概念的實施例包括根據陳述102所述的方法,所述方法還包括:
在記憶體中的散列表中定位中繼資料,所述中繼資料與金鑰相關聯;及
從記憶體中的散列表中移除中繼資料。
陳述105. 本發明概念的實施例包括根據陳述102所述的方法,所述方法還包括:
識別儲存在KV-SSD上的金鑰的索引物件;及
從KV-SSD中刪除金鑰的索引物件。
陳述106. 本發明概念的實施例包括一種製品,所述製品包括非暫時性儲存媒體,所述非暫時性儲存媒體上儲存有指令,所述指令當由機器執行時,使得:
從應用接收寫入請求,以將與金鑰相關聯的值儲存在金鑰-值固態驅動器(KV-SSD)上作為金鑰-值對,所述應用由處理器執行;
確定所述金鑰的基本索引;
將所述基本索引與所述金鑰組合以產生索引金鑰;及
在所述KV-SSD上實行儲存操作以將所述索引金鑰與所述值相關聯。
陳述107. 本發明概念的實施例包括根據陳述106所述的製品,所述非暫時性儲存媒體上儲存有進一步的指令,所述指令當由機器執行時,使得將儲存操作的寫入結果返回給應用。
陳述108. 本發明概念的實施例包括根據陳述106所述的製品,其中:
所述方法還包括:
建立所述金鑰的第一中繼資料;及
將所述值與第一中繼資料組合以產生第一修改值;及
在所述KV-SSD上實行儲存操作以將所述索引金鑰與所述值相關聯包括在所述KV-SSD上實行所述儲存操作以將所述索引金鑰與所述第一修改值相關聯。
陳述109. 本發明概念的實施例包括根據陳述108所述的製品,其中第一中繼資料包括金鑰的基本索引。
陳述110. 本發明概念的實施例包括根據陳述109所述的製品,其中第一中繼資料還包括第一追加偏移及第一追加長度。
陳述111. 本發明概念的實施例包括根據陳述109所述的製品,其中第一中繼資料還包括對金鑰-值對的追加寫入請求的第一資料結構。
陳述112. 本發明概念的實施例包括根據陳述109所述的製品,所述非暫時性儲存媒體上儲存有進一步的指令,所述指令當由機器執行時,使得將第一中繼資料儲存在記憶體中的散列表中,第一中繼資料與金鑰相關聯。
陳述113. 本發明概念的實施例包括根據陳述112所述的製品,其中將第一中繼資料儲存在記憶體中的散列表中包括從散列表中驅逐與第二金鑰相關聯的現有中繼資料。
陳述114. 本發明概念的實施例包括根據陳述113所述的製品,其中從散列表中驅逐與第二金鑰相關聯的現有中繼資料包括在散列表中選擇第二金鑰作為最近最少使用的金鑰。
陳述115. 本發明概念的實施例包括根據陳述106所述的製品,其中:
所述方法還包括,至少部分地基於所述值超過所述KV-SSD上的物件的最大大小,確定儲存所述值所需的物件的數量;
將所述基本索引與所述金鑰組合以產生索引金鑰包括將多個索引與所述金鑰組合以產生多個索引金鑰,其中所述多個索引金鑰至少與儲存所述值所需的物件的數量一樣大;及
在所述KV-SSD上實行儲存操作以將所述索引金鑰與所述值相關聯包括在所述KV-SSD上實行多個儲存操作以將所述多個索引金鑰中的每一者與所述值的一部分相關聯。
陳述116. 本發明概念的實施例包括根據陳述106所述的製品,所述非暫時性儲存媒體上儲存有進一步的指令,所述指令當由機器執行時,使得繞過確定金鑰的基本索引、將基本索引與金鑰組合以產生索引金鑰以及在KV-SSD上實行儲存操作以將索引金鑰與所述值相關聯的操作,而代替地在KV-SSD上實行傳統儲存操作以將金鑰與所述值相關聯。
陳述117. 本發明概念的實施例包括根據陳述116所述的製品,其中繞過確定金鑰的基本索引、將基本索引與金鑰組合以產生索引金鑰以及在KV-SSD上實行儲存操作以將索引金鑰與所述值相關聯的操作,而代替地在KV-SSD上實行傳統儲存操作以將金鑰與所述值相關聯是至少部分地基於寫入請求指定傳統儲存操作。
陳述118. 本發明概念的實施例包括根據陳述106所述的製品,所述非暫時性儲存媒體上儲存有進一步的指令,所述指令當由機器執行時,使得:
從所述應用接收追加請求以將第二值追加到與所述KV-SSD上的所述金鑰相關聯的所述值;
確定所述金鑰的最高追加索引;
遞增所述最高追加索引以產生新的最高追加索引;
將所述新的最高追加索引與所述金鑰組合以產生追加索引金鑰;及
在所述KV-SSD上實行第二儲存操作以將所述追加索引金鑰與所述第二值相關聯。
陳述119. 本發明概念的實施例包括根據陳述118所述的製品,所述非暫時性儲存媒體上儲存有進一步的指令,所述指令當由機器執行時,使得將第二儲存操作的追加結果返回給應用。
陳述120. 本發明概念的實施例包括根據陳述118所述的製品,其中:
所述方法還包括:
建立所述金鑰的第二中繼資料;及
將所述第二值與第二中繼資料組合以產生第二修改值;及
在所述KV-SSD上實行第二儲存操作以將所述追加索引金鑰與所述第二值相關聯包括在所述KV-SSD上實行所述第二儲存操作以將所述追加索引金鑰與所述第二修改值相關聯。
陳述121. 本發明概念的實施例包括根據陳述120所述的製品,其中第二中繼資料包括金鑰的追加索引。
陳述122. 本發明概念的實施例包括根據陳述121所述的製品,其中第二中繼資料還包括第二追加偏移及第二追加長度。
陳述123. 本發明概念的實施例包括根據陳述121所述的製品,其中第二中繼資料還包括對金鑰-值對的追加請求的第二資料結構。
陳述124. 本發明概念的實施例包括根據陳述121所述的製品,所述非暫時性儲存媒體上儲存有進一步的指令,所述指令當由機器執行時,使得將第二中繼資料儲存在記憶體中的散列表中,第二中繼資料與金鑰相關聯。
陳述125. 本發明概念的實施例包括根據陳述124所述的製品,其中將第二中繼資料儲存在記憶體中的散列表中包括從散列表中驅逐與第二金鑰相關聯的現有中繼資料。
陳述126. 本發明概念的實施例包括根據陳述125所述的製品,其中從散列表中驅逐與第二金鑰相關聯的現有中繼資料包括在散列表中選擇第二金鑰作為最近最少使用的金鑰。
陳述127. 本發明概念的實施例包括根據陳述124所述的製品,其中將第二中繼資料儲存在記憶體中的散列表中,第二中繼資料與所述金鑰相關聯,包括:
確定所述散列表不儲存與所述金鑰相關聯的所述第一中繼資料;
確定所述金鑰的所述最高追加索引;及
因應於所述金鑰的所述最高追加索引,從所述KV-SSD存取所述第一中繼資料。
陳述128. 本發明概念的實施例包括根據陳述127所述的製品,其中確定所述金鑰的所述最高追加索引包括系統地請求與來自所述KV-SSD的金鑰相關聯的資料,直到確定出所述金鑰的所述最高追加索引。
陳述129. 本發明概念的實施例包括根據陳述128所述的製品,其中系統地請求與來自所述KV-SSD的金鑰相關聯的資料,直到確定出所述金鑰的所述最高追加索引包括:
確定所述金鑰的可能的最高追加索引;
將金鑰的可能的最高追加索引與金鑰組合,以產生測試金鑰;及
試圖存取與所述測試金鑰相關聯的所述資料。
陳述130. 本發明概念的實施例包括根據陳述129所述的製品,其中系統地請求與來自所述KV-SSD的金鑰相關聯的資料,直到確定出所述金鑰的所述最高追加索引還包括:
遞減所述金鑰的可能的最高追加索引,以產生可能的新追加索引;
將金鑰的可能的新追加索引與金鑰組合,以產生新測試金鑰;
試圖存取與新測試金鑰相關聯的資料;及
至少部分地基於KV-SSD對試圖存取與新測試金鑰相關聯的資料的回應,重複遞減金鑰的可能的最高追加索引,將金鑰的可能的新追加索引與金鑰組合,以及試圖存取所述資料,直到KV-SSD報告與新測試金鑰相關聯的資料的操作。
陳述131. 本發明概念的實施例包括根據陳述128所述的製品,其中系統地請求與來自所述KV-SSD的金鑰相關聯的資料,直到確定出所述金鑰的所述最高追加索引包括:
確定所述金鑰的可能的最高追加索引的範圍;
在所述金鑰的可能的最高追加索引的所述範圍的中間選擇中間追加索引;
將所述中間追加索引與所述金鑰組合以產生測試金鑰;
試圖存取與所述測試金鑰相關聯的所述資料;
至少部分地基於所述KV-SSD對試圖存取與所述測試金鑰相關聯的所述資料的回應,將所述金鑰的可能的最高追加索引的所述範圍縮小到前半範圍及後半範圍中的一者;及
重複選擇中間追加索引,將所述中間追加索引與所述金鑰組合,縮小所述金鑰的可能的最高追加索引的所述範圍,以及試圖存取與所述測試金鑰相關聯的所述資料,直到所述範圍包括單個可能的最高追加索引的操作。
陳述132. 本發明概念的實施例包括根據陳述127所述的製品,其中確定金鑰的最高追加索引包括從KV-SSD上的金鑰的索引物件存取金鑰的最高追加索引。
陳述133. 本發明概念的實施例包括根據陳述124所述的製品,所述非暫時性儲存媒體上儲存有進一步的指令,所述指令當由機器執行時,使得至少部分地基於金鑰被選擇以從散列表中驅逐,將新的最高追加索引儲存在KV-SSD上的金鑰的索引物件中。
陳述134. 本發明概念的實施例包括根據陳述118所述的製品,所述非暫時性儲存媒體上儲存有進一步的指令,所述指令當由機器執行時,使得:
從所述應用接收讀取請求,以從所述KV-SSD讀取與所述金鑰相關聯的值;
確定所述金鑰的基本索引;
確定所述金鑰的新的最高追加索引;
將從所述金鑰的基本索引到所述金鑰的新的最高追加索引的每個索引與所述金鑰組合,以產生至少兩個索引金鑰;
在所述KV-SSD上對所述至少兩個索引金鑰中的每一者實行讀取操作,以產生至少兩個讀取值;
將所述至少兩個讀取值組合以產生所述值;及
因應於讀取請求,將所述值返回給應用。
陳述135. 本發明概念的實施例包括根據陳述134所述的製品,其中:
KV-SSD儲存與金鑰相關聯的第一中繼資料及與金鑰相關聯的第二中繼資料,第一中繼資料包括對金鑰-值對的追加請求的第一追加索引、第一偏移、第一長度及第一資料結構中的至少一者,第二中繼資料包括對金鑰-值對的追加請求的新的最高追加索引、第二偏移、第二長度及第二資料結構中的至少一者,第二中繼資料也儲存在記憶體中的散列表中;及
確定金鑰的新的最高追加索引包括從散列表中的第二中繼資料確定金鑰的新的最高追加索引。
陳述136. 本發明概念的實施例包括根據陳述134所述的製品,所述非暫時性儲存媒體上儲存有進一步的指令,所述指令當由機器執行時,使得將與金鑰相關聯的第二中繼資料儲存在記憶體中的散列表中,第二中繼資料包括對金鑰-值對的追加請求的新的最高追加索引、第二偏移、第二長度及第二資料結構中的至少一者。
陳述137. 本發明概念的實施例包括根據陳述136所述的製品,其中將第二中繼資料儲存在記憶體中的散列表中包括從散列表中驅逐與第二金鑰相關聯的現有中繼資料。
陳述138. 本發明概念的實施例包括根據陳述137所述的製品,其中從散列表中驅逐與第二金鑰相關聯的現有中繼資料包括在散列表中選擇第二金鑰作為最近最少使用的金鑰。
陳述139. 本發明概念的實施例包括根據陳述136所述的製品,其中將第二中繼資料儲存在記憶體中的散列表中,第二中繼資料與所述金鑰相關聯,包括:
確定所述散列表不儲存與所述金鑰相關聯的所述第二中繼資料;及
因應於所述金鑰的所述最高追加索引,從所述KV-SSD存取所述第二中繼資料。
陳述140. 本發明概念的實施例包括根據陳述139所述的製品,其中確定所述金鑰的所述最高追加索引包括系統地請求與來自所述KV-SSD的金鑰相關聯的資料,直到確定出所述金鑰的所述新的最高追加索引。
陳述141. 本發明概念的實施例包括根據陳述140所述的製品,其中系統地請求與來自所述KV-SSD的金鑰相關聯的資料,直到確定出所述金鑰的所述新的最高追加索引包括:
確定所述金鑰的可能的最高追加索引;
將金鑰的可能的最高追加索引與金鑰組合,以產生測試金鑰;及
試圖存取與所述測試金鑰相關聯的所述資料。
陳述142. 本發明概念的實施例包括根據陳述141所述的製品,其中系統地請求與來自所述KV-SSD的金鑰相關聯的資料,直到確定出所述金鑰的所述最高追加索引還包括:
遞減所述金鑰的可能的最高追加索引,以產生可能的新追加索引;
將金鑰的可能的新追加索引與金鑰組合,以產生新測試金鑰;
試圖存取與新測試金鑰相關聯的資料;及
至少部分地基於KV-SSD對試圖存取與新測試金鑰相關聯的資料的回應,重複遞減金鑰的可能的最高追加索引,將金鑰的可能的新追加索引與金鑰組合,以及試圖存取所述資料,直到KV-SSD報告與新測試金鑰相關聯的資料的操作。
陳述143. 本發明概念的實施例包括根據陳述140所述的製品,其中系統地請求與來自所述KV-SSD的金鑰相關聯的資料,直到確定出所述金鑰的所述新的最高追加索引包括:
確定所述金鑰的可能的最高追加索引的範圍;
在所述金鑰的可能的最高追加索引的所述範圍的中間選擇中間追加索引;
將所述中間追加索引與所述金鑰組合以產生測試金鑰;
試圖存取與所述測試金鑰相關聯的所述資料;
至少部分地基於所述KV-SSD對試圖存取與所述測試金鑰相關聯的所述資料的回應,將所述金鑰的可能的最高追加索引的所述範圍縮小到前半範圍及後半範圍中的一者;及
重複選擇中間追加索引,將所述中間追加索引與所述金鑰組合,縮小所述金鑰的可能的最高追加索引的所述範圍,以及試圖存取與所述測試金鑰相關聯的所述資料,直到所述範圍包括單個可能的最高追加索引的操作。
陳述144. 本發明概念的實施例包括根據陳述139所述的製品,其中確定金鑰的新的最高追加索引包括從KV-SSD上的金鑰的索引物件存取金鑰的新的最高追加索引。
陳述145. 本發明概念的實施例包括根據陳述136所述的製品,所述非暫時性儲存媒體上儲存有進一步的指令,所述指令當由機器執行時,使得至少部分地基於金鑰被選擇以從散列表中驅逐,將新的最高追加索引儲存在KV-SSD上的金鑰的索引物件中。
陳述146. 本發明概念的實施例包括根據陳述134所述的製品,所述非暫時性儲存媒體上儲存有進一步的指令,所述指令當由機器執行時,使得將新的最高追加索引返回給應用。
陳述147. 本發明概念的實施例包括根據陳述146所述的製品,其中將新的最高追加索引返回給應用包括在因應於讀取請求將值返回給應用之前將新的最高追加索引返回給應用。
陳述148. 本發明概念的實施例包括根據陳述118所述的製品,所述非暫時性儲存媒體上儲存有進一步的指令,所述指令當由機器執行時,使得:
從所述應用接收刪除請求,以刪除在金鑰-值固態驅動器(KV-SSD)上作為金鑰-值對的與金鑰相關聯的值;
確定所述金鑰的基本索引;
將所述基本索引與所述金鑰組合以產生第一索引金鑰;
在所述KV-SSD上對所述第一索引金鑰實行第一刪除操作;
確定所述金鑰的至少一個追加索引;
將所述至少一個追加索引與所述金鑰組合,以產生至少一個第二索引金鑰;及
在所述KV-SSD上對所述至少一個第二索引金鑰實行至少一個第二刪除操作。
陳述149. 本發明概念的實施例包括根據陳述148所述的製品,所述非暫時性儲存媒體上儲存有進一步的指令,所述指令當由機器執行時,使得將第一刪除操作及所述至少一個第二刪除操作的刪除結果返回給應用。
陳述150. 本發明概念的實施例包括根據陳述148所述的製品,所述非暫時性儲存媒體上儲存有進一步的指令,所述指令當由機器執行時,使得:
在記憶體中的散列表中定位中繼資料,所述中繼資料與金鑰相關聯;及
從記憶體中的散列表中移除中繼資料。
陳述151. 本發明概念的實施例包括根據陳述148所述的製品,所述非暫時性儲存媒體上儲存有進一步的指令,所述指令當由機器執行時,使得:
識別儲存在KV-SSD上的金鑰的索引物件;及
從KV-SSD中刪除金鑰的索引物件。
陳述152. 本發明概念的實施例包括一種製品,所述製品包括非暫時性儲存媒體,所述非暫時性儲存媒體上儲存有指令,所述指令當由機器執行時,使得:
從應用接收追加請求,以將第二值追加到金鑰-值固態驅動器(KV-SSD)上與金鑰相關聯的值作為金鑰-值對,所述應用由處理器執行;
確定所述金鑰的最高追加索引;
遞增所述最高追加索引以產生新的最高追加索引;
將所述新的最高追加索引與所述金鑰組合以產生追加索引金鑰;及
在所述KV-SSD上實行第二儲存操作以將所述追加索引金鑰與所述第二值相關聯。
陳述153. 本發明概念的實施例包括根據陳述152所述的製品,所述非暫時性儲存媒體上儲存有進一步的指令,所述指令當由機器執行時,使得將第二儲存操作的追加結果返回給應用。
陳述154. 本發明概念的實施例包括根據陳述152所述的製品,其中:
所述KV-SSD儲存與所述金鑰相關聯的第一中繼資料,所述第一中繼資料包括對所述金鑰-值對的追加請求的最高追加索引、第一偏移、第一長度及第一資料結構中的至少一者;
所述方法還包括:
建立所述金鑰的第二中繼資料;及
將所述第二值與第二中繼資料組合以產生第二修改值;且
在所述KV-SSD上實行第二儲存操作以將所述追加索引金鑰與所述第二值相關聯包括在所述KV-SSD上實行所述第二儲存操作以將所述追加索引金鑰與所述第二修改值相關聯。
陳述155. 本發明概念的實施例包括根據陳述154所述的製品,其中第二中繼資料包括金鑰的新的最高追加索引。
陳述156. 本發明概念的實施例包括根據陳述155所述的製品,其中第二中繼資料還包括第二追加偏移及第二追加長度。
陳述157. 本發明概念的實施例包括根據陳述155所述的製品,其中第二中繼資料還包括對金鑰-值對的追加請求的第二資料結構。
陳述158. 本發明概念的實施例包括根據陳述155所述的製品,所述非暫時性儲存媒體上儲存有進一步的指令,所述指令當由機器執行時,使得將第二中繼資料儲存在記憶體中的散列表中,第二中繼資料與金鑰相關聯。
陳述159. 本發明概念的實施例包括根據陳述158所述的製品,其中將第二中繼資料儲存在記憶體中的散列表中包括從散列表中驅逐與第二金鑰相關聯的現有中繼資料。
陳述160. 本發明概念的實施例包括根據陳述159所述的製品,其中從散列表中驅逐與第二金鑰相關聯的現有中繼資料包括在散列表中選擇第二金鑰作為最近最少使用的金鑰。
陳述161. 本發明概念的實施例包括根據陳述158所述的製品,其中將第二中繼資料儲存在記憶體中的散列表中,第二中繼資料與所述金鑰相關聯,包括:
確定所述散列表不儲存與所述金鑰相關聯的所述第一中繼資料;
確定所述金鑰的所述最高追加索引;及
因應於所述金鑰的所述最高追加索引,從所述KV-SSD存取所述第一中繼資料。
陳述162. 本發明概念的實施例包括根據陳述161所述的製品,其中確定所述金鑰的所述最高追加索引包括系統地請求與來自所述KV-SSD的金鑰相關聯的資料,直到確定出所述金鑰的所述最高追加索引。
陳述163. 本發明概念的實施例包括根據陳述162所述的製品,其中系統地請求與來自所述KV-SSD的金鑰相關聯的資料,直到確定出所述金鑰的所述最高追加索引包括:
確定所述金鑰的可能的最高追加索引;
將金鑰的可能的最高追加索引與金鑰組合,以產生測試金鑰;及
試圖存取與所述測試金鑰相關聯的所述資料。
陳述164. 本發明概念的實施例包括根據陳述163所述的製品,其中系統地請求與來自所述KV-SSD的金鑰相關聯的資料,直到確定出所述金鑰的所述最高追加索引還包括:
遞減所述金鑰的可能的最高追加索引,以產生可能的新追加索引;
將金鑰的可能的新追加索引與金鑰組合,以產生新測試金鑰;
試圖存取與新測試金鑰相關聯的資料;及
至少部分地基於KV-SSD對試圖存取與新測試金鑰相關聯的資料的回應,重複遞減金鑰的可能的最高追加索引,將金鑰的可能的新追加索引與金鑰組合,以及試圖存取所述資料,直到KV-SSD報告與新測試金鑰相關聯的資料的操作。
陳述165. 本發明概念的實施例包括根據陳述162所述的製品,其中系統地請求與來自所述KV-SSD的金鑰相關聯的資料,直到確定出所述金鑰的所述最高追加索引包括:
確定所述金鑰的可能的最高追加索引的範圍;
在所述金鑰的可能的最高追加索引的所述範圍的中間選擇中間追加索引;
將所述中間追加索引與所述金鑰組合以產生測試金鑰;
試圖存取與所述測試金鑰相關聯的所述資料;
至少部分地基於所述KV-SSD對試圖存取與所述測試金鑰相關聯的所述資料的回應,將所述金鑰的可能的最高追加索引的所述範圍縮小到前半範圍及後半範圍中的一者;及
重複選擇中間追加索引,將所述中間追加索引與所述金鑰組合,縮小所述金鑰的可能的最高追加索引的所述範圍,以及試圖存取與所述測試金鑰相關聯的所述資料,直到所述範圍包括單個可能的最高追加索引的操作。
陳述166. 本發明概念的實施例包括根據陳述161所述的製品,其中確定金鑰的最高追加索引包括從KV-SSD上的金鑰的索引物件存取金鑰的最高追加索引。
陳述167. 本發明概念的實施例包括根據陳述158所述的製品,所述非暫時性儲存媒體上儲存有進一步的指令,所述指令當由機器執行時,使得至少部分地基於金鑰被選擇以從散列表中驅逐,將新的最高追加索引儲存在KV-SSD上的金鑰的索引物件中。
陳述168. 本發明概念的實施例包括一種製品,所述製品包括非暫時性儲存媒體,所述非暫時性儲存媒體上儲存有指令,所述指令當由機器執行時,使得:
從應用接收讀取請求,以從金鑰-值固態驅動器(KV-SSD)讀取與金鑰相關聯的值作為金鑰-值對,所述應用由處理器執行;
確定所述金鑰的基本索引;
確定所述金鑰的最高追加索引;
將從所述金鑰的基本索引到所述金鑰的最高追加索引的每個索引與所述金鑰組合,以產生至少兩個索引金鑰;
在所述KV-SSD上對所述至少兩個索引金鑰中的每一者實行讀取操作,以產生至少兩個讀取值;
將所述至少兩個讀取值組合以產生所述值;及
因應於讀取請求,將所述值返回給應用。
陳述169. 本發明概念的實施例包括根據陳述168所述的製品,其中:
KV-SSD儲存與金鑰相關聯的第一中繼資料及與金鑰相關聯的第二中繼資料,第一中繼資料包括對金鑰-值對的追加請求的第一追加索引、第一偏移、第一長度及第一資料結構中的至少一者,第二中繼資料包括對金鑰-值對的追加請求的最高追加索引、第二偏移、第二長度及第二資料結構中的至少一者,第二中繼資料也儲存在記憶體中的散列表中;及
確定金鑰的最高追加索引包括從散列表中的第二中繼資料確定金鑰的最高追加索引。
陳述170. 本發明概念的實施例包括根據陳述168所述的製品,所述非暫時性儲存媒體上儲存有進一步的指令,所述指令當由機器執行時,使得在記憶體中的散列表中儲存第二中繼資料,第二中繼資料包括對金鑰-值對的追加請求的最高追加索引、第二偏移、第二長度及第二資料結構中的至少一者。
陳述171. 本發明概念的實施例包括根據陳述170所述的製品,其中將第二中繼資料儲存在記憶體中的散列表中包括從散列表中驅逐與第二金鑰相關聯的現有中繼資料。
陳述172. 本發明概念的實施例包括根據陳述171所述的製品,其中從散列表中驅逐與第二金鑰相關聯的現有中繼資料包括在散列表中選擇第二金鑰作為最近最少使用的金鑰。
陳述173. 本發明概念的實施例包括根據陳述170所述的製品,其中將第二中繼資料儲存在記憶體中的散列表中,第二中繼資料與所述金鑰相關聯,包括:
確定所述散列表不儲存與所述金鑰相關聯的所述第二中繼資料;及
因應於所述金鑰的所述最高追加索引,從所述KV-SSD存取所述第二中繼資料。
陳述174. 本發明概念的實施例包括根據陳述173所述的製品,其中確定所述金鑰的所述最高追加索引包括系統地請求與來自所述KV-SSD的金鑰相關聯的資料,直到確定出所述金鑰的所述最高追加索引。
陳述175. 本發明概念的實施例包括根據陳述174所述的製品,其中系統地請求與來自所述KV-SSD的金鑰相關聯的資料,直到確定出所述金鑰的所述最高追加索引包括:
確定所述金鑰的可能的最高追加索引;
將金鑰的可能的最高追加索引與金鑰組合,以產生測試金鑰;及
試圖存取與所述測試金鑰相關聯的所述資料。
陳述176. 本發明概念的實施例包括根據陳述175所述的製品,其中系統地請求與來自所述KV-SSD的金鑰相關聯的資料,直到確定出所述金鑰的所述最高追加索引還包括:
遞減所述金鑰的可能的最高追加索引,以產生可能的新追加索引;
將金鑰的可能的新追加索引與金鑰組合,以產生新測試金鑰;
試圖存取與新測試金鑰相關聯的資料;及
至少部分地基於KV-SSD對試圖存取與新測試金鑰相關聯的資料的回應,重複遞減金鑰的可能的最高追加索引,將金鑰的可能的新追加索引與金鑰組合,以及試圖存取所述資料,直到KV-SSD報告與新測試金鑰相關聯的資料的操作。
陳述177. 本發明概念的實施例包括根據陳述174所述的製品,其中系統地請求與來自所述KV-SSD的金鑰相關聯的資料,直到確定出所述金鑰的所述最高追加索引包括:
確定所述金鑰的可能的最高追加索引的範圍;
在所述金鑰的可能的最高追加索引的所述範圍的中間選擇中間追加索引;
將所述中間追加索引與所述金鑰組合以產生測試金鑰;
試圖存取與所述測試金鑰相關聯的所述資料;
至少部分地基於所述KV-SSD對試圖存取與所述測試金鑰相關聯的所述資料的回應,將所述金鑰的可能的最高追加索引的所述範圍縮小到前半範圍及後半範圍中的一者;及
重複選擇中間追加索引,將所述中間追加索引與所述金鑰組合,縮小所述金鑰的可能的最高追加索引的所述範圍,以及試圖存取與所述測試金鑰相關聯的所述資料,直到所述範圍包括單個可能的最高追加索引的操作。
陳述178. 本發明概念的實施例包括根據陳述173所述的製品,其中確定金鑰的最高追加索引包括從KV-SSD上的金鑰的索引物件存取金鑰的最高追加索引。
陳述179. 本發明概念的實施例包括根據陳述170所述的製品,所述非暫時性儲存媒體上儲存有進一步的指令,所述指令當由機器執行時,使得至少部分地基於金鑰被選擇以從散列表中驅逐,將最高追加索引儲存在KV-SSD上的金鑰的索引物件中。
陳述180. 本發明概念的實施例包括根據陳述168所述的製品,所述非暫時性儲存媒體上儲存有進一步的指令,所述指令當由機器執行時,使得將最高追加索引返回給應用。
陳述181. 本發明概念的實施例包括根據陳述180所述的製品,其中將最高追加索引返回給應用包括在因應於讀取請求將值返回給應用之前將最高追加索引返回給應用。
陳述182. 本發明概念的實施例包括一種製品,所述製品包括非暫時性儲存媒體,所述非暫時性儲存媒體上儲存有指令,所述指令當由機器執行時,使得:
從應用接收刪除請求,以刪除在金鑰-值固態驅動器(KV-SSD)上作為金鑰-值對的與金鑰相關聯的值,所述應用由處理器執行;
確定所述金鑰的基本索引;
將所述基本索引與所述金鑰組合以產生第一索引金鑰;
在所述KV-SSD上對所述第一索引金鑰實行刪除操作;
確定所述金鑰的至少一個追加索引;
將所述至少一個追加索引與所述金鑰組合,以產生至少一個第二索引金鑰;及
在所述KV-SSD上對所述至少一個第二索引金鑰實行至少一個刪除操作。
陳述183. 本發明概念的實施例包括根據陳述182所述的製品,所述非暫時性儲存媒體上儲存有進一步的指令,所述指令當由機器執行時,使得將第一刪除操作及所述至少一個第二刪除操作的刪除結果返回給應用。
陳述184. 本發明概念的實施例包括根據陳述182所述的製品,所述非暫時性儲存媒體上儲存有進一步的指令,所述指令當由機器執行時,使得:
在記憶體中的散列表中定位中繼資料,所述中繼資料與金鑰相關聯;及
從記憶體中的散列表中移除中繼資料。
陳述185. 本發明概念的實施例包括根據陳述182所述的製品,所述非暫時性儲存媒體上儲存有進一步的指令,所述指令當由機器執行時,使得:
識別儲存在KV-SSD上的金鑰的索引物件;及
從KV-SSD中刪除金鑰的索引物件。
因此,考慮到本文所述的實施例的各種各樣的排列,此詳細說明及伴隨的材料僅旨在為說明性的,而不應被視為限制本發明概念的範圍。因此,本發明概念主張所有這樣的修改可處於以上權利要求書及其等效形式的範圍及精神內。
105:機器
110、330:處理器
115:作業系統
120:應用
125:金鑰-值固態驅動器/儲存裝置
130:記憶體
135:記憶體控制器
140:裝置驅動器
145-1、145-2、145-3:金鑰-值對
150-1、150-2、150-3:金鑰
155-1、155-2、155-3:值
160:金鑰-值虛擬化
165:散列表
170-1、170-2:中繼資料
175-1、175-2:年齡
205:時脈
210:網路連接件
215:匯流排
220:使用者介面
225:輸入/輸出引擎
305:主機介面邏輯
310:KV-SSD控制器
315-1、315-2、315-3、315-4、315-5、315-6、315-7、315-8:快閃記憶體晶片
320-1、320-2、320-3、320-4:通道
325:轉換層
405:寫入請求
410、415、430、510、515、525、530、610、620-1、625、630、710、715-1、715-2、720-1、720-2、725:操作
420-1、420-2、520:寫入操作
425-1、620-2:操作/結果
425-2:結果
505:追加請求
605:讀取請求
615-1:讀取操作/第一讀取請求
615-2:讀取操作
705:刪除請求
805:API
810:組合器軟體
815:執行軟體
820:結果軟體
825:中繼資料軟體
830:第二組合器軟體
835:散列表軟體
840:驅逐軟體
845:劃分軟體
850:索引確定軟體
905:索引
910:索引金鑰
1005:追加偏移
1010:追加長度
1015:追加搜索結構
1105:修改值
1305、1310、1315、1320、1325、1330、1340、1345、1350、1355、1360、1365、1370、1375、1380、1385、1405、1410、1415、1425、1430、1435、1440、1445、1450、1455、1505、1510、1515、1520、1525、1530、1535、1540、1545、1605、1610、1615、1625、1630、1635、1645、1650、1655、1660、1665、1670、1675、1680、1685、1705、1710、1715、1720、1725、1730、1735、1740、1745、1750、1755、1760、1770、1805、1810、1815、1820、1825、1830、1835、1905、1910、1915、1920、1925、1930、1940、1945、1950、2005、2010:方框
1420、1620、1640、1765:虛線
圖1示出根據本發明概念的實施例的機器,所述機器被設計成使用金鑰值虛擬化(Key Value Virtualization,KVV)層來支援對儲存在金鑰-值固態驅動器(Key-Value Solid State Drive,KV-SSD)中的值的追加操作。
圖2示出圖1的機器的附加細節。
圖3示出圖1的KV-SSD的細節。
圖4示出圖1的應用、圖1的KVV以及圖1的KV-SSD,其在圖1的KV-SSD上實行寫入操作。
圖5示出圖1的應用、圖1的KVV以及圖1的KV-SSD,其在圖1的KV-SSD上實行追加操作。
圖6示出圖1的應用、圖1的KVV以及圖1的KV-SSD,其在圖1的KV-SSD上實行讀取操作。
圖7示出圖1的應用、圖1的KVV以及圖1的KV-SSD,其在圖1的KV-SSD上實行刪除操作。
圖8示出圖1的KVV的細節。
圖9示出圖8的組合器軟體將金鑰與索引組合以產生索引金鑰。
圖10示出根據本發明概念的實施例的圖1的中繼資料的結構。
圖11示出圖8的第二組合器軟體將值與中繼資料組合以產生修改值。
圖12示出根據本發明概念的各種實施例,圖8的索引確定軟體可用來確定圖1的KV-SSD上的金鑰的最高追加索引的不同技術。
圖13A到圖13C示出根據本發明概念的實施例,圖1的KVV支持在圖1的KV-SSD上的圖4的寫入請求的示例性程式的流程圖。
圖14A到圖14B示出根據本發明概念的實施例的將金鑰的中繼資料儲存在圖1的散列表中的示例性程式的流程圖。
圖15A到圖15B示出根據本發明概念的實施例,圖1的KVV支持在圖1的KV-SSD上的圖5的追加請求的示例性程式的流程圖。
圖16A到圖16C示出根據本發明概念的實施例,圖1的KVV支持在圖1的KV-SSD上的圖6的讀取請求的示例性程式的流程圖。
圖17A到圖17C示出根據本發明概念的實施例,圖1的KVV支持在圖1的KV-SSD上的圖7的刪除請求的示例性程式的流程圖。
圖18A到圖18B示出根據本發明概念的實施例,圖1的KVV在圖1的KV-SSD上確定金鑰的最高追加索引的示例性程式的流程圖。
圖19A到圖19B示出根據本發明概念的另一實施例,圖1的KVV在圖1的KV-SSD上確定金鑰的最高追加索引的示例性程式的流程圖。
圖20示出根據本發明概念的再一實施例,圖1的KVV在圖1的KV-SSD上確定金鑰的最高追加索引的示例性程式的流程圖。
105:機器
110:處理器
115:作業系統
120:應用
125:金鑰-值固態驅動器/儲存裝置
130:記憶體
135:記憶體控制器
140:裝置驅動器
145-1、145-2、145-3:金鑰-值對
150-1、150-2、150-3:金鑰
155-1、155-2、155-3:值
160:金鑰-值虛擬化
165:散列表
170-1、170-2:中繼資料
175-1、175-2:年齡
Claims (20)
- 一種使用電路實現的軟體,包括: 應用程式化介面,從應用接收與金鑰-值固態驅動器的金鑰-值對相關的請求,所述金鑰-值對包括金鑰及值,所述應用由處理器執行; 組合器軟體,將所述金鑰與索引組合,以產生索引金鑰;及 執行軟體,使用所述索引金鑰及所述值在所述金鑰-值固態驅動器上執行操作。
- 如請求項1所述的使用電路實現的軟體,更包括產生所述金鑰的中繼資料的中繼資料軟體。
- 如請求項2所述的使用電路實現的軟體,更包括散列表軟體,所述散列表軟體使用記憶體中的散列表來儲存與所述金鑰相關聯的所述中繼資料。
- 如請求項1所述的使用電路實現的軟體,其中: 所述請求包括讀取請求;且 所述執行軟體能夠操作以在所述金鑰-值固態驅動器上讀取與多個索引金鑰相關聯的多個值,並將所述多個值組合以產生所述值。
- 如請求項1所述的使用電路實現的軟體,其中: 所述請求包括刪除請求;且 所述執行軟體能夠操作以刪除所述金鑰-值固態驅動器上的多個索引金鑰。
- 一種用於金鑰-值儲存的方法,包括: 從應用接收寫入請求,以將與金鑰相關聯的值儲存在金鑰-值固態驅動器上作為金鑰-值對,所述應用由處理器執行; 確定所述金鑰的基本索引; 將所述基本索引與所述金鑰組合以產生索引金鑰;及 在所述金鑰-值固態驅動器上實行儲存操作以將所述索引金鑰與所述值相關聯。
- 如請求項6所述的方法,更包括將所述儲存操作的寫入結果返回給所述應用。
- 如請求項6所述的方法,其中: 所述方法更包括: 建立所述金鑰的第一中繼資料;及 將所述值與所述第一中繼資料組合以產生第一修改值;且 在所述金鑰-值固態驅動器上實行儲存操作以將所述索引金鑰與所述值相關聯包括在所述金鑰-值固態驅動器上實行所述儲存操作以將所述索引金鑰與所述第一修改值相關聯。
- 如請求項8所述的方法,其中所述第一中繼資料包括所述金鑰的所述基本索引。
- 如請求項9所述的方法,更包括將所述第一中繼資料儲存在記憶體中的散列表中,所述第一中繼資料與所述金鑰相關聯。
- 如請求項6所述的方法,其中: 所述方法更包括,至少部分地基於所述值超過所述金鑰-值固態驅動器上的物件的最大大小,確定儲存所述值所需的物件的數量; 將所述基本索引與所述金鑰組合以產生索引金鑰包括將多個索引與所述金鑰組合以產生多個索引金鑰,其中所述多個索引金鑰至少與儲存所述值所需的物件的所述數量一樣大;且 在所述金鑰-值固態驅動器上實行儲存操作以將所述索引金鑰與所述值相關聯包括在所述金鑰-值固態驅動器上實行多個儲存操作以將所述多個索引金鑰中的每一者與所述值的一部分相關聯。
- 如請求項6所述的方法,更包括: 從所述應用接收追加請求以將第二值追加到所述金鑰-值固態驅動器上與所述金鑰相關聯的所述值; 確定所述金鑰的最高追加索引; 遞增所述最高追加索引以產生新的最高追加索引; 將所述新的最高追加索引與所述金鑰組合以產生追加索引金鑰;及 在所述金鑰-值固態驅動器上實行第二儲存操作以將所述追加索引金鑰與所述第二值相關聯。
- 一種用於金鑰-值儲存的方法,包括: 從應用接收追加請求,以將第二值追加到金鑰-值固態驅動器上與金鑰相關聯的值作為金鑰-值對,所述應用由處理器執行; 確定所述金鑰的最高追加索引; 遞增所述最高追加索引以產生新的最高追加索引; 將所述新的最高追加索引與所述金鑰組合以產生追加索引金鑰;及 在所述金鑰-值固態驅動器上實行第二儲存操作以將所述追加索引金鑰與所述第二值相關聯。
- 如請求項13所述的方法,更包括將所述第二儲存操作的追加結果返回給所述應用。
- 如請求項13所述的方法,其中: 所述金鑰-值固態驅動器儲存與所述金鑰相關聯的第一中繼資料,所述第一中繼資料包括對所述金鑰-值對的追加請求的所述最高追加索引、第一偏移、第一長度及第一資料結構中的至少一者; 所述方法更包括: 建立所述金鑰的第二中繼資料;及 將所述第二值與所述第二中繼資料組合以產生第二修改值;且 在所述金鑰-值固態驅動器上實行第二儲存操作以將所述追加索引金鑰與所述第二值相關聯包括在所述金鑰-值固態驅動器上實行所述第二儲存操作以將所述追加索引金鑰與所述第二修改值相關聯。
- 如請求項15所述的方法,其中所述第二中繼資料包括所述金鑰的所述新的最高追加索引。
- 如請求項16所述的方法,更包括將所述第二中繼資料儲存在記憶體中的散列表中,所述第二中繼資料與所述金鑰相關聯。
- 如請求項17所述的方法,其中將所述第二中繼資料儲存在記憶體中的散列表中,所述第二中繼資料與所述金鑰相關聯,包括: 確定所述散列表不儲存與所述金鑰相關聯的所述第一中繼資料; 確定所述金鑰的所述最高追加索引;及 因應於所述金鑰的所述最高追加索引,從所述金鑰-值固態驅動器存取所述第一中繼資料。
- 如請求項18所述的方法,其中確定所述金鑰的所述最高追加索引包括系統地請求與來自所述金鑰-值固態驅動器的金鑰相關聯的資料,直到確定出所述金鑰的所述最高追加索引。
- 如請求項19所述的方法,其中系統地請求與來自所述金鑰-值固態驅動器的金鑰相關聯的資料,直到確定出所述金鑰的所述最高追加索引包括: 確定所述金鑰的可能的最高追加索引的範圍; 在所述金鑰的可能的最高追加索引的所述範圍的中間選擇中間追加索引; 將所述中間追加索引與所述金鑰組合以產生測試金鑰; 試圖存取與所述測試金鑰相關聯的所述資料; 至少部分地基於所述金鑰-值固態驅動器對所述試圖存取與所述測試金鑰相關聯的所述資料的回應,將所述金鑰的可能的最高追加索引的所述範圍縮小到前半範圍及後半範圍中的一者;及 重複選擇中間追加索引,將所述中間追加索引與所述金鑰組合,縮小所述金鑰的可能的最高追加索引的所述範圍,以及試圖存取與所述測試金鑰相關聯的所述資料,直到所述範圍包括單個可能的最高追加索引的操作。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201962836065P | 2019-04-18 | 2019-04-18 | |
US62/836,065 | 2019-04-18 | ||
US16/440,978 | 2019-06-13 | ||
US16/440,978 US11580162B2 (en) | 2019-04-18 | 2019-06-13 | Key value append |
Publications (2)
Publication Number | Publication Date |
---|---|
TW202040406A true TW202040406A (zh) | 2020-11-01 |
TWI828901B TWI828901B (zh) | 2024-01-11 |
Family
ID=72832531
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW109112565A TWI828901B (zh) | 2019-04-18 | 2020-04-15 | 使用電路實現的軟體和用於金鑰值儲存的方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US11580162B2 (zh) |
KR (1) | KR20200122994A (zh) |
CN (1) | CN111832065A (zh) |
TW (1) | TWI828901B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20210004701A (ko) * | 2019-07-05 | 2021-01-13 | 삼성전자주식회사 | 키-밸류 기반으로 데이터를 저장하는 스토리지 장치 및 이의 동작 방법 |
US20210089403A1 (en) * | 2019-09-20 | 2021-03-25 | Samsung Electronics Co., Ltd. | Metadata table management scheme for database consistency |
FR3103664B1 (fr) * | 2019-11-27 | 2023-04-07 | Amadeus Sas | Système de stockage distribué pour stocker des données contextuelles |
US11287994B2 (en) * | 2019-12-13 | 2022-03-29 | Samsung Electronics Co., Ltd. | Native key-value storage enabled distributed storage system |
US11693772B2 (en) * | 2020-01-08 | 2023-07-04 | Samsung Electronics Co., Ltd. | System and method of using persistent memory to support small-sized data append for object store |
CN113094372A (zh) * | 2021-04-16 | 2021-07-09 | 三星(中国)半导体有限公司 | 数据存取方法、数据存取控制装置及数据存取系统 |
US20230017732A1 (en) | 2021-07-16 | 2023-01-19 | Samsung Electronics Co., Ltd. | Key packing for flash key value store operations |
US11853605B2 (en) * | 2021-09-17 | 2023-12-26 | Micron Technology, Inc. | Database persistence |
CN113987589B (zh) * | 2021-12-27 | 2022-03-18 | 飞天诚信科技股份有限公司 | 一种处理数据的方法、装置、计算机可读存储介质及装置 |
Family Cites Families (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6061690A (en) * | 1997-10-31 | 2000-05-09 | Oracle Corporation | Apparatus and method for storage of object collections in a database system |
US8924663B2 (en) | 2010-09-09 | 2014-12-30 | Nec Corporation | Storage system, computer-readable medium, and data management method having a duplicate storage elimination function |
JP5524144B2 (ja) | 2011-08-08 | 2014-06-18 | 株式会社東芝 | key−valueストア方式を有するメモリシステム |
US8700683B2 (en) | 2011-10-24 | 2014-04-15 | Nokia Corporation | Method and apparatus for providing a key-value based storage interface |
JP5597666B2 (ja) * | 2012-03-26 | 2014-10-01 | 株式会社東芝 | 半導体記憶装置、情報処理システムおよび制御方法 |
US9075710B2 (en) * | 2012-04-17 | 2015-07-07 | SanDisk Technologies, Inc. | Non-volatile key-value store |
KR102044023B1 (ko) | 2013-03-14 | 2019-12-02 | 삼성전자주식회사 | 키 값 기반 데이터 스토리지 시스템 및 이의 운용 방법 |
JP6025149B2 (ja) | 2013-11-06 | 2016-11-16 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | データを管理するシステムおよび方法 |
CN105335411A (zh) | 2014-07-31 | 2016-02-17 | 国际商业机器公司 | 用于数据处理的方法和系统 |
US9438426B2 (en) | 2014-10-03 | 2016-09-06 | Seagate Technology Llc | Key-value data storage device with hybrid architecture |
US9727485B1 (en) | 2014-11-24 | 2017-08-08 | Pure Storage, Inc. | Metadata rewrite and flatten optimization |
US10083193B2 (en) | 2015-01-09 | 2018-09-25 | International Business Machines Corporation | Efficient remote pointer sharing for enhanced access to key-value stores |
US10303673B2 (en) | 2015-05-11 | 2019-05-28 | Apple Inc. | Hierarchical data storage |
US20160350302A1 (en) | 2015-05-27 | 2016-12-01 | Hedvig, Inc. | Dynamically splitting a range of a node in a distributed hash table |
US9927984B2 (en) * | 2015-10-14 | 2018-03-27 | Samsung Electronics Co., Ltd. | Electronic system with interface control mechanism and method of operation thereof |
US20170139594A1 (en) | 2015-11-17 | 2017-05-18 | Samsung Electronics Co., Ltd. | Key-value integrated translation layer |
CN105550345B (zh) | 2015-12-25 | 2019-03-26 | 百度在线网络技术(北京)有限公司 | 文件操作方法和装置 |
US10108547B2 (en) | 2016-01-06 | 2018-10-23 | Netapp, Inc. | High performance and memory efficient metadata caching |
US10073732B2 (en) | 2016-03-04 | 2018-09-11 | Samsung Electronics Co., Ltd. | Object storage system managing error-correction-code-related data in key-value mapping information |
US10169387B1 (en) | 2016-07-28 | 2019-01-01 | EMC IP Holding Company LLC | Self-balancing tree data structure compression |
US10795871B2 (en) | 2016-09-26 | 2020-10-06 | Vmware, Inc. | Key-value stores implemented using fragmented log-structured merge trees |
CN108614668B (zh) * | 2016-12-12 | 2022-12-06 | 北京忆恒创源科技股份有限公司 | 基于kv模型的数据访问方法与固态存储设备 |
US11386065B2 (en) | 2017-01-31 | 2022-07-12 | Salesforce.Com, Inc. | Database concurrency control through hash-bucket latching |
US11030155B2 (en) * | 2017-04-26 | 2021-06-08 | Samsung Electronics Co., Ltd. | Key value file system |
US11188241B2 (en) | 2017-07-07 | 2021-11-30 | Sap Se | Hybrid key-value store |
DE112017007865T5 (de) * | 2017-08-16 | 2020-05-14 | Intel Corporation | Netzgebundener shuffle-datenspeicher |
US10860249B2 (en) * | 2017-12-25 | 2020-12-08 | Pliops Ltd. | Solid state disk (SSD) controller and database |
US10831734B2 (en) | 2018-05-07 | 2020-11-10 | Intel Corporation | Update-insert for key-value storage interface |
-
2019
- 2019-06-13 US US16/440,978 patent/US11580162B2/en active Active
-
2020
- 2020-03-17 KR KR1020200032422A patent/KR20200122994A/ko unknown
- 2020-04-15 TW TW109112565A patent/TWI828901B/zh active
- 2020-04-17 CN CN202010307199.8A patent/CN111832065A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
US20200334292A1 (en) | 2020-10-22 |
CN111832065A (zh) | 2020-10-27 |
US11580162B2 (en) | 2023-02-14 |
KR20200122994A (ko) | 2020-10-28 |
TWI828901B (zh) | 2024-01-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TW202040406A (zh) | 使用電路實現的軟體和用於金鑰—值儲存的方法 | |
US11989160B2 (en) | Heuristic interface for enabling a computer device to utilize data property-based data placement inside a nonvolatile memory device | |
JP6971542B2 (ja) | 不揮発性メモリ装置におけるデータ特性基盤データ配置を活用するためのインターフェイス提供方法及びシステム並びに不揮発性メモリ装置とそのデータ特性基盤データ配置方法 | |
JP6553566B2 (ja) | メモリシステムおよび制御方法 | |
US20230409473A1 (en) | Namespace change propagation in non-volatile memory devices | |
CN107003935B (zh) | 用于优化数据库去重的装置、方法和计算机介质 | |
US8086810B2 (en) | Rapid defragmentation of storage volumes | |
KR102440128B1 (ko) | 통합된 객체 인터페이스를 위한 메모리 관리 장치, 시스템 및 그 방법 | |
US8478933B2 (en) | Systems and methods for performing deduplicated data processing on tape | |
WO2022063059A1 (zh) | 键值存储系统的数据管理方法及其装置 | |
US20140280392A1 (en) | File system operation on multi-tiered volume | |
KR20220139784A (ko) | 객체 저장 방법 및 이를 이용하는 분산 객체 스토리지와 시스템 | |
US9430492B1 (en) | Efficient scavenging of data and metadata file system blocks | |
KR20210092361A (ko) | 스토리지 장치 및 그것의 동작 방법 | |
US20180307440A1 (en) | Storage control apparatus and storage control method | |
US11016676B2 (en) | Spot coalescing of distributed data concurrent with storage I/O operations | |
US11531483B2 (en) | Direct data placement | |
KR20220006458A (ko) | 키-밸류 저장 장치 및 키 분류 방법 | |
JP2013088920A (ja) | 計算機システム及びデータ管理方法 | |
US20160335198A1 (en) | Methods and system for maintaining an indirection system for a mass storage device | |
US12001703B2 (en) | Data processing method and storage device | |
US20220269431A1 (en) | Data processing method and storage device | |
TWI475419B (zh) | 用於在儲存系統上存取檔案的方法和系統 | |
US20230409530A1 (en) | Grouping data to conserve storage capacity | |
US10671324B2 (en) | Locating grains in storage using grain table to grain-range table compression |