專利名稱:本地縮略圖高速緩存的制作方法
本地縮略圖高速緩存發(fā)明領域本發(fā)明涉及在計算機上高速緩存圖像。更具體地,本發(fā)明允許在系統(tǒng)范圍的 縮略像數(shù)據(jù)庫中高速緩存圖像。發(fā)明背景縮略像是計算機上使用的用于傳達圖像或文件的內容而無需實際打開該 圖像或文件的常見方案??s略圖可呈現(xiàn)圖像、文字處理文檔、網(wǎng)頁、演示幻燈片等 的縮小的畫像。縮略圖通常用作圖形操作系統(tǒng)中表示文件的圖標。圖2A呈現(xiàn)了縮略圖在圖形操作系統(tǒng)中的使用的現(xiàn)有技術的示例。窗口 201顯 示了常見文件目錄中包含的JPEG格式的文件202的集合的縮略像。每一縮略 像是文件內容的復制品,重新調整大小來適合標準大小。一個特定文件被選中, 窗口 201顯示所選文件的縮略圖203。圖2B呈現(xiàn)了計算機110可用的文件分層結構205中的縮略圖存儲的現(xiàn)有技術 示例。在文件分層結構205中表示的文件可被存儲在計算機IIO上(例如,存儲在 硬盤驅動器上或存儲在動態(tài)存儲器中)、可移動介質上(例如,軟盤驅動器或USB 驅動器上)、網(wǎng)絡服務器上或計算機110可訪問的其它位置中。文件分層結構205 內的文件可使用文件夾系統(tǒng)以分層方式存儲,該系統(tǒng)包含文件以及其它文件夾。第 一文件夾211存儲文件的第一集合212,而第二文件夾221存儲文件的第二集合 222。使用常規(guī)的方法,計算機110上的操作系統(tǒng)創(chuàng)建文件夾211、 221中的文件的 縮略圖。例如,為創(chuàng)建窗口201的文件夾視圖,操作系統(tǒng)可通過迭代每一文件、掃 描其內容并創(chuàng)建內容的標準大小的復制品來創(chuàng)建文件的縮略圖。在某些操作系統(tǒng)中,每當需要特定的一組縮略圖時即可重復該步驟。在其它操作系統(tǒng)中,可以一次 性生成縮略圖,然后它們可被存儲為圖形文件(例如,位圖或jpeg)以便稍后檢索。 這樣的系統(tǒng)節(jié)省了將來縮略圖檢索的處理時間。計算機110在縮略圖高速緩存214、 224中存儲之前呈現(xiàn)的縮略圖。
第一縮略圖高速緩存214可包含第一集合212中每一文件的縮略圖。每當被 訪問時,第一縮略圖高速緩存214可貢獻出這些圖像以便由操作系統(tǒng)或第三方軟件 使用。同樣地,第二縮略圖高速緩存224可按需從第二集合212貢獻圖像。按這種 逐個文件夾方式存儲縮略圖盡管直接但會給計算機110的用戶帶來問題。使用現(xiàn)有的方法,計算機110僅能夠在它能寫訪問的文件夾中存儲所生成的 縮略圖。例如,如果計算機110的用戶瀏覽了存儲在只讀CD-ROM上的圖像,則 所生成的縮略圖不能被存儲以便將來重用,因為操作系統(tǒng)不能在CD-ROM上所存 儲的文件夾中創(chuàng)建縮略圖高速緩存。此外,使用現(xiàn)有的方法,可能損害對敏感文件 的安全訪問。例如,如果幻燈片演示223的所有者使該文件不能被計算機110的任 何其它用戶訪問,則另一用戶仍可查看操作系統(tǒng)生成并存儲在第二縮略圖高速緩存 224中的縮略圖。盡管它僅是演示幻燈片的縮小版本,但縮略圖仍足以公開敏感信 息。隨著縮略像大小和細節(jié)的增加,這樣的安全性問題可能越來越為人關注。以往的縮略圖系統(tǒng)允許當縮略圖內容被復制來顯示時在存儲器中創(chuàng)建縮略圖 圖像的多個副本,這利用了多于必需的存儲器。而且,不同的所存儲縮略圖的高速 緩存阻止對較少使用的縮略圖進行智能修剪(例如,當需要額外的磁盤空間時)。 且如果計算機110的用戶査看包括來自多個目錄的文件的文件搜索結果,查詢結果不像縮略圖那樣是可顯示的。從而,本領域需要授予文件訪問特權、允許用戶僅査看他們能訪問的文件的 那些縮略圖的縮略圖高速緩存。此外,需要可為駐留在只讀位置中的文件存儲縮略 圖的縮略圖高速緩存。還需要最小化縮略像在存儲器中不必要重復的縮略圖高 速緩存。最后,需要允許智能修剪縮略圖并允許獨立于文件位置而全局顯示縮略圖 圖像的縮略圖高速緩存。發(fā)明概述以下呈現(xiàn)了本發(fā)明的簡化概述,以提供對本發(fā)明的某些方面的基本理解。該 概述不是本發(fā)明的寬泛的概觀。它既不旨在標識本發(fā)明的關鍵或重要的元素,也不 描繪本發(fā)明的范圍。其唯一目的是以簡化的形式呈現(xiàn)本發(fā)明的某些概念作為之后呈 現(xiàn)的更詳細描述的序言。第一示例性實施例提供了用于在本地縮略圖高速緩存中存儲縮略圖的方法。 隨存儲圖像的請求呈現(xiàn)縮略像和標識信息(例如,修改時間戳、文件路徑或甚 至是串URL的CRC-64散列)。該圖像被存儲在一個或多個數(shù)據(jù)文件的其中之一 中,標識信息附帶該縮略圖在數(shù)據(jù)文件內的位置被存儲在索引文件中。第二示例性實施例提供用于管理縮略圖高速緩存的系統(tǒng)。該系統(tǒng)包括用于存 儲數(shù)據(jù)文件和索引文件的存儲。該系統(tǒng)也包括被配置成接收附帶與文件相關聯(lián)的標 識信息的存儲縮略像的請求的處理器。該處理器還被配置成在數(shù)據(jù)文件中存儲 縮略像,并在索引文件中存儲其在數(shù)據(jù)文件內的位置以及標識信息。附圖簡述作為示例而非限制,在附圖中示出了本發(fā)明,附圖中相同的參考標號指示相 同或相似的元素,附圖中
圖1是可在其中實現(xiàn)本發(fā)明的示例性實施例的一個或多個方面的操作環(huán)境的 功能性框圖;圖2A和2B示出了現(xiàn)有技術的縮略圖高速緩存;圖3描述了根據(jù)本發(fā)明的一個或多個示例性實施例的本地縮略圖高速緩存的框圖;圖4示出了根據(jù)本發(fā)明的一個或多個示例性實施例的縮略圖高速緩存索引文 件以及相關聯(lián)的數(shù)據(jù)文件;圖5示出了根據(jù)本發(fā)明的一個或多個示例性實施例用于在縮略圖高速緩存中 存儲縮略圖的過程;以及圖6示出了根據(jù)本發(fā)明的一個或多個示例性實施例用于使用縮略圖高速緩存 來存儲和檢索縮略圖的過程。附圖的詳細描述在對各個實施例的以下描述中,對附圖進行了參考,附圖構成了實施例的一 部分且在其中作為示例示出了可在其中實踐本發(fā)明的各個實施例??梢岳斫?,可以 利用其它實施例,且可對結構和功能進行修改而不背離本發(fā)明的范圍和精神。圖1示出了可在其中實現(xiàn)本發(fā)明的合適的計算系統(tǒng)環(huán)境100的示例。計算系 統(tǒng)環(huán)境100只是合適的計算環(huán)境的一個示例,并不旨在對本發(fā)明的使用范圍或功能 提出任何限制。也不應該把計算環(huán)境100解釋為對示例性操作環(huán)境100中示出的任 一組件或其組合有任何依賴性或要求。本發(fā)明的各方面可用眾多其它通用或專用計算系統(tǒng)環(huán)境或配置來操作。適合 在本發(fā)明中使用的眾所周知的計算系統(tǒng)、環(huán)境和/或配置的示例包括但不限于,個
人計算機(PC);服務器計算機;諸如個人數(shù)字助理(PDA)、平板PC或膝上型 PC的手持或其它便攜式設備;多處理器系統(tǒng);基于微處理器的系統(tǒng);游戲控制臺; 機頂盒;可編程消費者電子產品;網(wǎng)絡PC;小型機;大型機;包含上述系統(tǒng)或設 備中的任一個的分布式計算機環(huán)境等。本發(fā)明的各方面可在諸如程序模塊等由計算機執(zhí)行的計算機可執(zhí)行指令的通 用語境中描述。 一般而言,程序模塊包括例程、程序、對象、組件、數(shù)據(jù)結構等, 它們執(zhí)行特定任務或實現(xiàn)特定抽象數(shù)據(jù)類型。本發(fā)明的各方面也可以在分布式計算 環(huán)境中實現(xiàn),其中任務由通過通信網(wǎng)絡鏈接的遠程處理設備執(zhí)行。在分布式計算環(huán) 境中,程序模塊可以位于包括存儲器存儲設備在內的本地和遠程計算機存儲介質中。參考圖1,示例性計算系統(tǒng)環(huán)境包括計算機110形式的通用計算設備。計算機 110的組件可以包括但不限于,處理單元120、系統(tǒng)存儲器130和將包括系統(tǒng)存儲 器130在內的各種系統(tǒng)組件耦合至處理單元120的系統(tǒng)總線121。系統(tǒng)總線121可 以是若干類型的總線結構中的任一種,包括存儲器總線或存儲器控制器、外圍總線 和使用各種總線體系結構中的任一種的局部總線。作為示例而非限制,這樣的體系 結構包括工業(yè)標準體系結構(ISA)總線、微通道體系結構(MCA)總線、增強ISA (EISA)總線、視頻電子技術標準協(xié)會(VESA)局部總線、高級圖形端口 (AGP) 總線和外圍部件互連(PCI)總線(也被稱為Mezzanine總線)。計算機110通常包括各種計算機可讀介質。計算機可讀介質可以是能夠被計 算機IIO訪問的任何可用介質,諸如易失性、非易失性介質、可移動和不可移動介 質。作為示例而非限制,計算機可讀介質可包括計算機存儲介質和通信介質。計算 機存儲介質包括以任何方法或技術實現(xiàn)的用于存儲諸如計算機可讀指令、數(shù)據(jù)結 構、程序模塊或其它數(shù)據(jù)等信息的易失性、非易失性、可移動和不可移動介質。計 算機存儲介質包括但不限于,隨機存取存儲器(RAM)、只讀存儲器(ROM)、 電可擦可編程ROM(EEPROM)、閃存或其它存儲器技術;壓縮盤ROM(CD-ROM)、 數(shù)字視頻盤(DVD)或其它光盤存儲器;磁帶盒、磁帶、磁盤存儲或其它磁性存 儲設備;或能用于存儲所需信息且可以由計算機110訪問的任何其它介質。通信介 質通常具體化為諸如載波或其它傳輸機制等已調制數(shù)據(jù)信號中的計算機可讀指令、 數(shù)據(jù)結構、程序模塊或其它數(shù)據(jù),且包含任何信息傳遞介質。作為示例而非限制, 通信介質包括諸如有線網(wǎng)絡或直接有線連接的有線介質,以及諸如聲學、諸如藍牙 或超寬帶(UWB)標準無線鏈接的射頻(RF)、紅外線和其它無線介質的無線介
質。上述中的任意組合也應包括在計算機可讀介質的范圍之內。系統(tǒng)存儲器130包括易失性和/或非易失性存儲器形式的計算機存儲介質,諸如ROM 131和RAM 132?;据斎?輸出系統(tǒng)133 (BIOS)包含有助于諸如啟動 時在計算機110中元件之間傳遞信息的基本例程,它通常被存儲在ROM 131中。 RAM132通常包含處理單元120可以立即訪問和/或目前正在操作的數(shù)據(jù)和/或程序 模塊。作為示例而非限制,圖1示出了包括操作系統(tǒng)134、應用程序135、其它程 序模塊136和程序數(shù)據(jù)137的軟件。計算機110也可以包括其它計算機存儲介質。僅作為示例,圖1示出了向不 可移動、非易失性磁介質中讀寫的硬盤驅動器141,向可移動、非易失性磁盤152 中讀寫的磁盤驅動器151,以及向諸如CD-ROM、 DVD或其它光學介質等可移動、 非易失性光盤156中讀寫的光盤驅動器155。可以在示例性操作環(huán)境下使用的其它 計算機存儲介質包括但不限于,盒式磁帶、閃存卡、數(shù)字錄像帶、固態(tài)RAM、固 態(tài)ROM等。硬盤驅動器141通常由諸如接口 140的不可移動存儲器接口連接至系 統(tǒng)總線121,磁盤驅動器151和光盤驅動器155通常由諸如接口 150的可移動存儲 器接口連接至系統(tǒng)總線121。以上討論并在圖1中示出的驅動器及其相關聯(lián)的計算機存儲介質為計算機 110提供了對計算機可讀指令、數(shù)據(jù)結構、程序模塊和其它數(shù)據(jù)的存儲。例如,在 圖1中,硬盤驅動器141被例示為存儲操作系統(tǒng)144、應用程序145、其它程序模 塊146和程序數(shù)據(jù)147。注意,這些組件可以分別與操作系統(tǒng)134、應用程序135、 其它程序模塊136和程序數(shù)據(jù)137相同或不同。操作系統(tǒng)144、應用程序145、其 它程序模塊146和程序數(shù)據(jù)147在圖1中被給出了不同的標號是為了說明至少它們 是不同的副本。用戶可以通過輸入設備如鍵盤162和定點設備161 (通常指鼠標、跟蹤球或觸 摸板)向計算機110輸入命令和信息。這些設備中的每一個可包括多個輸入組件, 每一輸入組件均提供其自己的輸入。在鍵盤的情況中,每一鍵或專用按鈕可用作輸 入組件。而且,鍵組合可用作唯一輸入組件,諸如用戶通過同時保持Control、 Alt、 Shift或其它鍵來改變鍵輸入。在鼠標、跟蹤球或其它定點設備的情況中,除各自 提供的位置信息以外,輸入組件可包括設備中裝入的其它輸入機構。其它輸入設備(未示出)可以包括麥克風、操縱桿、游戲手柄、掃描儀等。 這些和其它輸入設備通常由耦合至系統(tǒng)總線121的用戶輸入接口 160連接至處理單 元120,但也可以由其它接口或總線結構連接,如并行端口、游戲端口或通用串行
總線(USB)、或正EE 1394串行總線(火線)。監(jiān)視器184或其它類型的顯示設 備也經由接口如視頻適配器183連接至系統(tǒng)總線121。視頻適配器183除其專用的 處理器和存儲器以外,可包括高級2D或3D圖形能力。計算機110還可包括允許用戶使用指示筆186提供輸入的數(shù)字化儀185。數(shù)字 化儀185可被集成到監(jiān)視器184或另一顯示設備中,或可以是單獨設備的一部分, 如數(shù)字化儀板。計算機110還可包括其它外圍輸出設備,諸如揚聲器189和打印機 188,它們可以通過輸出外圍接口 187連接。計算機110可在使用至一個或多個遠程計算機如遠程計算機180的邏輯連接 的網(wǎng)絡化環(huán)境下操作。遠程計算機180可以是個人計算機、服務器、路由器、衛(wèi)星 中繼、網(wǎng)絡PC、對等設備或其它常見網(wǎng)絡節(jié)點,且通常包括上文相對于計算機110 描述的許多或所有元件,盡管在圖1中只例示了存儲器存儲設備181。圖1中所示 邏輯連接包括局域網(wǎng)(LAN) 171和廣域網(wǎng)(WAN) 173,但也可以包括其它網(wǎng)絡。 這樣的聯(lián)網(wǎng)環(huán)境在辦公室、企業(yè)范圍計算機網(wǎng)絡、內聯(lián)網(wǎng)和因特網(wǎng)中是常見的。當在LAN聯(lián)網(wǎng)環(huán)境中使用時,計算機110通過網(wǎng)絡接口或適配器170連接至 LAN 171。當在WAN聯(lián)網(wǎng)環(huán)境中使用時,計算機IIO可包括調制解調器172、圓 盤式衛(wèi)星天線(未示出)、或用于在諸如因特網(wǎng)等WAN173上建立通信的另一設 備。調制解調器172可以是內置或外置的,它可以通過用戶輸入接口 160或其它合 適的機制連接至系統(tǒng)總線121。在網(wǎng)絡化環(huán)境中,相對于計算機110描述的程序模 塊或其部分可被遠程存儲,例如被存儲在遠程存儲設備181中。作為示例而非限制, 圖1示出了遠程應用程序182駐留在存儲器設備181上??梢岳斫?,所示的網(wǎng)絡連 接是示例性的,且可以使用在計算機之間建立通信鏈路的其它手段。圖3示出了根據(jù)本發(fā)明一個或多個示例性實施例的本地縮略圖高速緩存301 的框圖。本地縮略圖高速緩存301可以是與生成、存儲和顯示縮略像相關聯(lián)的 一大組組件中的一部分。這些組件可包括縮略圖客戶端310,縮略圖消費者313可 與之并按編程方式交互??s略圖消費者313可包括操作系統(tǒng)134的各組件(例如, 圖形文件瀏覽器)或第三方軟件(例如,圖形編輯軟件)??s略圖消費者313可請 求并檢索特定文件的縮略圖。縮略圖客戶端310在接收到這樣的請求之后,可請求 生成縮略像(可能作為后臺進程)或可向本地縮略圖高速緩存310檢索該圖像。與特定文件相關聯(lián)的信息可用作存儲和檢索縮略圖的"鍵"。該相關聯(lián)的信 息可被描述為"標識信息",因為它可被用于標識特定文件的位置或屬性。這樣的 信息可包括特定文件的名字、文件的位置(例如,統(tǒng)一資源定位器(URL)或文件10
路徑)、修改時戳、創(chuàng)建時戳、文件大小等。標識信息還可包括以上任一個的密碼 散列。例如,與文件相關聯(lián)的URL可與修改的日期和時間結合來形成可從中提取CRC-64的標識串。這樣的標識信息可用于在本地縮略圖高速緩存301中對縮略圖 進行索引。例如,縮略圖消費者313的其中之一可通過提供文件的標識信息(例如,URL 和/或修改的日期和時間)來向縮略圖客戶端310請求文件312的縮略像。將 標識信息用作査找鍵,縮略圖客戶端310可首先查閱本地縮略圖高速緩存301來查 看文件312是否已經存儲了縮略像。如果本地縮略圖高速緩存301不具有該縮 略圖,則縮略圖客戶端310可請求己注冊的縮略圖提取器311為文件312生成縮略 像。 一旦生成之后,縮略圖客戶端310可使用新生成縮略圖的副本或對其的引 用來響應消費者的請求??s略圖客戶端310也可傳遞新縮略圖以便存儲在本地縮略 圖高速緩存301中。當下一次縮略圖消費者請求文件312的縮略圖時,縮略圖客戶 端310可使用被存儲在本地縮略圖高速緩存301中的圖像的副本或對其的引用來響 應而非浪費處理時間來重新生成縮略像。本地縮略圖高速緩存301被描述為"本地",是因為它僅可由當前己識別的 用戶訪問。術語已識別用戶指的是由操作系統(tǒng)134識別的計算機110用戶。盡管計 算機可具有眾多用戶,但僅準許已識別用戶控制其文件的安全性以及控制其本地設 置。己識別用戶一般具有各自的登錄標識符和口令。每一己識別用戶能夠訪問他或 她自己的一組本地設置,本地設置可包括桌面偏好(例如,背景顏色)以及安全特 權(例如,將其它用戶鎖定在用戶文件之外)??蓪⒈镜乜s略圖高速緩存301與已識別用戶的本地文件一起存儲??上蛴嬎?機IIO的每一已識別用戶分配他或她自己的本地縮略圖高速緩存301。盡管這可能 有重復,但阻止了對潛在敏感文件的自由訪問。如上所述,使用全局可訪問縮略圖 高速緩存可能允許未經授權的用戶訪問他不能訪問的文件的縮略像。通過在僅 已識別用戶可用的本地高速緩存中高速緩存所有縮略圖,可堵上潛在的安全性漏 洞。各種優(yōu)化方案可精簡縮略圖生成過程。這些方案可包括共享其它本地或遠程高 速緩存中所高速緩存的縮略圖(同時確保不會妨礙安全性措施)。該高速緩存方案 可被描述為每個用戶/每個機器的高速緩存,因為為計算機110的每一已識別用戶 均創(chuàng)建了單獨的高速緩存。本地縮略圖高速緩存301可包括與數(shù)據(jù)存儲303和索引存儲304耦合的縮略 圖服務器302形式的可由處理單元120執(zhí)行的軟件代碼。數(shù)據(jù)存儲303可包括包被存儲為圖形信息的縮略像的一個或多個數(shù)據(jù)文件。數(shù)據(jù)存儲303可僅包括用 于存儲所有縮略像的單個數(shù)據(jù)文件,而不考慮圖像尺寸或文件大小?;蛘?,可 使用多個數(shù)據(jù)文件來存儲不同尺寸的縮略圖。索引存儲304可包括一個索引文件,其中該索引文件包含標識與數(shù)據(jù)存儲303內相關聯(lián)縮略圖的位置(或位置偏移量) 耦合的信息。索引存儲304和數(shù)據(jù)存儲303可被存儲為操作系統(tǒng)134中分開的文件。 盡管在全文中描述了分開的文件,但當被存儲在存儲器中時,這些文件可被組合成 單個聯(lián)合高速緩存文件??s略圖服務器302可以是實現(xiàn)特定縮略圖相關編程接口的可執(zhí)行代碼的集合。 縮略圖服務器302可以是可執(zhí)行文件(例如,thumbs.exe)或可執(zhí)行代碼的動態(tài)鏈 接庫(例如,thumbcache.dll)。由縮略圖服務器302實現(xiàn)的IThumbnailCache接口 可包括兩個基本函數(shù),允許縮略圖客戶端310獲取存儲在高速緩存中的縮略圖(例 如,GetThumbnail())以及將縮略圖放置到高速緩存(例如,SetThumbnail())。當縮略圖客戶端310試圖從本地縮略圖高速緩存301獲取縮略像時,縮 略圖客戶端310可通過向縮略圖服務器302提供標識信息來請求縮略圖。如上所述, 該標識信息可包括URL、日期、時間、以上任一個的散列等。此外,如果本地縮 略圖高速緩存301存儲多種大小的縮略像,則標識信息還可包括縮略圖尺寸 (例如,32X32或128X 128)。如果本地縮略圖高速緩存301沒有匹配所有標識 信息的縮略圖,則高速緩存301可向縮略圖客戶端310返回高速緩存失效指示符。如果本地縮略圖高速緩存301存儲了所請求的縮略圖的副本,它可返回縮略 像的副本,或直接指向高速緩存內的圖像的引用。這可被稱為"直接映射"。 使用對縮略像的直接高速緩存引用可避免創(chuàng)建縮略圖的附加緩沖副本、必須管 理的副本(例如,當修改了底層縮略圖時必須刷新的副本)。通過提供對被存儲在 高速緩存中的縮略像的引用,視頻適配器183能夠根據(jù)操作系統(tǒng)134所采用的 存儲器管理機制從硬盤141直接引用縮略圖。圖4例示了根據(jù)本發(fā)明的一個或多個示例性實施例的縮略圖高速緩存索引 401及相關聯(lián)的數(shù)據(jù)文件402、403、404。本地縮略圖高速緩存301可包括索引401。 索引401可包括首部411,其中首部411帶有諸如索引版本號以及管理讀/寫鎖定的 字段的信息。索引401內的單個條目,例如索引條目421,可包括標識信息(例如, URL字符串所生成的散列和/或修改的日期和時間)。此外,每一索引條目可包含 位置信息數(shù)組,可包含縮略圖的每一縮略圖數(shù)據(jù)文件具有一個數(shù)組條目。存儲在索 引401中的索引條目可使用散列表或分散表來存儲以便快速訪問。尤其,索引條目
可用一個線性探針序列存儲在公開地址的分散表中。可調節(jié)或優(yōu)化索引401內的索 引條目的組織,增加文件的局部性,使得經常一起請求的縮略圖可被存儲在彼此方 便的位置中以便快速訪問。本地縮略圖高速緩存301可包括一個或多個相關聯(lián)數(shù)據(jù)文件402、 403、 404, 它們各自包含特定大小或尺寸的縮略圖。每一數(shù)據(jù)文件可包括首部412、 413、 414, 它們可包括諸如數(shù)據(jù)文件版本號、相關聯(lián)的縮略圖大小(例如,32X32或128X 128) 以及用于管理孤立移除和讀/寫/維護鎖定的字段的信息。使用具有單一縮略圖大小 的數(shù)據(jù)文件可簡化編碼,因為串行化位圖(或其它圖形格式)可能要求標準大小,使得數(shù)據(jù)文件遍歷和操作更簡單。不滿足精確的像素或文件大小要求的縮略像 (例如,其縱橫比不同于標準縱橫比)可被填充以便維持標準條目大小。例如,可以填充圖像以便實現(xiàn)允許直接映射縮略圖所需的特定文件大小。在數(shù)據(jù)文件402、 403、 404的首部412、 413、 414之后,所存儲的位圖(或 JPEG、或其它圖形格式)的串行化版本可出現(xiàn)在每一數(shù)據(jù)文件中。可使用壓縮格 式來存儲縮略圖,尤其是較大的圖像。這些壓縮圖形可在檢索之后被解壓縮。隨索 引401的每一索引條目存儲的位置信息可包括偏移量信息,提供在每一數(shù)據(jù)文件內 自固定起始點開始計數(shù)的字節(jié)數(shù)目或圖像數(shù)目。存儲在索引401的每一索引條目內 的位置信息還可包括縮略像的內容的CRC-32校驗和(或類似的校驗和)。這 可允許本地縮略圖高速緩存301檢査自從縮略像被存儲以來該圖形的內容是 否被無意(或惡意)修改。此處是對圖4的縮略圖高速緩存的使用的一個可能示例。索引條目421包括 與同一標識信息相關聯(lián)的三個縮略圖的位置信息。用作條目的鍵的值 "Ox A9 84EDF1012 A3 3D 1"可以是相關聯(lián)文件位置和/或修改日期和時間的 CRC-64散列。三個數(shù)據(jù)文件條目422、 423、 424是同一圖像的縮略圖,但各自具 有不同的標準化大小。當請求與索引條目421相關聯(lián)的縮略圖時,請求者可指示具 體的大小。根據(jù)所請求的大小,縮略圖服務器302可使用該標識信息在索引401 中搜索索引條目421,在與所請求的縮略圖大小相應的索引條目內査找位置信息, 使用該位置信息在適當?shù)臄?shù)據(jù)文件中定位縮略像,然后返回縮略像的引用 或副本。使用CRC-64而非標識信息作為索引條目的鍵,存在沖突的可能。盡管罕 見,可以通過在數(shù)據(jù)文件中存儲標識信息以及縮略圖的副本并在檢索縮略圖時比較 信息來避免這樣的沖突。可經由每一客戶端進程的進程內服務器組件來訪問本地縮略圖高速緩存301。
代替使用每個用戶或每個系統(tǒng)中間人服務來仲裁對縮略圖高速緩存的訪問,各個客 戶端進程可合作地同步化訪問,以避免當訪問同一文件或存儲器空間時的爭用。對 索引401的爭用可能性較低。可使用標準的多個讀進程/單個寫進程的組鎖定來針 對索引401中的爭用進行保護。組鎖定實現(xiàn)可以是"餓死寫進程",這給予讀進程鎖定以優(yōu)先級。對一個或多個數(shù)據(jù)文件402、 403、 404的爭用可能性較高??墒褂?讀進程/寫進程/維護進程鎖定來避免數(shù)據(jù)文件402、 403、 404中的爭用。維護進程 可僅被允許更改不能由讀進程訪問的數(shù)據(jù)文件條目(例如,由于移動索引條目位置 而被孤立的數(shù)據(jù)文件條目),且可被允許對陳舊縮略圖進行"垃圾收集(garbage collect)"以及執(zhí)行后臺掃描和多遍碎片整理。由于本地縮略圖高速緩存301是高速緩存(與數(shù)據(jù)庫相對),可采用用于管 理高速緩存文件大小的一組策略。不保證任何特定縮略像在任何時間長度內均 被保留在高速緩存中??梢远ㄆ趻仐壿^少使用或過期的縮略圖,以便為新縮略圖騰 出空間。用于管理高速緩存大小的策略可包括將每一用戶的縮略圖高速緩存(或所 有用戶的高速緩存)限制為特定大小或可用磁盤空間的百分數(shù);作為磁盤清理向導 的一部分,可任選地允許用戶清除所有的縮略圖高速緩存;通過收集"垃圾"來移 除孤立(未被引用)的數(shù)據(jù)文件條目;以及回收由舊的和/或未使用的高速緩存條目占用的空間供新縮略圖使用?;厥詹呗钥煽紤]使用頻率、自最后一次使用以來的 時間、原始轉換文件的大小等。例如,如果原始文件較大(且花費較長時間生成縮 略圖),則即使原始文件不常用,仍有較大可能將其保留在高速緩存中而不回收。 在確定當前是否正在使用特定縮略像(從而不是垃圾)時,可采用傳統(tǒng) 或非傳統(tǒng)的方式。用于跟蹤是否正在使用縮略圖的一種方法是經由引用計數(shù)來跟蹤對縮略圖的引用,該引用計數(shù)可隨索引401存儲在共享存儲器中。然而,引用計數(shù)不能由意外終止的進程遞減,阻止了對現(xiàn)在孤立的縮略像的垃圾收集。 跟蹤對數(shù)據(jù)文件中的圖像的引用的一種替換方法是為正在讀取的每一縮略像創(chuàng)建唯一命名的內核對象。當讀取縮略圖時,使用(例如)URL和圖像名的 CRC-64的拼接來命名內核對象,可以創(chuàng)建低成本的內核對象(例如,互斥或事件)。 如果進程在讀取縮略圖時死掉,則操作系統(tǒng)將清理該內核對象。當査看是否正使用 特定縮略圖時,系統(tǒng)僅查詢該唯一名字的內核,或試圖創(chuàng)建同一對象來査看是否存 在錯誤。只要存在聲明該對象已經存在的錯誤,該縮略圖即為"正在使用"??刹捎没厥账惴▉韴?zhí)行垃圾收集(例如,移除或重寫不再由索引引用且不再 "使用"的縮略像)。這樣的算法可涉及遍歷數(shù)據(jù)文件整體(可能作為后臺進 程)搜索孤立且未被使用的縮略圖??闪⒓从眯驴s略圖替換孤立的縮略圖,或者可 以標記它們以便將來重用。數(shù)據(jù)文件內的縮略圖可包括所存儲的每一圖像起始處的 首部條目。該首部可包含指示孤立狀態(tài)的標志?;蛘?,所存儲的每一圖像首部可包 含"下一孤立的"數(shù)據(jù)文件條目的值。通過巡視"下一孤立的"條目的鏈接表,可 依次發(fā)現(xiàn)并處理所有孤立縮略像。此外,多遍碎片整理可從圖像文件整個地移 除孤立縮略像,移入被引用的縮略圖以填補缺口?;谑褂媒y(tǒng)計數(shù)據(jù),例如使 用計數(shù)隨時間變化的持續(xù)更新的直方圖,多遍碎片整理也可以重新安排圖像以取得 更好的局部性。圖5描述了由上述回收策略建議的用于在本地縮略圖高速緩存301中存儲縮 略像的過程。在步驟500處,接收到附帶標識信息的存儲縮略像的請求。在判定501處,檢査索引401以査看之前是否以該縮略圖大小存儲了使用相同標識 信息的圖像。如果之前存儲了一圖像,則在判定502處,檢查舊圖像來查看它當前 是否正在使用。如果它正在使用,則在步驟503處,將之前存儲的圖像的位置存儲 在孤立位置列表中以便稍后清理。如果該圖像目前未被使用,則將該位置重用于新 圖像。在步驟503之后,或者如果在判定501處先前未存儲圖像,則在504處檢查 孤立列表來査看是否有任何圖像當前未被使用。如果存在未被使用的孤立圖像,則 在步驟506處,只要該孤立圖像的大小足以容納替換圖像,即將該孤立圖像的位置 用于新圖像。如果沒有可用的孤立,則在判定507處,檢査數(shù)據(jù)文件以查看給定上 述約束它是否能夠增長。如果數(shù)據(jù)文件可增長,則在步驟508處將新圖像追加給數(shù) 據(jù)文件。如果數(shù)據(jù)文件不能進一步增長,則在判定511處,使用上述回收策略來選 擇非孤立但未被使用的圖像來回收。如果不能找到任何圖像,則在步驟512處,該 新圖像將不被高速緩存存儲。如果找到可回收圖像,則在步驟509處,回收存儲位 置,且新圖像替換所選可回收圖像。如果由以上任何步驟(505、 506、 508或509) 存儲了新圖像,則在步驟510處,使用圖像的新位置來更新索引401中的條目。圖6描述了用于在本地縮略圖高速緩存301中存儲和檢索縮略圖的一般過程。 在步驟601處,使用索引401和一個或多個數(shù)據(jù)文件來維護本地縮略圖高速緩存 301。在步驟602處,接收附帶標識信息的存儲縮略圖的請求。在步驟603處,將 該縮略像存儲在數(shù)據(jù)文件中,可能使用上述過程。在步驟604處,將標識信息 存儲在索引401中,且在步驟605處,將圖像在數(shù)據(jù)文件內的位置隨標識信息存儲 在索引401中。在步驟606處,接收到檢索由其標識信息所指示的縮略像的請 求。在步驟607處,使用上述過程,檢索圖像或對其的引用。
盡管針對包括實現(xiàn)本發(fā)明的目前優(yōu)選模式的特定實施例描述了本發(fā)明的各方 面,但本領域的技術人員可以理解,存在落入所附權利要求書所述的本發(fā)明的精神 和范圍內的上述系統(tǒng)和技術的各種改變和排列。
權利要求
1.一種用于管理縮略像的計算機實現(xiàn)的方法,所述方法包括在計算機中維護縮略圖高速緩存,所述縮略圖高速緩存包括索引和數(shù)據(jù)存儲;接收將縮略像添加到所述縮略圖高速緩存的第一請求,所述第一請求包括所述縮略像、標識信息以及縮略圖大??;將所述縮略像存儲在所述數(shù)據(jù)存儲中;以及在所述索引中存儲所述標識信息、所述縮略圖大小以及所述縮略像在所述數(shù)據(jù)存儲內的位置。
2. 如權利要求l所述的方法,其特征在于,所述標識信息包括文件位置和修 改時間。
3. 如權利要求l所述的方法,其特征在于,還包括接收檢索所述縮略像的第二請求,所述第二請求包括所述標識信息和所 述縮略圖大??;以及使用所述縮略像來應答所述第二請求。
4. 如權利要求3所述的方法,其特征在于,還包括在顯示器上顯示所述縮略像,與所述顯示器相關聯(lián)的存儲器直接從所述 縮略圖高速緩存讀取所述縮略像未經壓縮的副本。
5. 如權利要求l所述的方法,其特征在于所述數(shù)據(jù)存儲包括多個數(shù)據(jù)文件,多種不同的縮略圖大小中的每一個有一個 數(shù)據(jù)文件;以及所述索引中的條目包括所述標識信息以及所述多個數(shù)據(jù)文件內多個縮略 像的位置。
6. 如權利要求l所述的方法,其特征在于,所述計算機的每一已識別用戶具 有專用的縮略圖高速緩存。
7. 如權利要求6所述的方法,其特征在于,所述每一專用縮略圖高速緩存僅 可由所述相應的已識別用戶訪問。
8. 如權利要求l所述的方法,其特征在于,所述縮略圖高速緩存可同時由運 行在所述計算機上的多個進程訪問。
9. 如權利要求8所述的方法,其特征在于,所述多個進程合作地同步化其對 所述縮略圖高速緩存的訪問。
10. 如權利要求1所述的方法,其特征在于,所述在數(shù)據(jù)存儲中存儲縮略圖 圖像包括確定在所述數(shù)據(jù)存儲中的一位置中是否已存在與所述標識信息相關聯(lián)的舊縮 略像;以及響應于在所述數(shù)據(jù)存儲中存在所述舊縮略像,在所述舊縮略像的所 述位置中存儲所述縮略像。
11. 一種用于管理縮略像的系統(tǒng),所述系統(tǒng)包括用于存儲縮略圖高速緩存的存儲,所述縮略圖高速緩存包括索引文件和一個 或多個數(shù)據(jù)文件;以及 處理器,被配置成接收將縮略像存儲在所述縮略圖高速緩存中的第一請求,所述第一 請求包括所述縮略像和標識信息;在所述一個或多個數(shù)據(jù)文件的其中之一中存儲所述縮略像;在所述索引中存儲所述標識信息以及所述縮略像在所述一個或多個 數(shù)據(jù)文件的其中之一 內的位置;接收檢索所述縮略像的第二請求,所述第二請求包括所述標識信息;以及使用對所述縮略像的引用來響應于所述第二請求。
12. 如權利要求11所述的系統(tǒng),其特征在于,所述標識信息包括文件位置和 修改的日期和時間。
13. 如權利要求12所述的系統(tǒng),其特征在于,所述文件位置是統(tǒng)一資源定位器。
14. 如權利要求IO所述的系統(tǒng),其特征在于,還包括 顯示器;以及存儲器,其中所述對所述縮略像的引用指向所述存儲器內所述縮略 像的表示所位于的存儲器位置,且其中所述處理器還被配置成通過直接引用所述存 儲器位置來在所述顯示器上顯示所述縮略像。
15. 如權利要求ll所述的系統(tǒng),其特征在于,所述處理器還被配置成 確定之前在所述標識信息的存儲器位置中是否存儲了較舊的縮略像; 響應于之前存儲了較舊的縮略像,重用所述較舊的縮略像在所述一 個或多個數(shù)據(jù)文件的其中之一內的所述存儲器位置來存儲所述縮略像。
16. 如權利要求ll所述的系統(tǒng),其特征在于,所述系統(tǒng)的已識別用戶具有專 用的縮略圖高速緩存。
17. 如權利要求ll所述的系統(tǒng),其特征在于,所述縮略圖高速緩存可由運行 在所述計算機上的多個進程同時訪問。
18. 如權利要求ll所述的系統(tǒng),其特征在于-所述縮略圖高速緩存包括多個數(shù)據(jù)文件,多種不同的縮略像大小中的每 一個有一個數(shù)據(jù)文件;所述索引中的條目包括所述標識信息以及所述多個數(shù)據(jù)文件內的一個或多個 縮略像的位置;以及所述第一請求還包括所述多種不同的縮略像大小的其中之一的指示符。
19. 一種用于管理縮略像的系統(tǒng),所述系統(tǒng)包括 顯示器;用于存儲縮略圖高速緩存的存儲器,所述縮略圖高速緩存包括索引文件和多 個數(shù)據(jù)文件;以及處理器,被配置成接收將縮略像存儲在所述縮略圖高速緩存中的第一請求,所述第一 請求包括所述縮略像、文件位置、修改的日期和時間以及縮略圖大??;將所述縮略像存儲在所述多個數(shù)據(jù)文件的其中之一中-, 在所述索引文件中存儲所述多個數(shù)據(jù)文件的其中之一內的所述縮略像的所述文件位置、所述修改的日期和時間以及所述縮略圖大??;接收檢索所述縮略像的第二請求,所述第二請求包括所述文件位置、所述修改的日期和時間以及所述縮略圖大??;使用對所述縮略像的引用來響應于所述第二請求;以及 在所述顯示器上顯示所述縮略像。
20. 如權利要求18所述的系統(tǒng),其特征在于,還包括視頻適配器,所述視頻適配器從所述縮略圖高速緩存直接讀取所述縮略
全文摘要
提供了用于在每個用戶/每個系統(tǒng)的縮略圖高速緩存中存儲和檢索縮略像的系統(tǒng)和方法??墒褂靡粋€或多個數(shù)據(jù)文件來存儲各種大小的縮略像。使用特定文件的縮略圖的位置來更新索引,其URL和修改時間可被用作在索引內查找縮略圖的關鍵字。提供了縮略像的直接存儲器映射。利用并發(fā)技術來維護多個進程之間對高速緩存的合作訪問。回收被孤立或未被使用的高速緩存內容,以便由較新或更常用的縮略像使用。
文檔編號G06F7/00GK101167047SQ200580049567
公開日2008年4月23日 申請日期2005年7月28日 優(yōu)先權日2005年4月22日
發(fā)明者B·A·雅尼蒂, D·G·德沃切克, F·A·戴比, J·C·貝爾特, M·米勒, M·米洛特, P·A·格斯莫里諾, P·L·科辛格爾, R·E·辛格克萊爾, T·K·比姆 申請人:微軟公司