TW201935242A - 縮減機率篩選查詢延時 - Google Patents
縮減機率篩選查詢延時 Download PDFInfo
- Publication number
- TW201935242A TW201935242A TW108117591A TW108117591A TW201935242A TW 201935242 A TW201935242 A TW 201935242A TW 108117591 A TW108117591 A TW 108117591A TW 108117591 A TW108117591 A TW 108117591A TW 201935242 A TW201935242 A TW 201935242A
- Authority
- TW
- Taiwan
- Prior art keywords
- query
- probability
- screening
- cached
- page
- Prior art date
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2462—Approximate or statistical queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0864—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using pseudo-associative means, e.g. set-associative or hashing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0866—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0893—Caches characterised by their organisation or structure
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1009—Address translation using page tables, e.g. page table 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/10—File systems; File servers
- G06F16/13—File access structures, e.g. distributed indices
- G06F16/134—Distributed indices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/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/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
-
- 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
- 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
- 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
- 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/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/067—Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
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)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Probability & Statistics with Applications (AREA)
- Human Computer Interaction (AREA)
- Fuzzy Systems (AREA)
- Mathematical Physics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Surgical Instruments (AREA)
- Ultra Sonic Daignosis Equipment (AREA)
Abstract
本文中描述用於縮減機率篩選查詢延時之系統及技術。可自一呼叫者接收對儲存於一第一媒體上之一機率篩選之一查詢。回應於接收該查詢,可獲得儲存於一第二媒體上之該機率篩選之快取片段。在此,該機率篩選提供在判定一元素不在一集合中時係結論性之一集合成員資格判定。可對該等快取片段執行該查詢,從而導致一部分查詢結果。在該呼叫者不介入之情況下,可起始該機率篩選之剩餘資料自該第一媒體至該第二媒體之擷取。在此,該剩餘資料對應於該查詢及不在該等快取片段中之資料。接著可將該部分查詢結果傳回至該呼叫者。
Description
本文中所描述之實施例大體上係關於區塊器件(例如,磁碟)操作且更具體言之係關於縮減機率篩選查詢延時。
電腦儲存器件包括各種儲存技術,其等可劃分為區塊可定址「磁碟」-諸如基於NAND或其他非揮發性記憶體(NVM)技術之固態硬碟(SSD)、硬碟機(HDD)、光碟(CD)及類似者-及位元組可定址「記憶體」-諸如隨機存取記憶體(DRAM)、靜態隨機存取記憶體(SRAM)、相變記憶體(PCM)、電阻式隨機存取記憶體(RRAM)或3D交叉點及類似者。通常,資料在由一運算系統之一處理器使用之前自磁碟移動至記憶體。針對儲存於一檔案系統中之資料,該檔案系統或一作業系統通常管理此移動,從而導致記憶體中之一檔案系統快取反映儲存於磁碟上之資料之部分。
機率篩選通常在資料儲存系統中用來有效地判定一資料項是否儲存於一資料結構中,而無須例如自磁碟載入整個資料結構。例如,在一索引鍵值資料儲存系統中,可使用一機率篩選來判定一索引鍵儲存區中之一索引鍵之可能存在,而無須載入及搜尋該索引鍵儲存區。機率篩選通常係高速且節省空間之資料結構,其等支援具有單側錯誤之集合成員資格測試。此等篩選可確立一給定集合項目肯定不在項目集合中表示。若篩選未確立該項目肯定不在該集合中,則該項目可或可不在該集合中。換言之,否定回應(例如,不在集合中)係結論性的,而肯定回應(例如,可在集合中)引發一假肯定機率(FPP)。通常,此單側錯誤之權衡係節省空間的。例如,一些機率篩選(諸如布穀鳥(Cuckoo)篩選及布隆(Bloom)篩選)每項目使用近似7個位元來提供3%之FPP,而無關於項目之大小。
存在各種機率篩選,包含布穀鳥篩選及布隆篩選,其等之操作在此出於闡釋性目的而提供。布穀鳥篩選藉由將一索引鍵之一f位元指紋插入至兩個貯體(bucket)中之一者中來操作。第一貯體係該索引鍵之一雜湊且第二貯體藉由雜湊該指紋而導出。若兩個貯體已滿,則移除一既有指紋以騰出空間,且接著將彼指紋移動至其自身之替代貯體。定位一索引鍵涉及針對一索引鍵檢測貯體以判定指紋是否存在。基本布隆篩選包括M
個位元(初始化為一空值,諸如零)及K
個不同雜湊函數之一陣列(例如,一布隆篩選陣列),各雜湊函數將一集合元素映射至M
個位元之一者,從而導致布隆篩選中之集合元素之一K
位元表示。當將一元素新增至該篩選時,將對應於該陣列中之雜湊函數之位元之各者設定為1。為判定元素之存在(例如,執行一布隆篩選查詢或一布隆查詢),應用相同雜湊函數以針對所查詢元素判定陣列中之對應位置。若每個位置具有值1而非0,則該索引鍵可在該集合中。若一個位置具有值0,則該索引鍵不在該集合中。
在一項實施例中,一種用於縮減機率篩選查詢延時之系統包括用於以下各者之處理電路系統:自一呼叫者接收對儲存於一第一媒體上之一機率篩選之一查詢;回應於接收該查詢,獲得儲存於一第二媒體上之該機率篩選之快取片段,其中該等快取片段小於儲存於該第一媒體上之該機率篩選之全部,其中該機率篩選提供在判定一元素不在一集合中時係結論性之一集合成員資格判定;對該等快取片段執行該查詢,從而導致一部分查詢結果;在該呼叫者不介入之情況下,起始該機率篩選之剩餘資料自該第一媒體至該第二媒體之擷取,其中該剩餘資料對應於該查詢及不在該等快取片段中之資料;及將該部分查詢結果傳回至該呼叫者。
在另一實施例中,一種用於縮減機率篩選查詢延時之方法包括:自一呼叫者接收對儲存於一第一媒體上之一機率篩選之一查詢;回應於接收該查詢,獲得儲存於一第二媒體上之該機率篩選之快取片段,其中該等快取片段小於儲存於該第一媒體上之該機率篩選之全部,其中該機率篩選提供在判定一元素不在一集合中時係結論性之一集合成員資格判定;對該等快取片段執行該查詢,從而導致一部分查詢結果;在該呼叫者不介入之情況下,起始該機率篩選之剩餘資料自該第一媒體至該第二媒體之擷取,其中該剩餘資料對應於該查詢及不在該等快取片段中之資料;及將該部分查詢結果傳回至該呼叫者。
在又一實施例中,一種包含用於縮減機率篩選查詢延時之指令之機器可讀媒體,該等指令在由處理電路系統執行時引起該處理電路系統執行包括以下各者之操作:自一呼叫者接收對儲存於一第一媒體上之一機率篩選之一查詢;回應於接收該查詢,獲得儲存於一第二媒體上之該機率篩選之快取片段,其中該等快取片段小於儲存於該第一媒體上之該機率篩選之全部,其中該機率篩選提供在判定一元素不在一集合中時係結論性之一集合成員資格判定;對該等快取片段執行該查詢,從而導致一部分查詢結果;在該呼叫者不介入之情況下,起始該機率篩選之剩餘資料自該第一媒體至該第二媒體之擷取,其中該剩餘資料對應於該查詢及不在該等快取片段中之資料;及將該部分查詢結果傳回至該呼叫者。
如上所述,機率篩選通常用來在執行一昂貴操作(諸如將資料自磁碟載入至記憶體)之前測試集合成員資格。機率篩選係可儲存於媒體上之資料結構,且在一些資料集中,自身可散佈於若干可載入單元(諸如頁、區塊等)上。例如,一機率篩選可部分地快取於記憶體中,而剩餘部分常駐於磁碟上。因此,為使用篩選,自磁碟擷取剩餘部分且將其儲存於待查詢之記憶體中。此操作在查詢機率篩選時引入額外延時。
本發明之實施方案描述一種用來縮減機率篩選查詢延時之技術。此可經由一檢查及提取技術來達成,藉此回應於一篩選查詢,對照查詢約束檢查當前快取資料(例如,記憶體中之篩選之部分)且可自磁碟有條件地擷取剩餘資料並將其載入至記憶體中。載入剩餘資料之條件包含快取資料是否提供查詢之一明確應答。例如,在檢查陣列中之每個位元之前,布隆查詢可被「短路」或暫停,因為任何經檢查之空(例如,一零)位元提供正被測試之元素不在集合中之一明確應答。因此,若篩選之任何快取部分指示否定集合成員資格,則無需自磁碟載入篩選之剩餘部分。若快取篩選部分未提供一明確應答(例如,全部對應位元具有一非空值),則自磁碟載入篩選之剩餘部分,而將部分檢查之結果(例如,快取資料部分)傳回至呼叫者。因此,當呼叫應用程式處理部分篩選查詢結果時,篩選之磁碟至記憶體載入已開始且可準備好在處理部分查詢結果時供呼叫應用程式使用。此序列藉由以下者來縮減篩選查詢中之延時:在一些情況中提供查詢之應答而未自磁碟載入整個篩選;及在其他情況中允許處理應用程式調查篩選之一子集。為簡化論述,使用一標準布隆篩選來繪示所描述技術,儘管該等技術可用於滿足上文所論述之「短路」原理之其他機率篩選或資料結構。
圖1係根據一實施例之用於縮減機率篩選查詢延時之一系統100之一實例之一方塊圖。如所繪示,系統100包含一第一媒體115 (例如,具有一KVS樹及對應索引鍵值集檔案120之一磁碟)、一第二媒體110 (例如,具有索引鍵值集檔案120之快取片段125之記憶體)及處理電路系統105 (例如,處理器)。處理電路系統105、第二媒體110及第一媒體115皆在電子硬體中實施。如所繪示,快取片段125之交叉陰影區塊對應於機率篩選130中正被查詢之片段。在此,片段對應於劃分檔案120或篩選130,諸如可能在檔案被劃分為區塊、記憶體頁(例如,頁)或某一其他分區時發生。
處理電路系統105經配置(例如,經硬接線或由軟體組態)以自一呼叫者接收對儲存於一第一媒體115上之機率篩選130之一查詢。在此,呼叫者係一應用程式、組件或能夠提出請求之其他實體。例如,處理電路系統105可實施管理磁碟存取之一作業系統(OS)且呼叫者係向OS提出一請求之一應用程式。因此,一使用者空間(例如,而非內核空間)程序可經由一OS呼叫發起查詢。
在一實例中,查詢包含機率篩選130之片段識別符。在此,片段識別符指定機率篩選130之全部片段中之哪些片段與查詢相關。若一片段可提供查詢之一結果,則其與查詢相關。例如,機率篩選130可為用於跨越四個虛擬記憶體(VM)頁之一索引鍵值集之一布隆篩選,若布隆篩選陣列中針對對布隆篩選之一查詢中之一索引鍵之K
個雜湊之對應貯體係在第一及第三VM頁中,則第一及第三VM頁係布隆篩選之用於索引鍵之查詢之相關片段。因為查詢實體(諸如一檔案系統、OS、程式等)可執行布隆雜湊,故彼實體亦可在進行呼叫時針對查詢提供所關注片段。在一實例中,片段識別符係一檔案120中之位元組位移。在一實例中,查詢包含檔案120之一檔案識別符。
在一實例中,檔案120係一索引鍵值集檔案。一索引鍵值集(例如,kvset)係用來將索引鍵值項目保存於一KVS樹中之一資料結構。KVS樹係一樹資料結構,包含基於一索引鍵之一預定導出而非該樹之內容在一父節點與一子節點之間具有連接之節點。節點包含索引鍵值集之時間定序序列,亦稱為KVS。索引鍵值集含有一索引鍵排序結構中之索引鍵值對。一旦被寫入,KVS樹中之索引鍵值集便係不可變的。KVS樹達成WB樹之寫入處理量,同時藉由維持節點中之索引鍵值集來改良WB樹搜尋,索引鍵值集包含排序索引鍵以及索引鍵度量,諸如布隆篩選。因此,在此實例中,檔案120包含可包含篩選130之至少一個索引鍵值集。
在一實例中,索引鍵值集檔案包含一個以上KVS樹(例如,來自一個以上KVS樹(不必係全部KVS樹)之組件,諸如後設資料、索引鍵值集等)。在一實例中,機率篩選130應用於索引鍵值集檔案中之單個KVS樹。將多個索引鍵值集組合成單個索引鍵值集檔案或將其他資料結構組合成單個檔案可利用一環境之特性。例如,若一作業系統對檔案管理、檔案載入等強加顯著額外耗用,則可更有效地將若干實體組合成一檔案以降低此等額外耗用。
在一實例中,查詢包含一組測試參數。在本文中,測試參數指示查詢將對篩選130測試什麼。例如,測試參數可為一布隆篩選中之索引,其中可找到一索引鍵之位元。在一實例中,測試參數包含一位置(例如,在篩選130中)。在一實例中,該位置係一片段中之一位元位移。
處理電路系統105經配置以回應於接收查詢而獲得儲存於一第二媒體110上之機率篩選130之快取片段125。在此,快取片段125小於儲存於第一媒體115 (例如,檔案120)上之機率篩選130之全部。因此,為回應於查詢而獲得快取片段125,處理電路系統105可自第二媒體110讀取快取片段125。在一實例中,機率篩選130之片段係基於第二媒體110中之機率篩選130之一表示。因此,雖然檔案120可分段成由第一媒體115 (例如,磁碟)定義之區塊,但在第二媒體110 (例如,記憶體)中,此等片段被定義為記憶體之頁大小。在一實例中,片段具有一均勻大小。在一實例中,均勻大小係一記憶體頁大小。在一實例中,片段識別符係頁識別符。在一實例中,片段識別符係記憶體位址。在其中查詢包含片段識別符之一實例中,獲得快取片段125包含獲得第二媒體110中之機率篩選對應於片段識別符之片段。
處理電路系統105經配置以對快取片段125執行查詢,從而導致一部分查詢結果。在其中查詢包含測試參數之一實例中,部分查詢結果包含對快取片段125執行之測試參數之一子集之結果。在其中測試參數包含一或多個位置(例如,一布隆篩選陣列中之索引)之一實例中,測試參數之子集包含各位置之一位元值(例如,待測試)。在一實例中,部分查詢結果包含與查詢相關且不在快取片段125中之片段識別符之一清單。
處理電路系統105經配置以在呼叫者不介入之情況下起始機率篩選130之剩餘資料自第一媒體115至第二媒體110之擷取同時對快取片段125執行查詢。在此,剩餘資料對應於查詢及不在快取片段125中之資料(例如,不在快取片段125中之篩選130之部分)。因此,呼叫者無須提出單獨請求以自檔案120載入剩餘片段。減少由呼叫者進行之呼叫之次數通常導致系統100之額外耗用減少及延時縮減。在一實例中,處理電路系統105經配置以識別部分查詢結果中之機率篩選130之一停止條件且避免剩餘資料之擷取。此實例繪示「短路」操作,其中查詢可藉由部分查詢結果應答。例如,在具有包含零(例如,空)索引鍵索引之一快取片段125之一布隆篩選中,無需載入剩餘資料,因為該索引鍵不在由該布隆篩選表示之集合中。在一實例中,機率篩選係一布隆篩選、一計數布隆篩選或一布穀鳥篩選之至少一者。
處理電路系統105經配置以將部分查詢結果傳回至呼叫者。部分查詢結果表示對篩選130之部分執行查詢,並且可能識別自查詢執行省略篩選130之哪些片段,因為其等不在第二媒體110中。因此,相對於機率查詢部分地滿足呼叫者之請求,且亦自磁碟載入查詢之剩餘片段。在其中由呼叫者提供測試參數之一實例中,部分查詢結果包含對快取片段125執行之測試參數之一子集之結果。在一實例中,部分查詢結果包含與查詢相關且不在快取片段125中之片段識別符之一清單。
在一實例中,處理電路系統105經配置以例如由呼叫者-接收部分查詢結果,針對由機率篩選130定義之一停止條件(例如,被定義為在真時暫停搜尋之一條件)搜尋測試參數之子集,且在測試參數之子集中未找到該停止條件時在片段識別符之片段內搜尋該停止條件(例如,以停止搜尋)。在此,片段由於起始機率篩選之剩餘資料之擷取而常駐於第二媒體110中。即,已完成剩餘資料之起始擷取-例如,在呼叫者正搜尋部分查詢結果以判定篩選130是否指示所查詢索引鍵之可能存在-將剩餘資料放入第二媒體中時。因此,查詢之單個結果對呼叫者提供快取片段125上之篩選查詢之結果以及此時應已自第一媒體115載入至第二媒體110從而允許呼叫者執行其餘篩選查詢之剩餘片段之識別兩者。
本文中所描述之檢查及提取技術具有優於傳統技術之若干優點,傳統技術測試是否快取檔案頁(例如,Linux fincore)或載入非快取檔案頁(例如,Linux fadvise)。例如,本文中所描述之檢查及提取技術可獲得頁常駐資訊-例如,快取頁中之所關注位元之值-且可在單次系統呼叫中起始非快取頁之後台載入。通常,諸如fincore或fadvise之技術使用至少三次系統呼叫來實現相同任務,從而大大地降低效能。例如,為完成檢查及提取,傳統fincore及fadvise使用來自快取頁之一或多次檔案讀取且最終使用非快取頁之fadvise呼叫。此外,本文中所描述之檢查及提取技術可在一檔案中之非連續頁上操作。通常,諸如fincore及fadvise之技術僅在一檔案中之連續頁上操作。再者,既有方法使用各在非連續頁上操作之多次系統呼叫,從而大大地降低效能。另外,本文中所描述之檢查及提取技術可指定將引用檔案頁之順序。此提供最佳化頁載入之一機會。此資訊並非藉由限於「隨機」及「循序」之既有方法(例如fadvise)傳達。
上述優點與基於檔案之存取技術相關,但本文中所描述之檢查及提取技術亦具有優於基於記憶體之檔案存取之優點(例如,當一檔案經記憶體映射時)。在此內容背景中,既有技術(諸如Linux mincore及Linux madvise)處於劣勢。例如,本文中所描述之檢查及提取技術可獲得頁常駐資訊且可在單次系統呼叫中起始非快取頁之後台載入。再者,既有技術使用至少兩次系統呼叫來完成相同任務(例如,呼叫mincore且接著呼叫madvise)。此外,與通常在一檔案中之連續頁上操作之其他技術(例如,mincore及madvise)相比,檢查及提取可在一檔案中之非連續頁上操作。再者,既有技術使用各在非連續頁上操作之多次系統呼叫,此再次大大地降低效能。另外,檢查及提取可指定將引用檔案頁之順序,此提供最佳化頁載入之機會。此資訊通常並非藉由限於「隨機」及「訊息」之既有技術(諸如madvise)傳達。
為在一真實世界實例中繪示本技術,在以下實例中使用具有支援KVS樹之一Linux虛擬檔案系統(VFS)之一Linux作業系統,儘管可類似地修改其他作業系統或檔案系統。一KVS樹中之各索引鍵值集可包含一布隆篩選以追蹤與儲存於彼索引鍵值集中之項目(例如,索引鍵值對或標記刪除,其中標記刪除指示對應於一索引鍵之一值被刪除)相關聯之索引鍵。可實施將儲存於磁碟上之索引鍵值集作為唯讀檔案揭露給使用者空間程序及Linux內核之一Linux VFS。此一索引鍵值集檔案中之一布隆篩選包括開始於一已知位移(以位元組為單位)且具有一已知大小(以位元組為單位)之一連續位元組序列。根據標準檔案操作,自一索引鍵值集檔案讀取之資料以各係一虛擬記憶體(VM)頁之大小之單位處於標準Linux頁快取區中(例如,在記憶體中)。各此單位開始於索引鍵值集檔案中之一零基位移(其係VM頁大小之倍數)。例如,給定4096個位元組之VM頁大小,一索引鍵值集檔案中之頁開始於位移0、4096、8192等。在一實例中,如同其他檔案,一使用者空間程序可視情況使用標準Linux mmap系統呼叫將索引鍵值檔案記憶體映射至程序之虛擬位址空間中。在此,使用者空間程序可經由記憶體讀取命令存取索引鍵值集資料(包含布隆篩選),且作業系統(或VM管理器)管理底層位元之磁碟至記憶體載入。
圖2至圖4呈現使用以下內容背景描述之各項實例。以下定義假定一索引鍵值集檔案F中之一布隆篩選B及將一索引鍵K映射至B中之一位元之一雜湊函數H:
BF_FILE_OFFSET_BYTE(F, B)係布隆篩選B之第一位元組之索引鍵值集檔案F中之位元組位移。
BF_SIZE_BYTE(F, B)係索引鍵值集檔案F中之布隆篩選B之大小(以位元組為單位)。
BF_OFFSET_BIT(B, H, K)係藉由針對索引鍵K執行雜湊函數H來選擇之布隆篩選B中之位元位移。
VMPAGE_SIZE_BYTE(F)係索引鍵值集檔案F中之頁之大小(以位元組為單位)。
如本文中所描述,索引鍵值集檔案F中之全部位元組位移係零基的。即,索引鍵值集檔案F中之第一位元組被定義為處於位移零(0)。再者,如所描述,布隆篩選B中之全部位元位移亦係零基的;布隆篩選B中之第一位元被定義為處於位移零(0)。儘管本文中使用此等零基索引,但其等並非必需的(例如,一第一位元可處於位移一(1))。此外,如本文中所使用,floor(x)被定義為小於或等於實數x之最大整數。
BF_FILE_OFFSET_BYTE(F, B)係布隆篩選B之第一位元組之索引鍵值集檔案F中之位元組位移。
BF_SIZE_BYTE(F, B)係索引鍵值集檔案F中之布隆篩選B之大小(以位元組為單位)。
BF_OFFSET_BIT(B, H, K)係藉由針對索引鍵K執行雜湊函數H來選擇之布隆篩選B中之位元位移。
VMPAGE_SIZE_BYTE(F)係索引鍵值集檔案F中之頁之大小(以位元組為單位)。
如本文中所描述,索引鍵值集檔案F中之全部位元組位移係零基的。即,索引鍵值集檔案F中之第一位元組被定義為處於位移零(0)。再者,如所描述,布隆篩選B中之全部位元位移亦係零基的;布隆篩選B中之第一位元被定義為處於位移零(0)。儘管本文中使用此等零基索引,但其等並非必需的(例如,一第一位元可處於位移一(1))。此外,如本文中所使用,floor(x)被定義為小於或等於實數x之最大整數。
給定此等定義,可運算以下各者:
BFPAGE_FILE_OFFSET_FIRST_BYTE(F, B)= floor(BF_FILE_
OFFSET_BYTE(F, B)/ VMPAGE_SIZE_BYTE(F))* VMPAGE_
SIZE_BYTE(F),其係含有布隆篩選B之第一位元組之索引鍵值集檔案F中之頁之位元組位移。
BFPAGE_FILE_OFFSET_LAST_BYTE(F, B)= floor((BF_FILE_
OFFSET_BYTE(F, B)+ BF_SIZE_BYTE(F, B) - 1)/ VMPAGE_
SIZE_BYTE(F))* VMPAGE_SIZE_BYTE(F),其係含有布隆篩選B之最後位元組之索引鍵值集檔案F中之頁之位元組位移。
BFPAGE_COUNT(F, B)=((BFPAGE_FILE_OFFSET_LAST_BYTE(F, B) - BFPAGE_FILE_OFFSET_FIRST_BYTE(F, B))/ VMPAGE_
SIZE_BYTE(F))+ 1,其係含有布隆篩選B之至少一個位元組之索引鍵值集檔案F中之頁之計數。
HBYTE_FILE_OFFSET_BYTE(F, B, H, K)= BF_FILE_OFFSET_
BYTE(F, B)+ floor(BF_OFFSET_BIT(B, H, K)/ 8),其係含有藉由針對索引鍵K執行雜湊函數H來選擇之布隆篩選B中之位元之索引鍵值集檔案F中之位元組之位元組位移。
HBYTE_OFFSET_BIT(F, B, H, K)= BF_OFFSET_BIT(B, H, K)模8,其係處於位移HBYTE_FILE_OFFSET_BYTE(F, B, H, K) (其係藉由針對索引鍵K執行雜湊函數H來選擇之布隆篩選B中之位元)之索引鍵值集檔案F之位元組中之位元位移。
HPAGE_FILE_OFFSET_BYTE(F, B, H, K)= floor(HBYTE_FILE_
OFFSET_BYTE(F, B, H, K)/ VMPAGE_SIZE_BYTE(F))* VMPAGE_
SIZE_BYTE(F),其係含有藉由針對索引鍵K執行雜湊函數H來選擇之布隆篩選B中之位元之索引鍵值集檔案F中之頁之位元組位移。
HPAGE_OFFSET_BIT(F, B, H, K)=((8 * BF_FILE_OFFSET_
BYTE(F, B))+ BF_OFFSET_BIT(B, H, K)) modulo (8 * VMPAGE_
SIZE_BYTE(F)),其係處於位元組位移HPAGE_FILE_OFFSET_
BYTE(F, B, H, K) (其係藉由針對索引鍵K執行雜湊函數H來選擇之布隆篩選B中之位元)之索引鍵值集檔案F之頁中之位元位移。
BFPAGE_FILE_OFFSET_FIRST_BYTE(F, B)= floor(BF_FILE_
OFFSET_BYTE(F, B)/ VMPAGE_SIZE_BYTE(F))* VMPAGE_
SIZE_BYTE(F),其係含有布隆篩選B之第一位元組之索引鍵值集檔案F中之頁之位元組位移。
BFPAGE_FILE_OFFSET_LAST_BYTE(F, B)= floor((BF_FILE_
OFFSET_BYTE(F, B)+ BF_SIZE_BYTE(F, B) - 1)/ VMPAGE_
SIZE_BYTE(F))* VMPAGE_SIZE_BYTE(F),其係含有布隆篩選B之最後位元組之索引鍵值集檔案F中之頁之位元組位移。
BFPAGE_COUNT(F, B)=((BFPAGE_FILE_OFFSET_LAST_BYTE(F, B) - BFPAGE_FILE_OFFSET_FIRST_BYTE(F, B))/ VMPAGE_
SIZE_BYTE(F))+ 1,其係含有布隆篩選B之至少一個位元組之索引鍵值集檔案F中之頁之計數。
HBYTE_FILE_OFFSET_BYTE(F, B, H, K)= BF_FILE_OFFSET_
BYTE(F, B)+ floor(BF_OFFSET_BIT(B, H, K)/ 8),其係含有藉由針對索引鍵K執行雜湊函數H來選擇之布隆篩選B中之位元之索引鍵值集檔案F中之位元組之位元組位移。
HBYTE_OFFSET_BIT(F, B, H, K)= BF_OFFSET_BIT(B, H, K)模8,其係處於位移HBYTE_FILE_OFFSET_BYTE(F, B, H, K) (其係藉由針對索引鍵K執行雜湊函數H來選擇之布隆篩選B中之位元)之索引鍵值集檔案F之位元組中之位元位移。
HPAGE_FILE_OFFSET_BYTE(F, B, H, K)= floor(HBYTE_FILE_
OFFSET_BYTE(F, B, H, K)/ VMPAGE_SIZE_BYTE(F))* VMPAGE_
SIZE_BYTE(F),其係含有藉由針對索引鍵K執行雜湊函數H來選擇之布隆篩選B中之位元之索引鍵值集檔案F中之頁之位元組位移。
HPAGE_OFFSET_BIT(F, B, H, K)=((8 * BF_FILE_OFFSET_
BYTE(F, B))+ BF_OFFSET_BIT(B, H, K)) modulo (8 * VMPAGE_
SIZE_BYTE(F)),其係處於位元組位移HPAGE_FILE_OFFSET_
BYTE(F, B, H, K) (其係藉由針對索引鍵K執行雜湊函數H來選擇之布隆篩選B中之位元)之索引鍵值集檔案F之頁中之位元位移。
此等值一旦經計算,便可以各種方式使用。例如,為讀取藉由針對索引鍵K執行雜湊函數H來選擇之布隆篩選B中之位元,可使用以下操作:
將開始於位元組位移HPAGE_FILE_OFFSET_BYTE(F, B, H, K)之索引鍵值集檔案F中之頁讀取至一記憶體緩衝器中;且接著
自處於位元位移HPAGE_OFFSET_BIT(F, B, H, K)之該記憶體緩衝器讀取所關注位元。
將開始於位元組位移HPAGE_FILE_OFFSET_BYTE(F, B, H, K)之索引鍵值集檔案F中之頁讀取至一記憶體緩衝器中;且接著
自處於位元位移HPAGE_OFFSET_BIT(F, B, H, K)之該記憶體緩衝器讀取所關注位元。
在另一實例中,為讀取藉由對索引鍵K執行雜湊函數H來選擇之布隆篩選B中之位元,可使用以下操作:
將索引鍵值集檔案F中之位元組(處於位元組位移HBYTE_FILE_OFFSET_BYTE(F, B, H, K))讀取至一記憶體緩衝器中;且接著
自該記憶體緩衝器讀取感興趣位元(處於位元位移HBYTE_OFFSET_BIT(F, B, H, K))。
將索引鍵值集檔案F中之位元組(處於位元組位移HBYTE_FILE_OFFSET_BYTE(F, B, H, K))讀取至一記憶體緩衝器中;且接著
自該記憶體緩衝器讀取感興趣位元(處於位元位移HBYTE_OFFSET_BIT(F, B, H, K))。
如上所述,下文在其內呈現若干實例之內容背景包含此等定義及運算值。
圖2係根據一實施例之用於縮減機率篩選查詢延時之一控制流程200之一實例之一泳道圖。以下實例涉及在Linux OS內容背景下之一基於檔案之檢查及提取技術。此技術判定含有布隆篩選資料之索引鍵值集檔案頁之一指定集合之哪些片段(若有)係在Linux頁快取區中,且僅在需要時非同步地載入彼等頁之餘部。另外,本技術提供關於頁快取區中之頁(例如,快取頁)中之指定位元之值之資訊。在一實例中,該檢查及提取技術係一VFS之部分。在一實例中,本技術係由一使用者空間程序經由一系統呼叫來執行。在一實例中,本技術係由Linux內核經由一直接方法呼叫(例如,一標準C語言函式呼叫)來執行。
控制流程200繪示請求者(例如,呼叫者)、OS或檔案系統、快取媒體(例如,記憶體或記憶體子系統)與儲存媒體(例如,磁碟或磁碟子系統)之間的檢查及提取函式之操作。在呼叫者執行檢查及提取函式作為一布隆查詢之部分(操作205)之後,判定布隆篩選陣列之快取部分(操作210)。讀取快取區中之布隆篩選陣列之部分(操作215)且對其等執行布隆查詢(操作220)。若操作220之結果指示查詢項不在布隆篩選中,則處理程序(例如,OS或檔案系統)傳回查詢項(例如,項目)不在索引鍵值集中之一指示(操作225)。在一實例中,該指示係作為部分查詢結果之部分而傳回。
若處理程序無法完全地解析查詢(例如,布隆篩選之快取部分指示查詢項可能在索引鍵值集中),則起始布隆篩選陣列之非快取部分之一非同步載入(操作230)。在此,非同步係呼叫者在轉至另一操作之前不阻止(例如,等待)完成之一操作。因此,處理程序可立即提供快取部分之查詢結果(例如,一部分查詢結果) (操作235),而無需等待布隆篩選陣列之非快取部分自儲存媒體移動至快取媒體(操作240)。
下文繪示使用偽碼之基於檔案之檢查及提取之一實例。首先,在本技術中使用以下結構及原型:
struct page_info {
offset_type page_offset; // byte offset of a
page in a file
offset_type bit_offset; // bit offset in said
page
};
file_check_fetch(file_handle fd, struct page_info
*pagev, boolean_type *page_cached, boolean_type
*bit_set, integer count);
其中:
fd係一開放式索引鍵值集檔案之控制代碼,係檢查及提取函式之一輸入(例如,由一Linux VFS回應於一開放式系統呼叫而傳回之一檔案描述符)。
pagev係page_info結構之一陣列,係該函式之一輸入。在此,pagev之各元素指定索引鍵值集檔案fd中之一頁之位元組位移(例如,「page_offset」)及彼頁中之一位元位移(例如,「bit_offset」),如下文所描述。
page_cached係設定為該函式之一輸出之一布爾值陣列,如下文所描述。
bit_set係設定為該函式之一輸出之一布爾值陣列,如下文所描述。
count係pagev、page_cached及bit_set陣列中之一整數數目,係該函式之一輸入。
struct page_info {
offset_type page_offset; // byte offset of a
page in a file
offset_type bit_offset; // bit offset in said
page
};
file_check_fetch(file_handle fd, struct page_info
*pagev, boolean_type *page_cached, boolean_type
*bit_set, integer count);
其中:
fd係一開放式索引鍵值集檔案之控制代碼,係檢查及提取函式之一輸入(例如,由一Linux VFS回應於一開放式系統呼叫而傳回之一檔案描述符)。
pagev係page_info結構之一陣列,係該函式之一輸入。在此,pagev之各元素指定索引鍵值集檔案fd中之一頁之位元組位移(例如,「page_offset」)及彼頁中之一位元位移(例如,「bit_offset」),如下文所描述。
page_cached係設定為該函式之一輸出之一布爾值陣列,如下文所描述。
bit_set係設定為該函式之一輸出之一布爾值陣列,如下文所描述。
count係pagev、page_cached及bit_set陣列中之一整數數目,係該函式之一輸入。
在下文中,給定一陣列A,記號A[i]指代A之第i元素,其中第一元素係A[0],即,陣列元素係零基的。鑑於上述情況,藉由基於檔案之檢查及提取技術執行以下操作:
set Boolean do_load to TRUE;
FOR i=0 to count-1 DO:
IF the page in key-value set file fd at byte
offset pagev[i].page_offset is in the Linux
page cache THEN:
set page_cached[i] to TRUE;
IF the bit in that page at bit offset
pagev[i].bit_offset is one (1) THEN:
set bit_set[i] to TRUE;
ELSE:
set bit_set[i] to FALSE;
IF bit_set[i] is FALSE THEN:
set do_load to FALSE;
ELSE:
set both page_cached[i] and bit_set[i] to
FALSE; // though in this case the value
of bit_set[i] is in fact unknown and must
be ignored).
ENDFOR
IF do_load is TRUE THEN:
// Only load non-cached pages if Bloom query
// not resolved.
FOR i=0 to count-1 DO:
IF page_cached[i] is FALSE, THEN:
initiate an asynchronous load (from
disk into the page cache) of the
page in key-value set file fd at
byte offset pagev[i].page_offset, if
not previously initiated.
ENDFOR
DONE
set Boolean do_load to TRUE;
FOR i=0 to count-1 DO:
IF the page in key-value set file fd at byte
offset pagev[i].page_offset is in the Linux
page cache THEN:
set page_cached[i] to TRUE;
IF the bit in that page at bit offset
pagev[i].bit_offset is one (1) THEN:
set bit_set[i] to TRUE;
ELSE:
set bit_set[i] to FALSE;
IF bit_set[i] is FALSE THEN:
set do_load to FALSE;
ELSE:
set both page_cached[i] and bit_set[i] to
FALSE; // though in this case the value
of bit_set[i] is in fact unknown and must
be ignored).
ENDFOR
IF do_load is TRUE THEN:
// Only load non-cached pages if Bloom query
// not resolved.
FOR i=0 to count-1 DO:
IF page_cached[i] is FALSE, THEN:
initiate an asynchronous load (from
disk into the page cache) of the
page in key-value set file fd at
byte offset pagev[i].page_offset, if
not previously initiated.
ENDFOR
DONE
在一實例中,file_check_fetch函式假定非快取索引鍵值集檔案頁將按其等在陣列pagev中出現之順序讀取,且可將此納入考量以最佳化載入此等頁(例如,在序列中選擇下一頁進行載入)。為使用上文所描述之呼叫執行一布隆查詢,一使用者空間程序(或其他呼叫者)可執行以下操作。給定一索引鍵值集檔案F中之一布隆篩選B及J個雜湊函數H[0]、...、H[J-1]之一陣列H (各雜湊函數將一索引鍵映射至B中之一位元),可經由以下操作執行對索引鍵K之一布隆查詢:
obtain a file handle fd for key-value set file F;
obtain an array pagev comprising J page_info
structures;
obtain an array page_cached comprising J Boolean
elements;
obtain an array bit_set comprising J Boolean
elements;
obtain an array mbuf comprising VMPAGE_SIZE_BYTE(F)
bytes.
FOR i=0 to J-1 DO:
compute HPAGE_FILE_OFFSET_BYTE(F, B, H[i], K)
and store the result in pagev[i].page_offset;
compute HPAGE_OFFSET_BIT(F, B, H[i], K) and
store the result in pagev[i].bit_offset;
ENDFOR
sort the elements of array pagev such that
pagev[s].page_offset <= pagev[r].page_offset for 0
<= s <= r <= J-1 (e.g., sorted in an ascending page
offset order);// a given page offset can appear in
pagev more than once.
execute file_check_fetch(fd, pagev, page_cached,
bit_set, J);
FOR i=0 to J-1 DO:
// First examine Bloom filter bit values from
// pages that were already cached when
// file_check_fetch was executed.
IF page_cached[i] is TRUE and bit_set[i] is FALSE THEN:
stop the query and return FALSE; // K is
not in the key set tracked by Bloom
filter B.
ENDFOR
FOR i=0 to J-1 DO:
// Only if examining Bloom filter bit
// values from pages that were not cached when
// file_check_fetch was executed.
IF page_cached[i] is TRUE THEN:
continue to next iteration of loop;
ELSE:
IF i==0 or pagev[i].page_offset !=
pagev[i-1].page_offset THEN:
read into mbuf the page in key-value
set file F starting at byte offset pagev[i].page_offset; //e.g., using
the standard Linux pread system call.
IF the bit in mbuf at bit offset
pagev[i].bit_offset is zero (0) THEN:
stop the query and return FALSE; //
K is not in the key set tracked by
Bloom filter B.
ENDFOR
return TRUE from the Bloom query;
DONE.
obtain a file handle fd for key-value set file F;
obtain an array pagev comprising J page_info
structures;
obtain an array page_cached comprising J Boolean
elements;
obtain an array bit_set comprising J Boolean
elements;
obtain an array mbuf comprising VMPAGE_SIZE_BYTE(F)
bytes.
FOR i=0 to J-1 DO:
compute HPAGE_FILE_OFFSET_BYTE(F, B, H[i], K)
and store the result in pagev[i].page_offset;
compute HPAGE_OFFSET_BIT(F, B, H[i], K) and
store the result in pagev[i].bit_offset;
ENDFOR
sort the elements of array pagev such that
pagev[s].page_offset <= pagev[r].page_offset for 0
<= s <= r <= J-1 (e.g., sorted in an ascending page
offset order);// a given page offset can appear in
pagev more than once.
execute file_check_fetch(fd, pagev, page_cached,
bit_set, J);
FOR i=0 to J-1 DO:
// First examine Bloom filter bit values from
// pages that were already cached when
// file_check_fetch was executed.
IF page_cached[i] is TRUE and bit_set[i] is FALSE THEN:
stop the query and return FALSE; // K is
not in the key set tracked by Bloom
filter B.
ENDFOR
FOR i=0 to J-1 DO:
// Only if examining Bloom filter bit
// values from pages that were not cached when
// file_check_fetch was executed.
IF page_cached[i] is TRUE THEN:
continue to next iteration of loop;
ELSE:
IF i==0 or pagev[i].page_offset !=
pagev[i-1].page_offset THEN:
read into mbuf the page in key-value
set file F starting at byte offset pagev[i].page_offset; //e.g., using
the standard Linux pread system call.
IF the bit in mbuf at bit offset
pagev[i].bit_offset is zero (0) THEN:
stop the query and return FALSE; //
K is not in the key set tracked by
Bloom filter B.
ENDFOR
return TRUE from the Bloom query;
DONE.
圖3係根據一實施例之用於縮減機率篩選查詢延時之一方法300之一實例之一流程圖。使用諸如上文或下文所描述之電腦硬體來執行方法300之操作。如前所述,一使用者空間程序可視情況使用標準Linux mmap系統呼叫或類似者將索引鍵值集檔案記憶體映射至其虛擬記憶體位址空間中。在此情況下,一使用者空間程序可經由記憶體讀取操作存取索引鍵值集資料,包含布隆篩選。可使用類似於前文所描述之基於檔案之檢查及提取函式而操作之一基於記憶體之檢查及提取函式改良查詢延時。在一實例中,基於檔案之檢查及提取偽碼實例亦可與記憶體映射檔案一起使用。
接收一布隆查詢(操作305)。該查詢之處理程序可計算來自索引鍵值集檔案之與該查詢相關之片段(操作310)。在此實例中,該查詢提供檔案識別符及查詢項(例如,一索引鍵值集查詢中之索引鍵),且OS計算索引鍵值集檔案之哪個部分含有索引鍵雜湊(例如,對應於k
個雜湊之結果之陣列之索引)之布隆篩選陣列之特定部分。在記憶體映射檔案中,此判定涉及自記憶體映射索引鍵值集檔案中之布隆篩選之頁之位元組位移計算多個陣列索引之位元位移。
一旦判定篩選之相關片段,便處理該等片段。此程序包含選擇下一片段(操作315)及判定彼片段是否在快取區中(操作320)。若該片段不在快取區中,則標記該片段以便擷取(操作345)。在一實例中,標記待擷取片段實際上不起始片段之擷取,而是指示若可使用額外資料來完成查詢則將擷取該片段。在任一情況下(例如,擷取片段或標記而不擷取),操作345係非同步的。
若該片段在快取區中,則測試該片段以判定篩選是否通過(操作325)。使用一標準布隆篩選,若將對應於索引鍵之任何陣列索引設定為零,則查詢未通過。若篩選未通過,則方法300可被終止且傳回查詢項並非集合之部分之一指示(操作330)。然而,若篩選通過,且存在更多片段(操作335),則處理繼續直至不存在片段或篩選不通過。
在已處理片段之後且方法300歸因於篩選未通過而無法退出,將標記片段自磁碟載入至記憶體(操作340)。此時,方法300退出,將部分結果傳回至呼叫者。
下文描述基於記憶體之檢查及提取函式,其判定含有布隆篩選資料之記憶體映射索引鍵值集檔案頁之一指定集合之哪些者(若有)係在Linux頁快取區中且僅在需要彼等頁之餘部來完成查詢時非同步地載入彼等頁之餘部。例示性函式亦提供關於快取頁中之指定位元之值之資訊。在此實例中,基於記憶體之檢查及提取函式係在一VFS中實施且由一使用者空間程序經由一系統呼叫來執行。該函式使用以下資料結構及原型:
struct page_addr_info {
// VM address mapped to the first byte of a
// page in a file
address_type page_addr;
// bit offset in said page
offset_type bit_offset;
};
mem_check_fetch(struct page_addr_info *addrv,
boolean_type *page_cached, boolean_type *bit_set,
integer count);
其中:
addrv係page_addr_info結構之一陣列,係該方法之一輸入;addrv之各元素指定對應於一記憶體映射索引鍵值集檔案頁之第一位元組之一程序虛擬記憶體位址(page_addr)及彼頁中之一位元位移(bit_offset),如下文所描述。
page_cached係設定為該方法之一輸出之一布爾值集陣列,如下文所描述。
bit_set係設定為該方法之一輸出之一布爾值陣列,如下文所描述。
count係addrv、page_cached及bit_set陣列中之元素之整數數目,係該方法之一輸入。
struct page_addr_info {
// VM address mapped to the first byte of a
// page in a file
address_type page_addr;
// bit offset in said page
offset_type bit_offset;
};
mem_check_fetch(struct page_addr_info *addrv,
boolean_type *page_cached, boolean_type *bit_set,
integer count);
其中:
addrv係page_addr_info結構之一陣列,係該方法之一輸入;addrv之各元素指定對應於一記憶體映射索引鍵值集檔案頁之第一位元組之一程序虛擬記憶體位址(page_addr)及彼頁中之一位元位移(bit_offset),如下文所描述。
page_cached係設定為該方法之一輸出之一布爾值集陣列,如下文所描述。
bit_set係設定為該方法之一輸出之一布爾值陣列,如下文所描述。
count係addrv、page_cached及bit_set陣列中之元素之整數數目,係該方法之一輸入。
在下文中,給定一陣列A,記號A[i]指代A之第i元素,其中第一元素係A[0]。鑑於上述情況,藉由基於記憶體之檢查及提取技術執行以下操作:
set Boolean do_load to TRUE.
FOR i=0 to count-1 DO:
determine the key-value set file page
associated with addrv[i].page_addr;
IF the key-value set file page is in the Linux
page cache THEN:
set page_cached[i] to TRUE;
If the bit in that page at bit offset
addrv[i].bit_offset is one (1) THEN:
set bit_set[i] to TRUE;
ELSE:
set bit_set[i] to FALSE;
IF bit_set[i] is FALSE THEN:
set do_load to FALSE;
ELSE:
set both page_cached[i] and bit_set[i] to
FALSE; //though in this case the value of
bit_set[i] is in fact unknown and must be ignored.
ENDFOR
IF do_load is TRUE THEN:
// Only load non-cached pages if Bloom query
// not resolved.
FOR i=0 to count-1 DO:
IF page_cached[i] is FALSE THEN:
initiate an asynchronous load from disk
into the page cache of the key-value set
file page associated with
addrv[i].page_addr, if not previously
initiated;
ENDFOR
DONE
set Boolean do_load to TRUE.
FOR i=0 to count-1 DO:
determine the key-value set file page
associated with addrv[i].page_addr;
IF the key-value set file page is in the Linux
page cache THEN:
set page_cached[i] to TRUE;
If the bit in that page at bit offset
addrv[i].bit_offset is one (1) THEN:
set bit_set[i] to TRUE;
ELSE:
set bit_set[i] to FALSE;
IF bit_set[i] is FALSE THEN:
set do_load to FALSE;
ELSE:
set both page_cached[i] and bit_set[i] to
FALSE; //though in this case the value of
bit_set[i] is in fact unknown and must be ignored.
ENDFOR
IF do_load is TRUE THEN:
// Only load non-cached pages if Bloom query
// not resolved.
FOR i=0 to count-1 DO:
IF page_cached[i] is FALSE THEN:
initiate an asynchronous load from disk
into the page cache of the key-value set
file page associated with
addrv[i].page_addr, if not previously
initiated;
ENDFOR
DONE
在一實例中,mem_check_fetch函式假定非快取索引鍵值集檔案頁將按其等在陣列addrv中出現之順序讀取,且可將此納入考量以最佳化載入此等頁。在一實例中,mem_check_fetch允許addrv陣列指定相關聯於(映射至)一個以上索引鍵值集檔案中之頁之位址。以下偽碼繪示如何使用mem_check_fetch函式執行一布隆查詢。給定一記憶體映射索引鍵值集檔案F中之一布隆篩選B及J個雜湊函數H[0]、...、H[J-1]之一陣列H (各雜湊函數將一索引鍵映射至B中之一位元),可經由以下操作執行對索引鍵K之一布隆查詢:
define
struct bloom_addr_info {
// VM address mapped to the first byte of a
// page in a file
address_type page_addr;
// bit offset in said page
offset_type page_bit_offset;
// VM address mapped to byte containing bit
of interest in a file
address_type byte_addr;
// bit offset in said byte
offset_type byte_bit_offset;
};
obtain the process memory address faddr that is
mapped to the first byte of memory-mapped key-value
set file F;
obtain an array bloom_addrv comprising J
bloom_addr_info structures;
obtain an array page_addrv comprising J
page_addr_info structures;
obtain an array page_cached comprising J Boolean
elements;
obtain an array bit_set comprising J Boolean
elements;
FOR i=0 to J-1 DO:
compute (faddr + HPAGE_FILE_OFFSET_BYTE(F, B,
H[i], K)) and store the result in
bloom_addrv[i].page_addr;
compute HPAGE_OFFSET_BIT(F, B, H[i], K) and
store the result in
bloom_addrv[i].page_bit_offset;
compute (faddr + HBYTE_FILE_OFFSET_BYTE(F, B,
H[i], K)) and store the result in
bloom_addrv[i].byte_addr;
compute HBYTE_OFFSET_BIT(F, B, H[i], K)) and
store the result in
bloom_addrv[i].byte_bit_offset;
ENDFOR
sort the elements of array bloom_addrv such that bloom_addrv[s].page_addr <=
bloom_addrv[r].page_addr for 0 <= s <= r <= J-1
(e.g., into an ascending virtual memory address
order); // a given page address can appear in
bloom_addrv more than once.
FOR i=0 to J-1 DO:
set page_addrv[i].page_addr equal to bloom_addrv[i].page_addr;
set page_addrv[i].bit_offset equal to bloom_addrv[i].page_bit_offset;
ENDFOR
execute mem_check_fetch(page_addrv, page_cached,
bit_set, J);
FOR i=0 to J-1 do:
// First examine Bloom filter bit values from
// pages that were already cached when
// mem_check_fetch was executed.
If page_cached[i] is TRUE and bit_set[i] is
FALSE THEN:
stop the query and return FALSE; // K is not
in the key set tracked by Bloom filter B.
ENDFOR
FOR i=0 to J-1 do:
// Only if needed to examine Bloom filter bit
// values from pages that were not cached when
// mem_check_fetch was executed.
IF page_cached[i] is TRUE THEN:
continue to next iteration of loop.
IF the bit at bit offset
bloom_addrv[i].byte_bit_offset in the byte at
process virtual memory address
bloom_addrv[i].byte_addr is zero (0) THEN:
stop the query and return FALSE; // K is not
in the key set tracked by Bloom filter B.
ENDFOR
return TRUE from the Bloom query;
DONE;
define
struct bloom_addr_info {
// VM address mapped to the first byte of a
// page in a file
address_type page_addr;
// bit offset in said page
offset_type page_bit_offset;
// VM address mapped to byte containing bit
of interest in a file
address_type byte_addr;
// bit offset in said byte
offset_type byte_bit_offset;
};
obtain the process memory address faddr that is
mapped to the first byte of memory-mapped key-value
set file F;
obtain an array bloom_addrv comprising J
bloom_addr_info structures;
obtain an array page_addrv comprising J
page_addr_info structures;
obtain an array page_cached comprising J Boolean
elements;
obtain an array bit_set comprising J Boolean
elements;
FOR i=0 to J-1 DO:
compute (faddr + HPAGE_FILE_OFFSET_BYTE(F, B,
H[i], K)) and store the result in
bloom_addrv[i].page_addr;
compute HPAGE_OFFSET_BIT(F, B, H[i], K) and
store the result in
bloom_addrv[i].page_bit_offset;
compute (faddr + HBYTE_FILE_OFFSET_BYTE(F, B,
H[i], K)) and store the result in
bloom_addrv[i].byte_addr;
compute HBYTE_OFFSET_BIT(F, B, H[i], K)) and
store the result in
bloom_addrv[i].byte_bit_offset;
ENDFOR
sort the elements of array bloom_addrv such that bloom_addrv[s].page_addr <=
bloom_addrv[r].page_addr for 0 <= s <= r <= J-1
(e.g., into an ascending virtual memory address
order); // a given page address can appear in
bloom_addrv more than once.
FOR i=0 to J-1 DO:
set page_addrv[i].page_addr equal to bloom_addrv[i].page_addr;
set page_addrv[i].bit_offset equal to bloom_addrv[i].page_bit_offset;
ENDFOR
execute mem_check_fetch(page_addrv, page_cached,
bit_set, J);
FOR i=0 to J-1 do:
// First examine Bloom filter bit values from
// pages that were already cached when
// mem_check_fetch was executed.
If page_cached[i] is TRUE and bit_set[i] is
FALSE THEN:
stop the query and return FALSE; // K is not
in the key set tracked by Bloom filter B.
ENDFOR
FOR i=0 to J-1 do:
// Only if needed to examine Bloom filter bit
// values from pages that were not cached when
// mem_check_fetch was executed.
IF page_cached[i] is TRUE THEN:
continue to next iteration of loop.
IF the bit at bit offset
bloom_addrv[i].byte_bit_offset in the byte at
process virtual memory address
bloom_addrv[i].byte_addr is zero (0) THEN:
stop the query and return FALSE; // K is not
in the key set tracked by Bloom filter B.
ENDFOR
return TRUE from the Bloom query;
DONE;
上文所描述之mem_check_fetch之實施例假定索引鍵值集檔案經完全記憶體映射(例如,整個檔案被映射)至虛擬記憶體位址之一連續序列。若索引鍵值集檔案經部分記憶體映射,例如僅含有布隆篩選資料之部分被映射,則相應地調整上述技術中所使用之記憶體位移。
圖4係根據一實施例之用於縮減機率篩選查詢延時之一方法400之一實例之一流程圖。使用諸如上文或下文所描述之電腦硬體來執行方法400之操作。上文關於圖2及圖3所描述之技術調用機率篩選資料自磁碟至記憶體之一顯式且有條件之非同步載入,因為呼叫程序期望發生非同步載入,除非可使用機率篩選之快取部分來應答查詢。因此,針對記憶體映射索引鍵值集檔案,mem_check_fetch函式允許使用者空間程序顯式地起始將含有布隆篩選資料之頁非同步地載入至Linux頁快取區中。一替代或補充技術使用來自一機率篩選之非快取片段之一隱式非同步載入。例如,一基於記憶體之「提取群組」函式允許使用者空間程序藉由將一頁群組定義為一群組(例如,提取群組)且在該群組之一成員中存在一分頁錯誤時載入整個群組來隱式地起始將含有布隆篩選資料之頁非同步地載入至Linux頁快取區中。
方法400藉由產生一提取群組而開始(操作405)。該提取群組包含一檔案中彼此相關之頁。可藉由指定待分組之頁且將頁識別碼儲存於一資料結構(例如,表、陣列等)中來產生該提取群組。在一實例中,頁藉由其等在儲存一機率篩選時之使用而相關。
一旦產生該提取群組,則當存在一分頁錯誤時查閱該提取群組(操作410)。在此,一分頁錯誤係對不常駐於記憶體中之一頁之一引用(例如,其需要自待使用之磁碟載入)。若存在一分頁錯誤,則檢查提取群組以判定該錯誤頁是否在該提取群組中(操作420)。若是,則非同步地載入提取群組中之其他頁(操作440)。在起始非同步載入之後,或若該錯誤頁不在提取群組中,則方法400結束。此技術係隱式的,因為一程序僅請求頁執行布隆(或其他機率)查詢,且當一第一經檢查頁不在快取區中時,非同步地載入整個非快取頁。
如下文所繪示,mem_fetch_group函式對記憶體映射索引鍵值集檔案進行操作。如同file_check_fetch及mem_check_fetch函式,mem_fetch_group函式可在一VFS中實施且由一使用者空間程序經由一系統呼叫來執行。以下係mem_fetch_group函式之一原型:
mem_fetch_group(address_type *addrv, integer count;)
其中:
addrv係address_type值之一陣列,係該方法之一輸入;addrv之各元素指定對應於一記憶體映射索引鍵值集檔案頁之第一位元組之一程序虛擬記憶體位址。
count係addrv陣列中之元素之整數數目,係該方法之一輸入。
mem_fetch_group(address_type *addrv, integer count;)
其中:
addrv係address_type值之一陣列,係該方法之一輸入;addrv之各元素指定對應於一記憶體映射索引鍵值集檔案頁之第一位元組之一程序虛擬記憶體位址。
count係addrv陣列中之元素之整數數目,係該方法之一輸入。
在下文中,給定一陣列A,記號A[i]指代A之第i元素,其中第一元素係A[0]。鑑於上述情況,執行以下操作以實施提取群組技術:
create an entry in a FetchGroup table identifying
the key-value set file pages associated with
addresses addrv[0],…, addrv[count-1] as all
belonging to the same fetch group.
DONE;
create an entry in a FetchGroup table identifying
the key-value set file pages associated with
addresses addrv[0],…, addrv[count-1] as all
belonging to the same fetch group.
DONE;
在回應於發起(instigate)自一記憶體映射索引鍵值集檔案載入一頁之一VM分頁錯誤填入FetchGroup表(例如,定義提取群組)之後,VFS執行以下操作:
determine the faulted-page; //This is the key-
value set file page associated with the process
VM address that generated the page fault.
initiate a load of the faulted-page from disk
into the Linux page cache.
IF the faulted-page is a member of a fetch group
in the FetchGroup table THEN:
initiate asynchronous load of all the other
key-value set file pages belonging to that
fetch group not already present in the
Linux page cache;
DONE;
determine the faulted-page; //This is the key-
value set file page associated with the process
VM address that generated the page fault.
initiate a load of the faulted-page from disk
into the Linux page cache.
IF the faulted-page is a member of a fetch group
in the FetchGroup table THEN:
initiate asynchronous load of all the other
key-value set file pages belonging to that
fetch group not already present in the
Linux page cache;
DONE;
在一實例中,按由產生對應FetchGroup表項目之mem_fetch_group執行之addrv輸入指定之順序讀取一提取群組中之非快取索引鍵值集檔案頁。一處理程序(例如,VFS)可使用此順序來最佳化載入此等頁。在一實例中,mem_fetch_group函式允許addrv陣列指定對應於(例如,映射至)一個以上索引鍵值集檔案中之頁之位址。以下偽碼繪示如何使用mem_fetch_group函式執行一布隆查詢。給定一記憶體映射索引鍵值集檔案F中之一布隆篩選B及J個雜湊函數H[0]、...、H[J-1]之一陣列H (各雜湊函數將一索引鍵映射至B中之一位元),可如下般執行對索引鍵K之布隆查詢:
define struct query_info {
// VM address mapped to byte containing bit of
// interest in a file
address_type byte_addr;
// bit offset in said byte
offset_type bit_offset;
};
define struct query_info {
// VM address mapped to byte containing bit of
// interest in a file
address_type byte_addr;
// bit offset in said byte
offset_type bit_offset;
};
首先,執行以下步驟以針對布隆篩選B建立一提取群組:
obtain the process virtual memory address faddr
mapped to the first byte of memory-mapped key-
value set file F;
compute BFPAGE_COUNT(F, B) and store the result
in integer count;
obtain an array addrv comprising count
address_type elements;
FOR i=0 to count-1 DO:
Compute (faddr +
BFPAGE_FILE_OFFSET_FIRST_BYTE(F, B) + (i * VMPAGE_SIZE_BYTE(F))) and store the result
in addrv[i];
ENDFOR
execute the method mem_fetch_group(addrv, count);
DONE;
obtain the process virtual memory address faddr
mapped to the first byte of memory-mapped key-
value set file F;
compute BFPAGE_COUNT(F, B) and store the result
in integer count;
obtain an array addrv comprising count
address_type elements;
FOR i=0 to count-1 DO:
Compute (faddr +
BFPAGE_FILE_OFFSET_FIRST_BYTE(F, B) + (i * VMPAGE_SIZE_BYTE(F))) and store the result
in addrv[i];
ENDFOR
execute the method mem_fetch_group(addrv, count);
DONE;
接著,在未來某個時間,如下般執行對索引鍵K之一布隆查詢:
obtain the process virtual memory address faddr
mapped to the first byte of memory-mapped key-
value set file F;
obtain an array queryv comprising J query_info
structures;
FOR i=0 to J-1 DO:
compute (faddr + HBYTE_FILE_OFFSET_BYTE(F,
B, H[i], K)) and store the result in
queryv[i].byte_addr;
compute HBYTE_OFFSET_BIT(F, B, H[i], K) and
store the result in queryv[i].bit_offset;
ENDFOR
sort the elements of array queryv such that
queryv[s].byte_addr <= queryv[r].byte_addr for 0
<= s <= r <= J-1; // e.g., in an ascending
virtual memory address order. Here, a given byte
address can appear in queryv more than once.
FOR i=0 to J-1 DO:
IF the bit at bit offset
queryv[i].bit_offset in the byte at process
virtual memory address queryv[i].byte_addr
is zero (0) THEN:
stop the query and return FALSE; // K
is not in the key set tracked by Bloom
filter B.
ENDFOR
return TRUE from the Bloom query;
DONE;
obtain the process virtual memory address faddr
mapped to the first byte of memory-mapped key-
value set file F;
obtain an array queryv comprising J query_info
structures;
FOR i=0 to J-1 DO:
compute (faddr + HBYTE_FILE_OFFSET_BYTE(F,
B, H[i], K)) and store the result in
queryv[i].byte_addr;
compute HBYTE_OFFSET_BIT(F, B, H[i], K) and
store the result in queryv[i].bit_offset;
ENDFOR
sort the elements of array queryv such that
queryv[s].byte_addr <= queryv[r].byte_addr for 0
<= s <= r <= J-1; // e.g., in an ascending
virtual memory address order. Here, a given byte
address can appear in queryv more than once.
FOR i=0 to J-1 DO:
IF the bit at bit offset
queryv[i].bit_offset in the byte at process
virtual memory address queryv[i].byte_addr
is zero (0) THEN:
stop the query and return FALSE; // K
is not in the key set tracked by Bloom
filter B.
ENDFOR
return TRUE from the Bloom query;
DONE;
上述偽碼假定索引鍵值集檔案經完全記憶體映射至虛擬記憶體位址之一連續序列。若索引鍵值集檔案經部分記憶體映射-例如,僅包含布隆篩選資料之檔案部分被映射-則將上述演算法中所使用之記憶體位移調整至彼情況。
提取群組技術之條件性質係區別於試圖在需要時提前將檔案資料自磁碟載入至快取區中之其他預提取技術之一特性。因此,若存取檔案頁之一者導致一分頁錯誤,則此等其他技術不適合載入檔案頁之一經明確定義集合。
儘管在上述實例中使用在Linux下讀取之一索引鍵值集檔案,但此等技術並非係Linux特定的;全部技術可應用於快取檔案頁且提供記憶體映射檔案之任何作業系統。file_check_fetch及mem_check_fetch之變動亦可應用於其他機率篩選以測試集合成員資格。例如,此等函式可延伸至一計數布隆篩選-包括M個f位元計數器及J個不同雜湊函數之一陣列,各雜湊函數將一集合元素映射至M個計數器之一者-或映射至一布穀鳥雜湊表或一布穀鳥篩選-包括M個f位元值(其中值在一布穀鳥雜湊表之情況下係索引鍵,且在一布穀鳥篩選之情況下係索引鍵指紋)及兩個不同雜湊函數(各雜湊函數將一集合元素映射至M個f位元值之一者)之一陣列。Mem_fetch_group可應用於儲存於一或多個已知頁中之一記憶體映射檔案中之任何資料結構,且其中在處理此等頁之任一者之一分頁錯誤時起始包括資料結構之非快取頁之一非同步載入係有益的。因此,mem_fetch_group可有益於廣泛範圍之應用程式,而不僅僅有益於用於測試集合成員資格之機率篩選。
圖5係根據一實施例之用於縮減機率篩選查詢延時之一方法500之一實例之一流程圖。使用諸如上文或下文所描述之電腦硬體來執行方法500之操作。
在操作505,自一呼叫者接收對儲存於一第一媒體上之一機率篩選之一查詢。在一實例中,接收該查詢包含接收片段識別符。在一實例中,該等片段識別符指定機率篩選之全部片段之哪些片段與該查詢相關。在一實例中,該等片段識別符係一檔案中之位元組位移。在一實例中,該查詢包含該檔案之一檔案識別符。
在一實例中,該檔案係一索引鍵值集檔案。在一實例中,該索引鍵值集檔案包含來自一個以上KVS樹之索引鍵值集。在一實例中,該機率篩選應用於該索引鍵值集檔案中之單個KVS樹。在一實例中,針對該索引鍵值集檔案之頁維持一提取群組資料結構。在此實例中,回應於該提取群組資料結構中之一個頁上之分頁錯誤而擷取該索引鍵值集檔案之提取群組資料結構中之頁。
在一實例中,該查詢包含一組測試參數。在一實例中,該等測試參數包含一位置(例如,一布隆篩選陣列之一索引、一布穀鳥篩選中之一貯體、位址等)。在一實例中,該位置係一片段中之一位元位移。在一實例中,該等測試參數之子集包含各位置中之一位元值。
在操作510,回應於接收該查詢,獲得儲存於一第二媒體上之機率篩選之快取片段。在一實例中,該等快取片段小於儲存於該第一媒體上之機率篩選之全部。在一實例中,該機率篩選提供在判定一元素不在一集合中時係結論性之一集合成員資格判定。在一實例中,該機率篩選係一布隆篩選、一計數布隆篩選或一布穀鳥篩選之至少一者。
在一實例中,接收該查詢包含接收片段識別符。在一實例中,該等片段識別符指定該機率篩選之全部片段之哪些片段與該查詢相關。在一實例中,獲得該等快取片段包含獲得該第二媒體中之該機率篩選對應於該等片段識別符之片段。
在一實例中,該機率篩選之片段係基於該第二媒體中之該機率篩選之一表示。在一實例中,該等片段具有一均勻大小。在一實例中,該均勻大小係一記憶體頁大小。在一實例中,該等片段識別符係記憶體頁識別符。在一實例中,該等片段識別符係記憶體位址。
在操作515,對該等快取片段執行該查詢,從而導致部分查詢結果。
在操作520,在呼叫者不介入之情況下,起始(例如,開始)該機率篩選之剩餘資料自該第一媒體至該第二媒體之擷取。在一實例中,該剩餘資料對應於該查詢及不在該等快取片段中之資料。在一實例中,該機率篩選之剩餘資料之擷取包含識別該等部分查詢結果中之該機率篩選之一停止條件及避免(例如,中止或不採取進一步動作以)擷取剩餘資料。
在操作525,將該等部分查詢結果傳回至該呼叫者。在其中該查詢包含測試參數之一實例中,該等部分查詢結果包含對該等快取片段執行之該等測試參數之一子集之結果。在一實例中,該等部分查詢結果包含與該查詢相關且不在該等快取片段中之片段識別符之一清單。在一實例中,該呼叫者接收該等部分查詢結果,針對由該機率篩選定義之一停止條件搜尋測試參數之子集,且當在測試參數之子集中未找到該停止條件時在該等片段識別符之片段內搜尋該停止條件。在此,該等片段由於起始該機率篩選之剩餘資料之擷取而常駐於該第二媒體中。
圖6繪示一例示性機器600之一方塊圖,可對機器600執行本文中所論述之任何一或多種技術(例如,方法)。如本文中所描述,實例可包含機器600中之邏輯或數個組件或機構,或可藉由機器600中之邏輯或數個組件或機構操作。電路系統(例如,處理電路系統)係在包含硬體(例如,簡單電路、閘、邏輯等)之機器600之有形實體中實施之電路之一集合。電路系統成員資格可隨時間變通。電路系統包含可在操作時單獨地或組合地執行指定操作之成員。在一實例中,可不可變地設計電路系統之硬體以實行一特定操作(例如,硬接線)。在一實例中,電路系統之硬體可包含可變連接之實體組件(例如,執行單元、電晶體、簡單電路等),包含實體上經修改(例如,不變質量之粒子之磁性、電、可移動放置等)以編碼特定操作之指令之一機器可讀媒體。在連接實體組件時,一硬體構成之基本電性質例如自一絕緣體變為一導體,或反之亦然。指令使嵌入式硬體(例如,執行單元或一載入機構)能夠經由可變連接在硬體中產生電路系統之成員,以在操作時實行特定操作之部分。據此,在一實例中,機器可讀媒體元件係電路系統之部分或當器件操作時通信地耦合至電路系統之其他組件。在一實例中,實體組件之任一者可用於一個以上電路系統之一個以上成員中。例如,在操作下,執行單元可在一個時間點用於一第一電路系統之一第一電路中且在一不同時間由該第一電路系統中之一第二電路重用,或由一第二電路系統中之一第三電路重用。下文係關於機器600之此等組件之額外實例。
在替代實施例中,機器600可操作為一獨立器件或可經連接(例如,網路連線)至其他機器。在一網路連線部署中,機器600可作為一伺服器-客戶端網路環境中之一伺服器機器、一客戶端機器或兩者而操作。在一實例中,機器600可充當同級間(P2P) (或其他分散式)網路環境中之一同級機器。機器600可為一個人電腦(PC)、一平板電腦、一視訊轉換器(STB)、一個人數位助理(PDA)、一行動電話、一網路設備、一網路路由器、交換機或橋接器,或能夠執行指定待由彼機器採取之動作之(循序或以其他方式)指令之任何機器。此外,雖然僅繪示單個機器,但術語「機器」亦應被視為包含個別地或共同地執行一組指令(或多組指令)以執行本文中所論述之任何一或多種方法之任何機器集合,諸如雲運算、軟體即服務(SaaS)、其他電腦叢集組態。
機器(例如,電腦系統)600可包含一硬體處理器602 (例如,一中央處理單元(CPU)、一圖形處理單元(GPU)、一硬體處理器核心或其等任何組合)、一主記憶體604、一靜態記憶體(例如,韌體、微碼、一基本輸入輸出系統(BIOS)、統一可延伸韌體介面(UEFI)等之記憶體或儲存器) 606及大容量儲存器608 (例如,硬碟機、磁帶機、快閃儲存器或其他區塊器件),其中之一些或全部可經由一互連(例如,匯流排) 630彼此通信。機器600可進一步包含一顯示單元610、一字母數字輸入器件612 (例如,一鍵盤)及一使用者介面(UI)導覽器件614 (例如,一滑鼠)。在一實例中,顯示單元610、輸入器件612及UI導覽器件614可為一觸控螢幕顯示器。機器600可另外包含一儲存器件(例如,驅動單元) 608、一信號產生器件618 (例如,一揚聲器)、一網路介面器件620及一或多個感測器616,諸如一全球定位系統(GPS)感測器、指南針、加速度計或其他感測器。機器600可包含一輸出控制器628 (諸如一串列(例如,通用串列匯流排(USB)、並列、或其他有線或無線(例如,紅外線(IR)、近場通信(NFC)等)連接)以與一或多個周邊器件(例如,一印表機、讀卡器等)通信或控制一或多個周邊器件(例如,一印表機、讀卡器等)。
處理器602、主記憶體604、靜態記憶體606或大容量儲存器608之暫存器可為或包含一機器可讀媒體622,體現本文中所描述之任何一或多種技術或功能或由本文中所描述之任何一或多種技術或功能利用之一或多組資料結構或指令624 (例如,軟體)儲存在機器可讀媒體622上。指令624亦可在其由機器600執行期間完全地或至少部分地常駐於處理器602、主記憶體604、靜態記憶體606或大容量儲存器608之暫存器之任一者內。在一實例中,硬體處理器602、主記憶體604、靜態記憶體606或大容量儲存器608之一個或任何組合可構成機器可讀媒體622。雖然機器可讀媒體622被繪示為單個媒體,但術語「機器可讀媒體」可包含經組態以儲存一或多個指令624之單個媒體或多個媒體(例如,一集中式或分散式資料庫,或相關聯快取區及伺服器)。
術語「機器可讀媒體」可包含能夠儲存、編碼或攜載由機器600執行之指令且引起機器600執行本發明之任何一或多種技術,或能夠儲存、編碼或攜載由此等指令使用或與此等指令相關聯之資料結構之任何媒體。非限制性機器可讀媒體實例可包含固態記憶體、光學媒體、磁性媒體及信號(例如,射頻信號、其他基於光子之信號、聲音信號等)。在一實例中,一非暫時性機器可讀媒體包括具有含不變(例如,靜止)質量且因此係組合物之複數個粒子之一機器可讀媒體。據此,非暫時性機器可讀媒體係不包含暫時性傳播信號之機器可讀媒體。非暫時性機器可讀媒體之特定實例可包含:非揮發性記憶體,諸如半導體記憶體器件(例如,電可程式化唯讀記憶體(EPROM)、電可擦除可程式化唯讀記憶體(EEPROM))、快閃器件;磁碟,諸如內部硬碟及可抽換式磁碟;磁光碟;及CD-ROM及DVD-ROM磁碟。
指令624可進一步透過通信網路626使用傳輸媒體經由利用數個傳送協定之任一者(例如,訊框中繼、網際網路協定(IP)、傳輸控制協定(TCP)、使用者資料塊協定(UDP)、超文字傳送協定(HTTP)等)的網路介面器件620加以傳輸或接收。例示性通信網路可包含一區域網路(LAN)、一廣域網路(WAN)、一封包資料網路(例如,網際網路)、行動電話網路(例如,蜂巢式網路)、簡易老式電話(POTS)網路及無線資料網路(例如,電氣及電子工程師協會(IEEE) 802.11系列標準(稱為Wi-Fi®)、IEEE 802.16系列標準(稱為WiMax®)、IEEE 802.15.4系列標準、同級間(P2P)網路,等等)。在一實例中,網路介面器件620可包含一或多個實體插孔(例如,乙太網路、同軸或電話插孔)或一或多個天線以連接至通信網路626。在一實例中,網路介面器件620可包含複數個天線以使用單輸入多輸出(SIMO)、多輸入多輸出(MIMO)或多輸入單輸出(MISO)技術之至少一者進行無線通信。術語「傳輸媒體」應被視為包含能夠儲存、編碼或攜載由機器600執行之指令之任何無形媒體,且包含促進此軟體之通信之數位或類比通信信號或其他無形媒體。一傳輸媒體係一機器可讀媒體。
額外注釋 & 實例
額外注釋 & 實例
實例1係一種用於縮減機率篩選查詢延時之系統,該系統包括用於以下各者之處理電路系統:自一呼叫者接收對儲存於一第一媒體上之一機率篩選之一查詢;回應於接收該查詢,獲得儲存於一第二媒體上之該機率篩選之快取片段,其中該等快取片段小於儲存於該第一媒體上之該機率篩選之全部,其中該機率篩選提供在判定一元素不在一集合中時係結論性之一集合成員資格判定;對該等快取片段執行該查詢,從而導致一部分查詢結果;在該呼叫者不介入之情況下,起始該機率篩選之剩餘資料自該第一媒體至該第二媒體之擷取,其中該剩餘資料對應於該查詢及不在該等快取片段中之資料;及將該部分查詢結果傳回至該呼叫者。
在實例2中,實例1之標的物包含,其中為接收該查詢,該處理電路系統接收片段識別符,該等片段識別符指定該機率篩選之全部片段之哪些片段與該查詢相關。
在實例3中,實例2之標的物包含,其中該等片段識別符係一檔案中之位元組位移。
在實例4中,實例3之標的物包含,其中該查詢包含該檔案之一檔案識別符。
在實例5中,實例3至4之標的物包含,其中該檔案係一索引鍵值集檔案。
在實例6中,實例5之標的物包含,其中該處理電路系統進一步用以:針對該索引鍵值集檔案之頁維持一提取群組資料結構;及回應於該提取群組資料結構中之一個頁上之一分頁錯誤而擷取該索引鍵值集檔案之該提取群組資料結構中之頁。
在實例7中,實例5至6之標的物包含,其中該索引鍵值集檔案包含一個以上KVS樹。
在實例8中,實例7之標的物包含,其中該機率篩選應用於該索引鍵值集檔案中之單個KVS樹。
在實例9中,實例2至8之標的物包含,其中為獲得該等快取片段,該處理電路系統獲得該第二媒體中之該機率篩選對應於該等片段識別符之片段。
在實例10中,實例1至9之標的物包含,其中該機率篩選之片段係基於該第二媒體中之該機率篩選之一表示。
在實施例11中,實施例10之標的物包含,其中該等片段具有一均勻大小。
在實例12中,實例11之標的物包含,其中該均勻大小係一記憶體頁大小。
在實例13中,實例12之標的物包含,其中該等片段識別符係頁識別符。
在實例14中,實例11至13之標的物包含,其中該等片段識別符係記憶體位址。
在實例15中,實例1至14之標的物包含,其中該查詢包含一組測試參數,且其中該部分查詢結果包含對該等快取片段執行之該等測試參數之一子集之結果。
在實例16中,實例15之標的物包含,其中該等測試參數包含一位置。
在實例17中,實例16之標的物包含,其中該位置係一片段中之一位元位移。
在實例18中,實例17之標的物包含,其中該等測試參數之該子集包含各位置中之一位元值。
在實例19中,實例15至18之標的物包含,其中該部分查詢結果包含與查詢相關且不在該等快取片段中之片段識別符之一清單。
在實例20中,實例19之標的物包含,其中該處理電路系統進一步用以:由該呼叫者接收該部分查詢結果;針對由該機率篩選定義之一停止條件搜尋該部分查詢結果中之該測試參數子集;及當在該測試參數子集中未找到該停止條件時,在該等片段識別符之片段內搜尋該停止條件,該等片段由於起始該機率篩選之該剩餘資料之該擷取而常駐於該第二媒體中。
在實例21中,實例1至20之標的物包含,其中為起始該機率篩選之剩餘資料之擷取,該處理電路系統識別該部分查詢結果中之該機率篩選之一停止條件且放棄該剩餘資料之該擷取。
在實例22中,實例1至21之標的物包含,其中該機率篩選係一布隆篩選、一計數布隆篩選或一布穀鳥篩選之至少一者。
實例23係一種用於縮減機率篩選查詢延時之方法,該方法包括:自一呼叫者接收對儲存於一第一媒體上之一機率篩選之一查詢;回應於接收該查詢,獲得儲存於一第二媒體上之該機率篩選之快取片段,其中該等快取片段小於儲存於該第一媒體上之該機率篩選之全部,其中該機率篩選提供在判定一元素不在一集合中時係結論性之一集合成員資格判定;對該等快取片段執行該查詢,從而導致一部分查詢結果;在該呼叫者不介入之情況下,起始該機率篩選之剩餘資料自該第一媒體至該第二媒體之擷取,其中該剩餘資料對應於該查詢及不在該等快取片段中之資料;及將該部分查詢結果傳回至該呼叫者。
在實例24中,實例23之標的物包含,其中接收該查詢包含接收片段識別符,該等片段識別符指定該機率篩選之全部片段之哪些片段與該查詢相關。
在實例25中,實例24之標的物包含,其中該等片段識別符係一檔案中之位元組位移。
在實例26中,實例25之標的物包含,其中該查詢包含該檔案之一檔案識別符。
在實例27中,實例25至26之標的物包含,其中該檔案係一索引鍵值集檔案。
在實例28中,實例27之標的物包含:針對該索引鍵值集檔案之頁維持一提取群組資料結構;及回應於該提取群組資料結構中之一個頁上之一分頁錯誤而擷取該索引鍵值集檔案之該提取群組資料結構中之頁。
在實例29中,實例27至28之標的物包含,其中該索引鍵值集檔案包含一個以上KVS樹。
在實例30中,實例29之標的物包含,其中該機率篩選應用於該索引鍵值集檔案中之單個KVS樹。
在實例31中,實例24至30之標的物包含,其中獲得該等快取片段包含獲得該第二媒體中之該機率篩選對應於該等片段識別符之片段。
在實例32中,實例23至31之標的物包含,其中該機率篩選之片段係基於該第二媒體中之該機率篩選之一表示。
在實施例33中,實施例32之標的物包含,其中該等片段具有一均勻大小。
在實例34中,實例33之標的物包含,其中該均勻大小係一記憶體頁大小。
在實例35中,實例34之標的物包含,其中該等片段識別符係頁識別符。
在實例36中,實例33至35之標的物包含,其中該等片段識別符係記憶體位址。
在實例37中,實例23至36之標的物包含,其中該查詢包含一組測試參數,且其中該部分查詢結果包含對該等快取片段執行之該等測試參數之一子集之結果。
在實例38中,實例37之標的物包含,其中該等測試參數包含一位置。
在實例39中,實例38之標的物包含,其中該位置係一片段中之一位元位移。
在實例40中,實例39之標的物包含,其中該等測試參數之該子集包含各位置中之一位元值。
在實例41中,實例37至40之標的物包含,其中該部分查詢結果包含與查詢相關且不在該等快取片段中之片段識別符之一清單。
在實例42中,實例41之標的物包含:由該呼叫者接收該部分查詢結果;針對由該機率篩選定義之一停止條件搜尋該部分查詢結果中之該測試參數子集;及當在該測試參數子集中未找到該停止條件時,在該等片段識別符之片段內搜尋該停止條件,該等片段由於起始該機率篩選之該剩餘資料之該擷取而常駐於該第二媒體中。
在實例43中,實例23至42之標的物包含,其中起始該機率篩選之剩餘資料之擷取包含識別該部分查詢結果中之該機率篩選之一停止條件及放棄該剩餘資料之該擷取。
在實例44中,實例23至43之標的物包含,其中該機率篩選係一布隆篩選、一計數布隆篩選或一布穀鳥篩選之至少一者。
實例45係一種包含指令之機器可讀媒體,該等指令在由一機器執行時引起該機器執行實例23至44之任一方法。
實施例46係一種包括用來執行實例23至44之任一方法之構件之系統。
實例47係一種包含用於縮減機率篩選查詢延時之指令之機器可讀媒體,該等指令在由該處理電路系統執行時引起該處理電路系統執行包括以下各者之操作:自一呼叫者接收對儲存於一第一媒體上之一機率篩選之一查詢;回應於接收該查詢,獲得儲存於一第二媒體上之該機率篩選之快取片段,其中該等快取片段小於儲存於該第一媒體上之該機率篩選之全部,其中該機率篩選提供在判定一元素不在一集合中時係結論性之一集合成員資格判定;對該等快取片段執行該查詢,從而導致一部分查詢結果;在該呼叫者不介入之情況下,起始該機率篩選之剩餘資料自該第一媒體至該第二媒體之擷取,其中該剩餘資料對應於該查詢及不在該等快取片段中之資料;及將該部分查詢結果傳回至該呼叫者。
在實例48中,實例47之標的物包含,其中接收該查詢包含接收片段識別符,該等片段識別符指定該機率篩選之全部片段之哪些片段與該查詢相關。
在實例49中,實例48之標的物包含,其中該等片段識別符係一檔案中之位元組位移。
在實例50中,實例49之標的物包含,其中該查詢包含該檔案之一檔案識別符。
在實例51中,實例49至50之標的物包含,其中該檔案係一索引鍵值集檔案。
在實例52中,實例51之標的物包含,其中該等操作包括:針對該索引鍵值集檔案之頁維持一提取群組資料結構;及回應於該提取群組資料結構中之一個頁上之一分頁錯誤而擷取該索引鍵值集檔案之該提取群組資料結構中之頁。
在實例53中,實例51至52之標的物包含,其中該索引鍵值集檔案包含一個以上KVS樹。
在實例54中,實例53之標的物包含,其中該機率篩選應用於該索引鍵值集檔案中之單個KVS樹。
在實例55中,實例48至54之標的物包含,其中獲得該等快取片段包含獲得該第二媒體中之該機率篩選對應於該等片段識別符之片段。
在實例56中,實例47至55之標的物包含,其中該機率篩選之片段係基於該第二媒體中之該機率篩選之一表示。
在實施例57中,實施例56之標的物包含,其中該等片段具有一均勻大小。
在實例58中,實例57之標的物包含,其中該均勻大小係一記憶體頁大小。
在實例59中,實例58之標的物包含,其中該等片段識別符係頁識別符。
在實例60中,實例57至59之標的物包含,其中該等片段識別符係記憶體位址。
在實例61中,實例47至60之標的物包含,其中該查詢包含一組測試參數,且其中該部分查詢結果包含對該等快取片段執行之該等測試參數之一子集之結果。
在實例62中,實例61之標的物包含,其中該等測試參數包含一位置。
在實例63中,實例62之標的物包含,其中該位置係一片段中之一位元位移。
在實例64中,實例63之標的物包含,其中該等測試參數之該子集包含各位置中之一位元值。
在實例65中,實例61至64之標的物包含,其中該部分查詢結果包含與查詢相關且不在該等快取片段中之片段識別符之一清單。
在實例66中,實例65之標的物包含,其中該等操作包括:由該呼叫者接收該部分查詢結果;針對由該機率篩選定義之一停止條件搜尋該部分查詢結果中之該測試參數子集;及當在該測試參數子集中未找到該停止條件時,在該等片段識別符之片段內搜尋該停止條件,該等片段由於起始該機率篩選之該剩餘資料之該擷取而常駐於該第二媒體中。
在實例67中,實例47至66之標的物包含,其中起始該機率篩選之剩餘資料之擷取包含識別該部分查詢結果中之該機率篩選之一停止條件及放棄該剩餘資料之該擷取。
在實例68中,實例47至67之標的物包含,其中該機率篩選係一布隆篩選、一計數布隆篩選或一布穀鳥篩選之至少一者。
實例69係一種用於縮減機率篩選查詢延時之系統,該系統包括:用於自一呼叫者接收對儲存於一第一媒體上之一機率篩選之一查詢之構件;用於回應於接收該查詢而獲得儲存於一第二媒體上之該機率篩選之快取片段之構件,其中該等快取片段小於儲存於該第一媒體上之該機率篩選之全部,其中該機率篩選提供在判定一元素不在一集合中時係結論性之一集合成員資格判定;用於對該等快取片段執行該查詢從而導致一部分查詢結果之構件;用於在該呼叫者不介入之情況下起始該機率篩選之剩餘資料自該第一媒體至該第二媒體之擷取之構件,其中該剩餘資料對應於該查詢及不在該等快取片段中之資料;及用於將該部分查詢結果傳回至該呼叫者之構件。
在實例70中,實例69之標的物包含,其中用於接收該查詢之該等構件包含用於接收片段識別符之構件,該等片段識別符指定該機率篩選之全部片段之哪些片段與該查詢相關。
在實例71中,實例70之標的物包含,其中該等片段識別符係一檔案中之位元組位移。
在實例72中,實例71之標的物包含,其中該查詢包含該檔案之一檔案識別符。
在實例73中,實例71至72之標的物包含,其中該檔案係一索引鍵值集檔案。
在實例74中,實例73之標的物包含:用於針對該索引鍵值集檔案之頁維持一提取群組資料結構之構件;及用於回應於該提取群組資料結構中之一個頁上之一分頁錯誤而擷取該索引鍵值集檔案之該提取群組中資料結構之頁之構件。
在實例75中,實例73至74之標的物包含,其中該索引鍵值集檔案包含一個以上KVS樹。
在實例76中,實例75之標的物包含,其中該機率篩選應用於該索引鍵值集檔案中之單個KVS樹。
在實例77中,實例70至76之標的物包含,其中用於獲得該等快取片段之該等構件包含用於獲得該第二媒體中之該機率篩選對應於該等片段識別符之片段之構件。
在實例78中,實例69至77之標的物包含,其中該機率篩選之片段係基於該第二媒體中之該機率篩選之一表示。
在實施例79中,實施例78之標的物包含,其中該等片段具有一均勻大小。
在實例80中,實例79之標的物包含,其中該均勻大小係一記憶體頁大小。
在實例81中,實例80之標的物包含,其中該等片段識別符係頁識別符。
在實例82中,實例79至81之標的物包含,其中該等片段識別符係記憶體位址。
在實例83中,實例69至82之標的物包含,其中該查詢包含一組測試參數,且其中該部分查詢結果包含對該等快取片段執行之該等測試參數之一子集之結果。
在實例84中,實例83之標的物包含,其中該等測試參數包含一位置。
在實例85中,實例84之標的物包含,其中該位置係一片段中之一位元位移。
在實例86中,實例85之標的物包含,其中該等測試參數之該子集包含各位置中之一位元值。
在實例87中,實例83至86之標的物包含,其中該部分查詢結果包含與查詢相關且不在該等快取片段中之片段識別符之一清單。
在實例88中,實例87之標的物包含:用於由該呼叫者接收該部分查詢結果之構件;用於針對由該機率篩選定義之一停止條件搜尋該部分查詢結果中之該測試參數子集之構件;及用於當在該測試參數子集中未找到該停止條件時在該等片段識別符之片段內搜尋該停止條件之構件,該等片段由於起始該機率篩選之該剩餘資料之該擷取而常駐於該第二媒體中。
在實例89中,實例69至88之標的物包含,其中用於起始該機率篩選之剩餘資料之擷取之該等構件包含用於識別該部分查詢結果中之該機率篩選之一停止條件及放棄該剩餘資料之該擷取之構件。
在實例90中,實例69至89之標的物包含,其中該機率篩選係一布隆篩選、一計數布隆篩選或一布穀鳥篩選之至少一者。
實例91係一種用於縮減機率篩選查詢延時之系統,該系統包括用於以下各者之處理電路系統:接收一分頁錯誤之通知,該分頁錯誤係對對應於一記憶體映射檔案之一記憶體頁之一請求,該記憶體頁不在記憶體中;判定該記憶體頁係一提取群組之部分;及起始該提取群組中並非處於記憶體中之記憶體頁之一載入。
在實例92中,實例91之標的物包含,其中為起始該載入,該處理電路系統執行該提取群組中並非處於記憶體中之該等記憶體頁之一非同步載入。
在實例93中,實例91至92之標的物包含,其中為判定該記憶體頁係一提取群組之部分,該處理電路系統在一資料結構中尋找該記憶體頁。
在實例94中,實例93之標的物包含,其中該資料結構係一表。
在實例95中,實例94之標的物包含,其中該表保存一個以上提取群組。
在實例96中,實例93至95之標的物包含,其中該處理電路系統進一步用以:接收一提取群組中之頁之識別碼;及將該識別碼儲存至該資料結構中。
實例97係一種用於縮減機率篩選查詢延時之方法,該方法包括:接收一分頁錯誤之通知,該分頁錯誤係對對應於一記憶體映射檔案之一記憶體頁之一請求,該記憶體頁不在記憶體中;判定該記憶體頁係一提取群組之部分;及起始該提取群組中並非處於記憶體中之記憶體頁之一載入。
在實例98中,實例97之標的物包含,其中起始該載入包含執行該提取群組中並非處於記憶體中之該等記憶體頁之一非同步載入。
在實例99中,實例97至98之標的物包含,其中判定該記憶體頁係一提取群組之部分包含在一資料結構中尋找該記憶體頁。
在實例100中,實例99之標的物包含,其中該資料結構係一表。
在實例101中,實例100之標的物包含,其中該表保存一個以上提取群組。
在實例102中,實例99至101之標的物包含:接收一提取群組中之頁之識別碼;及將該識別碼儲存至該資料結構中。
實例103係一種包含用於縮減機率篩選查詢延時之指令之機器可讀媒體,該等指令在由一處理電路系統執行時引起該處理電路系統執行包括以下各者之操作:接收一分頁錯誤之通知,該分頁錯誤係對對應於一記憶體映射檔案之一記憶體頁之一請求,該記憶體頁不在記憶體中;判定該記憶體頁係一提取群組之部分;及起始該提取群組中並非處於記憶體中之記憶體頁之一載入。
在實例104中,實例103之標的物包含,其中起始該載入包含執行該提取群組中並非處於記憶體中之該等記憶體頁之一非同步載入。
在實例105中,實例103至104之標的物包含,其中判定該記憶體頁係一提取群組之部分包含在一資料結構中尋找該記憶體頁。
在實例106中,實例105之標的物包含,其中該資料結構係一表。
在實例107中,實例106之標的物包含,其中該表保存一個以上提取群組。
在實例108中,實例105至107之標的物包含,其中該等操作包括:接收一提取群組中之頁之識別碼;及將該識別碼儲存至該資料結構中。
實例109係一種用於縮減機率篩選查詢延時之系統,該系統包括:用於接收一分頁錯誤之通知之構件,該分頁錯誤係對對應於一記憶體映射檔案之一記憶體頁之一請求,該記憶體頁不在記憶體中;用於判定該記憶體頁係一提取群組之部分之構件;及用於起始該提取群組中並非處於記憶體中之記憶體頁之一載入之構件。
在實例110中,實例109之標的物包含,其中用於起始該載入之該等構件包含用於執行該提取群組中並非處於記憶體中之該等記憶體頁之一非同步載入之構件。
在實例111中,實例109至110之標的物包含,其中用於判定該記憶體頁係一提取群組之部分之該等構件包含用於在一資料結構中尋找該記憶體頁之構件。
在實例112中,實例111之標的物包含,其中該資料結構係一表。
在實例113中,實例112之標的物包含,其中該表保存一個以上提取群組。
在實例114中,實例111至113之標的物包含:用於接收一提取群組中之頁之識別碼之構件;及用於將該識別碼儲存至該資料結構中之構件。
實例115係至少一種包含指令之機器可讀媒體,該等指令在由處理電路系統執行時引起該處理電路系統執行操作以實施實例1至114之任一者。
實施例116係一種包括用來實施實例1至114之任一者之構件之裝置。
實施例117係一種用來實施實例1至114之任一者之系統。
實施例118係一種用來實施實例1至114之任一者之方法。
上文實施方式包含對形成實施方式之一部分之隨附圖式之參考。圖式藉由圖解之方式展示可實踐之特定實施例。此等實施例在本文中亦稱為「實例」。此等實例可包含除所展示或所描述元件之外之元件。然而,本發明人亦考量其中僅提供彼等所展示或所描述元件之實例。此外,本發明人亦考量關於一特定實例(或其之一或多個態樣)或關於本文中所展示或所描述之其他實例(或其之一或多個態樣)使用彼等所展示或所描述元件之任何組合或置換之實例。
本文件中所提及之全部公開案、專利及專利文件之全文如同以引用方式個別地併入般以引用方式併入本文中。本文件與彼等以參考方式併入的文件之間若有不一致的用法,此(等)併入之參考文件中之使用狀況應視為本文件用法之補充;對於矛盾的不一致,以本文件中的使用狀況為主。
在本文件中,如常見於專利文件中,術語「一(a或an)」用來包含獨立於「至少一個」或「一或多個」之任何其他例項或用法之一個或一個以上例項或用法。在本文件中,術語「或」用來指代一非排他性或,使得「A或B」包含「A但非B」、「B但非A」及「A及B」,除非另有指示。在隨附發明申請專利範圍中,術語「包含」及「其中」用作各自術語「包括」及「其中」之白話英語等效物。再者,在下文發明申請專利範圍中,術語「包含」及「包括」係開放式的,即,包含在如請求項中之此一術語後所列元件以外之元件的一系統、器件、物品或程序仍然係視為屬於該發明申請專利範圍之範疇內。此外,在下文發明申請專利範圍中,術語「第一」、「第二」及「第三」等僅用作標籤,且並非旨在對其等標的強加數字要求。
上文描述旨在闡釋性且非限制性。例如,上文所描述之實例(或其之一或多個態樣)可彼此組合使用。在檢視上文描述後,諸如一般技術者可使用其他實施例。發明摘要允許讀者能夠快速地確定本發明之性質,且在提交該發明摘要之同時應瞭解並非用於解釋或限制發明申請專利範圍之範疇或含義。再者,在上文實施方式中,各種特徵可集合在一起以簡化本發明。此不應被解譯為期望一未主張之揭示特徵係任何請求項之索引鍵。實情係,發明標的物可能在於少於一特定揭示實施例之全部特徵。因此,下文發明申請專利範圍在此併入實施方式中,其中各請求項自身作為一單獨實施例。應參考隨附發明申請專利範圍連同此等發申請專利範圍所賦予權利之等效物之全範圍來判定實施例之範疇。
100‧‧‧系統
105‧‧‧處理電路系統
110‧‧‧第二媒體
115‧‧‧第一媒體
120‧‧‧索引鍵值集檔案
125‧‧‧快取片段
130‧‧‧機率篩選
200‧‧‧控制流程
205‧‧‧操作
210‧‧‧操作
215‧‧‧操作
220‧‧‧操作
225‧‧‧操作
230‧‧‧操作
235‧‧‧操作
240‧‧‧操作
300‧‧‧方法
305‧‧‧操作
310‧‧‧操作
315‧‧‧操作
320‧‧‧操作
325‧‧‧操作
330‧‧‧操作
335‧‧‧操作
340‧‧‧操作
345‧‧‧操作
350‧‧‧操作
400‧‧‧方法
405‧‧‧操作
410‧‧‧操作
420‧‧‧操作
440‧‧‧操作
500‧‧‧方法
505‧‧‧操作
510‧‧‧操作
515‧‧‧操作
520‧‧‧操作
525‧‧‧操作
600‧‧‧機器
602‧‧‧硬體處理器
604‧‧‧主記憶體
606‧‧‧靜態記憶體
608‧‧‧大容量儲存器/儲存器件
610‧‧‧顯示單元
612‧‧‧字母數字輸入器件
614‧‧‧使用者介面(UI)導覽器件
616‧‧‧感測器
618‧‧‧信號產生器件
620‧‧‧網路介面器件
622‧‧‧機器可讀媒體
624‧‧‧資料結構或指令集
626‧‧‧通信網路
628‧‧‧輸出控制器
630‧‧‧互連
在不必按比例繪製之圖式中,類似元件符號可描述不同視圖中之類似組件。具有不同字母下標之類似元件符號可表示類似組件之不同例項。圖式藉由實例而非限制之方式大體上繪示本文件中所論述之各項實施例。
圖1係根據一實施例之用於縮減機率篩選查詢延時之一系統之一實例之一方塊圖。
圖2係根據一實施例之用於縮減機率篩選查詢延時之一控制流程之一實例之一泳道圖。
圖3係根據一實施例之用於縮減機率篩選查詢延時之一方法之一實例之一流程圖。
圖4係根據一實施例之用於縮減機率篩選查詢延時之一方法之一實例之一流程圖。
圖5係根據一實施例之用於縮減機率篩選查詢延時之一方法之一實例之一流程圖。
圖6係繪示可在其上實施一或多項實施例之一機器之一實例之一方塊圖。
Claims (18)
- 一種用於縮減機率篩選查詢延時之系統,該系統包括用於以下各者之處理電路: 在載入一機率篩選之額外片段的同時,在該機率篩選之快取片段上執行一查詢,該等快取片段在一第一媒體中且該等額外片段在一第二媒體中,該查詢接收自一呼叫者; 在載入該機率篩選之該等額外片段的同時,自在該等快取片段上之該查詢之執行將部分查詢結果傳回至該呼叫者;及 回應於在該等部分查詢結果中藉由該機率篩選定義之一停止條件而停止載入該等額外片段。
- 如請求項1之系統,其中該查詢包含片段識別符,該等片段識別符指定該機率篩選之全部片段之哪些片段與該查詢相關。
- 如請求項1之系統,其中該查詢係用於一索引鍵值集(key-value set)中之一元素之一搜尋。
- 如請求項3之系統,其中該機率篩選判定該元素是否不在該索引鍵值集中。
- 如請求項4之系統,其中該機率篩選包含多個組件,其中該多個組件之值係自包含於該索引鍵值集中的元素而導出,且其中若該查詢中之該元素之一導出之多個組件與該機率篩選之該等相對應組件不匹配,則該查詢之該元素不在該索引鍵值集中。
- 如請求項5之系統,其中該停止條件係該查詢中之該元素之該導出之組件與該機率篩選之該等快取片段之間的一不匹配(mismatch)。
- 一種包含指令之機器可讀媒體,該等指令在由處理電路執行時致使該處理電路執行包括以下各者之操作: 在載入一機率篩選之額外片段的同時,在該機率篩選之快取片段上執行一查詢,該等快取片段在一第一媒體中且該等額外片段在一第二媒體中,該查詢接收自一呼叫者; 在載入該機率篩選之該等額外片段的同時,自在該等快取片段上之該查詢之執行將部分查詢結果傳回至該呼叫者;及 回應於在該等部分查詢結果中藉由該機率篩選定義之一停止條件而停止該等額外片段之該載入。
- 如請求項7之機器可讀媒體,其中該查詢包含片段識別符,該等片段識別符指定該機率篩選之全部片段之哪些片段與該查詢相關。
- 如請求項7之機器可讀媒體,其中該查詢係用於一索引鍵值集中之一元素之一搜尋。
- 如請求項9之機器可讀媒體,其中該機率篩選判定該元素是否不在該索引鍵值集中。
- 如請求項10之機器可讀媒體,其中該機率篩選包含多個組件,其中該多個組件之值係自包含於該索引鍵值集中的元素而導出,且其中若該查詢中之該元素之一導出之多個組件與該機率篩選之該等相對應組件不匹配,則該查詢之該元素不在該索引鍵值集中。
- 如請求項11之機器可讀媒體,其中該停止條件係該查詢中之該元素之該導出之組件與該機率篩選之該等快取片段之間的一不匹配。
- 一種用於縮減機率篩選查詢延時之方法,該方法包括: 在載入一機率篩選之額外片段的同時,在該機率篩選之快取片段上執行一查詢,該等快取片段在一第一媒體中且該等額外片段在一第二媒體中,該查詢接收自一呼叫者; 在載入該機率篩選之該等額外片段的同時,自在該等快取片段上之該查詢之執行將部分查詢結果傳回至該呼叫者;及 回應於在該等部分查詢結果中藉由該機率篩選定義之一停止條件而停止該等額外片段之該載入。
- 如請求項13之方法,其中該查詢包含片段識別符,該等片段識別符指定該機率篩選之全部片段之哪些片段與該查詢相關。
- 如請求項13之方法,其中該查詢係用於一索引鍵值集中之一元素之一搜尋。
- 如請求項15之方法,其中該機率篩選判定該元素是否不在該索引鍵值集中。
- 如請求項16之方法,其中該機率篩選包含多個組件,其中該多個組件之值係自包含於該索引鍵值集中的元素而導出,且其中若該查詢中之該元素之一導出之多個組件與該機率篩選之該等相對應組件不匹配,則該查詢之該元素不在該索引鍵值集中。
- 如請求項17之方法,其中該停止條件係該查詢中之該元素之該導出之組件與該機率篩選之該等快取片段之間的一不匹配。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/691,998 | 2017-08-31 | ||
US15/691,998 US10579633B2 (en) | 2017-08-31 | 2017-08-31 | Reducing probabilistic filter query latency |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201935242A true TW201935242A (zh) | 2019-09-01 |
TWI720491B TWI720491B (zh) | 2021-03-01 |
Family
ID=65435246
Family Applications (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW107128397A TWI663511B (zh) | 2017-08-31 | 2018-08-15 | 縮減機率篩選查詢延時 |
TW108117591A TWI720491B (zh) | 2017-08-31 | 2018-08-15 | 縮減機率篩選查詢延時 |
TW110106029A TWI790550B (zh) | 2017-08-31 | 2018-08-15 | 縮減機率篩選查詢延時 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW107128397A TWI663511B (zh) | 2017-08-31 | 2018-08-15 | 縮減機率篩選查詢延時 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW110106029A TWI790550B (zh) | 2017-08-31 | 2018-08-15 | 縮減機率篩選查詢延時 |
Country Status (5)
Country | Link |
---|---|
US (3) | US10579633B2 (zh) |
KR (2) | KR102461152B1 (zh) |
CN (2) | CN114064756A (zh) |
TW (3) | TWI663511B (zh) |
WO (1) | WO2019045961A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11409753B2 (en) | 2017-08-31 | 2022-08-09 | Micron Technology, Inc. | Reducing probabilistic filter query latency |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10706106B2 (en) | 2017-02-09 | 2020-07-07 | Micron Technology, Inc. | Merge tree modifications for maintenance operations |
US10706105B2 (en) | 2017-02-09 | 2020-07-07 | Micron Technology, Inc. | Merge tree garbage metrics |
US10719495B2 (en) | 2017-02-09 | 2020-07-21 | Micron Technology, Inc. | Stream selection for multi-stream storage devices |
US11762828B2 (en) * | 2018-02-27 | 2023-09-19 | Advanced Micro Devices, Inc. | Cuckoo filters and cuckoo hash tables with biasing, compression, and decoupled logical sparsity |
US11100071B2 (en) | 2018-10-10 | 2021-08-24 | Micron Technology, Inc. | Key-value store tree data block spill with compaction |
US10915546B2 (en) * | 2018-10-10 | 2021-02-09 | Micron Technology, Inc. | Counter-based compaction of key-value store tree data block |
US10852978B2 (en) | 2018-12-14 | 2020-12-01 | Micron Technology, Inc. | Key-value store using journaling with selective data storage format |
US11048755B2 (en) | 2018-12-14 | 2021-06-29 | Micron Technology, Inc. | Key-value store tree with selective use of key portion |
US10936661B2 (en) | 2018-12-26 | 2021-03-02 | Micron Technology, Inc. | Data tree with order-based node traversal |
CN110765138B (zh) * | 2019-10-31 | 2023-01-20 | 北京达佳互联信息技术有限公司 | 数据查询方法、装置、服务器及存储介质 |
US11599463B2 (en) * | 2020-03-25 | 2023-03-07 | Ocient Holdings LLC | Servicing queries during data ingress |
CN111538865B (zh) * | 2020-03-27 | 2023-06-02 | 中国人民解放军国防科技大学 | 多方集合同步方法、装置和电子设备 |
US11210288B2 (en) * | 2020-05-12 | 2021-12-28 | Coupang Corp. | Systems and methods for reducing database query latency |
AU2021203075A1 (en) * | 2020-05-13 | 2021-12-02 | Magnet Forensics Inc. | System and method for identifying files based on hash values |
US11636041B2 (en) * | 2020-10-12 | 2023-04-25 | Seagate Technology Llc | Object storage data storage systems and methods |
US11416499B1 (en) * | 2021-10-12 | 2022-08-16 | National University Of Defense Technology | Vertical cuckoo filters |
Family Cites Families (29)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB9718026D0 (en) * | 1997-08-27 | 1997-10-29 | Secr Defence | Multi-component signal detection system |
US6330292B1 (en) * | 1997-11-11 | 2001-12-11 | Telefonaktiebolaget Lm Ericsson | Reduced power matched filter |
US7065619B1 (en) * | 2002-12-20 | 2006-06-20 | Data Domain, Inc. | Efficient data storage system |
US6928526B1 (en) | 2002-12-20 | 2005-08-09 | Datadomain, Inc. | Efficient data storage system |
CN1282332C (zh) * | 2003-11-13 | 2006-10-25 | 中兴通讯股份有限公司 | 一种快速数据包过滤方法 |
TWI278752B (en) * | 2004-04-21 | 2007-04-11 | Netcell Corp | Disk array controller and fast method of executing stripped-data operations in disk array controller |
US7716180B2 (en) * | 2005-12-29 | 2010-05-11 | Amazon Technologies, Inc. | Distributed storage system with web services client interface |
US20080222087A1 (en) * | 2006-05-15 | 2008-09-11 | International Business Machines Corporation | System and Method for Optimizing Query Access to a Database Comprising Hierarchically-Organized Data |
US8429352B2 (en) * | 2007-06-08 | 2013-04-23 | Sandisk Technologies Inc. | Method and system for memory block flushing |
US20100106537A1 (en) * | 2008-10-23 | 2010-04-29 | Kei Yuasa | Detecting Potentially Unauthorized Objects Within An Enterprise |
US8290972B1 (en) * | 2009-04-29 | 2012-10-16 | Netapp, Inc. | System and method for storing and accessing data using a plurality of probabilistic data structures |
US8788766B2 (en) * | 2010-02-18 | 2014-07-22 | Oracle America, Inc. | Software-accessible hardware support for determining set membership |
US9355109B2 (en) | 2010-06-11 | 2016-05-31 | The Research Foundation For The State University Of New York | Multi-tier caching |
EP2425886B1 (en) * | 2010-09-06 | 2016-06-29 | Sartorius Stedim Biotech GmbH | Filter device test apparatus, filter integrity testing method and computer program product |
EP2614439A4 (en) | 2010-09-09 | 2014-04-02 | Nec Corp | STORAGE SYSTEM |
US20120324143A1 (en) * | 2011-06-15 | 2012-12-20 | Data Design Corporation | Methods and apparatus for data access by a reprogrammable circuit module |
US8676951B2 (en) * | 2011-07-27 | 2014-03-18 | Hitachi, Ltd. | Traffic reduction method for distributed key-value store |
US8990243B2 (en) * | 2011-11-23 | 2015-03-24 | Red Hat, Inc. | Determining data location in a distributed data store |
US9015269B2 (en) | 2012-06-19 | 2015-04-21 | Canon Kabushiki Kaisha | Methods and systems for notifying a server with cache information and for serving resources based on it |
US9819637B2 (en) | 2013-02-27 | 2017-11-14 | Marvell World Trade Ltd. | Efficient longest prefix matching techniques for network devices |
US9032152B2 (en) * | 2013-03-22 | 2015-05-12 | Applied Micro Circuits Corporation | Cache miss detection filter |
CN104173121B (zh) * | 2013-05-27 | 2016-05-25 | 上海微创心通医疗科技有限公司 | 用于输送植入体的电动手柄及输送系统 |
US10474961B2 (en) * | 2013-06-20 | 2019-11-12 | Viv Labs, Inc. | Dynamically evolving cognitive architecture system based on prompting for additional user input |
US9594542B2 (en) * | 2013-06-20 | 2017-03-14 | Viv Labs, Inc. | Dynamically evolving cognitive architecture system based on training by third-party developers |
US9633317B2 (en) * | 2013-06-20 | 2017-04-25 | Viv Labs, Inc. | Dynamically evolving cognitive architecture system based on a natural language intent interpreter |
US10366070B2 (en) * | 2015-02-20 | 2019-07-30 | Scality S.A. | Locking and I/O improvements of systems built with distributed consistent database implementations within an object store |
CA2876466C (en) * | 2014-12-29 | 2022-07-05 | Ibm Canada Limited - Ibm Canada Limitee | Scan optimization using bloom filter synopsis |
US10042875B2 (en) * | 2016-09-26 | 2018-08-07 | International Business Machines Corporation | Bloom filter index for device discovery |
US10579633B2 (en) | 2017-08-31 | 2020-03-03 | Micron Technology, Inc. | Reducing probabilistic filter query latency |
-
2017
- 2017-08-31 US US15/691,998 patent/US10579633B2/en active Active
-
2018
- 2018-08-07 CN CN202111355976.7A patent/CN114064756A/zh active Pending
- 2018-08-07 KR KR1020227010712A patent/KR102461152B1/ko active IP Right Grant
- 2018-08-07 WO PCT/US2018/045602 patent/WO2019045961A1/en active Application Filing
- 2018-08-07 KR KR1020207008805A patent/KR102382607B1/ko active IP Right Grant
- 2018-08-07 CN CN201880063595.1A patent/CN111226208B/zh active Active
- 2018-08-15 TW TW107128397A patent/TWI663511B/zh active
- 2018-08-15 TW TW108117591A patent/TWI720491B/zh active
- 2018-08-15 TW TW110106029A patent/TWI790550B/zh active
-
2020
- 2020-01-22 US US16/749,523 patent/US11409753B2/en active Active
-
2022
- 2022-08-08 US US17/882,862 patent/US20220374148A1/en active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11409753B2 (en) | 2017-08-31 | 2022-08-09 | Micron Technology, Inc. | Reducing probabilistic filter query latency |
Also Published As
Publication number | Publication date |
---|---|
US20220374148A1 (en) | 2022-11-24 |
TWI720491B (zh) | 2021-03-01 |
US20200159727A1 (en) | 2020-05-21 |
KR20220045077A (ko) | 2022-04-12 |
TWI663511B (zh) | 2019-06-21 |
US20190065557A1 (en) | 2019-02-28 |
CN111226208B (zh) | 2021-12-03 |
US10579633B2 (en) | 2020-03-03 |
CN114064756A (zh) | 2022-02-18 |
TW202131188A (zh) | 2021-08-16 |
US11409753B2 (en) | 2022-08-09 |
KR20200036049A (ko) | 2020-04-06 |
TWI790550B (zh) | 2023-01-21 |
TW201921246A (zh) | 2019-06-01 |
KR102461152B1 (ko) | 2022-10-31 |
CN111226208A (zh) | 2020-06-02 |
KR102382607B1 (ko) | 2022-04-08 |
WO2019045961A1 (en) | 2019-03-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI663511B (zh) | 縮減機率篩選查詢延時 | |
US10534547B2 (en) | Consistent transition from asynchronous to synchronous replication in hash-based storage systems | |
US9891858B1 (en) | Deduplication of regions with a storage system | |
US11558487B2 (en) | Methods and systems for stream-processing of biomedical data | |
US10303797B1 (en) | Clustering files in deduplication systems | |
US8370315B1 (en) | System and method for high performance deduplication indexing | |
US8087017B1 (en) | Trace-assisted prefetching of virtual machines in a distributed system | |
WO2018064962A1 (zh) | 数据存储方法、电子设备和计算机非易失性存储介质 | |
JP5886447B2 (ja) | ロケーション非依存のファイル | |
US9672216B2 (en) | Managing deduplication in a data storage system using a bloomier filter data dictionary | |
US11016676B2 (en) | Spot coalescing of distributed data concurrent with storage I/O operations | |
WO2016029441A1 (zh) | 一种文件扫描方法及装置 | |
WO2015118865A1 (ja) | 情報処理装置、情報処理システム及びデータアクセス方法 | |
WO2019120226A1 (zh) | 数据访问预测方法和装置 | |
JP6089890B2 (ja) | ストレージ制御装置、ストレージ制御装置の制御方法およびストレージ制御装置の制御プログラム | |
Luo et al. | {SMART}: A {High-Performance} Adaptive Radix Tree for Disaggregated Memory | |
US10936227B2 (en) | Method, device, and computer program product for recognizing reducible contents in data to be written | |
WO2024174478A1 (zh) | 一种数据处理方法及数据存储系统 | |
Zhang et al. | Data deduplication cluster based on similarity-locality approach | |
Bertasi et al. | FASTDD: an open source forensic imaging tool | |
CN113407462A (zh) | 一种数据处理的方法、装置、电子设备及介质 |