專(zhuān)利名稱(chēng):對(duì)有時(shí)間限制的消息的有效處理的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及對(duì)有時(shí)間限制的消息的有效處理。 背景
垃圾郵件構(gòu)成了到達(dá)并且由電子郵件服務(wù)、公司以及因特網(wǎng)服務(wù)提供商(ISP) 處理的消息中的一大部分。由于垃圾郵件的出現(xiàn),電子郵件業(yè)務(wù)和ISP的一大部分
帶寬和硬件資源都被用以加工并處理垃圾郵件。與此同時(shí),由于垃圾郵件通常具有 不同的性質(zhì)并且處理方法與一般郵件不同,所以有機(jī)會(huì)通過(guò)利用這些具體性質(zhì)和處 理特性來(lái)優(yōu)化電子郵件服務(wù)器和其它硬件的性能。更具體地,垃圾郵件消息趨向于 比一般郵件消息小,它們被讀取的可能性比較小,它們趨向于對(duì)終端用戶(hù)不那么重 要或者不那么有價(jià)值并由此會(huì)被成批刪除,而且它們通常在某段時(shí)間周期(例如, 幾天)之后被自動(dòng)刪除。
在類(lèi)似的環(huán)境中,公司在管理和存儲(chǔ)諸如電子郵件的消息通信量時(shí)也可能面 對(duì)類(lèi)似的問(wèn)題。更具體地,這些公司可能不僅受到垃圾郵件的影響,還受到發(fā)往在 該公司工作的人員或由這些人員發(fā)出的大量非垃圾郵件消息的影響。為了降低由該 公司內(nèi)電子郵件服務(wù)器存儲(chǔ)的這種消息的量,管理員可以建立在給定時(shí)間周期之后 自動(dòng)刪除某類(lèi)消息的命令。例如,可以在某些種類(lèi)或類(lèi)型的消息已被發(fā)送或接收的
30天之后自動(dòng)刪除這些消息,而不考慮它們是否被認(rèn)為是"垃圾郵件"。在這種 情況下,這類(lèi)非垃圾郵件消息可能與垃圾郵件共享某些特性,因?yàn)閮烧叨紩?huì)被保留 規(guī)定的時(shí)間周期并且在該時(shí)間周期期滿(mǎn)之后會(huì)被自動(dòng)刪除。
處理、管理以及刪除大量的消息通常需要消息服務(wù)器執(zhí)行大量的輸入/輸出 (I/O)操作。已知這樣的操作相比于實(shí)際移動(dòng)考慮作為I/O操作的有效負(fù)載的數(shù) 據(jù),會(huì)在準(zhǔn)備諸如磁盤(pán)驅(qū)動(dòng)器之類(lèi)的硬件的過(guò)程中涉及大量額外開(kāi)銷(xiāo)。然而,如果 優(yōu)化這種消息的處理,那么就可以降低或者合并被調(diào)配用以支持這種處理的硬件資 源,從而降低ISP、電子郵件業(yè)務(wù)提供商、公司等的整體運(yùn)營(yíng)成本。此處的教導(dǎo)解 決了本領(lǐng)域中的這些和其它問(wèn)題。概述
此處描述了對(duì)有時(shí)間限制的消息的有效處理。
在一個(gè)實(shí)現(xiàn)方式中,消息被分類(lèi)為有時(shí)間限制的消息或無(wú)時(shí)間限制的消息。 然后,將有時(shí)間限制的消息與無(wú)時(shí)間限制的消息分開(kāi)處理。有時(shí)間限制的消息的示 例可以包括垃圾郵件或遵循保留策略的其它類(lèi)型或種類(lèi)的電子郵件,使得它們僅被 保留某個(gè)設(shè)定的時(shí)間周期。與有時(shí)間限制的消息有關(guān)的元數(shù)據(jù)被編譯并與該消息分 開(kāi)存儲(chǔ),由此可以?xún)?yōu)化該元數(shù)據(jù)的存儲(chǔ)并且與該消息分開(kāi)處理。有時(shí)間限制的消息
在被成批處理之前被累加,由此減少被有時(shí)間限制的消息消耗的i/o操作的量,并
且降低支持有時(shí)間限制的消息的處理的資源的量和成本。 附圖簡(jiǎn)述
查看附圖描述了詳細(xì)說(shuō)明。在附圖中,參考標(biāo)記最左邊的數(shù)字標(biāo)識(shí)該參考標(biāo) 記首次出現(xiàn)的附圖。在不同的附圖中使用相同的參考標(biāo)記表示相同或相似的條目。
圖1是示出了用于對(duì)有時(shí)間限制的消息的有效處理的高級(jí)數(shù)據(jù)流程的框圖。
圖2是示出了與圖1中所示的用于處理有時(shí)間限制的消息的管理和存儲(chǔ)系統(tǒng) 相關(guān)聯(lián)的部件和數(shù)據(jù)流程的框圖。
圖3是更詳細(xì)地示出了與圖1和2中所示的管理和存儲(chǔ)系統(tǒng)相關(guān)聯(lián)的部件和 數(shù)據(jù)流程,尤其是給定群集的各部件的框圖。
圖4是更詳細(xì)地示出了與以上圖3中所示的處理和存儲(chǔ)有時(shí)間限制的消息的 消息體相關(guān)聯(lián)的部件和數(shù)據(jù)流程的框圖。
圖5是示出了如以上圖3中所示的元數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)的一種實(shí)現(xiàn)的框圖。
圖6是示出了該元數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)的另一種實(shí)現(xiàn)的框圖。
圖7是示出了執(zhí)行用以接收并投遞有時(shí)間限制的消息的過(guò)程流程的流程圖。
圖8是示出了用于管理消息體被寫(xiě)入其中的一個(gè)或多個(gè)日志文件的過(guò)程流程 的流程圖。
圖9是示出了用于存儲(chǔ)與有時(shí)間限制的消息相對(duì)應(yīng)的元數(shù)據(jù)的過(guò)程的流程圖。 圖10是圖9中所示過(guò)程的時(shí)序圖。
圖11是示出了用于遍歷表結(jié)構(gòu)以搜索請(qǐng)求的元數(shù)據(jù)或標(biāo)題信息的過(guò)程的流程圖。
圖12是示出了用于按請(qǐng)求檢索給定的消息以便能夠?qū)⑵涑尸F(xiàn)給用戶(hù)的過(guò)程的流程圖。
圖13是示出了用于將給定的消息標(biāo)記為已讀的過(guò)程的流程圖。
圖14是示出了一計(jì)算環(huán)境的框圖,在該計(jì)算環(huán)境中,用于對(duì)有時(shí)間限制的消
息的有效處理的系統(tǒng)和方法以及此處描述的計(jì)算、網(wǎng)絡(luò)和系統(tǒng)體系結(jié)構(gòu)可以被全部
或部分地實(shí)現(xiàn)。
詳細(xì)說(shuō)明
圖1示出了根據(jù)此處的教導(dǎo)提供的高級(jí)數(shù)據(jù)流程100。消息105由消息分類(lèi)器 110接收。消息分類(lèi)器110將這些消息105劃分為至少兩類(lèi),即包括有時(shí)間限制的 消息115的第一類(lèi)和包括無(wú)時(shí)間限制的消息120的至少第二類(lèi)。有時(shí)間限制的滑息 115包括遵循規(guī)定它們被保留多久的某種規(guī)則的那些消息。消息115中不同的各消 息可能遵循一個(gè)或多個(gè)不同的保留周期。圖1示出了消息115的兩個(gè)樣本組,第一 組消息U5(l)遵循5天保留期,而第二組消息U5(2)遵循30天保留期。盡管圖中 為了清楚和方便示出了消息115的兩個(gè)組,但是任意數(shù)量的不同保留期都可應(yīng)用于 不同組的有時(shí)間限制的消息115。
消息115被路由給用于有時(shí)間限制的消息115的管理和存儲(chǔ)系統(tǒng)125,該系統(tǒng) 125會(huì)在此處詳細(xì)描述。為了清楚和方便,示出的兩組消息115(1)和115(2)路由給 管理和存儲(chǔ)系統(tǒng)125的一個(gè)實(shí)例。然而,應(yīng)當(dāng)注意到,可以為遵循不同保留期的每 一不同組的消息115實(shí)現(xiàn)管理和存儲(chǔ)系統(tǒng)125的各個(gè)實(shí)例。
無(wú)時(shí)間限制的消息120包括不遵循規(guī)定它們將被保留多久的任何規(guī)則并且因 此被無(wú)限期地保留的那些消息120。這些消息120可以被路由給用于無(wú)時(shí)間限制的 消息120的常規(guī)管理和存儲(chǔ)系統(tǒng)130。
圖1中所示的數(shù)據(jù)流程IOO可用于多種環(huán)境。作為第一個(gè)實(shí)施例,數(shù)據(jù)流程 IOO可用于將電子郵件服務(wù)提供給多個(gè)訂戶(hù)的ISP上下文。在此第一實(shí)施例中,消 息105可以采取電子郵件的形式引入訂戶(hù),而消息分類(lèi)器110可以采取垃圾郵件過(guò) 濾器的形式。有時(shí)間限制的消息115可以采取由消息分類(lèi)器110識(shí)別為垃圾郵件的 電子郵件的形式。此ISP可以執(zhí)行規(guī)定被分類(lèi)為垃圾郵件的消息105將被保留多久 的策略。為了討論方便而非限制,該持續(xù)時(shí)間在此被稱(chēng)作"保留期"。例如,被分 類(lèi)為垃圾郵件的消息105可以遵循5天保留期。在此實(shí)施例中,被分類(lèi)為垃圾郵件 的消息105被路由給管理和存儲(chǔ)系統(tǒng)125,該管理和存儲(chǔ)系統(tǒng)125管理垃圾郵件并 在保留期期滿(mǎn)之后刪除該垃圾郵件,這些將在如下進(jìn)一步描述。作為第二個(gè)實(shí)施例,數(shù)據(jù)流程100可用在服務(wù)于例如特定公司的電子郵件應(yīng) 用程序的上下文中。該公司可以執(zhí)行對(duì)由該公司接收到的或從該公司發(fā)送的某類(lèi)電 子郵件指定保留期的策略。作為示例而非限制,特定公司可以為"已發(fā)送"電子郵
件形式的消息105指定30天的保留期。在此實(shí)施例中,消息分類(lèi)器110會(huì)識(shí)別這 些"已發(fā)送"電子郵件,并且將它們路由給管理和存儲(chǔ)系統(tǒng)125以按此策略的處理。
圖2示出了與圖1所示用于處理有時(shí)間限制的消息115的管理和存儲(chǔ)系統(tǒng)125 相關(guān)聯(lián)的部件和數(shù)據(jù)流程。管理和存儲(chǔ)系統(tǒng)125包括接收有時(shí)間限制的消息115 的前端205,并且還包括與前端205通信的多個(gè)群集210(1)和210(N)(總稱(chēng)為群集 210)。前端205在多個(gè)群集210之間進(jìn)行負(fù)載平衡,并且將有時(shí)間限制的消息115 中給出的那些消息如虛線(xiàn)215所表示的那樣路由給群集210中的一個(gè)。
盡管圖2中示出了 N個(gè)群集210,但是此處所示的這種配置以及其它配置都 僅僅是為了方便和簡(jiǎn)明而選擇的,而沒(méi)有限制此處的教導(dǎo)。相反,此處的教導(dǎo)可用 任意數(shù)量的群集210來(lái)實(shí)現(xiàn),其中N是從大于1的整數(shù)中選出的一個(gè)整數(shù),從而 群集的總數(shù)為N。此一般說(shuō)明應(yīng)用于此處示出的與整數(shù)N有關(guān)的任何部件。
圖3示出了進(jìn)一步細(xì)化的與圖1和圖2中所示的管理和存儲(chǔ)系統(tǒng)125相關(guān)的 部件和數(shù)據(jù)流程,尤其是群集210的部件。給出的群集210包括多個(gè)服務(wù)器機(jī)器 305(1)和305(N)(總稱(chēng)為服務(wù)器機(jī)器305),在其上執(zhí)行運(yùn)行群集210的軟件。服 務(wù)器設(shè)備305的一個(gè)合適的示例是一種被配置用以支持此處所教導(dǎo)功能的微微 (pico)服務(wù)器("PServ")網(wǎng)絡(luò)服務(wù)器。
前端205選擇給定的群集210來(lái)接收給定的有時(shí)間限制的消息115。選定群集 210內(nèi)的給定服務(wù)器設(shè)備305將給定的有時(shí)間限制的消息115的消息體310傳遞給 一個(gè)或多個(gè)機(jī)器315以供存儲(chǔ),這在如下將結(jié)合圖4進(jìn)一步討論。服務(wù)器機(jī)器305 還向標(biāo)題結(jié)構(gòu)內(nèi)填充與有時(shí)間限制的消息115有關(guān)的元數(shù)據(jù)320,并且將此元數(shù)據(jù) 320路由給元數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)325,所有這些將在如下結(jié)合圖5作進(jìn)一步的討論。
服務(wù)器機(jī)器305能夠把消息體310和元數(shù)據(jù)320寫(xiě)入各自的存儲(chǔ)結(jié)構(gòu),由此 使得消息體310和元數(shù)據(jù)320彼此分開(kāi)存儲(chǔ)。消息體310整體被認(rèn)為是包括與該消 息有關(guān)的任何標(biāo)題數(shù)據(jù),但是包含該元數(shù)據(jù)320的標(biāo)題結(jié)構(gòu)本身可以與該消息體 310分開(kāi)存儲(chǔ)。與元數(shù)據(jù)320分開(kāi)存儲(chǔ)消息體310可以使管理和存儲(chǔ)系統(tǒng)125彼此 獨(dú)立地優(yōu)化對(duì)消息體310和元數(shù)據(jù)320的處理。在此處使用的術(shù)語(yǔ)"處理"至少 可以包括接收、處理、存儲(chǔ)或檢索消息,或者在任何可應(yīng)用保留期期滿(mǎn)之后刪除消 息。
7僅為了方便以及簡(jiǎn)明起見(jiàn),圖3示出了 N個(gè)服務(wù)器機(jī)器305 (分別為服務(wù)器 機(jī)器305(1)和305(N))以及N個(gè)存儲(chǔ)機(jī)器315 (分別為存儲(chǔ)機(jī)器315(1)和315(N))。
然而,應(yīng)當(dāng)注意到,該舉例說(shuō)明并沒(méi)有限制此處的教導(dǎo)。相反,此處的教導(dǎo)可以采 用任意數(shù)量的服務(wù)器機(jī)器305和存儲(chǔ)機(jī)器315來(lái)實(shí)現(xiàn)。更具體地,單個(gè)盒(asingle box)可以運(yùn)行或者容納該服務(wù)器機(jī)器305、存儲(chǔ)機(jī)器315以及元數(shù)據(jù)存儲(chǔ)325。可 替換地,前述機(jī)器中的部分或者全部都可以在其它盒上實(shí)現(xiàn)。
圖4更詳細(xì)地示出了與圖3所示的處理并存儲(chǔ)有時(shí)間限制的消息115的消息 體310相關(guān)聯(lián)的部件和數(shù)據(jù)流程。如以上圖3中所討論的,消息體310和元數(shù)據(jù) 320是被分開(kāi)的,并且在分開(kāi)的結(jié)構(gòu)中對(duì)其進(jìn)行處理和存儲(chǔ)。圖4解決了管理消息 體310的問(wèn)題,而圖5解決了管理元數(shù)據(jù)320的問(wèn)題。
每個(gè)服務(wù)器機(jī)器305都包含在消息體310到達(dá)時(shí)其內(nèi)可以存儲(chǔ)消息體310數(shù) 據(jù)結(jié)構(gòu)405。此數(shù)據(jù)結(jié)構(gòu)405可以駐留在服務(wù)器設(shè)備305的存儲(chǔ)器中。數(shù)據(jù)結(jié)構(gòu)405 的確切性能并不關(guān)鍵,并且可以假設(shè)具有例如,隊(duì)列、鏈接表、棧、陣列等的形式。 數(shù)據(jù)結(jié)構(gòu)405包括用于各個(gè)消息體310的響應(yīng)的字段410(1)和410(N)(總稱(chēng)為字 段410),并且僅為了方便起見(jiàn),給出的消息體310被示為正載入字段410(N)中。 假設(shè)數(shù)據(jù)結(jié)構(gòu)405被實(shí)現(xiàn)為隊(duì)列,則給出的消息體310可以被追加到該隊(duì)列。
數(shù)據(jù)結(jié)構(gòu)405用于累加多個(gè)相應(yīng)的消息體310。當(dāng)數(shù)據(jù)結(jié)構(gòu)405變得足夠大(例 如,兆字節(jié)量級(jí))或者在給定的時(shí)間間隔(例如,大約每次100毫秒)期滿(mǎn)之后, 數(shù)據(jù)結(jié)構(gòu)405中的消息體310就被寫(xiě)入主存在相應(yīng)存儲(chǔ)機(jī)器315上的一個(gè)或多個(gè)日 志文件415(1)和415(N)(總稱(chēng)為日志文件415或者日志文件組415)。此處所使用 的術(shù)語(yǔ)"組"是指一個(gè)或多個(gè)中的一些。存儲(chǔ)機(jī)器315可以使用磁盤(pán)驅(qū)動(dòng)器介質(zhì)以 及相關(guān)的存儲(chǔ)技術(shù)來(lái)主存日志文件415。如果適于給出的實(shí)現(xiàn),則可出于冗余和容 錯(cuò)的考慮將給出的消息體310寫(xiě)入日志文件組415。按照此處的教導(dǎo)的一些方面, 日志文件415至少可以部分利用一個(gè)或多個(gè)數(shù)據(jù)庫(kù)而被實(shí)現(xiàn)。在此實(shí)現(xiàn)中,日志文
件415可以被成批寫(xiě)入一組表格。應(yīng)當(dāng)理解,此處的教導(dǎo)的這些方面本質(zhì)上是示意 性而非限定性的。
服務(wù)器機(jī)器305可以利用修改的循環(huán)復(fù)用算法選擇存儲(chǔ)機(jī)器315上的日志文 件組415,這可以有偏差的以便存儲(chǔ)機(jī)器315之間的負(fù)載平衡。例如,當(dāng)給出的存 儲(chǔ)機(jī)器315達(dá)到其存儲(chǔ)容量時(shí),服務(wù)器機(jī)器305可以降低新消息體310被寫(xiě)入該存 儲(chǔ)機(jī)器315的速率。在此處教導(dǎo)的示意性實(shí)施例中,給出的日志文件415可以?xún)H由 一個(gè)服務(wù)器機(jī)器305寫(xiě)入,由此消除對(duì)調(diào)整由不同服務(wù)器機(jī)器305寫(xiě)入給出的日志文件415的任何需要。當(dāng)存在對(duì)該組415中的任何一部分的寫(xiě)入錯(cuò)誤時(shí),或者當(dāng)日
志文件415已經(jīng)打開(kāi)一給定的周期(例如,數(shù)小時(shí))時(shí),就可關(guān)閉日志文件組415, 而這將在如下面結(jié)合圖6進(jìn)一步討論。
與寫(xiě)入高速緩存、緩沖器或者中間數(shù)據(jù)結(jié)構(gòu)的其它形式相比,可以使用迫使 該寫(xiě)入完全通過(guò)磁盤(pán)介質(zhì)的選項(xiàng)來(lái)寫(xiě)入日志文件415,并且可以認(rèn)為直到該寫(xiě)入變 為不變?yōu)橹?,該?xiě)入操作是不完全的。當(dāng)完成對(duì)存儲(chǔ)機(jī)器315的寫(xiě)入時(shí),服務(wù)器機(jī) 器305就得知存儲(chǔ)給定的消息體310的日志文件415名稱(chēng)、包含該日志文件415 的存儲(chǔ)機(jī)器315、給定的消息體310在日志文件415內(nèi)的偏移、以及消息體310的 長(zhǎng)度。服務(wù)器機(jī)器305可以為每個(gè)消息體310在元數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)325中存儲(chǔ)這些參 數(shù)來(lái)作為元數(shù)據(jù)320。
與將每個(gè)消息體310逐一寫(xiě)入日志文件415相比,通過(guò)在將據(jù)結(jié)構(gòu)405中的 多個(gè)消息體310寫(xiě)入日志文件415之前累加這些消息體310,管理和存儲(chǔ)系統(tǒng)125 就實(shí)現(xiàn)更高的效率。假設(shè)存儲(chǔ)機(jī)器315包括諸如磁盤(pán)驅(qū)動(dòng)器的次級(jí)存儲(chǔ)機(jī)器,并且 從這種驅(qū)動(dòng)器中讀取或者寫(xiě)入這種驅(qū)動(dòng)器被稱(chēng)作"I/0操作",則每個(gè)I/0操作都 涉及在可以從該存儲(chǔ)媒體中讀取或者向其寫(xiě)入任何數(shù)據(jù)"有效負(fù)載"之前在該存儲(chǔ) 介質(zhì)內(nèi)定位合適扇區(qū)的大量額外開(kāi)銷(xiāo)。更具體地,這種額外開(kāi)銷(xiāo)包括該驅(qū)動(dòng)器在該 驅(qū)動(dòng)器上查找合適磁道所花費(fèi)的時(shí)間、將讀寫(xiě)頭徑向移動(dòng)到該磁道的時(shí)間、以及旋 轉(zhuǎn)該驅(qū)動(dòng)器以便恰當(dāng)放置目標(biāo)扇區(qū)位于該讀寫(xiě)頭之下的時(shí)間。通常,除非該有效負(fù) 載很大,否則上述額外開(kāi)銷(xiāo)時(shí)間實(shí)質(zhì)上超出了將數(shù)據(jù)傳送給存儲(chǔ)媒體或從中讀取數(shù) 據(jù)的時(shí)間。例如,根據(jù)當(dāng)代標(biāo)準(zhǔn),在兆字節(jié)的有效負(fù)載下接近此折衷點(diǎn)。然而隨著 技術(shù)的發(fā)展,此折衷點(diǎn)會(huì)改變。
以單獨(dú)或者逐一的基礎(chǔ)上將消息體310寫(xiě)入存儲(chǔ)機(jī)器315的效率會(huì)很低,因 為寫(xiě)入消息體310本身所花費(fèi)的實(shí)際時(shí)間相對(duì)于上述額外開(kāi)銷(xiāo)可能很小。同樣地, 這種額外開(kāi)銷(xiāo)會(huì)在管理和存儲(chǔ)系統(tǒng)125接收每個(gè)消息體310時(shí)重復(fù),以致于存儲(chǔ)X 個(gè)消息體310會(huì)導(dǎo)致X次重復(fù)該額外開(kāi)銷(xiāo)。相反,管理和存儲(chǔ)系統(tǒng)125在數(shù)據(jù)結(jié) 構(gòu)405中累加多個(gè)消息體310,并且然后將這些累加的消息體310成批寫(xiě)入存儲(chǔ)機(jī) 器315。因?yàn)檫@些消息體310被成批寫(xiě)入,則上述額外開(kāi)銷(xiāo)僅消耗了將消息體310 寫(xiě)入存儲(chǔ)機(jī)器315的整個(gè)I/O操作中的較小比例。同樣地,存儲(chǔ)X個(gè)消息體310 就僅需要一個(gè)上述額外開(kāi)銷(xiāo)的示例。上述這兩個(gè)因素就增加了由管理和存儲(chǔ)系統(tǒng) 125執(zhí)行的I/O操作的整體效率。
. 因?yàn)?/0操作中的每一個(gè)都移動(dòng)更多的"有效負(fù)載",并且因此更加有效,所
9以按此教導(dǎo)所構(gòu)造的系統(tǒng)和方法可以采用較少I(mǎi)/O操作來(lái)支持常規(guī)系統(tǒng)的消息處 理負(fù)載。因此,服務(wù)該負(fù)載所涉及的機(jī)器也較少,這意味著在獲得并維護(hù)該機(jī)器所 需的投入也更少??商鎿Q地,如果將具有給定的一組資源的常規(guī)系統(tǒng)按照此教導(dǎo)修 改,則它將能夠處理更高的消息負(fù)載。
圖5示出了圖3所示元數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)325的實(shí)現(xiàn)500。該元數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)325 的另一個(gè)實(shí)施例將在以下結(jié)合圖6示出并討論。
盡管以上討論的日志文件415可以有效地收集并成批存儲(chǔ)消息體310,但是在 用戶(hù)希望列表或者查看他或她郵箱的內(nèi)容時(shí),維持第二結(jié)構(gòu)315存儲(chǔ)與日志文件 415分開(kāi)的元數(shù)據(jù)可能更為有效。這種元數(shù)據(jù)320可以包括能夠讓適當(dāng)?shù)碾娮余]件 應(yīng)用程序顯示消息標(biāo)題的信息。
元數(shù)據(jù)320可以包括相對(duì)于終端用戶(hù)可見(jiàn)的數(shù)據(jù)以及對(duì)該終端用戶(hù)不可見(jiàn)的 其它數(shù)據(jù)??梢?jiàn)元數(shù)據(jù)320可以包括表示消息的目的地和/或始發(fā)地址的數(shù)據(jù)、表 示發(fā)送或接收時(shí)間的時(shí)間或日期標(biāo)記、主題行、指示消息是否已被閱讀的圖標(biāo)等。 次可見(jiàn)的元數(shù)據(jù)320可以包括涉及給定的消息體310定位的信息,并且可以包括含 有給定的消息體310的日志文件415的名稱(chēng)、包含日志文件415的存儲(chǔ)機(jī)器315、 該消息體310在日志文件415內(nèi)的偏移、以及該消息體310的長(zhǎng)度。
元數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)325至少可以被實(shí)現(xiàn)為圖5中所示的實(shí)施例500。在該實(shí)施例 500中,元數(shù)據(jù)存儲(chǔ)可以被實(shí)現(xiàn)為一組數(shù)據(jù)庫(kù)表505 (例如,基于SQL的表),并 且在圖6中所示的第二實(shí)施例中被實(shí)現(xiàn)為基于圖像的日志。在這兩個(gè)實(shí)施例中,用 于給定郵箱的元數(shù)據(jù)320可以被存儲(chǔ)在給定的存儲(chǔ)機(jī)器315上。此外,元數(shù)據(jù)320 還可以通過(guò)運(yùn)行來(lái)自接收更新請(qǐng)求的服務(wù)器機(jī)器305的事務(wù)而被更新。在基于表的 實(shí)現(xiàn)中,每一更新僅涉及一項(xiàng)事務(wù),而這些更新被追加到適當(dāng)?shù)谋怼D承┗趫D像 的實(shí)現(xiàn)可以執(zhí)行分別讀取和寫(xiě)入事務(wù)來(lái)實(shí)現(xiàn)次更新。然而,其它基于圖像的實(shí)現(xiàn)也 可以通過(guò)將寫(xiě)入聚攏到扇區(qū)邊界或者通過(guò)將扇區(qū)尾端存儲(chǔ)在存儲(chǔ)器中來(lái)避免該讀 取事務(wù)。
相反,常規(guī)方法對(duì)于每個(gè)更新可能需要兩項(xiàng)事務(wù)來(lái)考慮將部分寫(xiě)入記述到消 息日志文件中。第一項(xiàng)事務(wù)讀取該部分消息日志文件寫(xiě)入,而第二項(xiàng)事務(wù)則寫(xiě)入各更新。
圖5和6中所示的實(shí)施例可以允許元數(shù)據(jù)320在過(guò)了保留期之后仍存在。也 就是說(shuō), 一些元數(shù)據(jù)320可以描述已經(jīng)過(guò)期和/或已經(jīng)被刪除的消息體310和/或日 志文件415。由于元數(shù)據(jù)320與消息體310分開(kāi)存儲(chǔ)和管理,所以可以為元數(shù)據(jù)320和消息體310規(guī)定和優(yōu)化各自的維護(hù)和刪除算法。當(dāng)最有效的是刪除給定組的消息
體310和/或日志文件415時(shí),刪除對(duì)應(yīng)的元數(shù)據(jù)320可能就不是最有效的。然而, 如以下將詳細(xì)討論的那樣,服務(wù)器機(jī)器305在遍歷元數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)325時(shí)忽略這種 "已過(guò)期"元數(shù)據(jù)320。在以元數(shù)據(jù)存儲(chǔ)實(shí)現(xiàn)成SQL表505為特征的實(shí)施例中, 服務(wù)器機(jī)器305可以寫(xiě)入被設(shè)計(jì)成不返回有關(guān)已刪除的/過(guò)期的日志文件415和/或 消息體310的元數(shù)據(jù)的隊(duì)列。
在數(shù)據(jù)庫(kù)表實(shí)施例500中,元數(shù)據(jù)320可以被存儲(chǔ)在一組表505中。典型的 表505(1)中的一行510(1)可以對(duì)應(yīng)于由管理和存儲(chǔ)系統(tǒng)125所存儲(chǔ)的每個(gè)消息體 310。當(dāng)有新消息體310被存儲(chǔ)或刪除時(shí),可以創(chuàng)建另一行510(N),或者可以刪除 或空出現(xiàn)有行510(N)。
表505可以被構(gòu)造成自然為一代的(generational)。也就是說(shuō),給定的表505 可以存儲(chǔ)有關(guān)所有消息體310的元數(shù)據(jù)320 —個(gè)給定的時(shí)間周期,例如,大約半個(gè) 保留期。表505可以用郵箱ID515和消息ID 520來(lái)索引,并且表505的各列可以 與以上討論的多種類(lèi)型的元數(shù)據(jù)320相對(duì)應(yīng)。對(duì)于每個(gè)給定的消息體310,列525 可以存儲(chǔ)包含存儲(chǔ)該消息體310的日志文件415的存儲(chǔ)機(jī)器315的ID,列530可 以存儲(chǔ)該存儲(chǔ)機(jī)器315內(nèi)的日志文件415的ID,列535可以存儲(chǔ)消息體310在日 志文件415內(nèi)的偏移,而列540可以存儲(chǔ)該消息體310的長(zhǎng)度。單獨(dú)的表可以跟蹤 任意表或者重復(fù)上述內(nèi)容的其它結(jié)構(gòu)的位置。
圖6示出了元數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)325的一個(gè)額外實(shí)現(xiàn)600。實(shí)施例600可以包括表 605,該表有3行用于給定郵箱的名稱(chēng)的行610,包含世代號(hào)(通常是整數(shù))的 行615,以及用于給定郵箱的圖像的行620。各列都可以為每個(gè)郵箱而被實(shí)例化。
在此,圖像620被稱(chēng)作日志"bbb"。已知術(shù)語(yǔ)"blob"在工業(yè)上是是用作"二 進(jìn)制大型對(duì)象(binary large object)"的簡(jiǎn)寫(xiě)。因此,不是規(guī)定每個(gè)消息體310用 一行515的表505,而是該實(shí)施例600可以包括用于每個(gè)非空郵箱的圖像或者日志 blob 620。
曰志blob 620可以包含與上述表505中所含的元數(shù)據(jù)320相類(lèi)似的元數(shù)據(jù) 320。當(dāng)服務(wù)器機(jī)器305為給定郵箱更新元數(shù)據(jù)320時(shí),它可以從元數(shù)據(jù)存儲(chǔ)結(jié)構(gòu) 325中檢索用于該郵箱的日志blob 620和世代號(hào)615。服務(wù)器機(jī)器305隨后就能夠 用新的元數(shù)據(jù)320更新該日志blob 620,遞增該世代號(hào)615,以及將更新的日志blob 620和遞增的世代號(hào)615寫(xiě)回到元數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)325。
在將更新的日志blob 620和遞增的世代號(hào)615寫(xiě)回到元數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)325之
11前,服務(wù)器機(jī)器305檢測(cè)自從服務(wù)器機(jī)器305最初讀取該日志blob 620以來(lái)當(dāng)前存 儲(chǔ)在元數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)325內(nèi)的日志blob 565的世代號(hào)615是否已經(jīng)改變。如果該世 代號(hào)615自從最初讀取以來(lái)有所改變,則這就可能指示另一個(gè)服務(wù)器機(jī)器305或者 其它過(guò)程已經(jīng)在該讀取和該更新之間的某一時(shí)刻更新了該日志blob 620。在這種情 況下,服務(wù)器機(jī)器305重新讀取該日志blob 620,并且重新嘗試對(duì)元數(shù)據(jù)存儲(chǔ)結(jié)構(gòu) 325的更新。
如果世代號(hào)615自從服務(wù)器機(jī)器305最初讀取該日志blob 620以來(lái)尚未改變, 該服務(wù)器機(jī)器305就更新元數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)325。以此方式,世代號(hào)615可以避免不 同的服務(wù)器機(jī)器305或其它過(guò)程對(duì)同一郵箱執(zhí)行沖突的更新。
作為以上所述的世代號(hào)方案的一個(gè)可選替換,并且為了消除更新它的寫(xiě)入事 務(wù),如果當(dāng)前值仍然是服務(wù)器機(jī)器305最初讀取的值,則服務(wù)器機(jī)器305可以通過(guò) 將日志blob 620更新為新值的增強(qiáng)更新事務(wù)而使用更新的日志blob 620來(lái)更新該 元數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)325。這種替換方法為了管理少一個(gè)的參數(shù)作為交換涉及為每一事 務(wù)移動(dòng)更多的數(shù)據(jù),但是這種折衷在某些情況下是有利的。
另一可選替換組合了世代號(hào)方法和增強(qiáng)更新事務(wù)方法。這種可選替換可以將 世代號(hào)615預(yù)掛起(pre-pend)或追加到日志blob 620的開(kāi)頭或末尾。在更新過(guò)程 中,服務(wù)器機(jī)器305可以引用該世代號(hào)615來(lái)確保產(chǎn)生看上去相同的中間結(jié)果的一 組更新會(huì)被適當(dāng)?shù)卮谢?br>
當(dāng)為給定郵箱更新日志blob 620時(shí),服務(wù)器機(jī)器305在重寫(xiě)該日志blob 620 之前,可以為該郵箱刪除元數(shù)據(jù)320中任何陳舊項(xiàng)。陳舊項(xiàng)例如可以包括與比可用 保留期還要老舊的有時(shí)間限制的消息115相對(duì)應(yīng)的項(xiàng)。如果該郵箱中不再有消息體 310,則遞增世代號(hào)615并且刪除日志blob 620。刪除日志blob 620的一種方法是 將其作為零長(zhǎng)度文件寫(xiě)入。
非空日志blob 620可以具有一最小尺寸,該最小尺寸大到僅有很小百分比的 郵箱可能需要比這個(gè)尺寸更大的尺寸。如果大量的相鄰頁(yè)被分配在有關(guān)該日志blob 620的表605中,則日志blob 620在其增大或者收縮時(shí)就無(wú)需重新分配。例如,假 設(shè)給定的實(shí)現(xiàn)中,每天每個(gè)郵箱有八(8)個(gè)消息到達(dá)。如果用于給定的有時(shí)間限 制的消息115的元數(shù)據(jù)320大約是500個(gè)字節(jié),并且保留期是5天,那么日志blob 565的平均使用部分會(huì)是約20K。這樣,64K的最小blob尺寸應(yīng)當(dāng)會(huì)使幾乎所有日 志blob 620不再需要擴(kuò)大。這種方法比起其它方法可能會(huì)在整體上使用更多的空 間,但是其使用的總空間則仍可能是相對(duì)較小的。每個(gè)存儲(chǔ)機(jī)器315的郵箱的平均
12數(shù)量是大約IOO,OOO,所以配置64K/郵箱會(huì)使支持日志blob 620的每個(gè)存儲(chǔ)機(jī)器315 存儲(chǔ)6.4G。
如果給定的郵箱根本沒(méi)有活動(dòng)(既沒(méi)有消息達(dá)到,也沒(méi)被所有者訪(fǎng)問(wèn)),那 么其日志blob 620會(huì)無(wú)限地維持,即使它可能僅描述了過(guò)期的消息體310。在管理 和存儲(chǔ)系統(tǒng)125的某些實(shí)施例中,代理進(jìn)程(daemon)可以遍歷該郵箱,并且移 動(dòng)與過(guò)期消息體310有關(guān)的任何元數(shù)據(jù)320。然而,如果管理和存儲(chǔ)系統(tǒng)125在某 個(gè)時(shí)間周期之后完全移除了不活動(dòng)的郵件賬戶(hù),則該類(lèi)的代理進(jìn)程可能并無(wú)意義。
圖7示出了被執(zhí)行用以接收和存儲(chǔ)有時(shí)間限制的消息115的過(guò)程700。在框 705,處理700等待給定的有時(shí)間限制的消息115的到達(dá)或者與數(shù)據(jù)結(jié)構(gòu)405 (可 以采取緩沖器的形式)相關(guān)聯(lián)的超時(shí)參數(shù)期滿(mǎn)的發(fā)生。例如,給定的有時(shí)間限制的 消息115可以由管理和存儲(chǔ)系統(tǒng)125接收,并且被路由給服務(wù)器機(jī)器305。當(dāng)這些 事件中的任一事件發(fā)生時(shí),過(guò)程700進(jìn)行到框710,在其中確定與該數(shù)據(jù)結(jié)構(gòu)405 相關(guān)聯(lián)的超時(shí)參數(shù)是否已經(jīng)期滿(mǎn)。如果超時(shí)參數(shù)尚未期滿(mǎn),則過(guò)程700就就如框 715所示把有時(shí)間限制的消息115載入數(shù)據(jù)結(jié)構(gòu)405。然后,過(guò)程700進(jìn)行至框720 以評(píng)估數(shù)據(jù)結(jié)構(gòu)405是否已滿(mǎn)。如果數(shù)據(jù)結(jié)構(gòu)405未滿(mǎn),則過(guò)程700返回框705 以等待下-一個(gè)事件,該事件可以是超時(shí)條件或者下一個(gè)有時(shí)間限制的消息310的到 達(dá)。從框720,如果數(shù)據(jù)結(jié)構(gòu)405已滿(mǎn),這過(guò)程700進(jìn)行到框725。圖7包括頁(yè)面 上的標(biāo)號(hào)A,以便方便和清楚的表示過(guò)程700。然而,包括頁(yè)面上的標(biāo)號(hào)A并非以 任何方式限制此處的教導(dǎo)。
返回到框710,如果超時(shí)參數(shù)已經(jīng)期滿(mǎn),過(guò)程700隨后進(jìn)行到框725。同樣地, 包括頁(yè)面上的A并非以任何方式限制此處的教導(dǎo)。在框725,過(guò)程700確定是否已 經(jīng)超過(guò)了用于寫(xiě)入一個(gè)或多個(gè)當(dāng)前日志文件415的時(shí)間限制。正如在別處更詳細(xì)討 論的那樣,可以在一個(gè)有限的時(shí)間周期內(nèi)寫(xiě)入給定的日志文件415。如果已經(jīng)超過(guò) 了用于一個(gè)或多個(gè)當(dāng)前日志文件415的時(shí)間限制,過(guò)程700則進(jìn)行到框730以關(guān)閉 一個(gè)或多個(gè)當(dāng)前日志文件415。然后,過(guò)程700進(jìn)行到框735以打開(kāi)一個(gè)或多個(gè)新 的日志文件415。然后,過(guò)程700返回到判定框725。
從框725,如果尚未超過(guò)有關(guān)一個(gè)或多個(gè)當(dāng)前日志文件415的時(shí)間限制,則過(guò) 程700進(jìn)行到框740,在其中數(shù)據(jù)結(jié)構(gòu)405的內(nèi)容(S卩,多個(gè)有時(shí)間限制的消息115 的消息體)被寫(xiě)入一個(gè)或多個(gè)日志文件。為了便于對(duì)有關(guān)有時(shí)間限制的消息115 的元數(shù)據(jù)320的后續(xù)處理,就對(duì)每個(gè)消息115進(jìn)行時(shí)間標(biāo)記。這種時(shí)間標(biāo)記可以在 消息115被載入數(shù)據(jù)結(jié)構(gòu)405中時(shí)發(fā)生,或者可以在數(shù)據(jù)結(jié)構(gòu)405的內(nèi)容被寫(xiě)入一個(gè)或多個(gè)日志文件415時(shí)發(fā)生。
框745隨后檢驗(yàn)對(duì)一個(gè)或多個(gè)日志文件415的寫(xiě)入是否成功。假設(shè)消息115 出于冗余的目的被寫(xiě)入兩個(gè)或更多的日志文件415,如果對(duì)任何日志文件415的寫(xiě) 入失敗,隨后過(guò)程700就進(jìn)行到框730以關(guān)閉一個(gè)或多個(gè)當(dāng)前日志文件415中的每 一個(gè)。其后,過(guò)程700進(jìn)行到框735以打開(kāi)一個(gè)或多個(gè)新的日志文件415。其后, 過(guò)程700進(jìn)行到判定框725以檢測(cè)是否已經(jīng)超過(guò)了用于寫(xiě)入一個(gè)或多個(gè)當(dāng)前日志文 件415的時(shí)間限制。由于一個(gè)或多個(gè)當(dāng)前日志文件415剛被創(chuàng)建,該過(guò)程700隨后 將進(jìn)行到框740以重新嘗試寫(xiě)入操作。
在某些實(shí)施例中,過(guò)程700可以打開(kāi)存儲(chǔ)機(jī)器315上的一個(gè)或多個(gè)新日志文 件415,而不是打開(kāi)先前向其寫(xiě)入失敗的主存日志文件415的機(jī)器存儲(chǔ)315。過(guò)程 700的這個(gè)方面會(huì)導(dǎo)致消息115被寫(xiě)入日志文件組415中的一個(gè)日志文件415 ,而 不是一個(gè)或多個(gè)其它日志文件415。然而,由于對(duì)日志文件組415的組合寫(xiě)入失敗, 所以沒(méi)有元數(shù)據(jù)320引用日志文件415的非復(fù)制部分,因此日志文件415的非復(fù)制 部分將來(lái)也不會(huì)被訪(fǎng)問(wèn)。由于在寫(xiě)入日志文件組415 —半失敗的情況下日志文件 415被關(guān)閉并且沒(méi)有被再次寫(xiě)入,所以日志文件415的尾部可能并不相同。然而, 由于沒(méi)有元數(shù)據(jù)320引用這些日志文件415的不同尾部,并且這些不同的尾部將來(lái) 也不會(huì)被訪(fǎng)問(wèn),所以這些文件的尾部可能不同的事實(shí)上無(wú)關(guān)緊要。
日志文件415可以使用全局唯一標(biāo)識(shí)符(GUID)名稱(chēng),其中日志文件組415 的兩個(gè)部分具有相同的名稱(chēng)。GUID允許服務(wù)器機(jī)器305在無(wú)需與管理和存儲(chǔ)系統(tǒng) 125的其它部件協(xié)調(diào)的情況下,為日志文件415創(chuàng)建不會(huì)沖突的名稱(chēng)。
基于消息115達(dá)到的時(shí)間的低位字節(jié),有時(shí)間限制的消息115可以被分配給 存儲(chǔ)機(jī)器315上的日志文件415 。作為將消息115分配給存儲(chǔ)機(jī)器315上的日志文 件415的這種方法的結(jié)果,用于特定郵箱的消息115被分布給不同的存儲(chǔ)機(jī)器315。 這意味著不均勻的郵箱尺寸和負(fù)載不太可能會(huì)造成管理和存儲(chǔ)系統(tǒng)125中負(fù)載熱 點(diǎn)(hotspot)或者過(guò)載?;诟鞔鎯?chǔ)機(jī)器315上可用的空閑空間的循環(huán)復(fù)用算法的 偏差可以進(jìn)一步降低管理和存儲(chǔ)系統(tǒng)125中出現(xiàn)存儲(chǔ)熱點(diǎn)或過(guò)載的可能性。
從判定框745,如果寫(xiě)入成功,則過(guò)程700進(jìn)行到框750以創(chuàng)建與所存儲(chǔ)的消 息115相對(duì)應(yīng)的元數(shù)據(jù)320。寫(xiě)入日志文件415的各消息115可以被尋址到多個(gè)不 同的用戶(hù),并由此可以與多個(gè)不同的郵箱相關(guān)聯(lián)。結(jié)果是每個(gè)用戶(hù)的郵箱都可以包 括被存儲(chǔ)在多個(gè)日志文件415中的相應(yīng)的消息,而上述多個(gè)日志文件415被存儲(chǔ)在 多個(gè)不同的存儲(chǔ)機(jī)器上。元數(shù)據(jù)320能夠?yàn)槊總€(gè)郵箱在隨后定位和收集這些多個(gè)消息115。因此,每個(gè)用戶(hù)的郵箱通常都與元數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)325相關(guān)聯(lián)。在框755, 過(guò)程700遍歷被寫(xiě)入一個(gè)或多個(gè)當(dāng)前日志文件415的每個(gè)消息115,識(shí)別每個(gè)消息 115所尋址的郵箱,并且為每個(gè)這種郵箱定位主存該元數(shù)據(jù)320的元數(shù)據(jù)存儲(chǔ)結(jié)構(gòu) 325。在框760,過(guò)程700用在框745中創(chuàng)建的元數(shù)據(jù)320為每個(gè)這種郵箱更新元 數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)325中的項(xiàng)。
假設(shè)用圖5中所示的數(shù)據(jù)庫(kù)表實(shí)施例500來(lái)實(shí)踐該過(guò)程700,則該過(guò)程700 通過(guò)將新行510添加到描述新消息體310的最新的世代表,就可以創(chuàng)建用于為新消 息體310所創(chuàng)建的元數(shù)據(jù)320的項(xiàng)。
假設(shè)用圖6中所示的日志blob實(shí)施例來(lái)實(shí)踐過(guò)程700,該過(guò)程700可以讀取 該blob圖像620以及世代號(hào)615,從blob圖像620中清除任何過(guò)期項(xiàng),將用于該 新消息體310的項(xiàng)添加給blob圖像620,并且啟動(dòng)對(duì)元數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)325的事務(wù)以 更新blob圖像620并且在世代號(hào)615尚未改變的情況下更新世代號(hào)615。如果世代 號(hào)615己經(jīng)改變,則過(guò)程700在其從元數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)325中讀取的那一點(diǎn)重新啟動(dòng)。
圖8示出了用于監(jiān)視消息體310正寫(xiě)入其中的一個(gè)或多個(gè)日志文件415的狀 態(tài)的過(guò)程流程800。在框805,建立了此處所討論的保留期參數(shù)。在上述的電子郵 件的垃圾郵件實(shí)施例中,有關(guān)垃圾郵件的保留期可以被設(shè)置為5天。在上述企業(yè)電 子郵件管理實(shí)施例中,用于"已發(fā)送"消息的保留期可以被設(shè)置為30天。在框810, 過(guò)程800選擇消息體310被寫(xiě)入的日志文件415中最舊的一個(gè)。例如,過(guò)程800 可以訪(fǎng)問(wèn)與一個(gè)或多個(gè)日志文件415相關(guān)聯(lián)的寫(xiě)入時(shí)間標(biāo)記。如果出于某種原因, 寫(xiě)入時(shí)間標(biāo)記不可用或者不可訪(fǎng)問(wèn),則假設(shè)消息體310按照達(dá)到的順序被寫(xiě)入到日 志文件415,就使用最新的消息體310被寫(xiě)入到日志文件415的時(shí)間開(kāi)確定日志文 件415的年齡。在框815,過(guò)程800確定日志文件415是否已經(jīng)比保留期還要舊。 如果日志文件415不比保留期舊,則過(guò)程800進(jìn)行到框820,在其中過(guò)程800等待 曰志文件415中的一個(gè)變得比可用的保留期還要舊。 一旦這種事件發(fā)生,則過(guò)程 800返回到框810,在其中就選擇該給定的日志文件415作為最舊的當(dāng)前日志文件 415。過(guò)程800隨后進(jìn)行到前面討論的框815。如果選出的日志文件415比保留期 還要舊,那么過(guò)程800進(jìn)行到框825,在其中將選定的日志文件415刪除。
圖8中所示的過(guò)程800可以作為代理進(jìn)程與圖7中所示的過(guò)程700并排運(yùn)行, 或者與此處所教導(dǎo)的其它過(guò)程并排運(yùn)行。可替換地,過(guò)程800可以并入過(guò)程700 或者此處所教導(dǎo)的其它過(guò)程。過(guò)程800僅為了示意性和討論的方便目的而在圖8 中單獨(dú)示出,但是并不限制對(duì)此處的教導(dǎo)的應(yīng)用。
15圖9更詳細(xì)地示出了用于更新與有時(shí)間限制的消息115相對(duì)應(yīng)的元數(shù)據(jù)320 的過(guò)程755。在框805,過(guò)程900建立如以上結(jié)合圖8所討論的保留期參數(shù)。如果 保留期參數(shù)己被創(chuàng)建,則框805無(wú)需重新創(chuàng)建它。在這種情況下,過(guò)程900可以引 用先前存在的保留期參數(shù)。
在框910,過(guò)程卯0建立元數(shù)據(jù)320將在該過(guò)程900的不同步驟中寫(xiě)入其中的 至少兩個(gè)表,這在如下將進(jìn)一步討論。在框915,過(guò)程900選擇在框910創(chuàng)建的表 中的第一個(gè),該表是有關(guān)被存儲(chǔ)在日志文件415中的消息體310的元數(shù)據(jù)320寫(xiě)入 其中的表。在框920,過(guò)程卯0將元數(shù)據(jù)320寫(xiě)入在框915中選出的表。
在框925,過(guò)程900檢驗(yàn)第一表中最舊的消息體310是否比可應(yīng)用于消息體 310的保留期還要舊。如果不是,則過(guò)程900就返回到框920以繼續(xù)將元數(shù)據(jù)320 寫(xiě)入所選定的表,并且返回給判定框925。然而,當(dāng)?shù)谝槐碇械淖钆f的消息體310 比該保留期要舊時(shí),則過(guò)程900進(jìn)行到框930,在其中關(guān)閉第一表。在框935,過(guò) 程900刪除第二表,并且然后進(jìn)行到框940,在框940,過(guò)程900選擇在框910創(chuàng) 建的第二表用于寫(xiě)入。在框945,過(guò)程900將元數(shù)據(jù)320寫(xiě)入該第二表。
在框950,過(guò)程900檢驗(yàn)保留期的另一示例是否已經(jīng)期滿(mǎn)。如果不是,過(guò)程 900返回到框945以繼續(xù)將元數(shù)據(jù)320寫(xiě)入第二表,并且返回判定框950。當(dāng)保留 期的下一示例期滿(mǎn)時(shí),過(guò)程900進(jìn)行到框955,在其中刪除元數(shù)據(jù)320寫(xiě)入其中的 第---表。在框960,過(guò)程900關(guān)閉用于寫(xiě)入的第二表,并且在框965,過(guò)程900重 新創(chuàng)建第一表。過(guò)程900隨后返回框915并且用第一表重復(fù)該過(guò)程。
圖IO給出了圖9中所示的過(guò)程900的時(shí)序圖1000。時(shí)間線(xiàn)1005從由線(xiàn)1010 表示的時(shí)刻to開(kāi)始,并且如用箭頭1015—般指示沿著水平時(shí)間軸無(wú)限延伸。線(xiàn)1020 在假設(shè)保留期從時(shí)刻to開(kāi)始運(yùn)行的情況下,表示第一保留期期滿(mǎn)時(shí)刻。在由線(xiàn)1010 和1020表示的時(shí)刻之間,圖9的過(guò)程900如框920所示寫(xiě)入第一表。通常在時(shí)刻 to或在to之前,如用參考標(biāo)記915所示那樣選擇第一表。
通常在由垂線(xiàn)1020指示的第一保留期期滿(mǎn)處或在其后不久,過(guò)程900根據(jù)框 925選取"是"分支,停止向第一表的寫(xiě)入,并且如圖10中呈現(xiàn)的參考標(biāo)號(hào)935 所示的那樣開(kāi)始將元數(shù)據(jù)320寫(xiě)入第二表。在由線(xiàn)1020所標(biāo)記的時(shí)刻,保留期的 第二示例開(kāi)始并運(yùn)行,直到由垂線(xiàn)1025所標(biāo)記的時(shí)刻為止。
在由線(xiàn)1020和1025所標(biāo)記的時(shí)刻之間,過(guò)程900如參考標(biāo)號(hào)940所示將元 數(shù)據(jù)320寫(xiě)入第二表。當(dāng)保留期的第二示例期滿(mǎn)時(shí),過(guò)程卯0停止向第二表的寫(xiě)入, 這對(duì)應(yīng)于圖7中框945的"是"分支。因此,參考標(biāo)號(hào)945如同它出現(xiàn)在圖10中的那樣出現(xiàn)在框940的結(jié)尾或者結(jié)尾附近處。
當(dāng)過(guò)程900達(dá)到由線(xiàn)1025所標(biāo)記的時(shí)刻時(shí),過(guò)程900認(rèn)識(shí)到被寫(xiě)入第一表(框 920)的任何元數(shù)據(jù)320現(xiàn)在都已經(jīng)太舊而不應(yīng)保留了,因?yàn)楝F(xiàn)在保留期的整個(gè)第 二示例都已期滿(mǎn)。由于整個(gè)第一表現(xiàn)在含有的都是與已經(jīng)過(guò)期的日志文件415相對(duì) 應(yīng)的元數(shù)據(jù)320,因而現(xiàn)在可以刪除第一表。在由線(xiàn)1025標(biāo)記的時(shí)刻之前,被寫(xiě) 入第一表(框920)的元數(shù)據(jù)320中的一些可能仍然是活動(dòng)的,因?yàn)檫@些元數(shù)據(jù)320 的保留期還沒(méi)有到。因此,直到由線(xiàn)1025標(biāo)記的時(shí)間為止,在對(duì)這個(gè)元數(shù)據(jù)320 的任何請(qǐng)求到達(dá)的情況下,都可以保持第一表中的元數(shù)據(jù)320可訪(fǎng)問(wèn)。
如圖9和10中所示,過(guò)程卯0可以將元數(shù)據(jù)320交替地寫(xiě)入兩個(gè)表,其中每 個(gè)表輪流地被寫(xiě)入、在一個(gè)保留期之后關(guān)閉、并在第二個(gè)保留期之后刪除。為了清 楚和方便起見(jiàn),圖9和10示出了這個(gè)過(guò)程900的一次重復(fù)。然而,應(yīng)當(dāng)注意到, 該過(guò)程卯0可以被無(wú)限制地重復(fù),其中兩個(gè)表中的每一個(gè)被輪流寫(xiě)入和刪除。還應(yīng) 當(dāng)注意到,過(guò)程900可以用多于兩個(gè)的表來(lái)實(shí)現(xiàn),并且此處所示出并討論的兩個(gè)表 的實(shí)施例僅僅是為了方便而示出的。通常,過(guò)程900可以創(chuàng)建N個(gè)表,其中N是 比其間可以寫(xiě)入表的時(shí)間周期劃分成的消息保留期大一的整數(shù)。
圖11示出了用于遍歷表結(jié)構(gòu)以搜索所請(qǐng)求的元數(shù)據(jù)320或標(biāo)題信息的過(guò)程 1100。在框1105,過(guò)程1100接收對(duì)給定的消息標(biāo)題信息的請(qǐng)求。在上述實(shí)施例中, 該請(qǐng)求可以針對(duì)遵循保留期的釆取垃圾郵件消息或者"已發(fā)送"消息形式的給定電 子郵件。例如,用戶(hù)可以請(qǐng)求檢索給定的消息,或者可以請(qǐng)求與被檢索的給定郵箱 相關(guān)聯(lián)的所有消息中的一些或全部。過(guò)程1100適于兌現(xiàn)(honor)該請(qǐng)求或者確定 該請(qǐng)求是否能夠被根本兌現(xiàn)。
在框1110,過(guò)程1100搜索可以采用表格形式的第一標(biāo)題結(jié)構(gòu)以定位有關(guān)響應(yīng) 于在框1105所接收請(qǐng)求的任何消息的元數(shù)據(jù)320。在框1115,過(guò)程1100確定在第 一標(biāo)題表中是否發(fā)現(xiàn)了響應(yīng)于該請(qǐng)求的任何項(xiàng)。如果在該標(biāo)題表中發(fā)現(xiàn)了響應(yīng)于該 i青求的項(xiàng),則過(guò)程1100進(jìn)行到框1120。在框1120'過(guò)程1100引用與該項(xiàng)相關(guān)聯(lián) 的時(shí)間標(biāo)記,并且確定該項(xiàng)是否是在一個(gè)"保留期"之前做出的。例如,如果該項(xiàng) 的保留期是30天,則框1120確定給定項(xiàng)是否比30天要舊。當(dāng)消息體310以及有 關(guān)的元數(shù)據(jù)320被存儲(chǔ)在日志文件415和/或元數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)325中時(shí),再調(diào)用在 圖7所示過(guò)程700期間被時(shí)間標(biāo)記的上述消息體310以及有關(guān)的元數(shù)據(jù)320。
如果給定項(xiàng)不比保留期舊,則過(guò)程1100進(jìn)行到框1125,在其中過(guò)程1100響 應(yīng)于框1105中接收的請(qǐng)求返回該項(xiàng)。過(guò)程1100隨后進(jìn)行到框1130,在其中過(guò)程1100確定在框1105接收的請(qǐng)求是否已被完全滿(mǎn)足。例如,如果在框1105接收的請(qǐng)求是針對(duì)單個(gè)消息的,并且那個(gè)單個(gè)消息被定位并且在框1125返回,則過(guò)程1100已經(jīng)完全滿(mǎn)足該請(qǐng)求。在這種情況下,過(guò)程1100進(jìn)行到框1135并且完成。然而,如果該請(qǐng)求是檢索多個(gè)消息,或者是檢索給定的郵箱中的一些或全部,則過(guò)程1100可以搜索并檢索更多的消息。在這種情況下,過(guò)程1100進(jìn)行到框1110以搜索這些項(xiàng)。
返回到框1115,如果所請(qǐng)求的項(xiàng)沒(méi)有在第一標(biāo)題表中發(fā)現(xiàn),過(guò)程1100就進(jìn)行到框1140,在其中它在第二標(biāo)題表中搜索在框1105請(qǐng)求的標(biāo)題信息。在框1145,過(guò)程IIOO確定是否在第二標(biāo)題表中發(fā)現(xiàn)所請(qǐng)求的標(biāo)題信息。如果發(fā)現(xiàn)了所請(qǐng)求的標(biāo)題信息,則過(guò)程1100進(jìn)行到框1120以檢驗(yàn)定位的標(biāo)題信息是否比可用保留期要舊。如果定位的標(biāo)題信息比可用保留期舊,過(guò)程1100隨后進(jìn)行到框1150,在其中報(bào)告失敗?;氐娇?145,如果沒(méi)有發(fā)現(xiàn)所請(qǐng)求的標(biāo)題信息,過(guò)程1100隨后進(jìn)行到框1150以報(bào)告失敗,因?yàn)樵诘谝换虻诙?biāo)題表中都沒(méi)有發(fā)現(xiàn)所請(qǐng)求的標(biāo)題信息。
假設(shè)過(guò)程1100采用圖5中所示的表實(shí)現(xiàn)500來(lái)實(shí)施,則過(guò)程1100可以做一個(gè)隊(duì)列來(lái)聯(lián)結(jié)所有的世代表505,使得所有的行510都與給定的郵箱中的消息相對(duì)應(yīng),排除超過(guò)可用保留期的任何消息。假設(shè)過(guò)程1100采用圖6中所示的日志blob實(shí)現(xiàn)600來(lái)實(shí)施,過(guò)程1100可以讀取用于給定的郵箱的日志blob圖像620,忽略比可用保留期舊的任何消息,并且將剩余消息返回。
圖12示出了依請(qǐng)求檢索給定消息以便能夠?qū)⑵涑尸F(xiàn)給用戶(hù)的過(guò)程1200。在框1205,過(guò)程12.00接收將給定的消息呈現(xiàn)給用戶(hù)的請(qǐng)求。在框1210,過(guò)程1200以與圖11中所述用于讀取消息標(biāo)題的過(guò)程1100相類(lèi)似的方式來(lái)找出包含用于給定消息的元數(shù)據(jù)的標(biāo)題。在框1215,過(guò)程1200處理從該標(biāo)題中拉出的元數(shù)據(jù)320以找出包含該給定消息的日志文件415的名稱(chēng)、包含該日志文件415的存儲(chǔ)機(jī)器315、該消息在日志文件415中的偏移、以及該消息的長(zhǎng)度。
在框1220,假設(shè)給定的消息被存儲(chǔ)在日志文件組415中,過(guò)程1200從日志文件組415中選擇一個(gè)日志文件415,并且嘗試從選出的日志文件415中讀取請(qǐng)求的消息。如果該讀取沒(méi)有足夠快地完成和/或沒(méi)有成功完成,則過(guò)程1200可以嘗試從日志文件組415內(nèi)的第二日志文件415中讀取請(qǐng)求的消息。在框1225,當(dāng)請(qǐng)求的消息被成功讀取時(shí),過(guò)程1200返回該請(qǐng)求的消息。
圖13示出了用于將給定消息標(biāo)記為已讀過(guò)程1300。在框1305,過(guò)程1300接收將給定消息標(biāo)記為己讀的請(qǐng)求。在框1310,過(guò)程1300對(duì)應(yīng)于該給定消息修改數(shù)據(jù)結(jié)構(gòu)中的項(xiàng)以指示該消息應(yīng)被標(biāo)記為已讀。這種修改可以包括將標(biāo)識(shí)符寫(xiě)入特定 日志記錄以指示給定的消息己經(jīng)被讀取。
在框1315,過(guò)程1300很可能連同多個(gè)其它消息一起,將給定的消息寫(xiě)入一個(gè) 或多個(gè)日志文件415。過(guò)程1300可以等待,直到數(shù)據(jù)結(jié)構(gòu)項(xiàng)的寫(xiě)入以與消息投遞 相同的方式被提交給一個(gè)或多個(gè)日志文件415為止。日志文件415中的這種記錄只 有在數(shù)據(jù)庫(kù)丟失并且從日志文件415中重建的情況下才需要。在框1320, 一旦完 成了向一個(gè)或多個(gè)日志文件415的寫(xiě)入,過(guò)程1300就以類(lèi)似于傳遞新消息的方式 更新元數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)325中的元數(shù)據(jù)320。
過(guò)程1200和1300例如可以在服務(wù)器機(jī)器305上運(yùn)行。為了將給定的消息標(biāo) 記為刪除,服務(wù)器機(jī)器305可以執(zhí)行與將給定的消息標(biāo)記為已讀的過(guò)程1300相類(lèi) 似的過(guò)程,這一過(guò)程包括將特定的日志記錄寫(xiě)入日志文件415。在日志blob實(shí)施例 600中,在刪除給定的消息使得該消息以前所駐留的郵箱為空時(shí),可以刪除整個(gè)曰 志blob 620。
為了把給定郵箱中的所有消息標(biāo)記為刪除,服務(wù)器機(jī)器305能夠以與以上執(zhí) 行的過(guò)程1300相類(lèi)似的方式做出數(shù)據(jù)結(jié)構(gòu)405中的項(xiàng)。在日志blob實(shí)施例600中, 服務(wù)器機(jī)器305可以進(jìn)行一單項(xiàng)數(shù)據(jù)庫(kù)事務(wù),以整個(gè)刪除日志blob 620,并且由此 可以跳過(guò)更新的讀取部分。
在元數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)325崩潰或變得不能訪(fǎng)問(wèn)或者不可用的情況下,可以使用 日志文件415中的用于重構(gòu)元數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)325的數(shù)據(jù)。然而,用于任何特定元數(shù) 據(jù)存儲(chǔ)結(jié)構(gòu)325的日志文件415可以分布在給定群集210中的多個(gè)日志文件415 中。重建元數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)325的一種方法是讀取該群集210中的所有日志文件415 。 如果這個(gè)任務(wù)被專(zhuān)門(mén)分配給單個(gè)機(jī)器,則完成這個(gè)任務(wù)的時(shí)間就會(huì)受到移動(dòng)所有日 志文件415經(jīng)過(guò)執(zhí)行該重構(gòu)的機(jī)器的網(wǎng)絡(luò)接口的時(shí)間的限制。在具體的實(shí)現(xiàn)中,這 種方法可能是有吸引力或者可行的,也可能不是。
另一種方法是基于僅有大約1%被讀取的消息實(shí)際影響了被重構(gòu)的元數(shù)據(jù)存 儲(chǔ)結(jié)構(gòu)325的這一觀察結(jié)果,因?yàn)槊總€(gè)群集通常有大約100個(gè)存儲(chǔ)設(shè)備具有相同尺 寸的元數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)325。此外,僅關(guān)心元數(shù)據(jù)320而不是消息體310的重構(gòu),這 就進(jìn)一步降低了在重構(gòu)中必須處理的數(shù)據(jù)量。
最后,如果元數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)325或者一個(gè)或多個(gè)存儲(chǔ)機(jī)器315失敗,就可以 根據(jù)預(yù)定程序以周期為基礎(chǔ)對(duì)這些部件的內(nèi)容進(jìn)行存檔或者備份。在這些情況下, 元數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)325或者存儲(chǔ)機(jī)器315中的一部分或者可能是大部分內(nèi)容都可以從
19最近存檔或備份的文件中恢復(fù),而只有錯(cuò)過(guò)最新備份的那些內(nèi)容才不得不按照上述 方法中的一種來(lái)恢復(fù)。
圖14示出了一種用于有效處理有時(shí)間限制的消息的并且用于完全或部分地實(shí)
現(xiàn)在此所述的計(jì)算、網(wǎng)絡(luò)和系統(tǒng)體系結(jié)構(gòu)的計(jì)算環(huán)境1400。更具體地,計(jì)算環(huán)境 1400適于實(shí)現(xiàn)在此所述的各個(gè)部件,包括但并不限于消息分類(lèi)器110、管理系統(tǒng) 125和130、前端205、服務(wù)器機(jī)器305、存儲(chǔ)機(jī)器315以及元數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)325。 示例性計(jì)算環(huán)境1400僅僅是計(jì)算系統(tǒng)的一個(gè)示例,并不旨在對(duì)該體系結(jié)構(gòu)的 使用或功能范圍做出任何限定的暗示。計(jì)算環(huán)境1400既不應(yīng)被解釋為對(duì)在示例性 計(jì)算環(huán)境1400中示出的部件中的任何一個(gè)或組合有任何依賴(lài),也不應(yīng)被解釋為其 有任何要求。
計(jì)算環(huán)境1400中的計(jì)算機(jī)和網(wǎng)絡(luò)體系結(jié)構(gòu)可以用許多其它通用或?qū)S糜?jì)算系 統(tǒng)環(huán)境或結(jié)構(gòu)來(lái)實(shí)現(xiàn)。適于使用的公知的計(jì)算系統(tǒng)、環(huán)境和/或結(jié)構(gòu)的示例包括但 并不限于個(gè)人計(jì)算機(jī)、服務(wù)器計(jì)算機(jī)、客戶(hù)機(jī)設(shè)備、便攜式或膝上型設(shè)備、基于 微處理器的系統(tǒng)、多處理器系統(tǒng)、機(jī)頂盒、可編程消費(fèi)電子設(shè)備、網(wǎng)絡(luò)PC、小型
計(jì)算機(jī)、大型計(jì)算機(jī)、游戲控制臺(tái)、包括任何以上的系統(tǒng)或設(shè)備的分布式計(jì)算環(huán)境等。
計(jì)算環(huán)境1400包括采用計(jì)算設(shè)備1402的形式的通用計(jì)算系統(tǒng)。計(jì)算設(shè)備1402 的部件可以包括但并不限于, 一個(gè)或多個(gè)處理器1404 (例如,任何微處理器、控 制器等)、系統(tǒng)存儲(chǔ)器1406以及耦合各個(gè)系統(tǒng)部件的系統(tǒng)總線(xiàn)1408。 一個(gè)或多個(gè) 處理器1404處理各種計(jì)算機(jī)可執(zhí)行指令以控制計(jì)算設(shè)備1402的操作并與其它電子 和計(jì)算設(shè)備通信。系統(tǒng)總線(xiàn)1408表示任意數(shù)量的多種類(lèi)型的總線(xiàn)結(jié)構(gòu),包括存儲(chǔ) 器總線(xiàn)或存儲(chǔ)器控制器、外圍總線(xiàn)、加速圖形端口以及使用多種總線(xiàn)結(jié)構(gòu)中的任意 一種的處理器或局部總線(xiàn)。
計(jì)算環(huán)境1400包括可以是能被計(jì)算設(shè)備1402訪(fǎng)問(wèn)的任何介質(zhì)的多個(gè)計(jì)算機(jī) 可讀介質(zhì),并且包括易失性和非易失性介質(zhì)、可移動(dòng)和不可移動(dòng)介質(zhì)。系統(tǒng)存儲(chǔ)器 1406包括采用易失性存儲(chǔ)器的形式的諸如隨機(jī)存取存儲(chǔ)器(RAM) 1410的計(jì)算機(jī) 可讀介質(zhì)和/或采用非易失性存儲(chǔ)器的形式的諸如只讀存儲(chǔ)器(ROM) 1412的計(jì)算 機(jī)可讀介質(zhì)?;据斎?輸出系統(tǒng)(BIOS) 1414維護(hù)便于在計(jì)算設(shè)備1402內(nèi)的部 件之間諸如在啟動(dòng)時(shí)進(jìn)行信息傳遞的基本例程,并且被存儲(chǔ)在ROM 1412中。RAM 1410通常包含由一個(gè)或多個(gè)處理器1404立即可以訪(fǎng)問(wèn)和/或由其當(dāng)前操作的數(shù)據(jù) 和/或程序模塊。計(jì)算設(shè)備1402可以包括其它可移動(dòng)/不可移動(dòng)、易失性的/非易失性的計(jì)算機(jī) 存儲(chǔ)介質(zhì)。以示例的方式,硬盤(pán)驅(qū)動(dòng)器1416可以從不可移動(dòng)的、非易失性的磁性
介質(zhì)(未示出)中讀取以及向其寫(xiě)入,磁盤(pán)驅(qū)動(dòng)器1418從可移動(dòng)的、非易失性的 磁盤(pán)1420 (例如,"軟盤(pán)")中讀取以及向其寫(xiě)入,而光盤(pán)驅(qū)動(dòng)器1422從諸如 CD-ROM、數(shù)字視頻光盤(pán)(DVD)或其它任何類(lèi)型的光介質(zhì)的可移動(dòng)的、非易失 性的光盤(pán)1424中讀取和/或向其寫(xiě)入。在此示例中,硬盤(pán)驅(qū)動(dòng)器1416、磁盤(pán)驅(qū)動(dòng)器 1418以及光盤(pán)驅(qū)動(dòng)器1422的每一個(gè)都通過(guò)一個(gè)或多個(gè)數(shù)據(jù)介質(zhì)接口 1426連接至 系統(tǒng)總線(xiàn)1408。磁盤(pán)驅(qū)動(dòng)器以及關(guān)聯(lián)計(jì)算機(jī)可讀介質(zhì)提供了對(duì)計(jì)算機(jī)可讀指令、 數(shù)據(jù)結(jié)構(gòu)、程序模塊以及用于計(jì)算設(shè)備1402的其它數(shù)據(jù)的非易失性存儲(chǔ)。
任意數(shù)量的程序模塊都可以被存儲(chǔ)在RAM 1410、 ROM 1412、硬盤(pán)1416、磁 盤(pán)1420和/或光盤(pán)1424上,這些程序模塊作為示例包括操作系統(tǒng)1428、 一個(gè)或多 個(gè)應(yīng)用程序1430、其它程序模塊1432以及程序數(shù)據(jù)1434。此操作系統(tǒng)1428、 一 個(gè)或多個(gè)應(yīng)用程序1430、其它程序模塊1432、程序數(shù)據(jù)1434中的每一個(gè)或其任意 組合都可以包括在此描述的系統(tǒng)和方法中的一個(gè)或多個(gè)實(shí)施例。
計(jì)算設(shè)備1402可以包括標(biāo)識(shí)為通信介質(zhì)的多個(gè)計(jì)算機(jī)可讀介質(zhì)。通信介質(zhì)通 常具體化為計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊、或者已調(diào)制數(shù)據(jù)信號(hào)中(諸如 載波、或者其它傳送機(jī)制中)的其它數(shù)據(jù),并且包括任何信息傳遞介質(zhì)。術(shù)語(yǔ)"己 調(diào)制數(shù)據(jù)信號(hào)"指的是這樣一種信號(hào),其一個(gè)或多個(gè)特征以在信號(hào)中編碼信息的方 式被設(shè)定或更改。以示例而非限定的方式,通信介質(zhì)包括諸如有線(xiàn)網(wǎng)絡(luò)或直接有線(xiàn) 連接的有線(xiàn)介質(zhì),以及諸如聲音、RF、紅外線(xiàn)、其它無(wú)線(xiàn)介質(zhì)的無(wú)線(xiàn)介質(zhì)和/或其 任何組合。
用戶(hù)可以通過(guò)任意數(shù)量的諸如鍵盤(pán)1436的不同輸入設(shè)備和定點(diǎn)設(shè)備1438(例 如,"鼠標(biāo)")來(lái)與計(jì)算設(shè)備1402進(jìn)行交互。其它輸入設(shè)備1440 (沒(méi)有專(zhuān)門(mén)示出) 可以包括麥克風(fēng)、操縱桿、游戲墊、控制器、圓盤(pán)式衛(wèi)星天線(xiàn)、串行端口、掃描儀 和/或類(lèi)似設(shè)備。這些以及其它輸入設(shè)備通過(guò)與系統(tǒng)總線(xiàn)1408相耦合的輸入/輸出 接口 1442,都可以連接至處理器1404,但也可以通過(guò)諸如并行端口、游戲端口和/ 或通用串行總線(xiàn)(USB)的其它接口和總線(xiàn)結(jié)構(gòu)連接。
顯示設(shè)備1444 (或其它類(lèi)型的監(jiān)視器)可以通過(guò)諸如視頻適配器1446的接口 連接到系統(tǒng)總線(xiàn)1408。除了顯示設(shè)備1444之外,其它輸出外圍設(shè)備可以包括經(jīng)由 輸入/輸出接口 1442連接到計(jì)算設(shè)備1402的諸如揚(yáng)聲器(未示出)和打印機(jī)1448 之類(lèi)的部件。
21計(jì)算設(shè)備1402利用到諸如遠(yuǎn)程計(jì)算機(jī)1450的一個(gè)或多個(gè)遠(yuǎn)程計(jì)算機(jī)邏輯連 接,就可以在網(wǎng)絡(luò)化環(huán)境中進(jìn)行操作。例如,遠(yuǎn)程計(jì)算設(shè)備1450可以是個(gè)人計(jì)算 機(jī)、便攜式計(jì)算機(jī)、服務(wù)器、路由器、網(wǎng)絡(luò)計(jì)算機(jī)、對(duì)等設(shè)備或其它公共網(wǎng)絡(luò)結(jié)點(diǎn) 等。遠(yuǎn)程計(jì)算設(shè)備1450被示為便攜式計(jì)算機(jī),該便攜式計(jì)算機(jī)可以包括此處相對(duì) 于計(jì)算設(shè)備1402所描述的任意數(shù)量不同部件、元件和特征及其組合。
計(jì)算設(shè)備1402和遠(yuǎn)程計(jì)算設(shè)備1450之間的邏輯連接被描述為局域網(wǎng)(LAN) 1452和一般的廣域網(wǎng)(WAN) 1454。這種網(wǎng)絡(luò)化環(huán)境在辦公室、公司范圍的計(jì)算 機(jī)網(wǎng)絡(luò)、以太網(wǎng)以及因特網(wǎng)中十分常見(jiàn)。當(dāng)在LAN網(wǎng)絡(luò)環(huán)境中實(shí)現(xiàn)時(shí),計(jì)算設(shè)備 1402通常經(jīng)由網(wǎng)絡(luò)接口或適配器1456連接至該局域網(wǎng)1452。當(dāng)在WAN網(wǎng)絡(luò)環(huán)境 中實(shí)現(xiàn)時(shí),計(jì)算設(shè)備1402通常包括調(diào)制解調(diào)器1458或其它裝置而在廣域網(wǎng)1454 上建立通信。調(diào)制解調(diào)器1458可以在計(jì)算設(shè)備1402的內(nèi)部或外部,并且可以經(jīng)由 輸入/輸出接口 1442或其它適當(dāng)機(jī)制連接至系統(tǒng)總線(xiàn)1408。所示的網(wǎng)絡(luò)連接僅僅是 示例性的,并且可以利用其它裝置在計(jì)算設(shè)備1402和550之間建立一個(gè)或多個(gè)通 信鏈路。
在網(wǎng)絡(luò)化環(huán)境中,諸如示出的計(jì)算環(huán)境1400中,相對(duì)于計(jì)算設(shè)備1402或其 部分描述的程序模塊可以被存儲(chǔ)在遠(yuǎn)程存儲(chǔ)器存儲(chǔ)設(shè)備中。以示例的方式,遠(yuǎn)程應(yīng) 用程序1460可由遠(yuǎn)程計(jì)算設(shè)備1450的存儲(chǔ)器設(shè)備來(lái)保存。出于示意性的目的,諸 如操作系統(tǒng)1428的應(yīng)用程序和其它可執(zhí)行程序組件此處被示為分離的塊,然而應(yīng) 當(dāng)認(rèn)識(shí)到,這些程序和組件可以在不同的時(shí)間駐留在計(jì)算設(shè)備1402的不同存儲(chǔ)部 件中,并且可以由計(jì)算設(shè)備1402的一個(gè)或多個(gè)處理器1404來(lái)執(zhí)行。
盡管已經(jīng)用特定的結(jié)構(gòu)特征和/或方法的語(yǔ)言描述了用于有時(shí)間限制的消息的 有效處理的實(shí)施例,但是應(yīng)當(dāng)理解,所附權(quán)利要求的主題并未受到所述的特定特征 或方法的限制。相反,這些特定的特征和方法被公開(kāi)作為有時(shí)間限制的消息的有效 處理的示例性實(shí)現(xiàn)。
權(quán)利要求
1.一種方法,包括將多個(gè)消息分類(lèi)為有時(shí)間限制的消息和無(wú)時(shí)間限制的消息之一;以及將所述有時(shí)間限制的消息與所述無(wú)時(shí)間限制的消息分開(kāi)處理。
2. 如權(quán)利要求l所述的方法,其特征在于,還包括編譯與所述有時(shí)間限制的 消息有關(guān)的元數(shù)據(jù)。
3. 如權(quán)利要求2所述的方法,其特征在于,還包括將所述元數(shù)據(jù)與對(duì)應(yīng)于所 述有時(shí)間限制的消息的消息體分開(kāi)存儲(chǔ)。
4. 如權(quán)利要求2所述的方法,其特征在于,編譯元數(shù)據(jù)包括確定包含一日志 文件的存儲(chǔ)設(shè)備,其中在所述日志文件中存儲(chǔ)了與所述元數(shù)據(jù)的至少一部分相對(duì)應(yīng) 的有時(shí)間限制的消息。
5. 如權(quán)利要求l所述的方法,其特征在于,還包括在數(shù)據(jù)結(jié)構(gòu)中累加多個(gè)所 述有時(shí)間限制的消息。
6. 如權(quán)利要求5所述的方法,其特征在于,還包括把來(lái)自所述數(shù)據(jù)結(jié)構(gòu)的所 述多個(gè)有時(shí)間限制的消息成批寫(xiě)入至少一個(gè)日志文件。
7. 如權(quán)利要求l所述的方法,其特征在于,分類(lèi)所述消息包括把消息中的至 少一部分分類(lèi)為垃圾郵件。
8. 如權(quán)利要求l所述的方法,其特征在于,分類(lèi)所述消息包括把消息中的至 少一部分分類(lèi)為遵循預(yù)定保留策略的電子郵件。
9. 如權(quán)利要求1所述的方法,其特征在于,還包括響應(yīng)于可用于所述有時(shí)間 限制的消息的保留期參數(shù)期滿(mǎn),刪除所述有時(shí)間限制的消息。
10. 如權(quán)利要求1所述的方法,其特征在于,還包括從數(shù)據(jù)存儲(chǔ)中讀取所述 有時(shí)間限制的消息。
11. 一種設(shè)備,包括用于將多個(gè)消息分類(lèi)為有時(shí)間限制的消息和無(wú)時(shí)間限制的消息之一的裝置;以及用于將所述有時(shí)間限制的消息與所述無(wú)時(shí)間限制的消息分開(kāi)處理的裝置。
12.根據(jù)權(quán)利要求11所述的設(shè)備,其特征在于,還包括用于編譯與有時(shí)間限制 的消息有關(guān)的元數(shù)據(jù)的裝置。
13.如權(quán)利要求12所述的設(shè)備,其特征在于,還包括用于將所述元數(shù)據(jù)與對(duì)應(yīng)于所述有時(shí)間限制的消息的消息體分開(kāi)存儲(chǔ)的裝置。
14. 如權(quán)利要求12所述的設(shè)備,其特征在于,用于編譯元數(shù)據(jù)的裝置包括用 于確定包含一日志文件的存儲(chǔ)設(shè)備的裝置,其中所述日志文件中存儲(chǔ)了與所述元數(shù) 據(jù)的至少一部分相對(duì)應(yīng)的有時(shí)間限制的消息。
15. 如權(quán)利要求ll所述的設(shè)備,其特征在于,用于分類(lèi)所述消息的裝置包括用于把消息中的至少一部分分類(lèi)為垃圾郵件的裝置。
16. 如權(quán)利要求ll所述的設(shè)備,其特征在于,用于分類(lèi)所述消息的裝置包括用于把消息中的至少一部分分類(lèi)為遵循預(yù)定保留策略的電子郵件的裝置。
17. —種或多種包括計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì),當(dāng)所述計(jì)算機(jī)可執(zhí)行指令被執(zhí)行時(shí)會(huì)導(dǎo)致計(jì)算設(shè)備將多個(gè)消息分類(lèi)為有時(shí)間限制的消息和無(wú)時(shí)間限制的消息中的一個(gè);以及 將所述有時(shí)間限制的消息與所述無(wú)時(shí)間限制的消息分開(kāi)處理。
18. 如權(quán)利要求17所述的一種或多種計(jì)算機(jī)可讀介質(zhì),其特征在于,還包括 當(dāng)被執(zhí)行時(shí)會(huì)導(dǎo)致所述計(jì)算設(shè)備編譯與所述有時(shí)間限制的消息有關(guān)的元數(shù)據(jù)的計(jì) 算機(jī)可執(zhí)行指令。
19. 如權(quán)利要求18所述的一種或多種計(jì)算機(jī)可讀介質(zhì),其特征在于,還包括 當(dāng)被執(zhí)行時(shí)會(huì)導(dǎo)致所述計(jì)算設(shè)備將所述元數(shù)據(jù)與對(duì)應(yīng)于所述有時(shí)間限制的消息的 消息體分開(kāi)存儲(chǔ)的計(jì)算機(jī)可執(zhí)行指令。
20. 如權(quán)利要求19所述的一種或多種計(jì)算機(jī)可讀介質(zhì),其特征在于,還包括 當(dāng)被執(zhí)行時(shí)會(huì)導(dǎo)致所述計(jì)算設(shè)備在數(shù)據(jù)結(jié)構(gòu)中累加多個(gè)所述有時(shí)間限制的消息并 且把來(lái)自所述數(shù)據(jù)結(jié)構(gòu)的所述多個(gè)有時(shí)間消息成批寫(xiě)入至少一個(gè)日志文件的計(jì)算 機(jī)可執(zhí)行指令。
全文摘要
此處描述了對(duì)有時(shí)間限制的消息的有效處理(100)。在一個(gè)實(shí)施例中,消息被分類(lèi)為有時(shí)間限制的消息(125)或者無(wú)時(shí)間限制的消息(130)。然后,將有時(shí)間限制的消息與無(wú)時(shí)間限制的消息分開(kāi)處理(115(1),115(2))(120)。有時(shí)間限制的消息的示例可以包括垃圾郵件或者遵循保留策略的其它類(lèi)型或種類(lèi)的電子郵件,使得它們僅被保留一段設(shè)置期限的時(shí)間。與有時(shí)間限制的消息有關(guān)的元數(shù)據(jù)被編譯并且與該消息分開(kāi)存儲(chǔ),由此能夠優(yōu)化元數(shù)據(jù)存儲(chǔ)并與該消息分開(kāi)處理。在成批處理之前累加有時(shí)間限制的消息,由此減少由有時(shí)間限制的消息消耗的I/O操作的數(shù)量,并且減少用以支持有時(shí)間限制的消息的處理的資源的量和成本。
文檔編號(hào)G06F21/24GK101636742SQ200680014731
公開(kāi)日2010年1月27日 申請(qǐng)日期2006年4月21日 優(yōu)先權(quán)日2005年5月27日
發(fā)明者A·阿達(dá)雅, M·J·加格, R·I·查科恩, W·J·波洛斯基 申請(qǐng)人:微軟公司