文件映射壓縮的制作方法
【專利摘要】用于壓縮文件映射的方法、系統(tǒng)和裝置,包括在計算機(jī)存儲介質(zhì)上被編碼的計算機(jī)程序。在一個方面,一種方法包括訪問由文件系統(tǒng)維護(hù)的文件,該文件系統(tǒng)管理對塊設(shè)備的訪問。該文件包括與相應(yīng)的邏輯塊編號和相應(yīng)的塊索引關(guān)聯(lián)的多個活躍塊。該方法也包括:向文件指派文件索引,分析文件以確定最大塊索引和最小塊索引,并且標(biāo)識在多個活躍塊中的塊游程。每個塊游程包括相應(yīng)的開始塊。對于塊游程中的每個塊游程,該方法包括標(biāo)識相應(yīng)長度。對于每個開始塊,該方法包括生成用于每個開始塊的文件映射條目。該方法也包括在文件映射中存儲文件映射條目。
【專利說明】文件映射壓縮
[0001]相關(guān)申請的交叉引用
[0002]本申請要求于2013年3月14日提交的第13/826,634號美國專利申請的優(yōu)先權(quán),該美國專利申請又是于2012年3月28日提交的第61/616,745號美國臨時專利申請的非臨時申請并且要求該美國臨時專利申請的優(yōu)先權(quán),上述專利申請的全部內(nèi)容通過引用結(jié)合于此。
【技術(shù)領(lǐng)域】
[0003]本說明書涉及壓縮文件映射(file map),并且具體地涉及壓縮用于虛擬機(jī)的文件映射。
【背景技術(shù)】
[0004]云計算是基于網(wǎng)絡(luò)的計算,在該基于網(wǎng)絡(luò)的計算中,在數(shù)據(jù)中心或者“服務(wù)器群”中容納的大型服務(wù)器匯集通常提供如遠(yuǎn)程終端用戶需要的計算資源和數(shù)據(jù)存儲。一些云計算服務(wù)允許終端用戶在云中運(yùn)行用戶提供的服務(wù)器軟件應(yīng)用(例如電子商務(wù)服務(wù)器應(yīng)用、web服務(wù)器或者文件服務(wù)器)。一些其它云計算服務(wù)向終端用戶提供對軟件應(yīng)用(比如字處理器)和其它常用應(yīng)用的訪問,這些終端用戶通過web瀏覽器或者其它客戶端側(cè)軟件利用這些應(yīng)用。用戶的電子數(shù)據(jù)文件通常存儲于服務(wù)器群中而不是用戶的個人計算設(shè)備上。
【發(fā)明內(nèi)容】
[0005]一般而言,可以在包括以下動作的方法中體現(xiàn)在本說明書中描述的主題內(nèi)容的一個創(chuàng)新方面,這些動作是訪問由文件系統(tǒng)維護(hù)的文件,該文件系統(tǒng)管理對塊設(shè)備的訪問。文件包括多個活躍塊。多個活躍塊中的每個活躍塊與相應(yīng)邏輯塊編號和相應(yīng)塊索引關(guān)聯(lián),該塊索引代表塊在輸出文件中相對于其它塊的位置。該方法也包括向文件指派文件索引并且分析文件以確定在文件中包括的最大塊索引和最小塊索引。該方法也包括標(biāo)識在多個活躍塊中的塊游程。每個塊游程包括相應(yīng)開始塊。一些塊游程包括在輸出文件中相互相鄰的多個塊。與相鄰塊關(guān)聯(lián)的邏輯塊編號增加一。對于塊游程中的每個塊游程,該方法包括標(biāo)識塊游程的相應(yīng)長度。對于每個開始塊,該方法包括生成用于每個開始塊的文件映射條目。生成文件映射條目包括以下動作:壓縮文件索引;基于最大塊索引和最小塊索引壓縮與開始塊關(guān)聯(lián)的塊索引;并且壓縮與開始塊關(guān)聯(lián)的塊游程的長度。該方法也包括在文件映射中存儲文件映射條目。這一方面的其它實施例包括各自被配置為執(zhí)行方法的動作的對應(yīng)計算機(jī)系統(tǒng)、裝置和在一個或者多個計算機(jī)存儲設(shè)備上記錄的計算機(jī)程序。一個或者多個計算機(jī)的系統(tǒng)可以被配置為借助讓軟件、固件、硬件或者它們的組合安裝于該系統(tǒng)上來執(zhí)行特定操作或者動作,該軟件、固件、硬件或者它們的組合在操作中使該系統(tǒng)執(zhí)行這些動作。一個或者多個計算機(jī)程序可以被配置為借助包括指令來執(zhí)行特定操作或者動作,這些指令在由數(shù)據(jù)處理裝置執(zhí)行時使該裝置執(zhí)行這些動作。
[0006]前述和其它實施例可以各自可選地單獨或者在組合中包括以下特征中的一個或者多個特征。該方法可以包括基于與文件映射條目關(guān)聯(lián)的邏輯塊編號按順序存儲文件映射條目。文件映射條目中的至少一個文件映射條目是具有格式〈壓縮的文件索引,壓縮的塊索引,壓縮的塊游程的長度〉的三元組。壓縮文件索引和塊索引可以包括使用可變長度壓縮來壓縮文件索引和塊索引。壓縮塊游程的長度可以包括使用算術(shù)編碼、霍夫曼編碼或者通用編碼。文件映射可以包括與由文件系統(tǒng)維護(hù)的至少第二文件關(guān)聯(lián)的文件映射條目,并且壓縮文件索引可以包括基于由文件映射引用的文件數(shù)目壓縮文件索引。第二文件可以被指派與向文件指派的文件索引不同的第二文件索引。文件索引可以唯一地標(biāo)識文件,并且第二文件索引唯一地標(biāo)識第二文件。該方法可以包括在與塊設(shè)備關(guān)聯(lián)的初始化過程期間加載文件映射;并且對于在文件映射中包括的每第N個文件映射條目:在數(shù)據(jù)結(jié)構(gòu)中存儲指向第N個文件映射條目的指針,其中N是大于I的整數(shù),并且其中指向第N個文件映射條目的指針存儲于基于與除以N的第N個文件映射條目關(guān)聯(lián)的邏輯塊編號的位置。該方法可以包括接收對于訪問特定塊的請求,其中特定塊與特定塊編號關(guān)聯(lián);并且標(biāo)識與特定塊對應(yīng)的文件映射條目而不對多于N個的文件映射條目進(jìn)行解碼。
[0007]可以實施在本文中描述的主題內(nèi)容的具體實施例以便實現(xiàn)以下優(yōu)點中的一個或者多個優(yōu)點。在一些實施方式中,壓縮的文件映射可以提供或者貢獻(xiàn)提高的文件訪問速率,因為文件管理器由于減少的大小而可以在存儲器中存儲多個文件映射。此外,由于可以在存儲器中存儲多個文件映射,所以更不頻繁地在存儲器中交換輸入和輸出文件映射,這也可以提高文件訪問速率和系統(tǒng)的性能。另一優(yōu)點可以是文件管理器可以訪問數(shù)據(jù)而不先對整個文件映射進(jìn)行解碼。這可以增加文件訪問性能,因為在訪問數(shù)據(jù)之前不先對整個文件映射進(jìn)行解碼。
[0008]在附圖和以下描述中闡述在本說明書中描述的主題內(nèi)容的一個或者多個實施例的細(xì)節(jié)。主題內(nèi)容的其它特征、方面和優(yōu)點將從該描述、附圖和權(quán)利要求中變得清楚。
【專利附圖】
【附圖說明】
[0009]圖1示出包括多個虛擬機(jī)實例的分布式系統(tǒng)的示例。
[0010]圖2圖示對于與虛擬塊設(shè)備通信的示例請求。
[0011]圖3圖示示例數(shù)據(jù)文件和文件映射。
[0012]圖4是用于壓縮文件映射的示例過程的流程圖。
[0013]圖5是用于訪問虛擬塊的示例過程的流程圖。
[0014]在各種附圖中的相似標(biāo)號和標(biāo)示指示相似要素。
【具體實施方式】
[0015]圖1是示例虛擬機(jī)系統(tǒng)100的示意圖示。系統(tǒng)100包括一個或者多個主機(jī)機(jī)器(如比如主機(jī)機(jī)器102)。一般而言,主機(jī)機(jī)器是一個或者多個數(shù)據(jù)處理裝置(比如架裝服務(wù)器或者其它計算設(shè)備)。數(shù)據(jù)處理裝置可以在不同的物理位置并且可以具有不同的能力和計算機(jī)架構(gòu)。主機(jī)機(jī)器可以通過內(nèi)部數(shù)據(jù)通信網(wǎng)絡(luò)116相互通信。內(nèi)部網(wǎng)絡(luò)116可以例如包括一個或者多個有線(例如以太網(wǎng))或者無線(例如W1-FI)網(wǎng)絡(luò)。在一些實施方式中,內(nèi)部網(wǎng)絡(luò)116是內(nèi)部網(wǎng)。主機(jī)機(jī)器也可以通過一個或者多個網(wǎng)關(guān)與在外部網(wǎng)絡(luò)(比如因特網(wǎng))上的設(shè)備通信,該一個或者多個網(wǎng)關(guān)是負(fù)責(zé)在內(nèi)部網(wǎng)絡(luò)116與外部網(wǎng)絡(luò)之間路由數(shù)據(jù)通信流量的數(shù)據(jù)處理裝置。其它類型的外部網(wǎng)絡(luò)是可能的。
[0016]主機(jī)機(jī)器102執(zhí)行如下主機(jī)操作系統(tǒng)106或者其它軟件,該主機(jī)操作系統(tǒng)或者其它軟件虛擬化下層主機(jī)機(jī)器硬件并且管理一個或者多個虛擬機(jī)的并行執(zhí)行(例如虛擬機(jī)監(jiān)視器或者管理程序)。例如,主機(jī)操作系統(tǒng)106管理虛擬機(jī)(VM) 110。雖然在圖1中未示出,但是主機(jī)機(jī)器102可以執(zhí)行第二虛擬機(jī)。VM(比如VM 110)可以包括下層主機(jī)機(jī)器硬件的模擬版本或者不同計算機(jī)架構(gòu)。硬件的模擬版本稱為虛擬硬件(例如虛擬硬件110a)。由虛擬硬件執(zhí)行的軟件稱為客戶軟件。在一些實施方式中,客戶軟件不能確定它是否正在被虛擬硬件或者被物理主機(jī)機(jī)器執(zhí)行。如果在VM中執(zhí)行的客戶軟件或者VM本身出故障或者放棄,則在主機(jī)機(jī)器上執(zhí)行的其它VM不會被影響。主機(jī)機(jī)器的(多個)微處理器可以包括用于通過允許客戶軟件指令直接在主機(jī)機(jī)器的微處理器上被執(zhí)行而無需代碼重新編寫、重新編譯或者指令仿真來使虛擬硬件能夠高效地執(zhí)行軟件應(yīng)用的處理器級機(jī)制。
[0017]VM的客戶軟件可以包括客戶操作系統(tǒng)(例如客戶操作系統(tǒng)IlOb),該客戶操作系統(tǒng)是控制在VM內(nèi)執(zhí)行相應(yīng)客戶軟件應(yīng)用(例如客戶應(yīng)用IlOc)并且向那些應(yīng)用提供服務(wù)的軟件。例如,客戶操作系統(tǒng)可以是UNIX操作系統(tǒng)的變體。其它操作系統(tǒng)是可能的。每個VM可以執(zhí)行相同客戶操作系統(tǒng)或者不同客戶操作系統(tǒng)。在更多實施方式中,VM無需客戶操作系統(tǒng)以便執(zhí)行客戶軟件應(yīng)用。客戶操作系統(tǒng)對資源(比如網(wǎng)絡(luò)和虛擬盤存儲)的訪問由下層主機(jī)操作系統(tǒng)控制。
[0018]VM可以被分配網(wǎng)絡(luò)地址,它的客戶軟件可以通過該網(wǎng)絡(luò)地址與通過內(nèi)部網(wǎng)絡(luò)116或者因特網(wǎng)可達(dá)的其它進(jìn)程通信。例如,在VM 110上執(zhí)行的客戶軟件可以與在第二 VM上執(zhí)行的客戶軟件通信。在一些實施方式中,每個VM被分配一個或者多個唯一網(wǎng)際協(xié)議(IP)版本4或者版本6地址和一個或者多個用戶數(shù)據(jù)報協(xié)議(UDP)端口號。其它地址方案是可能的。
[0019]每個VM (例如VM 110)從下層主機(jī)操作系統(tǒng)的虛擬存儲器被分配虛擬存儲器頁面集合,并且從一個或者多個虛擬塊設(shè)備被分配虛擬盤塊用于由在VM上執(zhí)行的客戶軟件使用。例如,主機(jī)操作系統(tǒng)106向VM 110分配虛擬存儲器頁面和虛擬盤塊。在一些實施方式中,給定的VM不能訪問向其它VM指派的虛擬存儲器頁面。例如,VM 110不能訪問已經(jīng)向不同VM指派的存儲器頁面??梢钥缭絍M重啟來持續(xù)虛擬塊設(shè)備。
[0020]虛擬塊設(shè)備可以是虛擬化的存儲設(shè)備(例如虛擬化的硬盤驅(qū)動器或者虛擬化的RAID陣列)。每個虛擬塊設(shè)備被組織成一個或者多個虛擬塊。每個虛擬塊是作為單元而被訪問的預(yù)定義數(shù)量的數(shù)據(jù)。虛擬塊的大小可以根據(jù)系統(tǒng)約束和要求而變化。虛擬塊的一個示例大小可以是4千字節(jié)。每個虛擬塊與相應(yīng)虛擬塊編號關(guān)聯(lián)??梢越M織每個虛擬塊設(shè)備,從而虛擬塊編號是連續(xù)的。例如,虛擬塊設(shè)備的第一虛擬塊可以是跟隨有虛擬塊編號I等等的虛擬塊編號O。
[0021 ] 每個虛擬塊設(shè)備是物理塊設(shè)備118a_l 18d的匯集或者物理塊設(shè)備118a_l 18d的部分(例如物理塊設(shè)備118a-118d的一個或者多個物理塊)的匯集。物理塊設(shè)備118a-118n例如耦合到主機(jī)機(jī)器或者通過內(nèi)部網(wǎng)絡(luò)116可用。物理塊設(shè)備IISa-118η可以是任何類型的存儲設(shè)備。例如,物理塊設(shè)備118a-118n可以是硬盤驅(qū)動器、網(wǎng)絡(luò)可訪問存儲設(shè)備、RAID陣列等。與虛擬塊設(shè)備相似,每個物理塊設(shè)備118a-118n可以被組織成一個或者多個物理塊。每個物理塊可以是作為單位而被訪問的預(yù)定義數(shù)量的數(shù)據(jù)。物理塊的大小可以根據(jù)系統(tǒng)約束和要求而變化。物理塊的一個示例大小可以是4千字節(jié)。在一些實施方式中,物理塊的大小等于虛擬塊的大小。每個物理塊與物理塊編號(例如邏輯塊編號)關(guān)聯(lián),該物理塊編號指示物理塊相對于物理塊位于其上的存儲設(shè)備而言的相對位置。在物理塊設(shè)備118上的物理塊可以通過物理塊編號來組織,從而物理塊編號是連續(xù)和遞增的。例如,物理塊設(shè)備的第一物理塊可以是物理塊編號O,下一物理塊可以是物理塊編號1,等等。
[0022]對物理塊設(shè)備118a_118n的訪問由文件系統(tǒng)管理。例如,文件系統(tǒng)可以管理對于從物理塊設(shè)備118a-118n讀取數(shù)據(jù)的請求,并且可以管理對于向物理塊設(shè)備118a_118n寫入數(shù)據(jù)的請求。文件系統(tǒng)可以是可以管理物理塊設(shè)備118a-118n的任何類型的文件系統(tǒng)。例如,文件系統(tǒng)可以是Google File System、分布式文件系統(tǒng)、NTFS文件系統(tǒng)等。
[0023]通過示例并且參照虛擬機(jī)110,在客戶應(yīng)用I1c或者客戶操作系統(tǒng)I1b例如嘗試對虛擬塊設(shè)備執(zhí)行輸入/輸出操作、啟動網(wǎng)絡(luò)通信或者執(zhí)行權(quán)限操作時,虛擬硬件IlOa被中斷,從而主機(jī)操作系統(tǒng)106可以代表虛擬機(jī)110執(zhí)行動作。主機(jī)操作系統(tǒng)106可以用如下進(jìn)程執(zhí)行這些動作,該進(jìn)程在內(nèi)核進(jìn)程空間106b、用戶進(jìn)程空間106a或者二者中執(zhí)行。備選地,主機(jī)操作系統(tǒng)106可以通過向在分離數(shù)據(jù)處理裝置上執(zhí)行的進(jìn)程發(fā)送請求來執(zhí)行動作。
[0024]內(nèi)核進(jìn)程空間106b例如是為主機(jī)操作系統(tǒng)的內(nèi)核106d保留的虛擬存儲器,該內(nèi)核可以包括內(nèi)核擴(kuò)展和設(shè)備驅(qū)動。內(nèi)核進(jìn)程空間具有提高的權(quán)限(有時稱為“管理程序模式”);也就是說,內(nèi)核106d可以執(zhí)行某些權(quán)限操作,這些權(quán)限操作脫離對在用戶進(jìn)程空間106a中運(yùn)行的進(jìn)程的限制。權(quán)限操作的示例包括對不同地址空間的訪問、對在主機(jī)機(jī)器中的特殊功能處理器單元(比如存儲器管理單元)的訪問等等。用戶進(jìn)程空間106a是虛擬存儲器的為用戶模式進(jìn)程保留的單獨部分。用戶模式進(jìn)程不能直接執(zhí)行權(quán)限操作。
[0025]例如,在客戶應(yīng)用IlOc或者客戶操作系統(tǒng)IlOb嘗試對虛擬塊設(shè)備執(zhí)行輸入/輸出操作(例如嘗試發(fā)起向虛擬塊設(shè)備的寫入或者從虛擬塊設(shè)備的讀取)時,虛擬硬件IlOa被中斷,從而主機(jī)操作系統(tǒng)106可以使用塊設(shè)備管理器120來代表虛擬機(jī)110執(zhí)行動作。塊設(shè)備管理器120可以被主機(jī)機(jī)器102執(zhí)行作為內(nèi)核進(jìn)程空間106b或者用戶進(jìn)程空間106a的一部分。備選地,塊設(shè)備管理器120可以在單獨的計算設(shè)備上執(zhí)行。塊設(shè)備管理器120可以是管理物理塊設(shè)備118a-118n的文件系統(tǒng)的一部分或者與該文件系統(tǒng)通信。
[0026]塊設(shè)備管理器120從虛擬機(jī)110接收對于與向虛擬機(jī)110分配的虛擬塊設(shè)備通信的請求。例如,請求可以包括對于從向虛擬機(jī)110分配的一個或者多個虛擬數(shù)據(jù)塊讀取或者向該一個或者多個虛擬數(shù)據(jù)塊寫入的請求。塊設(shè)備管理器120可以具有對可以包括數(shù)據(jù)(例如文件映射條目)的文件映射130的訪問,該數(shù)據(jù)將虛擬數(shù)據(jù)塊映射到在由文件系統(tǒng)維護(hù)的文件中的位置。在文件中的位置可以被文件系統(tǒng)用來從物理塊設(shè)備118a-118n之一讀取與虛擬數(shù)據(jù)塊對應(yīng)的物理數(shù)據(jù)塊。
[0027]圖2圖示處理對于讀取虛擬數(shù)據(jù)塊的示例請求。在圖2的示例請求中,虛擬機(jī)110向塊設(shè)備管理器120提供對于從特定虛擬塊讀取數(shù)據(jù)的請求204。例如,該請求可以通過向特定虛擬塊指派的唯一虛擬塊編號標(biāo)識特定虛擬塊。
[0028]在管理對物理塊設(shè)備118a_118n的訪問的文件系統(tǒng)207中包括的或者可以與文件系統(tǒng)207通信的塊設(shè)備管理器120可以接收讀取請求204并且訪問文件映射130以標(biāo)識與請求的虛擬塊對應(yīng)的文件映射條目。文件映射130可以包括用于向虛擬機(jī)302分配的每個虛擬塊的文件映射條目。文件映射條目可以基于虛擬塊編號來組織,從而虛擬塊編號是連續(xù)和遞增的。例如,在文件映射130中包括的第一文件映射條目可以與虛擬塊編號O關(guān)聯(lián),在文件映射130中包括的第二文件映射條目可以與虛擬塊編號I關(guān)聯(lián),等等。
[0029]每個文件映射條目可以包括如下數(shù)據(jù),該數(shù)據(jù)向文件系統(tǒng)207指示與虛擬塊對應(yīng)的物理塊的位置。例如,文件映射130可以包括文件映射條目,該文件映射條目將虛擬塊映射到由文件系統(tǒng)207維護(hù)的特定數(shù)據(jù)文件210以及在數(shù)據(jù)文件210中的位置(例如位置211b)。文件映射條目可以被文件系統(tǒng)207用來標(biāo)識包括與虛擬塊對應(yīng)的特定物理塊的物理塊設(shè)備118以及特定物理塊在物理塊設(shè)備118內(nèi)的位置。數(shù)據(jù)文件210可以是一組數(shù)據(jù)文件之一,該組數(shù)據(jù)文件被文件系統(tǒng)207維護(hù)并且被文件系統(tǒng)207用來標(biāo)識包括與虛擬數(shù)據(jù)塊對應(yīng)的物理數(shù)據(jù)塊的物理塊設(shè)備。在一些實施方式中,每個物理塊設(shè)備118與單個數(shù)據(jù)文件210關(guān)聯(lián)。在一些實施方式中,每個物理塊設(shè)備可以與多個數(shù)據(jù)文件210關(guān)聯(lián)。
[0030]在圖2的示例中,文件系統(tǒng)207可以接收對于讀取與虛擬塊編號對應(yīng)的數(shù)據(jù)塊的請求?;谠撜埱螅瑝K設(shè)備管理器120可以訪問文件映射130,以標(biāo)識與請求的虛擬塊編號對應(yīng)的文件映射條目。文件映射條目可以標(biāo)識存儲與請求的虛擬塊對應(yīng)的物理數(shù)據(jù)塊的一個或者多個物理塊設(shè)備118a-118n以及在與請求的虛擬塊對應(yīng)的每個物理塊設(shè)備內(nèi)的位置(例如物理塊編號)。
[0031]圖3示出包括示例數(shù)據(jù)文件和壓縮的文件映射的說明性示例300。數(shù)據(jù)文件302和320各自包括標(biāo)識符(例如“數(shù)據(jù)文件A”和“數(shù)據(jù)文件B”)。每個標(biāo)識符可以是任何數(shù)目字節(jié)長并且可以是唯一文字?jǐn)?shù)字串。一般而言,標(biāo)識符是文字?jǐn)?shù)字字符串并且需要多個字節(jié)以存儲標(biāo)識符。例如,示例標(biāo)識符是將需要多個字節(jié)的“/storage_locat1ns/cluster_locat1n/project/disk/segment003/3402439203940923_233453989333_l0099975423.log”。每個數(shù)據(jù)文件302和320與相應(yīng)物理塊設(shè)備關(guān)聯(lián)。在一些實施方式中,數(shù)據(jù)文件302和320與相同物理塊設(shè)備關(guān)聯(lián)但是代表相同物理塊設(shè)備的不同非重疊部分(例如分段)。
[0032]每個數(shù)據(jù)文件302和320包括一個或者多個條目302。每個數(shù)據(jù)文件302和320可以與數(shù)組相似布置并且包括一個或者多個條目。每個數(shù)據(jù)文件條目包括塊索引304和塊編號306。塊索引304標(biāo)識條目在數(shù)據(jù)文件內(nèi)的位置。例如,塊索引304可以與指向數(shù)組中的索引相似。塊編號306標(biāo)識與存儲與虛擬塊編號關(guān)聯(lián)的數(shù)據(jù)的物理塊設(shè)備關(guān)聯(lián)的物理塊編號。
[0033]每個塊編號306也與指示塊編號306活躍還是不活躍的狀態(tài)指示符306關(guān)聯(lián)。如果塊編號306與活躍狀態(tài)指示符308關(guān)聯(lián),則塊編號306與數(shù)據(jù)的當(dāng)前版本關(guān)聯(lián)并且反映當(dāng)前數(shù)據(jù)值,而如果塊編號306與不活躍狀態(tài)指示符308關(guān)聯(lián),則該塊編號與數(shù)據(jù)的更舊版本關(guān)聯(lián)并且不反映當(dāng)前數(shù)據(jù)值。在一些實施方式中,狀態(tài)指示符308是與塊編號306關(guān)聯(lián)的元數(shù)據(jù)。例如,可以在與塊編號306關(guān)聯(lián)的數(shù)據(jù)頭中包括狀態(tài)指示符308。
[0034]數(shù)據(jù)文件302和320可以由示例未壓縮文件映射325或者示例壓縮文件映射330來代表。未壓縮文件映射325包括文件映射條目327。每個文件映射條目327a-g對應(yīng)于虛擬塊編號并且包括數(shù)據(jù)文件標(biāo)識符和塊索引。文件映射條目327h對應(yīng)于向虛擬機(jī)分配的但是不包括數(shù)據(jù)的虛擬塊(例如數(shù)據(jù)未被寫入到的塊)。在一些實施方式中,未壓縮文件映射325可以被部分地壓縮。例如,可以對文件映射條目327e-327g進(jìn)行游程長度壓縮。
[0035]壓縮的文件映射330包括文件映射條目332a_332f。每個文件映射條目332a_e對應(yīng)于虛擬塊。例如,文件映射條目332a對應(yīng)于虛擬塊編號O,并且文件映射條目332b對應(yīng)于虛擬塊編號I。
[0036]每個文件映射條目332可以包括壓縮的文件索引、壓縮的塊索引和壓縮的游程長度??梢栽跀?shù)據(jù)結(jié)構(gòu)(如比如三元組)中組織文件映射條目。三元組可以具有形式〈壓縮的文件索引,壓縮的塊索引,壓縮的游程長度 >??梢允褂闷渌鼣?shù)據(jù)結(jié)構(gòu)。
[0037]壓縮的文件索引可以是唯一地標(biāo)識與請求的虛擬塊對應(yīng)的數(shù)據(jù)文件的索引。文件索引可以基于數(shù)據(jù)文件標(biāo)識符的數(shù)目并且可以使用可變長度編碼算法(如比如均勻編碼算法)來壓縮。例如,均勻編碼算法可以壓縮文件索引并且使用Ceil(l0g2(數(shù)據(jù)文件數(shù)目+1))位長的代碼來代表文件索引。如圖3中所示,代表文件索引的代碼等于分別與數(shù)據(jù)文件A和數(shù)據(jù)文件B對應(yīng)的01和10。在一些實施方式中,使用壓縮技術(shù)而不是可變長度編碼算法來壓縮文件索引。此外,還可以使用自適應(yīng)或者靜態(tài)壓縮技術(shù)??梢源鎯@樣的表,該表包括代碼和對應(yīng)的數(shù)據(jù)文件標(biāo)識符。該表可以被塊設(shè)備管理器用來翻譯代碼。
[0038]壓縮的塊索引可以標(biāo)識在數(shù)據(jù)文件內(nèi)與特定虛擬塊對應(yīng)的位置。例如,數(shù)據(jù)文件可以與數(shù)組相似布置,并且塊索引可以用作為用于訪問在數(shù)據(jù)文件中的特定位置/條目的索引。與文件索引相似,塊索引可以使用可變長度編碼算法(例如均勻編碼)來壓縮。用來壓縮塊索引的可變長度編碼算法可以與用來對文件索引進(jìn)行編碼的可變長度編碼算法相同或者可以不同。在一些實施方式中,用來壓縮文件索引的壓縮算法與用來壓縮塊索引的壓縮算法不同。
[0039]壓縮的塊索引可以使用Ceil(l0g2(MaX[i]-Min[i]+l)位長的代碼來代表塊索引,其中Max[i]代表與在數(shù)據(jù)文件中包括的活躍塊關(guān)聯(lián)的最大塊索引,并且Min[i]代表與在數(shù)據(jù)文件中包括的活躍塊關(guān)聯(lián)的最小塊索引。如圖3中所見,與數(shù)據(jù)文件302關(guān)聯(lián)的壓縮的塊索引使用分別與塊索引0、5和2對應(yīng)的三位代碼000、101和010來代表,并且與數(shù)據(jù)文件B關(guān)聯(lián)的壓縮的塊索引使用分別與塊索引I和2對應(yīng)的I位代碼O和I來代表。在一些實施方式中,塊索引使用除了可變長度編碼算法之外的壓縮技術(shù)來壓縮。此外,還可以使用自適應(yīng)或者靜態(tài)壓縮技術(shù)。代碼和對應(yīng)的塊索引值可以被存儲于這樣的表中,該表存儲代碼和對應(yīng)的數(shù)據(jù)文件標(biāo)識符。
[0040]壓縮的游程長度可以代表基于物理塊編號按順序存儲的活躍塊的數(shù)目(“塊游程”)。參照數(shù)據(jù)文件302,物理塊4、物理塊5和物理塊6是活躍塊并且相互相鄰存儲于數(shù)據(jù)文件302中。作為結(jié)果,與在物理塊4開始的塊游程關(guān)聯(lián)的游程長度等于三。每個塊游程包括開始塊(即游程的第一個塊)。在以上示例中,開始塊是物理塊4。在一些實例中,塊游程可以具有等于一個塊的游程長度。例如,在物理塊O開始的塊游程等于1,并且開始塊等于物理塊O。
[0041]游程長度也可以使用各種壓縮技術(shù)來壓縮。例如,游程長度可以使用可變長度編碼算法(如例如算術(shù)編碼、霍夫曼編碼或者通用代碼(例如一元代碼、Golomb代碼、Rice代碼等))來壓縮。雖然圖3圖示壓縮的游程長度為數(shù)字,但是每個文件映射條目可以包括用于代表壓縮的游程長度的與編碼算法關(guān)聯(lián)的代碼。例如,如果游程長度使用霍夫曼編碼來壓縮,則壓縮的游程長度由霍夫曼代碼代表。編碼算法可以是自適應(yīng)的或者靜態(tài)的。塊索引和游程長度可以用于游程長度壓縮。用來代表游程長度的代碼以及與代碼對應(yīng)的值可以存儲于表中。
[0042]在一些實施方式中,文件映射330包括不與虛擬塊編號對應(yīng)的文件映射條目332f。取而代之,文件映射條目332f可以被文件系統(tǒng)用來代表不活躍的塊或者不存儲數(shù)據(jù)的塊,例如數(shù)據(jù)尚未被寫入到這些塊。
[0043]圖4是用于壓縮文件映射的示例過程400的流程圖。過程400通過分析未壓縮的文件映射、構(gòu)建由文件映射引用的數(shù)據(jù)文件的列表并且收集用來對文件映射條目進(jìn)行編碼的統(tǒng)計量來開始(在402)。例如,塊設(shè)備管理器120可以遍歷未壓縮的文件映射(例如未壓縮的文件映射325)并且構(gòu)建與物理塊設(shè)備118 (或者物理塊設(shè)備118的部分)對應(yīng)的、將在文件映射中代表的數(shù)據(jù)文件(例如數(shù)據(jù)文件302和320)的列表,物理塊設(shè)備118 (或者物理塊設(shè)備118的這些部分)對應(yīng)于向特定VM(例如VM 110)分配的虛擬塊設(shè)備。
[0044]如以上描述的那樣,為每個數(shù)據(jù)文件收集用來對文件映射條目進(jìn)行編碼的統(tǒng)計量(在402)。例如,在塊設(shè)備管理器120構(gòu)建數(shù)據(jù)文件列表時,塊設(shè)備管理器120可以確定用于每個數(shù)據(jù)文件的統(tǒng)計量。統(tǒng)計量可以包括信息(如比如每個數(shù)據(jù)文件在文件映射中被引用的頻率,例如多少文件映射條目引用該數(shù)據(jù)文件)??梢曰趬K游程調(diào)整數(shù)據(jù)文件引用的頻率。例如,參照未壓縮的文件映射325,塊設(shè)備管理器120將把文件映射條目327e-327g視為對數(shù)據(jù)文件A的單個引用。此外,統(tǒng)計量還可以包括與由每個數(shù)據(jù)文件引用的活躍塊對應(yīng)的最大塊索引和最小塊索引。
[0045]參照圖3的示例未壓縮文件映射325,塊設(shè)備管理器120可以分析未壓縮的文件映射325并且可以確定兩個數(shù)據(jù)文件(例如數(shù)據(jù)文件302和數(shù)據(jù)文件320)被引用。此外,塊設(shè)備管理器120還可以確定數(shù)據(jù)文件302被引用三次(塊4-6的游程視為一次引用)并且數(shù)據(jù)文件320被引用兩次。此外,塊設(shè)備管理器120可以確定由數(shù)據(jù)文件302引用的最大塊索引和最小塊索引分別等于5和0,并且由數(shù)據(jù)文件320引用的最大塊索引和最小塊索引分別等于2和I (數(shù)據(jù)位置B的塊索引O是不活躍塊)。
[0046]串行化數(shù)據(jù)文件的條目(在406)。例如,塊設(shè)備管理器可以基于與在數(shù)據(jù)文件中的條目關(guān)聯(lián)的塊編號生成臨時文件映射。參照圖2中的示例,塊設(shè)備管理器120可以生成臨時文件映射,該臨時文件映射基于與數(shù)據(jù)文件的條目關(guān)聯(lián)的塊編號來串行化這些條目。臨時映射可以與以下臨時映射相似:
[0047]塊編號O:數(shù)據(jù)文件 A,塊索引=0,max[i]/min[i] = [5,0]
[0048]塊編號1:數(shù)據(jù)文件 B,塊索引=2, max[i]/min[i] = [2, I]
[0049]塊編號2:數(shù)據(jù)文件 A,塊索引=5, max[i]/min[i] = [5, O]
[0050]塊編號3:數(shù)據(jù)文件 B,塊索引=l,max[i]/min[i] = [2,I]
[0051]塊編號4:數(shù)據(jù)文件 A,塊索引=2,max[i]/min[i] = [5,0]
[0052]塊編號5:數(shù)據(jù)文件 A,塊索引=3,max[i]/min[i] = [5,0]
[0053]塊編號6:數(shù)據(jù)文件 A,塊索引=4, max[i]/min[i] = [5, O]
[0054]從臨時文件映射提取三元組并且生成壓縮的文件映射條目(在408)。例如,塊設(shè)備管理器120可以分析在臨時文件映射中的每個條目并且生成三元組。三元組可以包括壓縮的文件索引(例如代表文件索引的代碼)、壓縮的塊索引(例如代表塊索引的代碼)和壓縮的游程長度(例如代表游程長度的代碼)。
[0055]文件索引可以被均勻編碼以高效地代表數(shù)據(jù)文件。例如,塊設(shè)備管理器120可以基于數(shù)據(jù)文件總數(shù)向每個數(shù)據(jù)文件指派代表文件索引的唯一代碼。文件索引被均勻編碼以高效地代表數(shù)據(jù)文件標(biāo)識符。例如,可以以ceil(l0g2(數(shù)據(jù)文件數(shù)目+1))位來代表文件索引。參照圖3的示例數(shù)據(jù)文件302和320,塊設(shè)備管理器120可以使用兩位代碼(即ceil (1g2(2+1))位長的代碼)來代表數(shù)據(jù)文件標(biāo)識符。塊設(shè)備管理器120可以向數(shù)據(jù)文件302指派兩位代碼(例如01)并且向數(shù)據(jù)文件320指派不同的兩位代碼(例如10)。由于數(shù)據(jù)文件標(biāo)識符通常是長文字-數(shù)字串,所以被均勻編碼的文件索引可以使用更少存儲器來存儲。
[0056]塊索引可以被均勻編碼以高效地代表塊索引。例如,塊設(shè)備管理器120可以使用由數(shù)據(jù)文件引用的最大塊索引和最小塊索引,以壓縮與數(shù)據(jù)文件關(guān)聯(lián)的塊索引。與數(shù)據(jù)文件關(guān)聯(lián)的塊索引可以使用ceil (1g2 (最大塊索引-最小塊索引+1))位長的代碼來代表。參照示例數(shù)據(jù)文件302和320,用于數(shù)據(jù)文件A 302的塊索引可以使用三位代碼(例如000、
010、100等)來代表,而用于數(shù)據(jù)文件B 320的關(guān)聯(lián)塊索引可以使用一位代碼(例如O和I)來代表。
[0057]也可以對臨時文件映射的條目進(jìn)行游程長度編碼。例如,塊設(shè)備管理器120可以分析臨時文件映射的每個條目并且確定條目是否是塊游程的開始(“開始塊”)。例如,塊設(shè)備管理器120可以分析臨時文件映射的條目并且確定塊編號O對應(yīng)于單個塊的游程(例如開始塊等于塊零并且游程長度等于I)而塊編號四對應(yīng)于三個塊的游程(開始塊等于塊四并且游程長度等于三)。
[0058]每個游程長度可以使用可變編碼算法(如比如霍夫曼代碼、算術(shù)代碼和通用代碼)來壓縮。三元組可以包括代表游程長度的代碼(例如霍夫曼代碼或者通用代碼)。
[0059]可以周期性地執(zhí)行過程400。例如,可以在預(yù)定數(shù)量的時間已經(jīng)流逝之后執(zhí)行過程400。預(yù)定數(shù)量的時間可以基于系統(tǒng)要求或者處理器/系統(tǒng)能力。此外,可以在寫入預(yù)定數(shù)目的塊之后執(zhí)行過程400。例如,可以在預(yù)定數(shù)目的寫入請求之后執(zhí)行過程400。此外,可以在關(guān)閉或者保存文件之后執(zhí)行過程400。例如,可以在VM(例如VM 110)的用戶關(guān)閉或者保存在虛擬塊設(shè)備上存儲的文件之后執(zhí)行過程400。
[0060]圖5是用于訪問虛擬塊的示例過程500的流程圖。過程500通過向存儲器中加載壓縮的文件映射來開始(在502)。例如,在初始化虛擬機(jī)110、虛擬塊設(shè)備或者物理塊設(shè)備118期間,壓縮的文件映射可以被加載到存儲器(如比如隨機(jī)存取存儲器)中。
[0061]對壓縮的文件映射進(jìn)行解碼(在504)。例如,塊設(shè)備管理器120可以基于壓縮的文件映射的編碼對壓縮的文件映射進(jìn)行解碼。塊設(shè)備管理器120可以遍歷文件映射并且標(biāo)識文件索引列表。參照圖2的示例,塊設(shè)備管理器120可以遍歷文件映射230并且確定有兩個數(shù)據(jù)文件,因為有兩個不同文件索引(例如兩個兩位代碼)。此外,塊設(shè)備管理器120還可以確定與每個數(shù)據(jù)文件關(guān)聯(lián)的最大塊索引和最小塊索引。
[0062]塊索引然后可以對每個壓縮的文件映射條目進(jìn)行解碼。例如,塊設(shè)備管理器120可以從壓縮的文件映射條目對代表文件索引的第一條目進(jìn)行解碼。在一些實施方式中,塊設(shè)備管理器120通過從壓縮的文件映射條目提取第一 ceil (1g2 (數(shù)據(jù)文件數(shù)目+1))位來對文件索引進(jìn)行解碼。參照圖3的示例壓縮文件映射230,塊設(shè)備管理器120可以確定文件映射條目的、與代表文件索引的代碼對應(yīng)的前兩位。塊索引然后可以從壓縮的文件映射條目對代表壓縮的塊索引的下一條目進(jìn)行解碼。在一些實施方式中,塊設(shè)備管理器120可以通過從壓縮的文件映射條目提取下一 ceil (1g2 (最大塊索引-最小塊索引+1))位來對塊索引進(jìn)行解碼。參照圖3的示例壓縮文件映射230,塊設(shè)備管理器120可以提取與代表塊索引的代碼對應(yīng)的接下來的三位。塊設(shè)備管理器120可以訪問表,以解釋代表文件索引和塊索引的代碼。
[0063]在文件映射被解碼時,每第N個文件映射條目的位置存儲于數(shù)據(jù)結(jié)構(gòu)中(在506)。例如,在塊設(shè)備管理器120對文件映射條目進(jìn)行解碼時,塊設(shè)備管理器120可以在解壓的文件映射中存儲指向每第N個條目的指針。指針可以存儲于數(shù)組中。參照圖3的示例文件映射230并且假設(shè)N = 2,塊設(shè)備管理器120可以在數(shù)組中存儲指向壓縮的文件映射條目0、2和4的指針。基于文件映射條目的順序存儲指針。例如,在數(shù)組中的第一條目(索引O)將存儲指向文件映射條目O的指針,并且在數(shù)組中的第二條目(索引I)將存儲指向文件映射條目2的指針。N的值可以是任何數(shù)并且可以基于系統(tǒng)要求和處理/系統(tǒng)能力來選擇。
[0064]每個數(shù)組可以是元組。例如,每個數(shù)組可以存儲元組,該元組包括指向文件映射條目的指針和開始塊。在以上示例中,在數(shù)組中的第一條目將存儲指向文件映射條目O的指針和開始塊O。通過存儲元組,塊設(shè)備管理器120可以存儲在塊游程中包括的文件映射條目的位置。例如,在數(shù)組中的與在文件映射條目〈文件索引=1,塊索引=4,游程長度=3>中代表的塊游程中包括的虛擬塊7對應(yīng)的第四條目將存儲指向文件映射條目4的指針和游程的開始塊(例如塊編號4)。
[0065]以下示出第二示例未壓縮文件映射。
[0066]文件映射條目
[0067]O:<文件索引1,塊索引0,游程長度=1>
[0068]I:<文件索引1,塊索引3,游程長度=6>
[0069]2:<文件索引2,塊索引2,游程長度=3>
[0070]如果假設(shè)N等于2,則數(shù)組可以與以下數(shù)組相似:
[0071]O:<指向文件映射條目O的指針,開始塊=0>
[0072]I:<指向文件映射條目I的指針,開始塊=1>
[0073]2:<指向文件映射條目I的指針,開始塊=1>
[0074]3:<指向文件映射條目I的指針,開始塊=1>
[0075]4:<指向文件映射條目2的指針,開始塊=2>
[0076]如以上所見,塊編號2、4和6對應(yīng)于指向文件映射條目I的數(shù)組索引1、2和3,因為在開始于塊I的游程中包括塊編號2、4和6。
[0077]在生成指針數(shù)組(在506)之后,可以從存儲器去除解碼的文件映射。在VM之后,已經(jīng)初始化虛擬塊設(shè)備或者物理塊設(shè)備,可以接收對于訪問特定塊編號的請求(在508)。例如,在VM 110上執(zhí)行的應(yīng)用可以請求訪問在特定虛擬塊(例如虛擬塊I)中存儲的數(shù)據(jù)。塊設(shè)備管理器120可以接收讀取請求。
[0078]塊設(shè)備管理器可以確定與最接近請求的虛擬塊并且小于請求的虛擬塊的第N個文件映射條目對應(yīng)的數(shù)組索引(在510)。例如,如果請求的虛擬塊等于3,則塊設(shè)備管理器120可以確定最接近請求的虛擬塊并且小于請求的虛擬塊的第N個文件映射條目是在數(shù)組(例如數(shù)組索引I)中的第二條目中存儲的虛擬塊2。
[0079]可以基于指針數(shù)組確定與請求的虛擬塊對應(yīng)的文件映射條目(在512)。例如,塊設(shè)備管理器120可以訪問與最接近請求的虛擬塊的第N個文件映射條目對應(yīng)的數(shù)組并且使用在數(shù)組條目中存儲的指針來訪問第N個文件映射條目。塊設(shè)備管理器120然后可以對其余文件映射條目進(jìn)行解碼直至解壓正確的文件映射條目。例如,塊設(shè)備管理器120可以訪問第二數(shù)組條目(索引=D并且使用在數(shù)組條目中存儲的指針來訪問在文件映射條目2的文件映射。塊設(shè)備管理器120然后可以對其余文件映射條目進(jìn)行解碼直至它到達(dá)用于請求的塊3的文件映射條目。這可以允許塊設(shè)備管理器120對N個或者更少的文件映射條目進(jìn)行解碼以用于向文件映射中的任何訪問,并且避免對于每個對訪問文件映射的請求對整個文件映射進(jìn)行解碼。這也可以允許向文件映射中的隨機(jī)訪問而不對整個文件映射進(jìn)行解碼。
[0080] 與請求的虛擬塊對應(yīng)的文件映射條目被解碼并且返回到文件系統(tǒng),文件系統(tǒng)然后可以使用該信息來訪問在與請求的虛擬塊編號對應(yīng)的物理塊編號存儲的數(shù)據(jù)。
[0081 ] 可以在數(shù)字電子電路中,或者在包括在本說明書中公開的結(jié)構(gòu)及其結(jié)構(gòu)等效物的計算機(jī)軟件、固件或者硬件中,或者在它們中的一項或者多項的組合中實施在本說明書中描述的主題內(nèi)容和操作的實施例。可以實施在本說明書中描述的主題內(nèi)容的實施例為一個或者多個計算機(jī)程序,即,在計算機(jī)存儲介質(zhì)上被編碼的用于由數(shù)據(jù)處理裝置執(zhí)行或者控制數(shù)據(jù)處理裝置的操作的一個或者多個計算機(jī)程序指令模塊。備選地或者附加地,可以在機(jī)器生成的電、光或者電磁信號上對程序指令進(jìn)行編碼,該電、光或者電磁信號被生成為對信息進(jìn)行編碼以用于向適當(dāng)接收器裝置發(fā)送來用于由數(shù)據(jù)處理裝置執(zhí)行。計算機(jī)存儲介質(zhì)可以是計算機(jī)可讀存儲設(shè)備、計算機(jī)可讀存儲基質(zhì)、隨機(jī)或者串行存取存儲器陣列或者設(shè)備、或者它們中的一項或者多項的組合,或者被包括在計算機(jī)可讀存儲設(shè)備、計算機(jī)可讀存儲基質(zhì)、隨機(jī)或者串行存取存儲器陣列或者設(shè)備、或者它們中的一項或者多項的組合中。另夕卜,盡管計算機(jī)存儲介質(zhì)不是傳播的信號,但是計算機(jī)存儲介質(zhì)可以是在人為地生成的傳播的信號中被編碼的計算機(jī)程序指令的源或者目的地。計算機(jī)存儲介質(zhì)也可以是一個或者多個單獨的物理部件或者介質(zhì)(例如多個CD、盤或者其它存儲設(shè)備),或者被包括在一個或者多個單獨的物理部件或者介質(zhì)中。
[0082]可以實施在本說明書中描述的操作為由數(shù)據(jù)處理裝置對在一個或者多個計算機(jī)可讀存儲設(shè)備上存儲的或者從其它來源接收的數(shù)據(jù)執(zhí)行的操作。
[0083]術(shù)語“數(shù)據(jù)處理裝置”涵蓋所有種類的用于處理數(shù)據(jù)的裝置、設(shè)備和機(jī)器,舉例而言,包括可編程處理器、計算機(jī)、片上系統(tǒng)或者前述各項的多個或者組合。該裝置可以包括專用邏輯電路(例如FPGA(現(xiàn)場可編程門陣列)或者ASIC(專用集成電路))。該裝置除了硬件之外也可以包括為討論的計算機(jī)程序創(chuàng)建執(zhí)行環(huán)境的代碼,例如構(gòu)成處理器固件、協(xié)議棧、數(shù)據(jù)庫管理系統(tǒng)、操作系統(tǒng)、跨平臺運(yùn)行時間環(huán)境、虛擬機(jī)或者它們中的一項或者多項的組合的代碼。該裝置和執(zhí)行環(huán)境可以實現(xiàn)各種不同的計算模型基礎(chǔ)設(shè)施,比如web服務(wù)、分布式計算和網(wǎng)格計算基礎(chǔ)設(shè)施。
[0084]可以用包括編譯或者解譯語言、說明或者過程語言在內(nèi)的任何形式的編程語言來編寫計算機(jī)程序(也稱為程序、軟件、軟件應(yīng)用、腳本或者代碼),并且可以用任何形式來部署它,包括被部署為單獨程序或者被部署為適合于在計算環(huán)境中使用的模塊、部件、子例程、對象或者其它單元。計算機(jī)程序可以但是無需對應(yīng)于在文件系統(tǒng)中的文件。程序可以存儲于保持其它程序或者數(shù)據(jù)(例如存儲于標(biāo)記語言文檔中的一個或者多個腳本)的文件的一部分中,專用于討論的程序的單個文件中,或者多個協(xié)調(diào)的文件(例如存儲一個或者多個模塊、子程序或者代碼的各部分的文件)中。計算機(jī)程序可以被部署為在一個計算機(jī)上或者在位于一個地點或者跨多個地點分布并且通過通信網(wǎng)絡(luò)互連的多個計算機(jī)上被執(zhí)行。
[0085]在本說明書中描述的過程和邏輯流程可以被一個或者多個可編程處理器執(zhí)行,該一個或者多個可編程處理器執(zhí)行一個或者多個計算機(jī)程序,以通過對輸入數(shù)據(jù)進(jìn)行操作并且生成輸出來執(zhí)行動作。過程和邏輯流程也可以由專用邏輯電路(例如FPGA(現(xiàn)場可編程門陣列)或者ASIC(專用集成電路))來執(zhí)行,并且也可以實施裝置為該專用邏輯電路。
[0086]舉例而言,適合用于執(zhí)行計算機(jī)程序的處理器包括通用微處理器和專用微處理器兩者以及任何種類的數(shù)字計算機(jī)的任何一個或者多個處理器。一般而言,處理器可以從只讀存儲器或者隨機(jī)存取存儲器或者二者接收指令和數(shù)據(jù)。計算機(jī)的基本單元是用于根據(jù)指令執(zhí)行動作的處理器以及用于存儲指令和數(shù)據(jù)的一個或者多個存儲器設(shè)備。一般而言,計算機(jī)也可以包括用于存儲數(shù)據(jù)的一個或者多個海量存儲設(shè)備(例如磁盤、光磁盤或者光盤),或者被操作地耦合為從該一個或者多個海量存儲設(shè)備接收數(shù)據(jù)或者向該一個或者多個海量存儲設(shè)備傳送數(shù)據(jù)或者二者。然而,計算機(jī)無需具有這樣的設(shè)備。另外,可以在另一設(shè)備(聊舉數(shù)例,例如電視機(jī)(該電視機(jī)具有在該電視機(jī)中嵌入或者耦合到該電視機(jī)的一個或者多個處理器)、移動電話、個人數(shù)字助理(PDA)、移動音頻或者視頻播放器、游戲控制臺、全球定位系統(tǒng)(GPS)接收器或者便攜存儲設(shè)備(例如通用串行總線(USB)閃存驅(qū)動))中嵌入計算機(jī)。適合用于存儲計算機(jī)程序指令和數(shù)據(jù)的設(shè)備包括所有形式的非易失性存儲器、介質(zhì)和存儲器設(shè)備(舉例而言,包括半導(dǎo)體存儲器設(shè)備(例如EPROM、EEPROM和閃存設(shè)備);磁盤(例如內(nèi)部硬盤或者可拆卸盤);光磁盤;以及⑶-ROM和DVD-ROM盤。處理器和存儲器可以由專用邏輯電路補(bǔ)充或者并入專用邏輯電路中。
[0087]為了提供與用戶的交互,在本說明書中描述的主題內(nèi)容的實施例可以被實施于計算機(jī)上,該計算機(jī)具有用于向用戶顯示信息的顯示設(shè)備(例如CRT(陰極射線管)或者LCD(液晶顯示器)監(jiān)視器)以及用戶可以通過其向計算機(jī)提供輸入的鍵盤和指點設(shè)備(例如鼠標(biāo)或者軌跡球)。其它種類的設(shè)備也可以用來提供與用戶的交互;例如,向用戶提供的反饋可以是任何形式的感官反饋(例如視覺反饋、聽覺反饋或者觸覺反饋);并且可以用包括聲音、話音或者觸覺輸入在內(nèi)的任何形式接收來自用戶的輸入。此外,計算機(jī)可以通過向用戶使用的設(shè)備發(fā)送文檔和從該設(shè)備接收文檔;例如,通過響應(yīng)于從在用戶的客戶端設(shè)備上的web瀏覽器接收的請求向該web瀏覽器發(fā)送網(wǎng)頁來與用戶交互。
[0088]可以在計算系統(tǒng)中實施在本說明書中描述的主題內(nèi)容的實施例,該計算系統(tǒng)包括后端部件(例如作為數(shù)據(jù)服務(wù)器),或者包括中間件部件(例如應(yīng)用服務(wù)器),或者包括前端部件(例如具有圖形用戶界面或者Web瀏覽器(用戶可以通過該圖形用戶界面或者Web瀏覽器與在本說明書中描述的主題內(nèi)容的實施方式交互)的客戶端計算機(jī)),或者一個或者多個這樣的后端部件、中間件部件或者前端部件的任何組合??梢酝ㄟ^任何數(shù)字?jǐn)?shù)據(jù)通信形式或者介質(zhì)(例如通信網(wǎng)絡(luò))互連系統(tǒng)的部件。通信網(wǎng)絡(luò)的示例包括局域網(wǎng)(“LAN”)和廣域網(wǎng)(“WAN”)、互連網(wǎng)絡(luò)(例如因特網(wǎng))和對等網(wǎng)絡(luò)(例如自組織對等網(wǎng)絡(luò))。
[0089]計算系統(tǒng)可以包括客戶端和服務(wù)器。客戶端和服務(wù)器一般相互遠(yuǎn)離并且通常通過通信網(wǎng)絡(luò)交互。借助在相應(yīng)計算機(jī)上運(yùn)行并且相互具有客戶端-服務(wù)器關(guān)系的計算機(jī)程序,產(chǎn)生客戶端和服務(wù)器的關(guān)系。在一些實施例中,服務(wù)器向客戶端設(shè)備發(fā)送數(shù)據(jù)(例如HTML頁面)(例如用于向與客戶端設(shè)備交互的用戶顯示數(shù)據(jù)以及從該用戶接收用戶輸入的目的)。可以在服務(wù)器從客戶端設(shè)備接收在客戶端設(shè)備生成的數(shù)據(jù)(例如用戶交互的結(jié)果)。
[0090]盡管本說明書包含許多具體實施細(xì)節(jié),但是不應(yīng)解釋這些為限制任何發(fā)明的或者可以要求保護(hù)的內(nèi)容的范圍,而實際上描述特定發(fā)明的特定實施例所特有的特征。也可以在單個實施例中組合實施在本說明書中在單獨的實施例的情境中描述的某些特征。反言之,也可以在多個實施例中單獨地或者在任何適當(dāng)子組合中實施在單個實施例的情境中描述的各種特征。另外,雖然以上可以描述特征為在某些組合中動作并且甚至初始地這樣要求保護(hù),但是來自要求保護(hù)的組合的一個或者多個特征可以在一些情況下從該組合中被刪除,并且要求保護(hù)的組合可以涉及子組合或者子組合的變化。
[0091]相似地,盡管在附圖中以特定順序描繪操作,但是這不應(yīng)被理解為要求以所示特定順序或者以依次順序執(zhí)行這樣的操作或者執(zhí)行所有所示操作以實現(xiàn)希望的結(jié)果。在某些境況中,多任務(wù)和并行處理可以是有利的。另外,在以上描述的實施例中的各種系統(tǒng)部件的分離不應(yīng)被理解為在所有實施例中要求這樣的分離,并且應(yīng)當(dāng)理解描述的程序部件和系統(tǒng)一般可以被一起集成于單個軟件產(chǎn)品中或者封裝成多個軟件產(chǎn)品。
[0092]因此,已經(jīng)描述了主題內(nèi)容的特定實施例。其它實施例在所附權(quán)利要求的范圍內(nèi)。在一些情況下,在權(quán)利要求中記載的動作可以按不同順序來執(zhí)行而仍然實現(xiàn)希望的結(jié)果。此外,在附圖中描繪的過程不必需要所示特定順序或者依次順序以實現(xiàn)希望的結(jié)果。在某些實施方式中,多任務(wù)和并行處理可能是有利的。
【權(quán)利要求】
1.一種計算機(jī)實施的方法,包括: 訪問由文件系統(tǒng)維護(hù)的文件,所述文件系統(tǒng)管理對塊設(shè)備的訪問,其中所述文件包括多個活躍塊,其中所述多個活躍塊中的每個活躍塊與相應(yīng)的邏輯塊編號和相應(yīng)的塊索引關(guān)聯(lián),所述塊索引代表所述塊在輸出文件中相對于其它塊的位置; 向所述文件指派文件索引; 分析所述文件,以確定在所述文件中包括的最大塊索引和最小塊索引; 標(biāo)識在所述多個活躍塊中的塊游程,其中每個塊游程包括相應(yīng)的開始塊,其中一些塊游程包括在所述輸出文件中相互相鄰的多個塊,其中與相鄰的所述塊關(guān)聯(lián)的所述邏輯塊編號增加一; 對于所述塊游程中的每個塊游程,標(biāo)識所述塊游程的相應(yīng)長度; 對于每個開始塊,生成用于每個開始塊的文件映射條目,其中生成所述文件映射條目包括: 壓縮所述文件索引; 基于所述最大塊索引和所述最小塊索引,壓縮與所述開始塊關(guān)聯(lián)的所述塊索引;并且 壓縮與所述開始塊關(guān)聯(lián)的所述塊游程的長度;并且 在文件映射中存儲所述文件映射條目。
2.根據(jù)權(quán)利要求1所述的計算機(jī)實施的方法,還包括: 基于與所述文件映射條目關(guān)聯(lián)的所述邏輯塊編號,按順序存儲所述文件映射條目。
3.根據(jù)權(quán)利要求1所述的計算機(jī)實施的方法,其中所述文件映射條目中的至少一個文件映射條目是具有格式〈壓縮的文件索引,壓縮的塊索引,壓縮的所述塊游程的長度 > 的三元組。
4.根據(jù)權(quán)利要求1所述的計算機(jī)實施的方法,其中壓縮所述文件索引和所述塊索引包括使用可變長度壓縮來壓縮所述文件索引和所述塊索引。
5.根據(jù)權(quán)利要求1所述的計算機(jī)實施的方法,其中壓縮所述塊游程的長度包括使用算術(shù)編碼、霍夫曼編碼或者通用編碼。
6.根據(jù)權(quán)利要求1所述的計算機(jī)實施的方法,其中所述文件映射包括與由所述文件系統(tǒng)維護(hù)的至少第二文件關(guān)聯(lián)的文件映射條目,并且其中壓縮所述文件索引包括基于由所述文件映射引用的文件數(shù)目來壓縮所述文件索引。
7.根據(jù)權(quán)利要求6所述的計算機(jī)實施的方法,其中所述第二文件被指派第二文件索弓I,所述第二文件索引與向所述文件指派的所述文件索引不同。
8.根據(jù)權(quán)利要求7所述的計算機(jī)實施的方法,其中所述文件索引唯一地標(biāo)識所述文件,并且所述第二文件索引唯一地標(biāo)識所述第二文件。
9.根據(jù)權(quán)利要求1所述的計算機(jī)實施的方法,還包括: 在與所述塊設(shè)備關(guān)聯(lián)的初始化過程期間,加載所述文件映射;并且 對于在所述文件映射中包括的每第N個文件映射條目: 在數(shù)據(jù)結(jié)構(gòu)中存儲指向所述第N個文件映射條目的指針,其中N是大于I的整數(shù),并且其中指向所述第N個文件映射條目的所述指針被存儲于基于與所述第N個文件映射條目關(guān)聯(lián)的所述邏輯塊編號除以N的位置。
10.根據(jù)權(quán)利要求9所述的計算機(jī)實施的方法,還包括: 接收對于訪問特定塊的請求,其中所述特定塊與特定邏輯塊編號關(guān)聯(lián); 訪問所述數(shù)據(jù)結(jié)構(gòu),以標(biāo)識與最接近所述特定邏輯塊編號的所述第N個文件映射條目對應(yīng)的指針,其中與最接近所述特定邏輯塊編號的所述第N個文件映射條目對應(yīng)的所述邏輯塊編號小于所述特定塊編號; 基于與最接近所述特定邏輯塊編號的所述第N個文件映射條目對應(yīng)的所述指針,標(biāo)識與所述特定塊對應(yīng)的所述文件映射條目;并且 對與所述特定塊對應(yīng)的所述文件映射條目進(jìn)行解碼。
11.根據(jù)權(quán)利要求9所述的計算機(jī)實施的方法,還包括: 接收對于訪問特定塊的請求,其中所述特定塊與特定塊編號關(guān)聯(lián);并且 標(biāo)識與所述特定塊對應(yīng)的所述文件映射條目而不對多于N個的文件映射條目進(jìn)行解碼。
12.—種系統(tǒng),包括: 存儲指令的存儲器;以及 一個或者多個處理器,被配置為執(zhí)行所述指令,所述指令使所述一個或者多個處理器執(zhí)行操作,所述操作包括: 訪問由文件系統(tǒng)維護(hù)的文件,所述文件系統(tǒng)管理對塊設(shè)備的訪問,其中所述文件包括多個活躍塊,其中所述多個活躍塊中的每個活躍塊與相應(yīng)的邏輯塊編號和相應(yīng)的塊索引關(guān)聯(lián),所述塊索引代表所述塊在輸出文件中相對于其它塊的位置; 向所述文件指派文件索引; 分析所述文件,以確定在所述文件中包括的最大塊索引和最小塊索引; 標(biāo)識在所述多個活躍塊中的塊游程,其中每個塊游程包括相應(yīng)的開始塊,其中一些塊游程包括在所述輸出文件中相互相鄰的多個塊,其中與相鄰的所述塊關(guān)聯(lián)的所述邏輯塊編號增加一; 對于所述塊游程中的每個塊游程,標(biāo)識所述塊游程的相應(yīng)長度; 對于每個開始塊,生成用于每個開始塊的文件映射條目,其中生成所述文件映射條目包括: 壓縮所述文件索引; 基于所述最大塊索引和所述最小塊索引,壓縮與所述開始塊關(guān)聯(lián)的所述塊索引;并且 壓縮與所述開始塊關(guān)聯(lián)的所述塊游程的長度;并且 在文件映射中存儲所述文件映射條目。
13.根據(jù)權(quán)利要求12所述的系統(tǒng),其中所述操作還包括: 基于與所述文件映射條目關(guān)聯(lián)的所述邏輯塊編號,按順序存儲所述文件映射條目。
14.根據(jù)權(quán)利要求12所述的系統(tǒng),其中所述文件映射條目中的至少一個文件映射條目是具有格式〈壓縮的文件索引,壓縮的塊索引,壓縮的所述塊游程的長度 > 的三元組。
15.根據(jù)權(quán)利要求12所述的系統(tǒng),其中壓縮所述文件索引和所述塊索引包括使用可變長度壓縮來壓縮所述文件索引和所述塊索引。
16.根據(jù)權(quán)利要求12所述的系統(tǒng),其中壓縮所述塊游程的長度包括使用算術(shù)編碼、霍夫曼編碼或者通用編碼。
17.根據(jù)權(quán)利要求12所述的系統(tǒng),其中所述文件映射包括與由所述文件系統(tǒng)維護(hù)的至少第二文件關(guān)聯(lián)的文件映射條目,并且其中壓縮所述文件索引包括基于由所述文件映射引用的文件數(shù)目來壓縮所述文件索引。
18.根據(jù)權(quán)利要求17所述的系統(tǒng),其中所述第二文件被指派第二文件索引,所述第二文件索引與向所述文件指派的所述文件索引不同。
19.根據(jù)權(quán)利要求18所述的系統(tǒng),其中所述文件索引唯一地標(biāo)識所述文件,并且所述第二文件索引唯一地標(biāo)識所述第二文件。
20.根據(jù)權(quán)利要求12所述的系統(tǒng),其中所述操作還包括: 在與所述塊設(shè)備關(guān)聯(lián)的初始化過程期間,加載所述文件映射;并且 對于在所述文件映射中包括的每第N個文件映射條目: 在數(shù)據(jù)結(jié)構(gòu)中存儲指向所述第N個文件映射條目的指針,其中N是大于I的整數(shù),并且其中指向所述第N個文件映射條目的所述指針被存儲于基于與所述第N個文件映射條目關(guān)聯(lián)的所述邏輯塊編號除以N的位置。
21.根據(jù)權(quán)利要求20所述的系統(tǒng),其中所述操作還包括: 接收對于訪問特定塊的請求,其中所述特定塊與特定邏輯塊編號關(guān)聯(lián); 訪問所述數(shù)據(jù)結(jié)構(gòu),以標(biāo)識與最接近所述特定邏輯塊編號的所述第N個文件映射條目對應(yīng)的指針,其中與最接近所述特定邏輯塊編號的所述第N個文件映射條目對應(yīng)的所述邏輯塊編號小于所述特定塊編號; 基于與最接近所述特定邏輯塊編號的所述第N個文件映射條目對應(yīng)的所述指針,標(biāo)識與所述特定塊對應(yīng)的所述文件映射條目;并且 對與所述特定塊對應(yīng)的所述文件映射條目進(jìn)行解碼。
22.根據(jù)權(quán)利要求20所述的系統(tǒng),其中所述操作還包括: 接收對于訪問特定塊的請求,其中所述特定塊與特定塊編號關(guān)聯(lián);并且 標(biāo)識與所述特定塊對應(yīng)的所述文件映射條目而不對多于N個的文件映射條目進(jìn)行解碼。
23.一種存儲指令的計算機(jī)可讀介質(zhì),所述指令在由處理設(shè)備執(zhí)行時使所述處理設(shè)備執(zhí)行操作,所述操作包括: 訪問由文件系統(tǒng)維護(hù)的文件,所述文件系統(tǒng)管理對塊設(shè)備的訪問,其中所述文件包括多個活躍塊,其中所述多個活躍塊中的每個活躍塊與相應(yīng)的邏輯塊編號和相應(yīng)的塊索引關(guān)聯(lián),所述塊索引代表所述塊在輸出文件中相對于其它塊的位置; 向所述文件指派文件索引; 分析所述文件,以確定在所述文件中包括的最大塊索引和最小塊索引; 標(biāo)識在所述多個活躍塊中的塊游程,其中每個塊游程包括相應(yīng)的開始塊,其中一些塊游程包括在所述輸出文件中相互相鄰的多個塊,其中與相鄰的所述塊關(guān)聯(lián)的所述邏輯塊編號增加一; 對于所述塊游程中的每個塊游程,標(biāo)識所述塊游程的相應(yīng)長度; 對于每個開始塊,生成用于每個開始塊的文件映射條目,其中生成所述文件映射條目包括: 壓縮所述文件索引; 基于所述最大塊索引和所述最小塊索引,壓縮與所述開始塊關(guān)聯(lián)的所述塊索引;并且 壓縮與所述開始塊關(guān)聯(lián)的所述塊游程的長度;并且 在文件映射中存儲所述文件映射條目。
24.根據(jù)權(quán)利要求23所述的計算機(jī)可讀介質(zhì),其中所述操作還包括: 基于與所述文件映射條目關(guān)聯(lián)的所述邏輯塊編號,按順序存儲所述文件映射條目。
25.根據(jù)權(quán)利要求23所述的計算機(jī)可讀介質(zhì),其中所述文件映射條目中的至少一個文件映射條目是具有格式〈壓縮的文件索引,壓縮的塊索引,壓縮的所述塊游程的長度 > 的三元組。
26.根據(jù)權(quán)利要求23所述的計算機(jī)可讀介質(zhì),其中壓縮所述文件索引和所述塊索引包括使用可變長度壓縮來壓縮所述文件索引和所述塊索引。
27.根據(jù)權(quán)利要求23所述的計算機(jī)可讀介質(zhì),其中壓縮所述塊游程的長度包括使用算術(shù)編碼、霍夫曼編碼或者通用編碼。
28.根據(jù)權(quán)利要求23所述的計算機(jī)可讀介質(zhì),其中所述文件映射包括與由所述文件系統(tǒng)維護(hù)的至少第二文件關(guān)聯(lián)的文件映射條目,并且其中壓縮所述文件索引包括基于由所述文件映射引用的文件數(shù)目來壓縮所述文件索引。
29.根據(jù)權(quán)利要求28所述的計算機(jī)可讀介質(zhì),其中所述第二文件被指派第二文件索弓I,所述第二文件索引與向所述文件指派的所述文件索引不同。
30.根據(jù)權(quán)利要求29所述的計算機(jī)可讀介質(zhì),其中所述文件索引唯一地標(biāo)識所述文件,并且所述第二文件索引唯一地標(biāo)識所述第二文件。
31.根據(jù)權(quán)利要求23所述的計算機(jī)可讀介質(zhì),其中所述操作還包括: 在與所述塊設(shè)備關(guān)聯(lián)的初始化過程期間,加載所述文件映射;并且 對于在所述文件映射中包括的每第N個文件映射條目: 在數(shù)據(jù)結(jié)構(gòu)中存儲指向所述第N個文件映射條目的指針,其中N是大于I的整數(shù),并且其中指向所述第N個文件映射條目的所述指針被存儲于基于與所述第N個文件映射條目關(guān)聯(lián)的所述邏輯塊編號除以N的位置。
32.根據(jù)權(quán)利要求23所述的計算機(jī)可讀介質(zhì),其中所述操作還包括: 接收對于訪問特定塊的請求,其中所述特定塊與特定邏輯塊編號關(guān)聯(lián); 訪問所述數(shù)據(jù)結(jié)構(gòu),以標(biāo)識與最接近所述特定邏輯塊編號的所述第N個文件映射條目對應(yīng)的指針,其中與最接近所述特定邏輯塊編號的所述第N個文件映射條目對應(yīng)的所述邏輯塊編號小于所述特定塊編號; 基于與最接近所述特定邏輯塊編號的所述第N個文件映射條目對應(yīng)的所述指針,標(biāo)識與所述特定塊對應(yīng)的所述文件映射條目;并且 對與所述特定塊對應(yīng)的所述文件映射條目進(jìn)行解碼。
33.根據(jù)權(quán)利要求32所述的計算機(jī)可讀介質(zhì),其中所述操作還包括: 接收對于訪問特定塊的請求,其中所述特定塊與特定塊編號關(guān)聯(lián);并且 標(biāo)識與所述特定塊對應(yīng)的所述文件映射條目而不對多于N個的文件映射條目進(jìn)行解碼。
【文檔編號】G06F3/06GK104205035SQ201380017136
【公開日】2014年12月10日 申請日期:2013年3月22日 優(yōu)先權(quán)日:2012年3月28日
【發(fā)明者】A·卡達(dá)施 申請人:谷歌公司