專利名稱:基于緩沖池的數(shù)據(jù)緩存排序在線處理方法
技術領域:
本發(fā)明涉及基于緩沖池的數(shù)據(jù)緩存排序在線處理方法,具體包括數(shù)據(jù)的緩存、去重和排序方法,屬于互聯(lián)網(wǎng)領域。
背景技術:
近年來,隨著計算機技術、網(wǎng)絡技術、通信技術及多媒體技術的迅猛發(fā)展,多媒體 信息的數(shù)據(jù)量急劇增多,互聯(lián)網(wǎng)上存在著難以準確估計的大量的多媒體數(shù)據(jù),既有以文件 為單位可一次性全部獲取的靜態(tài)多媒體數(shù)據(jù),也有以數(shù)據(jù)流的形式在網(wǎng)絡中傳輸?shù)膭討B(tài)多 媒體數(shù)據(jù)。在對互聯(lián)網(wǎng)中的多媒體數(shù)據(jù)進行分析處理時,需要首先將多媒體數(shù)據(jù)從互聯(lián)網(wǎng) 下載,然后分析處理。而且在多媒體數(shù)據(jù)分析處理中,通常需要具有一定長度的連續(xù)數(shù)據(jù), 才能解碼出相應的視頻、音頻數(shù)據(jù)片段,以便進行多媒體數(shù)據(jù)的內(nèi)容分析。為敘述方便,以 下將網(wǎng)絡中的靜態(tài)多媒體文件或動態(tài)多媒體數(shù)據(jù)流通稱為節(jié)目。目前常見的多線程下載軟件,如迅雷、FlashGet等,通常采用按下載文件大小直接 在硬盤上創(chuàng)建多媒體文件,而后以向硬盤文件填充的方式下載數(shù)據(jù)。當遇到下述情況時無 法使用
(1)為了提高效率,采用多用戶多線程的下載方式從網(wǎng)絡中下載同一節(jié)目; 在多用戶、多線程下載時,一方面節(jié)目的總下載速度快,另一方面每個線程下載的起始 偏移量和速度都可能不同,因此一個節(jié)目的下載數(shù)據(jù)將會以偏移量分布近似隨機的形式, 亂序、重復地到達。所以,若采用文件緩存方式下載,同時讀寫的文件數(shù)量多、下載的數(shù)據(jù)量 大、數(shù)據(jù)在文件中的寫入位置頻繁變化,因而硬盤讀寫速度將比通常情況慢很多,甚至低于 網(wǎng)絡媒體數(shù)據(jù)的下載速度,無法滿足系統(tǒng)對下載數(shù)據(jù)量大的要求。(2)為了提高效率,采用在線分析的方式,要求對接收到的節(jié)目數(shù)據(jù)進行實時分析 處理;
目前以文件方式接收下載數(shù)據(jù)的軟件都是以數(shù)據(jù)下載為最終目標,不考慮需要盡快做 分析處理的實時操作。但在互聯(lián)網(wǎng)多媒體數(shù)據(jù)分析處理系統(tǒng)中,下載數(shù)據(jù)只是前端環(huán)節(jié),下 載后需要盡快分析處理,并且不同多媒體數(shù)據(jù)分析處理技術對被處理數(shù)據(jù)的連續(xù)長度有不 同要求,采用文件方式接收下載數(shù)據(jù)無法及早從下載數(shù)據(jù)中降能處理的連續(xù)多媒體數(shù)據(jù)片 段及早分析處理,即,無法滿足系統(tǒng)對下載數(shù)據(jù)進行實時分析處理的要求,同時也不便于和 系統(tǒng)中的分析處理模塊接口。(3)系統(tǒng)從互聯(lián)網(wǎng)持續(xù)、海量地下載大量節(jié)目數(shù)據(jù)。在持續(xù)、大量地下載網(wǎng)絡媒體數(shù)據(jù)的情況下,受計算機系統(tǒng)可用內(nèi)存數(shù)量的限制, 無法在內(nèi)存中緩存整個媒體文件。此外,在采用多用戶多線程的下載方式從網(wǎng)絡中下載同一節(jié)目時,下載數(shù)據(jù)會存 在大量重復,同時可能有少量丟失,在進行實時分析時也需要考慮采取相應的策略,而目前 還沒有較好的處理方法。
發(fā)明內(nèi)容
本發(fā)明為了解決從互聯(lián)網(wǎng)以多用戶、多線程方式下載大量多媒體節(jié)目數(shù)據(jù)時,目 前常見的多線程下載軟件對于下載數(shù)據(jù)亂序和重復的節(jié)目批量并發(fā)下載,不能實現(xiàn)基于內(nèi) 存的下載數(shù)據(jù)在線緩存、排序和去重,因而無法支持實時在線的識別、檢索等處理的問題, 本發(fā)明提供了基于緩沖池對數(shù)據(jù)進行緩存排序的在線處理方法。本發(fā)明在計算機系統(tǒng)內(nèi)存中設置緩沖池,緩沖池中設置多個緩沖區(qū),所有緩沖區(qū)組織成鏈表集中管理,為每個節(jié)目創(chuàng)建下載日志,用于記錄節(jié)目已下載數(shù)據(jù)的偏移量范圍, 并設置節(jié)目的生命周期初始值為k,k為自然數(shù),且k>0,對接收到的節(jié)目下載數(shù)據(jù)進行基于 緩沖池的數(shù)據(jù)緩存排序在線處理方法,包括以下步驟
步驟一、接收下載模塊下載的節(jié)目數(shù)據(jù)包,節(jié)目數(shù)據(jù)包中含有的信息有節(jié)目ID、起始地 址、字節(jié)數(shù)、偏移量,
步驟二、查詢節(jié)目的下載日志,判斷所述節(jié)目數(shù)據(jù)包中的數(shù)據(jù)是否下載過, 判斷結果為是,則丟棄所述節(jié)目數(shù)據(jù)包不做任何處理,返回步驟一接收下一個節(jié)目數(shù) 據(jù)包;
判斷結果為否,執(zhí)行步驟三;
步驟三、獲取所述節(jié)目數(shù)據(jù)包的信息,并寫入下載日志,計算節(jié)目數(shù)據(jù)包中的下載數(shù)據(jù) 與所有緩沖區(qū)的距離中的最小距離iMinDist,最小距離對應的緩沖區(qū)命名為PInBuffer ; 步驟四、判斷條件iMinDist<0是否成立, 判斷結果為是,執(zhí)行步驟七, 判斷結果為否,執(zhí)行步驟五;
步驟五、判斷iMinDist是否大于緩沖區(qū)申請閾值,且節(jié)目擁有的緩沖區(qū)數(shù)小于緩沖區(qū) 數(shù)量上限,
判斷結果為是,則執(zhí)行步驟六;
判斷結果為否,則丟棄所述節(jié)目數(shù)據(jù)包不做任何處理,返回步驟一接收下一個節(jié)目數(shù) 據(jù)包;
步驟六、申請新的緩沖區(qū),并且做如下賦值=PInBufTer=新申請緩沖區(qū); 步驟七、將所述節(jié)目數(shù)據(jù)包中的新數(shù)據(jù)存入緩沖區(qū)PInBuffer中,并返回緩沖區(qū) PInBuffer中第一塊連續(xù)數(shù)據(jù)的字節(jié)數(shù)、首字節(jié)指針,將節(jié)目數(shù)據(jù)包中的下載數(shù)據(jù)的偏移量 范圍記錄到該節(jié)目的下載日志中,并將節(jié)目生命期重新置為初始值k ;
步驟八、調(diào)用分析處理程序,從緩沖區(qū)PInBuffer中將排好序的連續(xù)字節(jié)數(shù)據(jù)取出,分 析處理程序返回取出的字節(jié)數(shù)m ; 步驟九、判斷條件m>0是否成立, 判斷結果為是,執(zhí)行步驟十,
判斷結果為否,結束本次操作,返回步驟一接收下一個節(jié)目數(shù)據(jù)包; 步驟十、刪除緩沖區(qū)PInBuffer中的前m個字節(jié)數(shù)據(jù),并更新緩沖區(qū)PInBuffer的狀態(tài) fn息;
重復執(zhí)行步驟一至步驟十,同時系統(tǒng)周期的將節(jié)目的生命周期做減法操作,直至該節(jié) 目的生命周期小于等于0,表示該節(jié)目下載完畢,釋放該節(jié)目所占用的緩沖區(qū),完成對該節(jié) 目的數(shù)據(jù)緩存排序的在線處理。
本發(fā)明的優(yōu)點①在系統(tǒng)全局設立緩沖池,內(nèi)存使用量可控;②每個節(jié)目獨立管 理,采用多個緩沖區(qū)對同一節(jié)目的下載數(shù)據(jù)進行緩存、排序與去重,根據(jù)下載數(shù)據(jù)的到達情 況自動申請增加緩沖區(qū),能自適應于節(jié)目的多線程、多用戶下載特點;③實時性好,每次接 收到新的數(shù)據(jù)包都將緩沖區(qū)內(nèi)排好序的數(shù)據(jù)長度等信息送給實時分析處理模塊,以便數(shù)據(jù) 能被盡早處理;④對數(shù)據(jù)缺失采取盡最大努力策略等待其到達。
圖1是本發(fā)明方法流程圖。
具體實施例方式具體實施方式
一下面結合圖1說明本實施方式,本實施方式在計算機系統(tǒng)內(nèi)存 中設置緩沖池,緩沖池中設置多個緩沖區(qū),所有緩沖區(qū)組織成鏈表集中管理,為每個節(jié)目創(chuàng) 建下載日志,用于記錄節(jié)目已下載數(shù)據(jù)的偏移量范圍,并設置節(jié)目的生命周期初始值為k, k為自然數(shù),且k>0,對接收到的節(jié)目下載數(shù)據(jù)進行基于緩沖池的數(shù)據(jù)緩存排序在線處理方 法,包括以下步驟
步驟一、接收下載模塊下載的節(jié)目數(shù)據(jù)包,節(jié)目數(shù)據(jù)包中含有的信息有節(jié)目ID、起始地 址、字節(jié)數(shù)、偏移量,
步驟二、查詢節(jié)目的下載日志,判斷所述節(jié)目數(shù)據(jù)包中的數(shù)據(jù)是否下載過, 判斷結果為是,則丟棄所述節(jié)目數(shù)據(jù)包不做任何處理,返回步驟一接收下一個節(jié)目數(shù) 據(jù)包;
判斷結果為否,執(zhí)行步驟三;
步驟三、獲取所述節(jié)目數(shù)據(jù)包的信息,并寫入下載日志,計算節(jié)目數(shù)據(jù)包中的下載數(shù)據(jù) 與所有緩沖區(qū)的距離中的最小距離iMinDist,最小距離對應的緩沖區(qū)命名為PInBuffer ; 獲取所述節(jié)目數(shù)據(jù)包與所有緩沖區(qū)的距離中的最小距離iMinDist的過程為 按如下公式計算節(jié)目數(shù)據(jù)包與每個緩沖區(qū)塊的距離i^si 偽^si=Hiin (數(shù)據(jù)包偏移量+數(shù)據(jù)包長度一緩沖區(qū)原始偏移量, 數(shù)據(jù)包偏移量一緩沖區(qū)目前偏移量一緩沖區(qū)長度), 其中,
緩沖區(qū)原始偏移量是指緩沖區(qū)剛剛申請到時,所保存的第一個數(shù)據(jù)包的偏移量,即, 緩沖區(qū)獲取后保存的第一個字節(jié)數(shù)據(jù)的偏移量;
緩沖區(qū)目前偏移量是指目前緩沖區(qū)中第一個字節(jié)數(shù)據(jù)對應的偏移量, 將數(shù)據(jù)包與每個緩沖區(qū)塊的距離i^si中的最小值做為節(jié)目數(shù)據(jù)包與所有緩沖區(qū)的距 離中的最小距離iMinDist。步驟四、判斷條件iMinDist<0是否成立, 判斷結果為是,執(zhí)行步驟七,
判斷結果為否,執(zhí)行步驟五;
步驟五、判斷iMinDist是否大于緩沖區(qū)申請閾值,且節(jié)目擁有的緩沖區(qū)數(shù)小于緩沖區(qū) 數(shù)量上限,
判斷結果為是,則執(zhí)行步驟六;判斷結果為否,則丟棄所述節(jié)目數(shù)據(jù)包不做任何處理,返回步驟一接收下一個節(jié)目數(shù) 據(jù)包;
步驟六、申請新的緩沖區(qū),并且做如下賦值=PInBufTer=新申請緩沖區(qū); 步驟七、將所述節(jié)目數(shù)據(jù)包中的新數(shù)據(jù)存入緩沖區(qū)PInBuffer中,并返回緩沖區(qū) PInBuffer中第一塊連續(xù)數(shù)據(jù)的字節(jié)數(shù)、首字節(jié)指針,將節(jié)目數(shù)據(jù)包中的下載數(shù)據(jù)的偏移量 范圍記錄到該節(jié)目的下載日志中,并將節(jié)目生命期重新置為初始值k ;
步驟八、調(diào)用分析處理程序,從緩沖區(qū)PInBuffer中將排好序的連續(xù)字節(jié)數(shù)據(jù)取出,分 析處理程序返回取出的字節(jié)數(shù)m ; 步驟九、判斷條件m>0是否成立, 判斷結果為是,執(zhí)行步驟十,
判斷結果為否,結束本次操作,返回步驟一接收下一個節(jié)目數(shù)據(jù)包; 步驟十、刪除緩沖區(qū)PInBufTer中的前m個字節(jié)數(shù)據(jù),并更新緩沖區(qū)PInBufTer的狀態(tài) fn息; 重復執(zhí)行步驟一至步驟十,同時系統(tǒng)周期的將節(jié)目的生命周期做減法操作,直至該節(jié) 目的生命周期小于等于0,表示該節(jié)目下載完畢,釋放該節(jié)目所占用的緩沖區(qū),完成對該節(jié) 目的數(shù)據(jù)緩存排序的在線處理。采用多緩沖區(qū)的方式緩存同一節(jié)目的下載數(shù)據(jù),并進行緩存排序與去重操作每 個緩沖區(qū)對應一個偏移量,接收從該偏移量開始以緩沖區(qū)長度為范圍區(qū)間的數(shù)據(jù),并根據(jù) 接收數(shù)據(jù)的偏移量寫入緩沖區(qū),即相當于在節(jié)目上有多個長度一定的接收窗口,落在接收 窗口內(nèi)的數(shù)據(jù)才會被相對應的緩沖區(qū)接收、排序,并同時記錄在該節(jié)目的下載日志中,落在 窗口外的數(shù)據(jù)則被丟棄。隨著數(shù)據(jù)接收、排序的進行,每當緩沖區(qū)接收了新數(shù)據(jù)后,都返回 緩沖區(qū)首部連續(xù)數(shù)據(jù)的長度,若滿足處理程序?qū)﹂L度的要求,則移出緩沖區(qū),修正緩沖區(qū)的 偏移量,即緩沖區(qū)對應的接收窗口在節(jié)目上向前移動,移動的長度為從緩沖區(qū)中取走的數(shù) 據(jù)字節(jié)數(shù)。因為在此過程中對下載的節(jié)目數(shù)據(jù)包都按其自身的在節(jié)目中的偏移量在緩沖區(qū) 中進行緩存操作,因此,雖然下載的數(shù)據(jù)可能是隨機的形式,是亂序的,但經(jīng)過緩沖池中處 理過的數(shù)據(jù)都是排好序的了。考慮數(shù)據(jù)下載中會存在大量重復,為避免重復處理,在內(nèi)存中為每個節(jié)目創(chuàng)建一 個接收數(shù)據(jù)的下載日志,用于記錄節(jié)目已接收到的全部數(shù)據(jù)的偏移量區(qū)間范圍。當有下載 數(shù)據(jù)包到達時,首先搜索該下載日志,對于已接收偏移量范圍內(nèi)的數(shù)據(jù)丟棄不作任何處理, 對于新數(shù)據(jù)進行緩沖區(qū)重排操作。這樣能有效減少對重復的數(shù)據(jù)的反復重排和處理。步驟一所述的節(jié)目數(shù)據(jù)包由下載模塊下載后,在利用多媒體分析處理模塊進行數(shù) 據(jù)處理之前,先利用本發(fā)明所述的緩存排序算法進行緩存、排序和去重。本發(fā)明的根本思想 是在緩沖池中進行處理,然后再發(fā)送給多媒體分析處理模塊進行分析處理的實時操作,以 便及時對網(wǎng)絡數(shù)據(jù)做出相應管理操作,或者分析后再存儲到硬盤上,這樣處理過的數(shù)據(jù)已 經(jīng)排好序、去掉了重復數(shù)據(jù),可以直接存在硬盤上,避免了在硬盤上頻繁操作,讀寫速度慢 情況的發(fā)生。為了控制對內(nèi)存的消耗,并充分利用系統(tǒng)的內(nèi)存資源,在系統(tǒng)全局設置緩沖區(qū)池 根據(jù)系統(tǒng)可用于內(nèi)存和單個緩沖區(qū)大小,創(chuàng)建一定數(shù)量的緩沖區(qū),并組織成鏈表形式集中 管理,作為緩沖池。在節(jié)目下載過程中,使用的所有緩沖區(qū)均從該緩沖池中申請得到,當下載結束后釋放所有緩沖區(qū)給緩沖池。關于緩沖池的具體情況如下
(1)緩沖池創(chuàng)建根據(jù)系統(tǒng)可用于內(nèi)存大小,申請一個大的內(nèi)存區(qū)塊,在區(qū)塊內(nèi)部劃分 緩沖區(qū),并將緩沖區(qū)組織成鏈表形式集中管理,作為緩沖池。同時,在系統(tǒng)需要同時處理的 下載節(jié)目數(shù)量上限確定的情況下,根據(jù)緩沖池規(guī)模(創(chuàng)建時的緩沖區(qū)總數(shù))、緩沖池利用率 動態(tài)設置每個節(jié)目所能使用的緩沖區(qū)數(shù)量上限為
嗜憲斜量-^g—創(chuàng)建時緩沖區(qū)的數(shù)量 ^it雙 從“‘系統(tǒng)需要同吋下載節(jié)目的數(shù)量上限‘
其中是大于ι的系數(shù),在系統(tǒng)運行過程中,根據(jù)緩沖池的利用率動態(tài)調(diào)整其數(shù)值。α的動態(tài)調(diào)整過程為
當緩沖池利用率Π小于閾值盧時,按一定幅度增加α的數(shù)值,如5% 50%; 當緩沖池利用率Π超過閾值岸時,按一定幅度減小的數(shù)值,如10% 50%; 其中,緩沖池利用率η按如下公式計算
— 目前緩沖池中空閑緩沖區(qū)總數(shù) ‘1 = ^創(chuàng)建時緩沖區(qū)的數(shù)量^ ‘
閾值#的數(shù)值取0. 6、. 9。(2)緩沖區(qū)申請在節(jié)目下載過程中,需要申請新緩沖區(qū)時,從緩沖池中緩沖區(qū)鏈 表的頭部或尾部取下一個緩沖區(qū)作為節(jié)目下載數(shù)據(jù)的新的緩沖區(qū);
(3)節(jié)目緩沖區(qū)釋放當一個節(jié)目下載、處理完畢,將其申請的所有緩沖區(qū)依次掛到緩 沖池中緩沖區(qū)鏈表的尾部或頭部。在緩沖區(qū)接收數(shù)據(jù)時,若接收到的數(shù)據(jù)存在空白區(qū)塊,S卩,接收到的數(shù)據(jù)與已有數(shù) 據(jù)不連續(xù),則記錄空白塊的起始位置和長度,并盡最大努力等待空白塊內(nèi)的數(shù)據(jù)到達。接收 數(shù)據(jù)時,緩沖區(qū)內(nèi)的空白塊可能有多個。若緩沖區(qū)即將寫滿,而緩沖區(qū)空白塊的數(shù)據(jù)仍未到 達,這可能是下載數(shù)據(jù)發(fā)生了丟失無法到達,而且空白塊之前的數(shù)據(jù)長度不足,用戶無法使 用,此時必須騰出空間接收新下載數(shù)據(jù),則將第一個空白塊和之前的數(shù)據(jù)移出緩沖區(qū)。具體將所述節(jié)目數(shù)據(jù)包中的新數(shù)據(jù)存入緩沖區(qū)PInBuffer中的過程為
步驟a、判斷節(jié)目數(shù)據(jù)包的數(shù)據(jù)與緩沖區(qū)PInBuffer內(nèi)已有數(shù)據(jù)是否不連續(xù),即是否存 在空白塊,
判斷結果為是,則記錄空白塊的起始位置和長度,然后分別執(zhí)行步驟b和步驟C, 判斷結果為否,則執(zhí)行步驟d,再執(zhí)行步驟f,
步驟b、判斷節(jié)目數(shù)據(jù)包中的數(shù)據(jù)與緩沖區(qū)PInBuffer內(nèi)的已有的空白塊是否有交疊, 判斷結果為是,則修正相應空白塊的位置和長度,然后執(zhí)行步驟d, 判斷結果為否,則執(zhí)行步驟d,
步驟c、判斷節(jié)目數(shù)據(jù)包中的數(shù)據(jù)是否覆蓋緩沖區(qū)PInBuffer內(nèi)的已有的空白塊, 判斷結果為是,刪除該空白塊,然后執(zhí)行步驟d, 判斷結果為否,執(zhí)行步驟d,
步驟d、將所述節(jié)目數(shù)據(jù)包寫入緩沖區(qū)PInBuffer內(nèi),
步驟e、在緩沖區(qū)PInBuffer中具有空白塊的情況下,判斷緩沖區(qū)PInBuffer的空閑率是否小于空閑率閾值下限<formula>formula see original document page 10</formula>l取50% 85%,
判斷結果為是,將第一個空白塊和第一塊空白塊之前的數(shù)據(jù)移出緩沖區(qū)PInBuffer,結 束本次操作,判斷結果為否,結束本次操作,
步驟f、在緩沖區(qū)PInBuffer中無空白塊的情況下,判斷緩沖區(qū)PInBuffer的空閑率是 否小于空閑率閾值上限^//FWMjwZFWM取90% 95%,
判斷結果為是,將緩沖區(qū)PInBuffer中的前力個字節(jié)數(shù)據(jù)移除,結束本次操作,判斷結 果為否,結束本次操作,
其中,力按如下公式計算 h = cx BiifferSIze ,
上式中的C為比例系數(shù)閾值,滿足如下關系
<formula>formula see original document page 10</formula>> R絡系統(tǒng)的最大傳輸單元長度M2T;,
BufFulll滿足條件
<formula>formula see original document page 10</formula>
權利要求
基于緩沖池的數(shù)據(jù)緩存排序在線處理方法,在計算機系統(tǒng)內(nèi)存中設置緩沖池,緩沖池中設置多個緩沖區(qū),所有緩沖區(qū)組織成鏈表集中管理,其特征在于,為每個節(jié)目創(chuàng)建下載日志,用于記錄節(jié)目已下載數(shù)據(jù)的偏移量范圍,并設置節(jié)目的生命周期初始值為k,k為自然數(shù),且k>0,對接收到的節(jié)目下載數(shù)據(jù)進行基于緩沖池的數(shù)據(jù)緩存排序在線處理方法,包括以下步驟步驟一、接收下載模塊下載的節(jié)目數(shù)據(jù)包,節(jié)目數(shù)據(jù)包中含有的信息有節(jié)目ID、起始地址、字節(jié)數(shù)、偏移量,步驟二、查詢節(jié)目的下載日志,判斷所述節(jié)目數(shù)據(jù)包中的數(shù)據(jù)是否下載過, 判斷結果為是,則丟棄所述節(jié)目數(shù)據(jù)包不做任何處理,返回步驟一接收下一個節(jié)目數(shù)據(jù)包;判斷結果為否,執(zhí)行步驟三;步驟三、獲取所述節(jié)目數(shù)據(jù)包的信息,并寫入下載日志,計算節(jié)目數(shù)據(jù)包中的下載數(shù)據(jù)與所有緩沖區(qū)的距離中的最小距離iMinDist,最小距離對應的緩沖區(qū)命名為PInBuffer;步驟四、判斷條件iMinDist<0是否成立,判斷結果為是,執(zhí)行步驟七,判斷結果為否,執(zhí)行步驟五;步驟五、判斷iMinDist是否大于緩沖區(qū)申請閾值,且節(jié)目擁有的緩沖區(qū)數(shù)小于緩沖區(qū)數(shù)量上限,判斷結果為是,則執(zhí)行步驟六;判斷結果為否,則丟棄所述節(jié)目數(shù)據(jù)包不做任何處理,返回步驟一接收下一個節(jié)目數(shù)據(jù)包;步驟六、申請新的緩沖區(qū),并且做如下賦值PInBuffer=新申請緩沖區(qū);步驟七、將所述節(jié)目數(shù)據(jù)包中的新數(shù)據(jù)存入緩沖區(qū)PInBuffer中,并返回緩沖區(qū)PInBuffer中第一塊連續(xù)數(shù)據(jù)的字節(jié)數(shù)、首字節(jié)指針,將節(jié)目數(shù)據(jù)包中的下載數(shù)據(jù)的偏移量范圍記錄到該節(jié)目的下載日志中,并將節(jié)目生命期重新置為初始值k;步驟八、調(diào)用分析處理程序,從緩沖區(qū)PInBuffer中將排好序的連續(xù)字節(jié)數(shù)據(jù)取出,分析處理程序返回取出的字節(jié)數(shù)m;步驟九、判斷條件m > 0是否成立,判斷結果為是,執(zhí)行步驟十,判斷結果為否,結束本次操作,返回步驟一接收下一個節(jié)目數(shù)據(jù)包; 步驟十、刪除緩沖區(qū)PInBuffer中的前m個字節(jié)數(shù)據(jù),并更新緩沖區(qū)PInBuffer的狀態(tài)信息;重復執(zhí)行步驟一至步驟十,同時系統(tǒng)周期的將節(jié)目的生命周期做減法操作,直至該節(jié)目的生命周期小于等于0,表示該節(jié)目下載完畢,釋放該節(jié)目所占用的緩沖區(qū),完成對該節(jié)目的數(shù)據(jù)緩存排序的在線處理。
2.根據(jù)權利要求1所述的基于緩沖池的數(shù)據(jù)緩存排序在線處理方法,其特征在于,獲 取所述節(jié)目數(shù)據(jù)包與所有緩沖區(qū)的距離中的最小距離iMinDist的過程為按如下公式計算節(jié)目數(shù)據(jù)包與每個緩沖區(qū)塊的距離偽‘對 偽 對=min (數(shù)據(jù)包偏移量+數(shù)據(jù)包長度一緩沖區(qū)原始偏移量,數(shù)據(jù)包偏移量一緩沖區(qū)目前偏移量一緩沖區(qū)長度), 其中,緩沖區(qū)原始偏移量是指緩沖區(qū)剛剛申請到時,所保存的第一個數(shù)據(jù)包的偏移量,即, 緩沖區(qū)獲取后保存的第一個字節(jié)數(shù)據(jù)的偏移量;緩沖區(qū)目前偏移量是指目前緩沖區(qū)中第一個字節(jié)數(shù)據(jù)對應的偏移量, 將數(shù)據(jù)包與每個緩沖區(qū)塊的距離偽‘對中的最小值作為節(jié)目數(shù)據(jù)包與所有緩沖區(qū)的距 離中的最小距離iMinDist。
3.根據(jù)權利要求1所述的基于緩沖池的數(shù)據(jù)緩存排序在線處理方法,其特征在于,步 驟五緩沖區(qū)數(shù)量上限的設置方法為創(chuàng)建時緩沖區(qū)的數(shù)量緩沖區(qū)數(shù)量上限=系統(tǒng)需要同時下載節(jié)目的數(shù)量上限’ 其中《力大于1的系數(shù),并根據(jù)緩沖池利用率動態(tài)調(diào)整其數(shù)值。
4.根據(jù)權利要求3所述的基于緩沖池的數(shù)據(jù)緩存排序在線處理方法,其特征在于,a 的動態(tài)調(diào)整過程為當緩沖池利用率n小于閾值聲時,按一定幅度增加a的數(shù)值,如5% 50%; 當緩沖池利用率n超過閾值聲時,按一定幅度減小a的數(shù)值,如10% 50% ; 其中,緩沖池利用率n按如下公式計算<formula>formula see original document page 3</formula> 閾值b的數(shù)值取0. 6 0.9。
5.根據(jù)權利要求1所述的基于緩沖池的數(shù)據(jù)緩存排序在線處理方法,其特征在于,步 驟六申請新的緩沖區(qū)的方法為從緩沖池中緩沖區(qū)鏈表的頭部或尾部取下一個緩沖區(qū)作為節(jié)目下載數(shù)據(jù)的新的緩沖區(qū)。
6.根據(jù)權利要求1所述的基于緩沖池的數(shù)據(jù)緩存排序在線處理方法,其特征在于,釋 放該節(jié)目所占用的緩沖區(qū)的方法為當一個節(jié)目下載、處理完畢,將該節(jié)目申請的所有緩沖區(qū)依次掛到緩沖池中緩沖區(qū)鏈 表的尾部或頭部。
7.根據(jù)權利要求1所述的基于緩沖池的數(shù)據(jù)緩存排序在線處理方法,其特征在于,將 所述節(jié)目數(shù)據(jù)包中的下載數(shù)據(jù)存入緩沖區(qū)PInBuffer中的過程為步驟a、判斷節(jié)目數(shù)據(jù)包的數(shù)據(jù)與緩沖區(qū)PInBuffer內(nèi)已有數(shù)據(jù)是否不連續(xù),即是否存 在空白塊,判斷結果為是,則記錄空白塊的起始位置和長度,然后分別執(zhí)行步驟b和步驟c, 判斷結果為否,則執(zhí)行步驟d,再執(zhí)行步驟f,步驟b、判斷節(jié)目數(shù)據(jù)包中的數(shù)據(jù)與緩沖區(qū)PInBuffer內(nèi)的已有的空白塊是否有交疊, 判斷結果為是,則修正相應空白塊的位置和長度,然后執(zhí)行步驟d, 判斷結果為否,則執(zhí)行步驟d,步驟c、判斷節(jié)目數(shù)據(jù)包中的數(shù)據(jù)是否覆蓋緩沖區(qū)PInBuffer內(nèi)的已有的空白塊,CN 101834801 A權禾丨j 要求書3/3頁判斷結果為是,刪除該空白塊,然后執(zhí)行步驟d, 判斷結果為否,執(zhí)行步驟d,步驟d、將所述節(jié)目數(shù)據(jù)包寫入緩沖區(qū)PInBuffer內(nèi), 步驟e、在緩沖區(qū)PInBuffer中具有空白塊的情況下,判斷緩沖區(qū)PInBuffer的空閑率 是否小于空閑率閾值下限^///^WL^z/FwWl取50% 85%,判斷結果為是,將第一個空白塊和第一塊空白塊之前的數(shù)據(jù)移出緩沖區(qū)PInBuffer,結 束本次操作,判斷結果為否,結束本次操作,步驟f、在緩沖區(qū)PInBuffer中無空白塊的情況下,判斷緩沖區(qū)PInBuffer的空閑率是 否小于空閑率閾值上限^//FWM,^///^//2取90% 95%,判斷結果為是,將緩沖區(qū)PInBuffer中的前力個字節(jié)數(shù)據(jù)移除,結束本次操作,判斷結 果為否,結束本次操作,其中,力按如下公式計算h = cxBifferSize ,上式中的C為比例系數(shù)閾值,滿足如下關系BufFulll滿足條件
全文摘要
基于緩沖池的數(shù)據(jù)緩存排序在線處理方法,屬于互聯(lián)網(wǎng)領域,為了解決目前常見的多線程下載軟件對于下載數(shù)據(jù)亂序和重復的節(jié)目批量并發(fā)下載,不能實現(xiàn)基于內(nèi)存的下載數(shù)據(jù)在線緩存、排序和去重,因而無法支持實時在線的識別、檢索等處理的問題。本發(fā)明將所有緩沖區(qū)組織成緩沖區(qū)池,采用多個緩沖區(qū)緩存同一節(jié)目的下載數(shù)據(jù)。在接收節(jié)目數(shù)據(jù)包后,先查詢節(jié)目的下載日志,若無新數(shù)據(jù)則丟棄不做任何處理,否則首先選擇合適的節(jié)目已有緩沖區(qū)接收數(shù)據(jù),若無合適緩沖區(qū)且允許的情況下,申請新緩沖區(qū)接收數(shù)據(jù);然后更新下載日志;最后調(diào)用分析處理模塊將該緩沖區(qū)中排好的數(shù)據(jù)取走處理。重復上述過程,直至節(jié)目下載完成,將節(jié)目分配的緩沖區(qū)釋放到緩沖區(qū)池中。
文檔編號H04L12/56GK101834801SQ201010177960
公開日2010年9月15日 申請日期2010年5月20日 優(yōu)先權日2010年5月20日
發(fā)明者劉峰, 吳震, 周淵, 姜濤, 張冰, 鄭貴濱, 鄭鐵然, 陳訓遜, 韓紀慶 申請人:哈爾濱工業(yè)大學;國家計算機網(wǎng)絡與信息安全管理中心