求的數(shù)據(jù)之前,將上述讀數(shù)據(jù)請求緩存在請求隊列中。
[0056]這時,掃描模塊42,具體用于按照FIFO的順序從上述請求隊列中獲取讀數(shù)據(jù)請求,掃描獲取的讀數(shù)據(jù)請求所請求的數(shù)據(jù)。
[0057]本實施例中,發(fā)送端以并發(fā)方式不斷地向接收端發(fā)送讀數(shù)據(jù)請求,由于網(wǎng)絡延時以及不確定性,到達接收端的讀數(shù)據(jù)請求是亂序的(這對數(shù)據(jù)順序性無影響)。緩存模塊44將上述讀數(shù)據(jù)請求暫時緩存在請求隊列中,然后掃描模塊42按照FIFO的順序從上述請求隊列中獲取一個讀數(shù)據(jù)請求,由數(shù)據(jù)讀取迭代器掃描該讀數(shù)據(jù)請求所請求的數(shù)據(jù),然后發(fā)送模塊43將掃描到的數(shù)據(jù)攜帶在上述讀數(shù)據(jù)請求對應的讀數(shù)據(jù)響應中發(fā)送給發(fā)送端;然后掃描模塊42繼續(xù)從上述請求隊列中獲取下一個讀數(shù)據(jù)請求。數(shù)據(jù)讀取迭代器掃描的每一份數(shù)據(jù)都帶有數(shù)據(jù)標識,也就是說,上述讀數(shù)據(jù)響應中攜帶的數(shù)據(jù)包帶有數(shù)據(jù)標識,該數(shù)據(jù)標識用于標識數(shù)據(jù)包掃描的先后順序,發(fā)送端接收到上述數(shù)據(jù)包之后,可以根據(jù)上述數(shù)據(jù)標識組裝數(shù)據(jù),從而可以確保用戶訪問到的數(shù)據(jù)是嚴格按照接收端的數(shù)據(jù)讀取迭代器掃描數(shù)據(jù)的順序排列的。
[0058]本實施例中,發(fā)送端發(fā)送讀數(shù)據(jù)請求時采用異步通信方式,以并發(fā)的方式向接收端發(fā)送讀數(shù)據(jù)請求,這對接收端而言會造成比較大的網(wǎng)絡訪問沖擊。如果接收端的處理速度比較慢,請求隊列中的讀數(shù)據(jù)請求的個數(shù)會迅速增加,從而引起內(nèi)存暴漲。
[0059]因此,本實施例中,上述數(shù)據(jù)讀取裝置還可以包括:
[0060]拒絕模塊45,用于當上述請求隊列中緩存的讀數(shù)據(jù)請求的個數(shù)達到上限閾值時,拒絕上述發(fā)送端發(fā)送的讀數(shù)據(jù)請求。拒絕模塊45拒絕讀數(shù)據(jù)請求并不會引起異常,因為發(fā)送端會自動發(fā)起重試,從而可以通過這樣的方式來降低接收端的網(wǎng)絡壓力。其中,上述上限閾值可以在具體實現(xiàn)時根據(jù)接收端的處理能力和內(nèi)存大小等自行設定,本實施例對上述上限閾值的大小不作限定。
[0061]上述數(shù)據(jù)讀取裝置可以使硬件的功能以最大效能運轉(zhuǎn),可以有效解決網(wǎng)絡通信成本所導致的順序訪問吞吐量降低的問題,使整個系統(tǒng)的順序訪問吞吐量不受IDC和網(wǎng)絡拓撲的影響,大大提高了系統(tǒng)對資源的利用率。
[0062]圖6為本發(fā)明數(shù)據(jù)讀取裝置再一個實施例的結(jié)構(gòu)示意圖,本實施例中的數(shù)據(jù)讀取裝置可以作為發(fā)送端,或者發(fā)送端的一部分實現(xiàn)本發(fā)明圖2所示實施例的流程,如圖6所示,該數(shù)據(jù)讀取裝置可以包括:發(fā)送模塊61、接收模塊62和存入模塊63 ;
[0063]其中,發(fā)送模塊61,用于以并發(fā)方式向接收端發(fā)送讀數(shù)據(jù)請求;
[0064]接收模塊62,用于接收接收端發(fā)送的讀數(shù)據(jù)響應,上述讀數(shù)據(jù)響應中攜帶接收端根據(jù)上述讀數(shù)據(jù)請求掃描獲得的數(shù)據(jù)包,上述數(shù)據(jù)包包括數(shù)據(jù)標識,上述數(shù)據(jù)標識用于標識上述數(shù)據(jù)包掃描的先后順序;
[0065]存入模塊63,用于根據(jù)上述數(shù)據(jù)標識將接收模塊62接收到的數(shù)據(jù)包存入緩存。
[0066]上述數(shù)據(jù)讀取裝置,發(fā)送模塊61以并發(fā)方式向接收端發(fā)送讀數(shù)據(jù)請求,解決了硬件空閑等待的問題,從而可以使硬件的功能以最大效能運轉(zhuǎn),可以有效解決網(wǎng)絡通信成本所導致的順序訪問吞吐量降低的問題,使整個系統(tǒng)的順序訪問吞吐量不受IDC和網(wǎng)絡拓撲的影響,大大提高了系統(tǒng)對資源的利用率。
[0067]圖7為本發(fā)明數(shù)據(jù)讀取裝置再一個實施例的結(jié)構(gòu)示意圖,與圖6所示的數(shù)據(jù)讀取裝置相比,不同之處在于,本實施例中,盡管接收端順序訪問存儲介質(zhì),并順序地將讀取的數(shù)據(jù)通過網(wǎng)絡返回,但是由于數(shù)據(jù)包可能會出現(xiàn)亂序到達,所以對發(fā)送端而言必須采用措施來避免數(shù)據(jù)亂序的問題。本實施例采用智能的自動排序方式讓亂序到達的數(shù)據(jù)包按照既定的方式自動排序并存入環(huán)形緩沖。
[0068]具體地,圖7所示的數(shù)據(jù)讀取裝置中,存入模塊63可以包括:比較子模塊631和數(shù)據(jù)包存入子模塊632 ;
[0069]比較子模塊631,用于當上述緩存中還有存儲空間時,比較當前待存入的數(shù)據(jù)包的數(shù)據(jù)標識與上述緩存的當前存儲位置的位置標識是否一致;
[0070]數(shù)據(jù)包存入子模塊632,用于當比較子模塊631確定當前待存入的數(shù)據(jù)包的數(shù)據(jù)標識與上述緩存的當前存儲位置的位置標識一致時,將當前待存入的數(shù)據(jù)包存入上述緩存的當前存儲位置。
[0071]也就是說,為保證數(shù)據(jù)嚴格按照數(shù)據(jù)標識的順序讓用戶讀取,發(fā)送端對亂序到達的數(shù)據(jù)包按照數(shù)據(jù)標識進行排序。具體地,當上述緩存中還有存儲空間時,比較子模塊631比較當前待存入的數(shù)據(jù)包的數(shù)據(jù)標識與上述緩存的當前存儲位置的位置標識是否一致;如果一致,則數(shù)據(jù)包存入子模塊632將當前待存入的數(shù)據(jù)包存入上述緩存的當前存儲位置,以供用戶線程讀取;如果不一致則會進入等待狀態(tài)。位置標識在每次使用后會自動加I并取模,這樣對于發(fā)送端的緩存而言,會自動回到已經(jīng)空置的存儲位置上。如果發(fā)送端的緩存已經(jīng)填滿,即上述緩存中已沒有存儲空間時,所有網(wǎng)絡線程會自動等待,當有空置的存儲位置時再繼續(xù)存入數(shù)據(jù)包。
[0072]可以看出,本實施例中,接收端以數(shù)據(jù)讀取迭代器順序訪問的速度將數(shù)據(jù)以“流”的方式不停地發(fā)送到發(fā)送端。在不阻塞的情況下,發(fā)送端用戶訪問數(shù)據(jù)的速度與接收端1訪問速度基本持平和成正比;而與網(wǎng)絡通信的延時和開銷無關,從而可以實現(xiàn)比較高的吞吐量。
[0073]由于網(wǎng)絡通信的不可靠性,網(wǎng)絡通信可能會出現(xiàn)丟包、超時等問題,這對于流式系統(tǒng)來說是非常致命的。因此,本實施例的數(shù)據(jù)讀取裝置還要充分考慮容錯機制,即在出現(xiàn)異常和故障的時候能夠自動重建整個數(shù)據(jù)流,同時在出現(xiàn)錯包(垃圾包)能夠丟棄,在出現(xiàn)丟包的時候能夠重發(fā),以確保系統(tǒng)的正確性和健壯性。
[0074]數(shù)據(jù)流重建的關鍵點是必須知道當前已經(jīng)完成數(shù)據(jù)掃描的區(qū)間,然后才能再根據(jù)該區(qū)間的后邊界來發(fā)起重連。因此,本實施例中,上述數(shù)據(jù)讀取裝置還可以包括:
[0075]記錄模塊64,用于在數(shù)據(jù)包存入子模塊632將當前待存入的數(shù)據(jù)包存入上述緩存的當前存儲位置之后,記錄上述緩存的當前存儲位置的結(jié)束邊界,以供發(fā)生異常和故障需要重建數(shù)據(jù)流時使用。
[0076]本實施例中,如果接收端的處理能力比較強,而發(fā)送端的處理能力比較弱,這樣接收端返回數(shù)據(jù)包的速度將大于用戶線程的讀取速度,從而會導致發(fā)送端內(nèi)存上漲。因此需要配置合理的壓力控制機制來解決由于發(fā)送端和接收端的處理能力不匹配所帶來的問題。
[0077]本實施例中,發(fā)送端的緩存有上限控制,發(fā)送端緩存的上限可以由用戶配置,本實施例對此不作限定。
[0078]另外,發(fā)送端的并發(fā)任務數(shù)也是可配置的,本實施例中,上述數(shù)據(jù)讀取裝置還可以包括:
[0079]調(diào)整模塊65,用于根據(jù)讀數(shù)據(jù)響應的接收延時和丟失情況,自動調(diào)整以并發(fā)方式向接收端發(fā)送的讀數(shù)據(jù)請求的個數(shù)。
[0080]上述數(shù)據(jù)讀取裝置可以使硬件的功能以最大效能運轉(zhuǎn),可以有效解決網(wǎng)絡通信成本所導致的順序訪問吞吐量降低的問題,使整個系統(tǒng)的順序訪問吞吐量不受IDC和網(wǎng)絡拓撲的影響,大大提高了系統(tǒng)對資源的利用率。
[0081]需要說明的是,在本發(fā)明的描述中,術語“第一”、“第二”等僅用于描述目的,而不能理解為指示或暗示相對重要性。此外,在本發(fā)明的描述中,除非另有說明,“多個”的含義是兩個或兩個以上。
[0082]流程圖中或在此以其他方式描述的任何過程或方法描述可以被理解為,表示包括一個或更多個用于實現(xiàn)特定邏輯功能或過程的步驟的可執(zhí)行指令的代碼的模塊、片段或部分,并且本發(fā)明的優(yōu)選實施方式的范圍包括另外的實現(xiàn),其中可以不按所示出或討論的順序,包括根據(jù)所涉及的功能按基本同時的方式或按相反的順序,來執(zhí)行功能,這應被本發(fā)明的實施例所屬技術領域的技術人員所理解。
[0083]應當理解,本發(fā)明的各部分可以用硬件、軟件、固件或它們的組合來實現(xiàn)。在上述實施方式中,多個步驟或方法可以用存儲