管理緩沖器溢出狀況相關(guān)申請(qǐng)的交叉引用本申請(qǐng)對(duì)2011年2月18日提交的、名稱為“ManagingBufferConditions”的美國(guó)申請(qǐng)序列No.13/031,034要求優(yōu)先權(quán),所述美國(guó)申請(qǐng)的全部?jī)?nèi)容通過引用合并于此。技術(shù)領(lǐng)域本描述涉及管理緩沖器狀況。
背景技術(shù):與各種數(shù)據(jù)處理技術(shù)類似,緩沖器管理技術(shù)在許多應(yīng)用中起重要作用。在一個(gè)實(shí)現(xiàn)方式中,緩沖器溢出狀況可以在計(jì)算機(jī)系統(tǒng)中引起重大干擾,例如,當(dāng)試圖存儲(chǔ)超過存儲(chǔ)器容量的數(shù)據(jù)量時(shí),處理可能變慢或徹底停止。為了阻止溢出,可以將數(shù)據(jù)寫到可能已被迫用于其他目的的其他存儲(chǔ)區(qū)域中,從而也可能引起處理的放緩或終止。
技術(shù)實(shí)現(xiàn)要素:在一個(gè)方面中,通常,計(jì)算機(jī)實(shí)現(xiàn)的方法可以包括響應(yīng)于檢測(cè)到第一緩沖器的溢出狀況,將在所述第一緩沖器中存在的數(shù)據(jù)元素的部分存儲(chǔ)在第二緩沖器中,其中所述第一緩沖器中的數(shù)據(jù)元素根據(jù)預(yù)定的順序排序,并且在所述第一緩沖器中插入代理數(shù)據(jù)元素來(lái)表示存儲(chǔ)到所述第二緩沖器的數(shù)據(jù)元素的部分。多個(gè)方面可以包括下列內(nèi)容中的一個(gè)或多個(gè)。第一緩沖器中數(shù)據(jù)元素的預(yù)定的順序可以包括從第一緩沖器中移除數(shù)據(jù)元素的優(yōu)先級(jí)順序。存儲(chǔ)到第二緩沖器的數(shù)據(jù)元素的部分可以基本上根據(jù)預(yù)定的順序排序。存儲(chǔ)到第二緩沖器的數(shù)據(jù)元素的部分可以包括至少一半存儲(chǔ)在第一緩沖器中的數(shù)據(jù)元素。所述方法可以包括在與保存到第二緩沖器的數(shù)據(jù)元素的部分對(duì)應(yīng)的第一緩沖器的位置中存儲(chǔ)數(shù)據(jù)元素。所述方法可以包括根據(jù)預(yù)定的順序從第一緩沖器移除一個(gè)或多個(gè)數(shù)據(jù)元素;以及提供從第一緩沖器移除的一個(gè)或多個(gè)數(shù)據(jù)元素作為基本上根據(jù)預(yù)定的順序排序的數(shù)據(jù)元素的輸出流。所述方法可以包括響應(yīng)于代理數(shù)據(jù)元素變?yōu)榈谝痪彌_器中存儲(chǔ)的元素的最高優(yōu)先級(jí)數(shù)據(jù)元素,將來(lái)自第二緩沖器的一個(gè)或多個(gè)數(shù)據(jù)元素與第一緩沖器中的數(shù)據(jù)元素合并。所述方法可以包括響應(yīng)于代理數(shù)據(jù)元素被識(shí)別以用于將從第一緩沖器移除,將來(lái)自第二緩沖器的一個(gè)或多個(gè)數(shù)據(jù)元素與第一緩沖器中的數(shù)據(jù)元素合并??梢曰陬A(yù)定的順序?qū)⑺喜⒌臄?shù)據(jù)元素排序。合并可以與產(chǎn)生輸出數(shù)據(jù)元素基本上同時(shí)發(fā)生。代理數(shù)據(jù)元素可以是來(lái)自第二緩沖器的用于從第二緩沖器移除具有最高優(yōu)先級(jí)的元素的副本。所移除的一個(gè)或多個(gè)數(shù)據(jù)元素可以包括來(lái)自第一緩沖器的表示第一緩沖器中的元素的最小值的數(shù)據(jù)元素。所移除的一個(gè)或多個(gè)數(shù)據(jù)元素可以包括來(lái)自第一緩沖器的表示第一緩沖器中的元素的最大值的數(shù)據(jù)元素。所述方法可以包括將邊界條件應(yīng)用于在第一緩沖器中存儲(chǔ)的數(shù)據(jù)元素,并基于所述邊界條件從第一緩沖器驅(qū)出(eject)一個(gè)或多個(gè)數(shù)據(jù)元素作為根據(jù)預(yù)定的優(yōu)先級(jí)順序排序的數(shù)據(jù)元素的輸出流。每個(gè)數(shù)據(jù)元素可以表示數(shù)據(jù)記錄產(chǎn)生時(shí)間。將邊界條件應(yīng)用于在第一緩沖器中存儲(chǔ)的數(shù)據(jù)元素可以包括識(shí)別作為表示在第一緩沖器中存儲(chǔ)的數(shù)據(jù)元素的最小值的數(shù)據(jù)元素,并確定表示最小值的數(shù)據(jù)元素和接收到的進(jìn)入第一緩沖器的數(shù)據(jù)元素之間的差?;谶吔鐥l件從第一緩沖器驅(qū)出一個(gè)或多個(gè)數(shù)據(jù)元素可以包括確定一個(gè)或多個(gè)數(shù)據(jù)元素是否超過預(yù)定的值;以及如果所述一個(gè)或多個(gè)數(shù)據(jù)元素超過預(yù)定的值,則從第一緩沖器驅(qū)出所述一個(gè)或多個(gè)數(shù)據(jù)元素。可以通過跳躍列表數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)第一和第二緩沖器中的至少一個(gè)。可以通過二叉樹堆(treap)數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)第一和第二緩沖器中的至少一個(gè)。第一和第二緩沖器中的各個(gè)數(shù)據(jù)元素中的一個(gè)或多個(gè)可以從輸入到基于圖的計(jì)算系統(tǒng)中的組件的數(shù)據(jù)記錄導(dǎo)出。在另一方面中,通常,一種存儲(chǔ)用于將數(shù)據(jù)元素排序的計(jì)算機(jī)程序的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以包括這樣的指令,其使得計(jì)算系統(tǒng)響應(yīng)于檢測(cè)到第一緩沖器的溢出狀況在第二緩沖器中存儲(chǔ)在第一緩沖器中存在的數(shù)據(jù)元素的部分,其中根據(jù)預(yù)定的順序?qū)⒃诘谝痪彌_器中的數(shù)據(jù)元素排序;以及在第一緩沖器中插入代理數(shù)據(jù)元素來(lái)表示存儲(chǔ)到第二緩沖器的數(shù)據(jù)元素的部分。在另一方面中,通常,一種用于將數(shù)據(jù)元素排序的計(jì)算系統(tǒng)可以包括:數(shù)據(jù)存儲(chǔ)系統(tǒng),其用于在第二緩沖器中存儲(chǔ)在第一緩沖器中存在的數(shù)據(jù)元素的部分,以及至少一個(gè)處理器,其耦接到數(shù)據(jù)存儲(chǔ)系統(tǒng)并被配置為處理接收到的數(shù)據(jù)元素流。所述處理可以包括響應(yīng)于檢測(cè)到第一緩沖器的溢出狀況在第二緩沖器中存儲(chǔ)在第一緩沖器中存在的數(shù)據(jù)元素的部分,其中根據(jù)預(yù)定的順序?qū)⒌谝痪彌_器中的數(shù)據(jù)元素排序,并且在第一緩沖器中插入代理數(shù)據(jù)元素來(lái)表示存儲(chǔ)到第二緩沖器的數(shù)據(jù)元素的部分。在另一方面中,通常,一種用于將數(shù)據(jù)元素排序的計(jì)算系統(tǒng)包括:用于在第二緩沖器中存儲(chǔ)在第一緩沖器中存在的數(shù)據(jù)元素的裝置,以及用于處理接收到的數(shù)據(jù)元素流的裝置。所述處理可以包括響應(yīng)于檢測(cè)到第一緩沖器的溢出狀況在第二緩沖器中存儲(chǔ)在第一緩沖器中存在的數(shù)據(jù)元素的部分,其中根據(jù)預(yù)定的順序?qū)⒌谝痪彌_器中的數(shù)據(jù)元素排序,并且在第一緩沖器中插入代理數(shù)據(jù)元素來(lái)表示存儲(chǔ)到第二緩沖器的數(shù)據(jù)元素的部分。多個(gè)方面可以包括下列優(yōu)點(diǎn)中的一個(gè)或多個(gè)。在某些示例中,可以在例如隨機(jī)存取存儲(chǔ)器(RAM)的快速存儲(chǔ)器中存儲(chǔ)第一緩沖器及其內(nèi)容。在操作期間,可能更希望在較慢的存儲(chǔ)器(例如,硬盤)中存儲(chǔ)第一緩沖器的某些部分。例如,可能不立即需要主緩沖器中的某些元素,從而可以移除到可以在較慢的存儲(chǔ)器中存儲(chǔ)的第二緩沖器??梢圆捎靡粋€(gè)或多個(gè)次級(jí)緩沖器來(lái)臨時(shí)存儲(chǔ)不立即需要的元素。當(dāng)在第一緩沖器中存在的基本上相等數(shù)量的數(shù)據(jù)不再存在,從而為這些元素提供適當(dāng)?shù)目臻g時(shí),所述這些元素可以被重新存儲(chǔ)到第一緩沖器。此外,在涉及大部分排序的接收到的數(shù)據(jù)元素流的某些實(shí)現(xiàn)方式中,除了不與大多數(shù)元素一樣按適當(dāng)順序的少數(shù)元素以外,所述元素可能大部分按排序順序。通過在接收到流的每個(gè)單獨(dú)的數(shù)據(jù)元素之后將邊界條件應(yīng)用于在主緩沖器中存儲(chǔ)的數(shù)據(jù)元素,可以產(chǎn)生根據(jù)預(yù)定的順序排序的數(shù)據(jù)元素的輸出流。根據(jù)下列描述和根據(jù)權(quán)利要求,本發(fā)明的其他特征和優(yōu)點(diǎn)將變得明顯。附圖說(shuō)明圖1是緩沖器管理系統(tǒng)的框圖。圖2圖示通過一系列管理操作的緩沖器。圖3是緩沖器管理過程的流程圖。具體實(shí)現(xiàn)方式參考圖1,示例緩沖器管理系統(tǒng)100包括在計(jì)算機(jī)系統(tǒng)104(例如,諸如服務(wù)一個(gè)或多個(gè)客戶端系統(tǒng)的Web服務(wù)器的服務(wù)器)上執(zhí)行的、在存儲(chǔ)設(shè)備108中存儲(chǔ)數(shù)據(jù)元素106a-n(總地106)的應(yīng)用102(例如,排序應(yīng)用)。存儲(chǔ)設(shè)備108可以是例如具有多個(gè)緩沖器(如以兩個(gè)緩沖器110、112所示)的硬盤驅(qū)動(dòng)存儲(chǔ)器或其他可移除存儲(chǔ)介質(zhì),并且可以被實(shí)現(xiàn)為計(jì)算機(jī)系統(tǒng)104的部分或單獨(dú)的獨(dú)立存儲(chǔ)設(shè)備。在某些示例中,第一緩沖器110可以位于例如隨機(jī)存取存儲(chǔ)器的第一存儲(chǔ)器中,并且第二緩沖器112可以位于硬盤中。元素106可以表示各種類型的信息,例如被分配到由排序應(yīng)用102生成的數(shù)據(jù)記錄(未示出)的一個(gè)或多個(gè)屬性的值。在某些實(shí)現(xiàn)方式中,元素106可以表示由對(duì)一個(gè)或多個(gè)數(shù)據(jù)記錄執(zhí)行的計(jì)算產(chǎn)生的值??梢杂稍?06表示的其他信息可以包括時(shí)間戳,例如當(dāng)由排序應(yīng)用102創(chuàng)建對(duì)應(yīng)的數(shù)據(jù)記錄時(shí)的相應(yīng)的時(shí)間。雖然排序應(yīng)用102可以提供各種不同的功能,但是在一個(gè)示例中,排序應(yīng)用102可以是在共同未決的美國(guó)申請(qǐng)序列No.13/031,056中進(jìn)一步詳細(xì)描述地窗口排序應(yīng)用,所述申請(qǐng)的內(nèi)容通過引用整體合并于此。在某些示例中,排序應(yīng)用102可能不產(chǎn)生數(shù)據(jù)元素106,但可選地從第二個(gè)不同的應(yīng)用114(例如,在計(jì)算機(jī)系統(tǒng)116上執(zhí)行)接收數(shù)據(jù)元素106用于排序。在此,排序指代將接收到的流的元素106置于特定順序的過程。例如,排序應(yīng)用102可以按元素?cái)?shù)值遞增的順序輸出所述元素。在操作中,排序應(yīng)用102在被稱為主緩沖器的緩沖器110中存儲(chǔ)未排序的元素(例如,從數(shù)據(jù)源應(yīng)用114到達(dá)的元素)的輸入流??梢曰旧习磁判蚍绞綄⒃卮鎯?chǔ)為存儲(chǔ)的元素118a-b(總地118)。然而,在輸入流中可能存在相對(duì)大量的元素(例如,百萬(wàn)),其顯然可以使得主緩沖器110變?yōu)椴荒艽鎯?chǔ)所有提供的元素。例如,主緩沖器110可能達(dá)到基于其最大物理存儲(chǔ)器大小的容量。作為這樣的情況的結(jié)果,主緩沖器110可能溢出并使得干擾并可能停止計(jì)算機(jī)系統(tǒng)104的操作。為了緩解這樣的問題,可以采用例如緩沖器112的一個(gè)或多個(gè)“溢出盆(spill-overbasin)”或第二緩沖器來(lái)臨時(shí)存儲(chǔ)在圖1中被表示為元素120a-b(總地120)的溢出元素。在某些示例中,可以在例如隨機(jī)存取存儲(chǔ)器(RAM)的快速存儲(chǔ)器中存儲(chǔ)主緩沖器及其內(nèi)容。在操作期間,可能更希望在較慢的存儲(chǔ)器(例如,硬盤)中存儲(chǔ)主緩沖器的某些部分。例如,可能不立即需要主緩沖器中的某些元素,從而可以移除到可以在較慢的存儲(chǔ)器中存儲(chǔ)的第二緩沖器。為了解決這樣的情況,可以采用例如緩沖器112的一個(gè)或多個(gè)次級(jí)緩沖器來(lái)將不立即需要的元素臨時(shí)存儲(chǔ)為元素120a-b。當(dāng)在主緩沖器110中存在的基本上相等數(shù)量的元素不再存在(例如,驅(qū)出的元素122a-b),從而為元素120提供適當(dāng)?shù)目臻g時(shí),可以將這些元素120重新存儲(chǔ)到(例如,合并回到)主緩沖器110。為了提供排序的輸出,排序應(yīng)用102執(zhí)行操作來(lái)保證驅(qū)出的元素122基本上是按排序順序的。例如,驅(qū)出的元素122被驅(qū)出以使得首先驅(qū)出較小(或較大,取決于優(yōu)選的輸出)值的元素,其次驅(qū)出較大(較?。┲档脑亍?duì)于元素表示時(shí)間戳值的示例,可以從緩沖器驅(qū)出與最近的時(shí)間戳(或最早的,取決于優(yōu)選的輸出)相關(guān)聯(lián)的元素。如所示,可以向由另一計(jì)算機(jī)系統(tǒng)126執(zhí)行的接收應(yīng)用124提供驅(qū)出的元素122用于附加的處理。接收應(yīng)用120表示能夠接收和處理驅(qū)出的元素122的類型的軟件應(yīng)用。圖2是圖示用于管理緩沖器溢出的操作的一對(duì)緩沖器210和212(例如,圖1中示出的主緩沖器110和次級(jí)緩沖器112)的狀態(tài)202-208的圖解表示??梢园锤鞣N順序提供輸入元素的順序,例如完全隨機(jī)順序或稍微確定(例如,部分排序、大部分排序等)的順序。在大部分排序的情況下,除了少數(shù)離群值(與大多數(shù)相比)以外,對(duì)于大部分元素可以按排序順序。為了量化這樣的離群值,對(duì)于具有相對(duì)大量元素(例如,百萬(wàn))的流,大約0.1-10%的元素可以是亂序的。為了高效地將這樣的離群元素插入具有大量元素的流內(nèi)的適當(dāng)位置中,排序應(yīng)用可以利用大多數(shù)元素按適當(dāng)順序到達(dá)的事實(shí)。例如,可以按排序方式在主緩沖器210中存儲(chǔ)(例如,通過排序應(yīng)用102)包括離群值的輸入元素。對(duì)于已經(jīng)被排序的到達(dá)的大多數(shù)元素,在緩沖器210中存儲(chǔ)元素是相對(duì)高效的過程。然而,當(dāng)離群值到達(dá)緩沖器并需要被插入主緩沖器210內(nèi)的適當(dāng)位置中時(shí),可能需要額外的時(shí)間。通常,基于一個(gè)或多個(gè)規(guī)則從主緩沖器210驅(qū)出存儲(chǔ)的元素。例如,與每個(gè)存儲(chǔ)的元素相關(guān)聯(lián)的值(例如,數(shù)值)可以被用于確定是否應(yīng)該驅(qū)出對(duì)應(yīng)的元素。存儲(chǔ)元素的順序也可以是確定是否從主緩沖器210驅(qū)出一個(gè)或多個(gè)元素的因素。在適當(dāng)時(shí)間,排序應(yīng)用102根據(jù)排序順序(例如,遞增順序、遞減順序等)以優(yōu)先級(jí)方式驅(qū)出主緩沖器210中的元素。此外,當(dāng)違反施加于存儲(chǔ)的元素上的條件(例如,任何兩個(gè)存儲(chǔ)的元素之間的最大允許差)時(shí),可以驅(qū)出元素。一旦從主緩沖器210驅(qū)出,得到的元素形成排序的元素的輸出流。如果根據(jù)數(shù)值遞增的順序?qū)⒃嘏判?,則最初可以驅(qū)出較小的元素,而在稍后的時(shí)間可以驅(qū)出較大值的元素。類似地,對(duì)于根據(jù)遞減順序排序的元素,在較早的時(shí)間可以驅(qū)出較大的元素,而稍后可以驅(qū)出較小值的元素。與每個(gè)元素相關(guān)聯(lián)的這樣的數(shù)值可以表示一個(gè)或多個(gè)量??梢酝ㄟ^用于按特定的排序順序存儲(chǔ)數(shù)據(jù)元素和驅(qū)出元素的一種或多種類型的數(shù)據(jù)結(jié)構(gòu)和架構(gòu)(例如,優(yōu)先級(jí)隊(duì)列數(shù)據(jù)結(jié)構(gòu))來(lái)實(shí)現(xiàn)緩沖器210、212。在一個(gè)實(shí)現(xiàn)方式中,排序應(yīng)用102能夠提供用于使用所述數(shù)據(jù)結(jié)構(gòu)將數(shù)據(jù)元素排序的各種功能。例如,在一種布置中,關(guān)于被選擇來(lái)定義主緩沖器和次級(jí)緩沖器的數(shù)據(jù)結(jié)構(gòu)可以主要使用三種功能。對(duì)于三種功能中的一種,排序應(yīng)用102能夠在如通過在所述結(jié)構(gòu)中存儲(chǔ)的元素的現(xiàn)行(prevailing)排序順序確定的數(shù)據(jù)結(jié)構(gòu)中的適當(dāng)位置中插入元素。例如,考慮按其數(shù)值遞增的順序布置的存儲(chǔ)的元素。排序應(yīng)用102能夠基于輸入元素的數(shù)值在數(shù)據(jù)結(jié)構(gòu)中的適當(dāng)位置中插入新的輸入元素。作為第二種功能,排序應(yīng)用能夠基于驅(qū)出優(yōu)先級(jí)順序(例如,驅(qū)出緩沖器中最小或最大數(shù)據(jù)元素)識(shí)別將從所述結(jié)構(gòu)驅(qū)出的一個(gè)或多個(gè)元素。第三,排序應(yīng)用可以提供開始驅(qū)出存在于所述結(jié)構(gòu)中的識(shí)別的一個(gè)或多個(gè)元素的功能。在一種布置中,主緩沖器210和次級(jí)緩沖器212中的每一個(gè)可以是平衡二叉樹數(shù)據(jù)結(jié)構(gòu)(例如,堆二叉樹數(shù)據(jù)結(jié)構(gòu))。通常,堆二叉樹數(shù)據(jù)結(jié)構(gòu)(通常僅被稱為堆)滿足兩個(gè)條件。一個(gè)條件可以是在樹結(jié)構(gòu)中包括的子節(jié)點(diǎn)的優(yōu)先級(jí)至少和父節(jié)點(diǎn)的優(yōu)先級(jí)一樣大。第二個(gè)條件可以是堆是“完全樹”,即每行都是滿的樹,即可能除了最下面一行以外在葉節(jié)點(diǎn)之間不存在間隙(即,未填充的節(jié)點(diǎn))。在某些示例中,可以通過跳躍列表數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)緩沖器210、212。通常,跳躍列表數(shù)據(jù)結(jié)構(gòu)和與其相關(guān)聯(lián)的算法是線性鏈表的變體,并且可以在需要頻繁插入帶鍵的(keyed)數(shù)據(jù)元素的情況下改進(jìn)排序性能。跳躍列表數(shù)據(jù)結(jié)構(gòu)可以包括數(shù)據(jù)元素(或節(jié)點(diǎn))的順序線性鏈表,其中某些元素具有跳過中間數(shù)據(jù)元素的附加的指針,因此增加數(shù)據(jù)元素的搜索速度和效率。通過將緩沖器210、212實(shí)現(xiàn)為跳躍列表數(shù)據(jù)結(jié)構(gòu),檢索最小數(shù)據(jù)元素的檢索時(shí)間可以是O(1)時(shí)間??赡苄枰狾(1)時(shí)間的插入時(shí)間來(lái)適當(dāng)?shù)夭迦霐?shù)據(jù)元素(例如,與最近插入的元素相鄰地插入元素)。如果插入位置與最近插入的元素不相鄰,則插入時(shí)間可以是O(logN)時(shí)間。讀出“k”個(gè)元素(例如,具有最大值的元素)的驅(qū)出時(shí)間可以是O(k)時(shí)間。在WilliamPugh的、名稱為“Skiplists:AprobabilisticalternativetoBalancedtrees”,CommunicationsoftheACM,June1990,pp.668-676的論文中進(jìn)一步詳細(xì)描述了跳躍列表數(shù)據(jù)結(jié)構(gòu),所述論文的內(nèi)容通過引用整體合并于此。還可以使用其他技術(shù),例如可以通過二叉樹堆數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)緩沖器210、212。二叉樹堆數(shù)據(jù)結(jié)構(gòu)是每個(gè)節(jié)點(diǎn)具有隨機(jī)分配的優(yōu)先級(jí)屬性以及鍵的二叉搜索樹。如在典型的二叉搜索樹中一樣,節(jié)點(diǎn)按關(guān)于其鍵的順序。即關(guān)于鍵節(jié)點(diǎn)的左子樹僅包含具有小于所述節(jié)點(diǎn)的鍵的鍵的節(jié)點(diǎn),而節(jié)點(diǎn)的右子樹僅包含具有大于或等于所述節(jié)點(diǎn)的鍵的鍵的節(jié)點(diǎn)。此外,節(jié)點(diǎn)按關(guān)于其優(yōu)先級(jí)屬性的“堆順序”,使得每個(gè)子節(jié)點(diǎn)具有至少和父節(jié)點(diǎn)的優(yōu)先級(jí)屬性一樣大的優(yōu)先級(jí)屬性。在Aragon、CeciliaR.和Seidel,Raimund的、名稱為“RandomizedSearchTrees”,Proc.30thSymp.FoundationsofComputerScience(FOCS1989)的論文中進(jìn)一步描述了二叉樹堆數(shù)據(jù)結(jié)構(gòu),所述論文的內(nèi)容通過引用整體合并于此。在一個(gè)實(shí)現(xiàn)方式中,排序應(yīng)用102可以引起將應(yīng)用于主緩沖器210的邊界條件,其被用于確定是否將從主緩沖器驅(qū)出元素和何時(shí)將從主緩沖器驅(qū)出元素。邊界條件可以采取允許在主緩沖器中存儲(chǔ)的元素值的“窗口”的形式。窗口可以表示主緩沖器中任何兩個(gè)存儲(chǔ)的數(shù)據(jù)元素之間的最大可允許差。這樣,窗口的“寬度”表示在主緩沖器中允許的值的范圍。例如,窗口寬度可以通過計(jì)算主緩沖器210中的最小和最大元素之間的差來(lái)定義。因?yàn)檫吔鐥l件可以被認(rèn)為滿足或不滿足(例如,違反),所以所述條件可以被認(rèn)為是二元的。例如,只要沒有輸入數(shù)據(jù)使得超過窗口寬度,邊界條件就可以被視為被滿足。相反,如果超過窗口寬度,則邊界條件可以被視為被違反。在違反邊界條件時(shí),可以執(zhí)行一個(gè)或多個(gè)動(dòng)作,例如根據(jù)驅(qū)出優(yōu)先級(jí)順序可以驅(qū)出主緩沖器210中的一個(gè)或多個(gè)元素。為了定義與窗口相關(guān)聯(lián)的參數(shù)可以使用各種技術(shù),例如可以由用戶指定或預(yù)定窗口寬度。例如可以基于具體應(yīng)用(例如,基于電話呼叫終止時(shí)間的排序)定義窗口寬度。在某些上下文中,窗口寬度與“亂序”的測(cè)度對(duì)應(yīng),例如可以容忍離群元素的測(cè)度。例如,考慮涉及時(shí)間戳數(shù)據(jù)元素的上下文。窗口寬度指示相對(duì)于當(dāng)前緩沖器中的時(shí)間戳元素(例如,最小或最大時(shí)間戳元素)可以向主緩沖器提供多晚的時(shí)間戳元素。在一種布置中,如果窗口寬度(以時(shí)間為單位)是4小時(shí),則主緩沖器210可以存儲(chǔ)在4小時(shí)窗口內(nèi)的所有時(shí)間戳元素(如通過主緩沖器中的最小時(shí)間戳元素定義的)??梢詫?duì)在4小時(shí)以外到達(dá)的時(shí)間戳元素進(jìn)行丟棄、單獨(dú)處理等。如圖2中所示,為每個(gè)狀態(tài)202-208提供關(guān)于主緩沖器210的各個(gè)內(nèi)容、主緩沖器210的窗口寬度(利用標(biāo)簽W標(biāo)記)、當(dāng)前在主緩沖器210中的最小元素(利用標(biāo)簽S標(biāo)記)以及當(dāng)前輸出數(shù)據(jù)元素的信息。在這個(gè)示例中,按遞增順序存儲(chǔ)元素,并且輸入流大部分按遞增順序排序出現(xiàn)?;谒雠判?,提供基本上按遞增順序排序的輸出流。為了演示的目的,示例被示出為關(guān)于大約十三個(gè)元素的流操作,然而,所述過程可以關(guān)于具有更多或更少元素的流操作,例如可以由所述過程輸入并將元素的連續(xù)流排序。在初始狀態(tài)202中,窗口寬度值被預(yù)定為20(例如,主緩沖器210中最小和最大元素之間的差不超過或等于20的值)。如所示,主緩沖器210是滿的,從而不能存儲(chǔ)任何更多的元素。主緩沖器210中的當(dāng)前最小值元素具有0的值(并且在狀態(tài)202中由S=0表示)。因?yàn)槲打?qū)出元素,所以由“NIL”表示當(dāng)前輸出,即不存在輸出數(shù)據(jù)元素。此外,次級(jí)緩沖器212當(dāng)前為空。在狀態(tài)204中,將在主緩沖器210中插入具有16的值的下一個(gè)輸入元素。然而,雖然元素16的適當(dāng)位置在值17和14的元素之間,但是主緩沖器210當(dāng)前缺少插入所述元素所需的空間,其中可以移動(dòng)值17的元素來(lái)為值16的元素騰出空間。為了騰出空間,可以移除主緩沖器210中存儲(chǔ)的元素的預(yù)定的部分(例如,一半),并將其提供到次級(jí)緩沖器212,并且可以在主緩沖器210中新的可用位置中存儲(chǔ)值16的元素。例如,可以將存儲(chǔ)的元素的較大的一半(即,值17、14、11、10、9的元素)移動(dòng)到次級(jí)緩沖器212。在某些示例中,基于預(yù)定的規(guī)則選擇預(yù)定的部分。移除存儲(chǔ)的元素的較大的一半的一個(gè)優(yōu)點(diǎn)是最大化將元素合并回主緩沖器210中所需要的時(shí)間。移除元素并將其寫到次級(jí)緩沖器212所需要的時(shí)間是O(k)時(shí)間的量級(jí),其中k是移除的元素的數(shù)量。還可以按排序順序在次級(jí)緩沖器212中存儲(chǔ)移除的元素。此外,可以在適當(dāng)?shù)奈恢脤⒋碓兀ɡ?,在主緩沖器中被標(biāo)示為S9)插入主緩沖器210中。代理元素用于表示(例如,在主緩沖器210內(nèi))已移除并存儲(chǔ)在次級(jí)緩沖器212中的元素??梢砸愿鞣N方式表示代理元素,例如通過改變附加于表示代理元素的數(shù)據(jù)元素的布爾字段(標(biāo)記)。可以通過主緩沖器210中的剩余元素的現(xiàn)行順序來(lái)設(shè)立代理元素的位置。例如,在這個(gè)演示中,因?yàn)橐瞥脑氐淖钚≈稻哂?的值,所以可以在新插入的值16的元素和值8的元素之間插入代理元素S9。對(duì)于狀態(tài)204,因?yàn)橹骶彌_器210中最小和最大元素之間的差是16,其仍然小于窗口寬度20,則不認(rèn)為違反邊界條件,從而不需要驅(qū)出數(shù)據(jù)元素。在狀態(tài)206中,如所示,主緩沖器210中若干位置已變?yōu)榭梢杂糜诖鎯?chǔ)元素。值20的下一個(gè)輸入元素被插入主緩沖器中適當(dāng)?shù)奈恢锰帲丛谥?6的元素之后。基于這個(gè)插入,主緩沖器210中的最小和最大元素之間的差是20,這等于窗口寬度20,因此違反邊界條件。這樣,只要違反邊界條件,按元素的驅(qū)出優(yōu)先級(jí)的順序(例如,遞增順序)從主緩沖器210驅(qū)出元素。主緩沖器210中的最小元素是值0,其被驅(qū)出?,F(xiàn)在下一個(gè)最小元素是值1。因?yàn)閷?duì)于這種狀態(tài)主緩沖器210中最小和最大元素之間的差是19,其小于窗口寬度20,則不違反邊界條件。因此,不需要從主緩沖器210驅(qū)出更多的元素。在狀態(tài)208中,當(dāng)將值29的元素插入主緩沖器210中時(shí),最小和最大元素之間的差變?yōu)?8(即,29減去1),這大于窗口寬度20。違反邊界條件,從而從主緩沖器210驅(qū)出值1、6、7和8的元素。因?yàn)?9減去9是20,所以代理元素S9現(xiàn)在也違反邊界條件。在這種情況下,來(lái)自次級(jí)緩沖器212的元素可以返回與主緩沖器210中的元素合并,使得按順序存儲(chǔ)組合的元素。為了方便讀者,利用加粗的和帶下劃線的字體示出主緩沖器210中新合并的元素。通常,對(duì)于通過跳躍列表數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)的主緩沖器210,將元素合并回主緩沖器210中所需要的時(shí)間是O(klog(n/k))時(shí)間的量級(jí),其中“n”是主緩沖器210中元素的數(shù)量,并且“k”是合并的元素的數(shù)量。在合并完成之后,因?yàn)檫@個(gè)元素導(dǎo)致違反邊界條件(29減去9是20),所以可以從緩沖器驅(qū)出值9的元素。像這樣,現(xiàn)在緩沖器中的最小元素是值10,其不違反邊界條件。因此,不從主緩沖器驅(qū)出更多的元素。通常,當(dāng)合并發(fā)生時(shí),從主緩沖器驅(qū)出的元素的數(shù)量等于在次級(jí)緩沖器中存在的元素的數(shù)量。例如,從主緩沖器驅(qū)出四個(gè)元素以便為來(lái)自次級(jí)緩沖器的四個(gè)元素(在合并之后驅(qū)出值9的第五個(gè)元素)提供空間。可以在某些實(shí)現(xiàn)方式中實(shí)現(xiàn)例如數(shù)量的緩沖器架構(gòu)中的變化。例如可以使用一個(gè)主緩沖器和兩個(gè)或多個(gè)次級(jí)緩沖器。與多個(gè)緩沖器類似,可以在主緩沖器中存儲(chǔ)多個(gè)代理元素,每個(gè)代理元素與存儲(chǔ)元素的多個(gè)次級(jí)緩沖器對(duì)應(yīng)。當(dāng)代理元素變?yōu)橹骶彌_器中的最高驅(qū)出優(yōu)先級(jí)元素時(shí),來(lái)自對(duì)應(yīng)的次級(jí)緩沖器的元素被合并到主緩沖器中。在某些示例中,可以填滿次級(jí)緩沖器的容量,并且另一個(gè)不同的緩沖器(例如,第三緩沖器)可以被用于存儲(chǔ)溢出元素??梢栽诖渭?jí)緩沖器中的適當(dāng)位置處插入代理元素來(lái)表示在第三緩沖器中存儲(chǔ)的溢出元素。次級(jí)緩沖器的長(zhǎng)度(從而與這些緩沖器對(duì)應(yīng)的文件大?。┤Q于當(dāng)溢出狀況發(fā)生時(shí)從主緩沖器移除的元素的數(shù)量。例如,最佳文件大小涉及從主緩沖器移除與將允許有效使用主緩沖器一樣多的元素(例如,多達(dá)元素的數(shù)量的至少一半)。進(jìn)一步的考慮是最小化移除和合并操作的數(shù)量。現(xiàn)在參考圖3,示出表示用于管理緩沖器的溢出狀況的示例緩沖器溢出管理過程300的操作的流程圖。在實(shí)現(xiàn)方式中,可以由在計(jì)算機(jī)系統(tǒng)上執(zhí)行的軟件應(yīng)用進(jìn)行下面概述的步驟。作為初步事項(xiàng),通過使用一種或多種技術(shù)初始化主緩沖器和次級(jí)緩沖器(步驟302)。例如,初始化可以包括指定用于存儲(chǔ)輸入元素的存儲(chǔ)區(qū)域,例如多個(gè)連續(xù)的存儲(chǔ)器地址。作為初始化的一部分,可以關(guān)于主緩沖器指定邊界條件。例如,可以定義變量來(lái)保持與主緩沖器的窗口對(duì)應(yīng)的值。窗口寬度可以表示主緩沖器中任何兩個(gè)存儲(chǔ)的數(shù)據(jù)元素值之間的最大可允許差。在定義關(guān)于主緩沖器的邊界條件之后,主緩沖器準(zhǔn)備好接收數(shù)據(jù)元素的輸入流(步驟304)。然而,當(dāng)主緩沖器達(dá)到容量時(shí),溢出狀況發(fā)生(步驟306)。當(dāng)主緩沖器中不能容納更多的元素時(shí),溢出狀況發(fā)生。在這種情況下,可以移除主緩沖器中存儲(chǔ)的元素的部分(例如,一半),并將其存儲(chǔ)在次級(jí)緩沖器中(步驟308)??梢允褂靡环N或多種技術(shù)來(lái)在主緩沖器(例如,第一緩沖器)中插入代理數(shù)據(jù)元素來(lái)表示在次級(jí)緩沖器(例如,第二緩沖器)中存儲(chǔ)的數(shù)據(jù)元素的部分。例如,可以通過可以被插入到主緩沖器中的適當(dāng)位置處來(lái)表示移除的元素的標(biāo)志(sentinel)提供代理元素。當(dāng)需要從緩沖器驅(qū)出代理元素時(shí),次級(jí)緩沖器中存儲(chǔ)的元素按排序順序合并到主緩沖器中(步驟310)。只要存在輸入元素,就可以對(duì)于每個(gè)輸入元素重復(fù)過程300??梢允褂糜糜谠谟?jì)算機(jī)上執(zhí)行的軟件來(lái)實(shí)現(xiàn)在這里描述的技術(shù)。例如,所述軟件形成在一個(gè)或多個(gè)編程或可編程計(jì)算機(jī)系統(tǒng)(其可以是例如分布式、客戶端/服務(wù)器、或網(wǎng)格的各種架構(gòu))上執(zhí)行的一個(gè)或多個(gè)計(jì)算機(jī)程序中的過程,每個(gè)計(jì)算機(jī)系統(tǒng)包括至少一個(gè)處理器、至少一個(gè)數(shù)據(jù)存儲(chǔ)系統(tǒng)(包括易失性和非易失性存儲(chǔ)器和/或存儲(chǔ)元件)、至少一個(gè)輸入設(shè)備或端口以及至少一個(gè)輸出設(shè)備或端口。所述軟件可以形成例如提供與計(jì)算圖的設(shè)計(jì)和配置有關(guān)的其他服務(wù)的更大的程序的一個(gè)或多個(gè)模塊。圖的節(jié)點(diǎn)和元素可以被實(shí)現(xiàn)為在計(jì)算機(jī)可讀介質(zhì)中存儲(chǔ)的數(shù)據(jù)結(jié)構(gòu)或符合在數(shù)據(jù)儲(chǔ)存庫(kù)中存儲(chǔ)的數(shù)據(jù)模型的其他有組織的數(shù)據(jù)??梢栽诶鏑D-ROM的可以由通用或?qū)S每删幊逃?jì)算機(jī)讀取的存儲(chǔ)介質(zhì)上提供所述軟件,或可以經(jīng)由到執(zhí)行所述軟件的計(jì)算機(jī)的網(wǎng)絡(luò)的通信介質(zhì)遞送(被編碼在傳播信號(hào)中)所述軟件??梢栽趯S糜?jì)算機(jī)上、或使用例如協(xié)處理器的專用硬件執(zhí)行所有功能??梢砸杂刹煌挠?jì)算機(jī)執(zhí)行由所述軟件指定的計(jì)算的不同部分的分布式的方式實(shí)現(xiàn)所述軟件。每個(gè)這樣的計(jì)算機(jī)程序被優(yōu)選地存儲(chǔ)在或下載到可以由通用或?qū)S每删幊逃?jì)算機(jī)讀取的存儲(chǔ)介質(zhì)或設(shè)備(例如,固態(tài)存儲(chǔ)器或介質(zhì)、或磁性或光學(xué)介質(zhì)),用于當(dāng)由計(jì)算機(jī)系統(tǒng)讀取存儲(chǔ)介質(zhì)或設(shè)備時(shí)配置和操作計(jì)算機(jī),以便執(zhí)行在這里描述的過程。本發(fā)明系統(tǒng)還可以被認(rèn)為被實(shí)現(xiàn)為使用計(jì)算機(jī)程序配置的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其中這樣配置存儲(chǔ)介質(zhì)使得以具體和預(yù)定方式操作計(jì)算機(jī)系統(tǒng)以便執(zhí)行在這里描述的功能。已描述了本發(fā)明的許多實(shí)施例。然而,將理解可以進(jìn)行各種修改而不背離本發(fā)明的精神和范圍。例如,上面描述的步驟中的某些可以是順序無(wú)關(guān)的,從而可以以不同于描述的順序的順序執(zhí)行。應(yīng)理解上述描述意圖圖示而并不限制本發(fā)明的范圍,本發(fā)明的范圍由所附權(quán)利要求的范圍定義。例如,可以以不同的順序執(zhí)行上面描述的許多功能步驟,而不實(shí)質(zhì)上影響整體處理。其他實(shí)施例在下列權(quán)利要求的范圍內(nèi)。