本申請涉及數(shù)據(jù)庫技術(shù)領(lǐng)域,特別是涉及組裝基礎(chǔ)數(shù)據(jù)緩存的方法及裝置。
背景技術(shù):
數(shù)據(jù)庫技術(shù)在許多系統(tǒng)中有著廣泛的應(yīng)用,如網(wǎng)站相關(guān)的多種數(shù)據(jù)可以有組織的存儲在數(shù)據(jù)庫中,并通過數(shù)據(jù)庫管理軟件進(jìn)行管理和使用,從而為站點提供各種數(shù)據(jù)服務(wù)。隨著互聯(lián)網(wǎng)應(yīng)用的不斷發(fā)展,互聯(lián)網(wǎng)數(shù)據(jù)的規(guī)模也在迅速膨脹,如何對大規(guī)模數(shù)據(jù)進(jìn)行更加高效的存儲和應(yīng)用,成為技術(shù)人員不斷進(jìn)行深入研究的重要課題。尤其是對于一些數(shù)據(jù)量相對集中的站點,諸如電子商務(wù)網(wǎng)站,其數(shù)據(jù)規(guī)模相當(dāng)龐大,能否對數(shù)據(jù)庫中的大規(guī)模數(shù)據(jù)進(jìn)行有效的組織和調(diào)用,成為影響站點業(yè)務(wù)處理效率的重要因素。在站點業(yè)務(wù)數(shù)據(jù)的規(guī)模相對較小時,數(shù)據(jù)可以隨需要直接在數(shù)據(jù)庫中讀取。但是,當(dāng)站點的數(shù)據(jù)規(guī)模到達(dá)一定數(shù)量級后,如果仍依靠讀取接口直接讀取數(shù)據(jù)庫,直接調(diào)用數(shù)據(jù)的訪問可能導(dǎo)致系統(tǒng)開銷過大,例如,磁盤IO、網(wǎng)絡(luò)吞吐量、網(wǎng)卡占用、數(shù)據(jù)庫連接池占用等都可能會承受較高的壓力,數(shù)據(jù)的調(diào)用效率就會降低,從而對上層應(yīng)用的執(zhí)行造成不同程度的影響,例如,可能產(chǎn)生嚴(yán)重的超時甚至系統(tǒng)崩潰。
為了盡量避免數(shù)據(jù)庫系統(tǒng)成為網(wǎng)站系統(tǒng)的瓶頸,在軟件層面上,可以通過改進(jìn)數(shù)據(jù)的管理和使用方法來提高數(shù)據(jù)庫的應(yīng)用效率。例如,可以根據(jù)數(shù)據(jù)的使用或更新頻度,對不同數(shù)據(jù)分別使用不同方法進(jìn)行應(yīng)用。如可以將經(jīng)常使用并且不經(jīng)常變化的基礎(chǔ)數(shù)據(jù),加載到訪問效率更高的緩存中,這樣,當(dāng)業(yè)務(wù)層系統(tǒng)的需要使用這部分基礎(chǔ)數(shù)據(jù)時,只需從緩存中讀取即可而不需直接訪問數(shù)據(jù)庫,從而提高數(shù)據(jù)的訪問效率,減少磁盤讀取等開銷。
緩存基礎(chǔ)數(shù)據(jù)方法的早期方案是,在初始化業(yè)務(wù)層系統(tǒng)的緩存時直接從數(shù)據(jù)庫服務(wù)器中加載數(shù)據(jù),但隨著業(yè)務(wù)層系統(tǒng)的增加,多個業(yè)務(wù)系統(tǒng)常常會因同時加載或更新數(shù)據(jù)緩存而訪問數(shù)據(jù)庫服務(wù)器,造成數(shù)據(jù)庫服務(wù)器的瞬間壓力過大。為了盡量減少數(shù)據(jù)庫服務(wù)器的這種瞬間壓力,各業(yè)務(wù)層系統(tǒng)只能選擇在業(yè)務(wù)流量較低時加載數(shù)據(jù)緩存,給緩存基礎(chǔ)數(shù)據(jù)的應(yīng)用造成了很大的局限性。
技術(shù)實現(xiàn)要素:
本申請?zhí)峁┝私M裝基礎(chǔ)數(shù)據(jù)緩存的方法及裝置,解決了數(shù)據(jù)庫服務(wù)器的瞬間壓力過大的問題,以及,防止業(yè)務(wù)服務(wù)器因基礎(chǔ)數(shù)據(jù)間存在依賴關(guān)系,導(dǎo)致的組裝任務(wù)掛起,或強(qiáng)制訪問數(shù)據(jù)庫服務(wù)器等問題,具有更強(qiáng)的適應(yīng)性和實用性。
本申請?zhí)峁┝巳缦路桨福?/p>
一種的組裝基礎(chǔ)數(shù)據(jù)緩存的方法,業(yè)務(wù)服務(wù)器預(yù)先從推送中心服務(wù)器訂閱多份基礎(chǔ)數(shù)據(jù),所述方法包括:
業(yè)務(wù)服務(wù)器接收到推送中心服務(wù)器推送的基礎(chǔ)數(shù)據(jù)以及調(diào)用預(yù)置回調(diào)函數(shù)的觸發(fā)請求時,調(diào)用所述回調(diào)函數(shù),以便通過所述回調(diào)函數(shù)執(zhí)行以下步驟:
將接收到的基礎(chǔ)數(shù)據(jù)暫存在本地存儲中;
判斷是否已經(jīng)將訂閱的各份基礎(chǔ)數(shù)據(jù)全部接收到;
如果是,則根據(jù)所述本地存儲中暫存的各份基礎(chǔ)數(shù)據(jù),按照預(yù)置的組裝策略進(jìn)行緩存組裝。
一種的組裝基礎(chǔ)數(shù)據(jù)緩存的裝置,業(yè)務(wù)服務(wù)器預(yù)先從推送中心服務(wù)器訂閱多份基礎(chǔ)數(shù)據(jù),所述裝置包括:
函數(shù)調(diào)用單元,用于在接收到推送中心服務(wù)器推送的基礎(chǔ)數(shù)據(jù)以及調(diào)用預(yù)置回調(diào)函數(shù)的觸發(fā)請求時,調(diào)用所述回調(diào)函數(shù),所述回調(diào)函數(shù)包括以下模塊:
數(shù)據(jù)存儲模塊,用于將接收到的基礎(chǔ)數(shù)據(jù)暫存在本地存儲中;
完整性判斷模塊,用于判斷是否已經(jīng)將訂閱的各份基礎(chǔ)數(shù)據(jù)全部接收到;
緩存組裝模塊,用于如果所述完整性判斷模塊的判斷結(jié)果為是,則根據(jù)所述本地存儲中暫存的各份基礎(chǔ)數(shù)據(jù),按照預(yù)置的組裝策略進(jìn)行緩存組裝。
根據(jù)本申請?zhí)峁┑木唧w實施例,本申請公開了以下技術(shù)效果:
通過本申請,可以在業(yè)務(wù)服務(wù)器接收到推送中心服務(wù)器推送的基礎(chǔ)數(shù)據(jù),以及調(diào)用預(yù)置回調(diào)函數(shù)的觸發(fā)請求時,調(diào)用預(yù)置的回調(diào)函數(shù),進(jìn)而通過回調(diào)函 數(shù)將接收到的基礎(chǔ)數(shù)據(jù)暫存在本地存儲中,在判斷已經(jīng)將訂閱的各份基礎(chǔ)數(shù)據(jù)全部接收到的條件下,則根據(jù)本地存儲中暫存的各份基礎(chǔ)數(shù)據(jù),按照預(yù)置的組裝策略進(jìn)行緩存組裝。解決了多個業(yè)務(wù)服務(wù)器因同時加載或更新數(shù)據(jù)緩存而訪問數(shù)據(jù)庫服務(wù)器,造成數(shù)據(jù)庫服務(wù)器的瞬間壓力過大的問題,同時,也防止了業(yè)務(wù)服務(wù)器因基礎(chǔ)數(shù)據(jù)間存在依賴關(guān)系,而被依賴的基礎(chǔ)數(shù)據(jù)未能及時接收所導(dǎo)致的組裝任務(wù)掛起,或強(qiáng)制訪問數(shù)據(jù)庫服務(wù)器等問題,使得本組裝基礎(chǔ)數(shù)據(jù)緩存的方法具有更強(qiáng)的適應(yīng)性和實用性。
當(dāng)然,實施本申請的任一產(chǎn)品并不一定需要同時達(dá)到以上所述的所有優(yōu)點。
附圖說明
為了更清楚地說明本申請實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本申請實施例的基礎(chǔ)數(shù)據(jù)的傳輸示意圖;
圖2是本申請實施例提供的組裝基礎(chǔ)數(shù)據(jù)緩存的方法的流程圖;
圖3是本申請實施例提供的另一組裝基礎(chǔ)數(shù)據(jù)緩存的方法的流程圖;
圖4是本申請實施例提供的又一組裝基礎(chǔ)數(shù)據(jù)緩存的方法的流程圖;
圖5是本申請實施例提供的組裝基礎(chǔ)數(shù)據(jù)緩存的裝置的示意圖。
具體實施方式
下面將結(jié)合本申請實施例中的附圖,對本申請實施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實施例僅僅是本申請一部分實施例,而不是全部的實施例?;诒旧暾堉械膶嵤├绢I(lǐng)域普通技術(shù)人員所獲得的所有其他實施例,都屬于本申請保護(hù)的范圍。
互聯(lián)網(wǎng)業(yè)務(wù)規(guī)模的不斷增長,需要處理的數(shù)據(jù)規(guī)模也變得非常龐大,在一些數(shù)據(jù)規(guī)模較大的站點中,常常使用專用的服務(wù)器或者服務(wù)器集群來實現(xiàn)數(shù)據(jù)庫業(yè)務(wù)。對于基礎(chǔ)數(shù)據(jù)的緩存處理,現(xiàn)有技術(shù)中是在業(yè)務(wù)服務(wù)器產(chǎn)生業(yè)務(wù)初始化或者刷新緩存等需求時,由業(yè)務(wù)服務(wù)器從數(shù)據(jù)庫服務(wù)器中直接獲取數(shù)據(jù)。在業(yè)務(wù)服務(wù)器規(guī)?;蛩杌A(chǔ)數(shù)據(jù)規(guī)模較大等情況下,這種實現(xiàn)方式就會暴露出 數(shù)據(jù)庫服務(wù)器瞬時訪問壓力過大,基礎(chǔ)數(shù)據(jù)的傳輸、加載延遲等缺陷,最終使緩存基礎(chǔ)數(shù)據(jù)成為系統(tǒng)的瓶頸。為適應(yīng)大規(guī)模緩存數(shù)據(jù)處理的效率需求,本申請實施例提出了一種組裝基礎(chǔ)數(shù)據(jù)緩存的方法,該方法依托于在數(shù)據(jù)庫服務(wù)器與業(yè)務(wù)服務(wù)器之間架設(shè)了一層推送中心服務(wù)器。如圖1所示,為本申請實施例的基礎(chǔ)數(shù)據(jù)的傳輸示意圖。其中數(shù)據(jù)庫服務(wù)器110,推送中心服務(wù)器120,以及業(yè)務(wù)服務(wù)器130分別可以由單一服務(wù)器實現(xiàn),也可以分別基于服務(wù)器集群實現(xiàn);服務(wù)器或服務(wù)器集群可以基于虛擬化技術(shù)實現(xiàn)。
在產(chǎn)生基礎(chǔ)數(shù)據(jù)緩存需求時,例如,當(dāng)按照預(yù)置的周期對業(yè)務(wù)服務(wù)器進(jìn)行緩存數(shù)據(jù)的更新時,可以首先由推送中心服務(wù)器從數(shù)據(jù)庫服務(wù)器中獲取所需的緩存數(shù)據(jù),各業(yè)務(wù)服務(wù)器所需的緩存數(shù)據(jù)可包括多個基礎(chǔ)數(shù)據(jù)文件,每個基礎(chǔ)數(shù)據(jù)文件對應(yīng)一份基礎(chǔ)數(shù)據(jù)。推送中心服務(wù)器只需一次性訪問數(shù)據(jù)庫服務(wù)器,即可將所有業(yè)務(wù)服務(wù)器所需的基礎(chǔ)數(shù)據(jù)下載下來,進(jìn)而再根據(jù)各業(yè)務(wù)服務(wù)器的需要,向各業(yè)務(wù)服務(wù)器推送其所需的數(shù)據(jù)。這樣,通過專用于文件推送的推送中心服務(wù)器的“代理”,可以將基礎(chǔ)數(shù)據(jù)的推送與其他數(shù)據(jù)庫管理任務(wù)剝離開來,這樣不但可有效的減輕數(shù)據(jù)庫服務(wù)器的數(shù)據(jù)管理壓力,而且還提高了基礎(chǔ)數(shù)據(jù)推送的效率。
在一種實現(xiàn)方式下,推送中心服務(wù)器可以實時的根據(jù)各業(yè)務(wù)服務(wù)器的請求,向各業(yè)務(wù)服務(wù)器推送所需的基礎(chǔ)數(shù)據(jù)。但發(fā)明人在實施本方法的過程中發(fā)現(xiàn),通常情況下,業(yè)務(wù)服務(wù)器組裝緩存所需的基礎(chǔ)數(shù)據(jù)內(nèi)容類型通常是固定的,另外,業(yè)務(wù)服務(wù)器組裝緩存的時機(jī)也常常是固定的,如業(yè)務(wù)系統(tǒng)啟動時,或為了便于管理的目的而定時刷新緩存內(nèi)容時,因而,業(yè)務(wù)服務(wù)器組裝緩存的任務(wù)可以定時觸發(fā)。這樣,在另一種實現(xiàn)方式下,推送中心服務(wù)器向各業(yè)務(wù)服務(wù)器推送其所需的基礎(chǔ)數(shù)據(jù)時,推送中心服務(wù)器可以根據(jù)與業(yè)務(wù)中心服務(wù)器的“約定”進(jìn)行固定時機(jī)、固定內(nèi)容類型的基礎(chǔ)數(shù)據(jù)推送,如業(yè)務(wù)服務(wù)器可以預(yù)先從推送中心服務(wù)器訂閱多份基礎(chǔ)數(shù)據(jù)。而對應(yīng)的,業(yè)務(wù)中心服務(wù)器接收所需的基礎(chǔ)數(shù)據(jù)文件可以是“被動式”的。這種推送中心服務(wù)器主動推送,業(yè)務(wù)服務(wù)器被動接收的實現(xiàn)方式,一方面可以滿足實際的應(yīng)用需求,另外可以使推送中心服務(wù)器不必處理業(yè)務(wù)服務(wù)器的數(shù)據(jù)請求,避免因大量請求并發(fā)而產(chǎn)生阻塞的風(fēng)險,同時,推送中心服務(wù)器可以自主地、更加靈活的安排推送任務(wù)。除了解決了現(xiàn) 有緩存基礎(chǔ)數(shù)據(jù)技術(shù)中,大量業(yè)務(wù)服務(wù)器訪問直接數(shù)據(jù)庫造成的瞬時壓力主要問題,提高了基礎(chǔ)數(shù)據(jù)緩存技術(shù)的靈活性之外,本申請實施例提供的方法還解決了基礎(chǔ)數(shù)據(jù)緩存技術(shù)實現(xiàn)的一些其他問題,詳情請參見實施例的具體闡述。
下面以推送中心服務(wù)器主動推送,業(yè)務(wù)服務(wù)器被動接收的實現(xiàn)方式為例,對本申請實施例提供的組裝基礎(chǔ)數(shù)據(jù)緩存的方法的具體的實現(xiàn)方式進(jìn)行詳細(xì)介紹。請參看圖2,其為本申請實施例提供的組裝基礎(chǔ)數(shù)據(jù)緩存的方法的流程圖,業(yè)務(wù)服務(wù)器接收到推送中心服務(wù)器推送的基礎(chǔ)數(shù)據(jù)以及調(diào)用預(yù)置回調(diào)函數(shù)的觸發(fā)請求時,調(diào)用該回調(diào)函數(shù),以便通過該回調(diào)函數(shù)執(zhí)行以下步驟:
S210:將接收到的基礎(chǔ)數(shù)據(jù)暫存在本地存儲中;
在本申請實施例提供的實現(xiàn)方式下,業(yè)務(wù)服務(wù)器預(yù)先從推送中心服務(wù)器訂閱多份基礎(chǔ)數(shù)據(jù),不同業(yè)務(wù)服務(wù)器可以根據(jù)其應(yīng)用需要,在推送中心服務(wù)器中訂閱相同或不同的基礎(chǔ)數(shù)據(jù)。推送中心服務(wù)器在推送業(yè)務(wù)發(fā)起后,根據(jù)業(yè)務(wù)服務(wù)器的訂閱向業(yè)務(wù)服務(wù)器推送基礎(chǔ)數(shù)據(jù)。在業(yè)務(wù)服務(wù)器中預(yù)置有回調(diào)函數(shù),該預(yù)置的回調(diào)函數(shù)可通過推送中心服務(wù)器觸發(fā),如可以伴隨每份基礎(chǔ)數(shù)據(jù)的推送觸發(fā),并在業(yè)務(wù)服務(wù)器端執(zhí)行。推送中心服務(wù)器在向業(yè)務(wù)服務(wù)器推送基礎(chǔ)數(shù)據(jù)時,可以同時發(fā)送調(diào)用業(yè)務(wù)服務(wù)器執(zhí)行預(yù)置回調(diào)函數(shù)的請求,業(yè)務(wù)服務(wù)器接收到推送中心服務(wù)器推送到基礎(chǔ)數(shù)據(jù),以及調(diào)用預(yù)置回調(diào)函數(shù)的請求時,可以調(diào)用本地的預(yù)置回調(diào)函數(shù),通過該回調(diào)函數(shù),首先完成將接收到的基礎(chǔ)數(shù)據(jù)暫存在本地存儲中。如前所述,基礎(chǔ)數(shù)據(jù)可以以文件作為載體,每個基礎(chǔ)數(shù)據(jù)文件對應(yīng)一份基礎(chǔ)數(shù)據(jù)。業(yè)務(wù)服務(wù)器可以通過預(yù)置的回調(diào)函數(shù),將接收到的各個基礎(chǔ)數(shù)據(jù)文件存儲暫存在本地緩存中。具體進(jìn)行暫存時,可以保存在業(yè)務(wù)服務(wù)器的硬盤中,如保存在硬盤的臨時數(shù)據(jù)存放區(qū),或者也可以在內(nèi)存中申請空間,將接收到的基礎(chǔ)數(shù)據(jù)保存在所申請的內(nèi)存空間中,便于完成快速的寫入和后續(xù)的讀取。
S220:判斷是否已經(jīng)將訂閱的各份基礎(chǔ)數(shù)據(jù)全部接收到;
在通過預(yù)置的回調(diào)函數(shù)將接收到的基礎(chǔ)數(shù)據(jù)暫存在本地存儲中后,接下來可以判斷是否已經(jīng)將訂閱的各份基礎(chǔ)數(shù)據(jù)全部接收到,以便于業(yè)務(wù)服務(wù)器根據(jù)多接收到的基礎(chǔ)數(shù)據(jù)進(jìn)行緩存組裝。如前所述,本方法通過推送中心服務(wù)器代 理基礎(chǔ)數(shù)據(jù)分發(fā)的方式,解決了數(shù)據(jù)庫服務(wù)器訪問壓力過大的問題。在進(jìn)行基礎(chǔ)數(shù)據(jù)緩存的組裝的過程中,一種實現(xiàn)方式是,根據(jù)所接收到的緩存數(shù)據(jù)的順序依次組裝,即接收到一份緩存數(shù)據(jù),就進(jìn)行一次基礎(chǔ)數(shù)據(jù)緩存的組裝,在所接收到的多份緩存數(shù)據(jù)之間沒有依賴關(guān)系的情況下,這種實現(xiàn)方式具有較高的組裝效率,但在所接收到的多份緩存數(shù)據(jù)之間存在依賴關(guān)系的情況下帶來了新的問題,以下進(jìn)行具體的說明。
在實際應(yīng)用中,在所接收到的多份緩存數(shù)據(jù)之間沒有依賴關(guān)系的情況下,可以根據(jù)所接收到的緩存數(shù)據(jù)的順序依次組裝,例如,當(dāng)基礎(chǔ)數(shù)據(jù)a接收完成時,可以將其組裝為緩存A并加載,當(dāng)另一份基礎(chǔ)數(shù)據(jù)b接收完成時,可以將其組裝為緩存B并加載。但在所接收到的多份緩存數(shù)據(jù)之間存在依賴關(guān)系的情況下,例如,當(dāng)基礎(chǔ)數(shù)據(jù)b接收完成要進(jìn)行緩存B的組裝時,同時又需要依賴于基礎(chǔ)數(shù)據(jù)a,而此時基礎(chǔ)數(shù)據(jù)a因為種種原因還未完成接收,例如,因為基礎(chǔ)數(shù)據(jù)a的數(shù)據(jù)量較大造成傳輸時間拉長,或推送中心服務(wù)器集群中某服務(wù)器向當(dāng)前業(yè)務(wù)服務(wù)器推送基礎(chǔ)數(shù)據(jù)a的任務(wù)還未開始等等,此時業(yè)務(wù)服務(wù)器只能將組緩存B的組裝任務(wù)掛起,或產(chǎn)生向數(shù)據(jù)庫服務(wù)器強(qiáng)制訪問數(shù)據(jù)的請求。而一般情況下,業(yè)務(wù)服務(wù)器作為對外業(yè)務(wù)的提供者,因為緩存組裝掛起造成業(yè)務(wù)服務(wù)的暫停的情況不可接受的,其掛起時間也難以控制,因而在緩存組裝掛起后,業(yè)務(wù)服務(wù)器通常會選擇強(qiáng)制訪問數(shù)據(jù)庫服務(wù)器,進(jìn)而造成數(shù)據(jù)庫服務(wù)器的壓力增加。為了避免這種情況的出現(xiàn),本申請實施例提供的方法中,在根據(jù)接收到的基礎(chǔ)數(shù)據(jù)進(jìn)行緩存的組裝之前,可以判斷是否已經(jīng)將訂閱的各份基礎(chǔ)數(shù)據(jù)全部接收到,進(jìn)而可以在所訂閱到各份基礎(chǔ)數(shù)據(jù)全部接收到的情況下,才進(jìn)行緩存的組裝。通過這種方式,避免了因基礎(chǔ)數(shù)據(jù)間存在依賴關(guān)系,而被依賴基礎(chǔ)數(shù)據(jù)未能及時接收導(dǎo)致的強(qiáng)制訪問數(shù)據(jù)庫服務(wù)器問題。
如圖3所示,其為本申請實施例提供的另一種實現(xiàn)方式下的組裝基礎(chǔ)數(shù)據(jù)緩存的方法的流程圖,如圖所示,在判斷是否已經(jīng)將訂閱的各份基礎(chǔ)數(shù)據(jù)全部接收到時,該方法可以包括步驟S310:在每接收到一份基礎(chǔ)數(shù)據(jù)時,對預(yù)置的計數(shù)器進(jìn)行加一操作。該計數(shù)操作可以由前述的回調(diào)函數(shù)觸發(fā)或執(zhí)行。以及步驟2201:判斷計數(shù)器的值是否與訂閱的基礎(chǔ)數(shù)據(jù)份數(shù)相等,如果是,則確定已經(jīng)將訂閱的各份基礎(chǔ)數(shù)據(jù)全部收到。在進(jìn)行基礎(chǔ)數(shù)據(jù)的接收時,可能偶爾 會由于一些原因接收到重復(fù)的數(shù)據(jù),例如因重復(fù)訂閱,重復(fù)發(fā)送,網(wǎng)絡(luò)錯誤導(dǎo)致的重新傳輸?shù)仍?,造成業(yè)務(wù)服務(wù)器接收基礎(chǔ)數(shù)據(jù)的重復(fù)。為了避免這種基礎(chǔ)數(shù)據(jù)的重復(fù),在對計數(shù)器進(jìn)行累加之前,可以對接收到的基礎(chǔ)數(shù)據(jù)進(jìn)行重復(fù)接收的判斷,具體的,可以利用文件名,文件大小,文件特征值等標(biāo)識進(jìn)行判斷。
如圖4所示,其為本申請實施例提供的又一種實現(xiàn)方式下的組裝基礎(chǔ)數(shù)據(jù)緩存的方法的流程圖,其中可包括步驟S410:獲取并記錄所接收到的基礎(chǔ)數(shù)據(jù)的標(biāo)識;如可以獲取基礎(chǔ)數(shù)據(jù)文件的文件名,文件大小或文件特征值作為所接收到的基礎(chǔ)數(shù)據(jù)的標(biāo)識,例如根據(jù)接收到的基礎(chǔ)數(shù)據(jù)文件計算得到其哈希值作為標(biāo)識。在實現(xiàn)每接收到一份所述基礎(chǔ)數(shù)據(jù),對預(yù)置的計數(shù)器進(jìn)行加一操作時,可以包括步驟S3101:在每接收到一份基礎(chǔ)數(shù)據(jù)時,根據(jù)該基礎(chǔ)數(shù)據(jù)的標(biāo)識判斷是否已接收過該份基礎(chǔ)數(shù)據(jù),如果是,則將該份基礎(chǔ)數(shù)據(jù)丟棄,否則觸發(fā)計數(shù)器加一操作。此外,在緩存組裝完成后,可以將該預(yù)置的計數(shù)器清零,以便于下次緩存組裝任務(wù)時,重新利用該計數(shù)器進(jìn)行緩存數(shù)據(jù)的計數(shù)。
S230:如果是,則根據(jù)所述本地存儲中暫存的各份基礎(chǔ)數(shù)據(jù),按照預(yù)置的組裝策略進(jìn)行緩存組裝。
在全部接收到所訂閱到各份基礎(chǔ)數(shù)據(jù)后,可以按照預(yù)置的組裝策略,根據(jù)本地存儲中暫存的各份基礎(chǔ)數(shù)據(jù)進(jìn)行緩存組裝。其中,預(yù)置的組裝策略可以根據(jù)實際的應(yīng)用進(jìn)行指定。例如可以一次性將所有接收完整的基礎(chǔ)數(shù)據(jù)組裝為緩存,也可以根據(jù)業(yè)務(wù)系統(tǒng)的實際需要,進(jìn)行分批次的組裝。
在實際應(yīng)用中,推送中心服務(wù)器在向業(yè)務(wù)服務(wù)器推送一份基礎(chǔ)數(shù)據(jù)之后,就會業(yè)務(wù)服務(wù)器中預(yù)置回調(diào)函數(shù)的一次執(zhí)行,因而在業(yè)務(wù)服務(wù)器中,常常會啟動多個線程,沒個線程中都會調(diào)用預(yù)置的回調(diào)函數(shù)。在推送并發(fā)的情況下,多線程會操作一下共享數(shù)據(jù),因而,在這種并發(fā)的情況下,需要保護(hù)共享數(shù)據(jù)的一致性。在本申請實施例中,需要保護(hù)其一致性的共享數(shù)據(jù)可以至少包括兩種,其一是前述的預(yù)置計數(shù)器的值,另外一種是保存基礎(chǔ)數(shù)據(jù)標(biāo)識的數(shù)據(jù)結(jié)構(gòu)(如保存基礎(chǔ)數(shù)據(jù)標(biāo)識的鏈表),在多線程訪問的情況下,這兩種共享數(shù)據(jù)都可能會被多線程并發(fā)訪問。為了保持共享數(shù)據(jù)的一致性,可以在回調(diào)函數(shù)中使用同 步方法,例如當(dāng)回調(diào)函數(shù)使用java語言編寫時,回調(diào)函數(shù)中訪問計數(shù)器的值的方法,以及訪問保存基礎(chǔ)數(shù)據(jù)標(biāo)識的數(shù)據(jù)結(jié)構(gòu)的方法,可以是加入synchronized關(guān)鍵字的同步方法,當(dāng)多個線程并發(fā)訪問共享數(shù)據(jù)時,通過同步方法訪問共享數(shù)據(jù),可以保證在同一時刻只有一個線程調(diào)用的同步方法能夠訪問共享數(shù)據(jù),以便保持所述共享數(shù)據(jù)在多線程訪問下的一致性。
此外,在業(yè)務(wù)服務(wù)中,可以通過預(yù)置的回調(diào)函數(shù)啟動一計時線程,對基礎(chǔ)數(shù)據(jù)的接收以及緩存的組裝過程進(jìn)行計時,并在接收及組裝過程超過預(yù)設(shè)時長后返回超時信息,便于管理人員根據(jù)超時信息對及時排查超時原因。在按照預(yù)置的組裝策略進(jìn)行緩存組裝完成后,可以將本地存儲中暫存的基礎(chǔ)數(shù)據(jù)刪除,以釋放其所占用的存儲空間,以便于其他應(yīng)用繼續(xù)使用這部分存儲空間。根據(jù)基礎(chǔ)數(shù)據(jù)完成緩存的組裝后,可以加載所組裝的緩存,以供業(yè)務(wù)系統(tǒng)的其他應(yīng)用進(jìn)行讀寫訪問。
以上對本申請實施例提供的組裝基礎(chǔ)數(shù)據(jù)緩存的方法進(jìn)行了詳細(xì)的介紹,通過該方法,可以在業(yè)務(wù)服務(wù)器接收到推送中心服務(wù)器推送的基礎(chǔ)數(shù)據(jù),以及調(diào)用預(yù)置回調(diào)函數(shù)的觸發(fā)請求時,調(diào)用預(yù)置的回調(diào)函數(shù),進(jìn)而通過回調(diào)函數(shù)將接收到的基礎(chǔ)數(shù)據(jù)暫存在本地存儲中,在判斷已經(jīng)將訂閱的各份基礎(chǔ)數(shù)據(jù)全部接收到的條件下,則根據(jù)本地存儲中暫存的各份基礎(chǔ)數(shù)據(jù),按照預(yù)置的組裝策略進(jìn)行緩存組裝。該方法解決了多個業(yè)務(wù)服務(wù)器因同時加載或更新數(shù)據(jù)緩存而訪問數(shù)據(jù)庫服務(wù)器,造成數(shù)據(jù)庫服務(wù)器的瞬間壓力過大的問題,同時,推送中心服務(wù)器可以不必根據(jù)基礎(chǔ)數(shù)據(jù)間的依賴關(guān)系設(shè)計更復(fù)雜的推送方式,避免了業(yè)務(wù)服務(wù)器因基礎(chǔ)數(shù)據(jù)間存在依賴關(guān)系,而被依賴的基礎(chǔ)數(shù)據(jù)未能及時接收所導(dǎo)致的組裝任務(wù)掛起,或強(qiáng)制訪問數(shù)據(jù)庫服務(wù)器等問題,使得本組裝基礎(chǔ)數(shù)據(jù)緩存的方法具有更強(qiáng)的適應(yīng)性和實用性。
與本申請實施例提供的組裝基礎(chǔ)數(shù)據(jù)緩存的方法相對應(yīng),還提供了組裝基礎(chǔ)數(shù)據(jù)緩存的裝置,如圖5所示,其為本申請實施例提供的組裝基礎(chǔ)數(shù)據(jù)緩存的裝置的示意圖,業(yè)務(wù)服務(wù)器預(yù)先從推送中心服務(wù)器訂閱多份基礎(chǔ)數(shù)據(jù),所述裝置包括:
函數(shù)調(diào)用單元510,用于接收到推送中心服務(wù)器推送的基礎(chǔ)數(shù)據(jù)以及調(diào)用 預(yù)置回調(diào)函數(shù)的觸發(fā)請求時,調(diào)用回調(diào)函數(shù)。該回調(diào)函數(shù)包括:
數(shù)據(jù)存儲模塊520,用于將接收到的基礎(chǔ)數(shù)據(jù)暫存在本地存儲中;
完整性判斷模塊530,用于判斷是否已經(jīng)將訂閱的各份基礎(chǔ)數(shù)據(jù)全部接收到;
緩存組裝模塊540,用于如果是,則根據(jù)本地存儲中暫存的各份基礎(chǔ)數(shù)據(jù),按照預(yù)置的組裝策略進(jìn)行緩存組裝。
此外,該回調(diào)函數(shù)還可以包括:
數(shù)據(jù)計數(shù)模塊,在每接收到一份基礎(chǔ)數(shù)據(jù)時,對預(yù)置的計數(shù)器進(jìn)行加一操作;
在這種實現(xiàn)方式下,完整性判斷模塊530可以包括:
完整性判斷子模塊,用于判斷計數(shù)器的值是否與訂閱的基礎(chǔ)數(shù)據(jù)份數(shù)相等,如果是,則確定已經(jīng)將訂閱的各份基礎(chǔ)數(shù)據(jù)全部收到。
在另一種實現(xiàn)方式下,該回調(diào)函數(shù)還可以包括:
標(biāo)識獲取模塊,用于獲取并記錄所接收到的基礎(chǔ)數(shù)據(jù)的標(biāo)識;
此時,數(shù)據(jù)計數(shù)模塊可以包括:
數(shù)據(jù)計數(shù)子模塊,用于在每接收到一份基礎(chǔ)數(shù)據(jù)時,根據(jù)該基礎(chǔ)數(shù)據(jù)的標(biāo)識判斷是否已接收過該份基礎(chǔ)數(shù)據(jù),如果是,則將該份基礎(chǔ)數(shù)據(jù)丟棄,否則,觸發(fā)計數(shù)器加一操作。
另外,該回調(diào)函數(shù)還可以包括:
計數(shù)器清零模塊,用于在緩存組裝完成后,將預(yù)置的計數(shù)器清零。
為了便于進(jìn)行超時管理,該組裝基礎(chǔ)數(shù)據(jù)緩存的裝置還可以包括:
超時處理單元,用于啟動一計時線程,對基礎(chǔ)數(shù)據(jù)的接收以及緩存的組裝過程進(jìn)行計時,并在接收及組裝過程超過預(yù)設(shè)時長后返回超時信息。
為了保持多線程下共享數(shù)據(jù)的一致性,在回調(diào)函數(shù)中可以使用同步方法,裝置還可以包括:
數(shù)據(jù)一致性保持單元,當(dāng)調(diào)用多個線程并發(fā)訪問共享數(shù)據(jù)時,通過同步方法訪問共享數(shù)據(jù),以便保持共享數(shù)據(jù)在多線程訪問下的一致性。
在緩存組裝完成后,可以對接收到基礎(chǔ)數(shù)據(jù)進(jìn)行清理,該組裝基礎(chǔ)數(shù)據(jù)緩存的裝置還可以包括:
基礎(chǔ)數(shù)據(jù)清理單元,用于在按照預(yù)置的組裝策略進(jìn)行緩存組裝完成后,將本地存儲中暫存的基礎(chǔ)數(shù)據(jù)刪除。
以上對本申請實施例提供的組裝基礎(chǔ)數(shù)據(jù)緩存的裝置進(jìn)行了詳細(xì)的介紹,通過該裝置,可以在業(yè)務(wù)服務(wù)器接收到推送中心服務(wù)器推送的基礎(chǔ)數(shù)據(jù),以及調(diào)用預(yù)置回調(diào)函數(shù)的觸發(fā)請求時,調(diào)用預(yù)置的回調(diào)函數(shù),進(jìn)而通過回調(diào)函數(shù)將接收到的基礎(chǔ)數(shù)據(jù)暫存在本地存儲中,在判斷已經(jīng)將訂閱的各份基礎(chǔ)數(shù)據(jù)全部接收到的條件下,則根據(jù)本地存儲中暫存的各份基礎(chǔ)數(shù)據(jù),按照預(yù)置的組裝策略進(jìn)行緩存組裝。解決了多個業(yè)務(wù)服務(wù)器因同時加載或更新數(shù)據(jù)緩存而訪問數(shù)據(jù)庫服務(wù)器,造成數(shù)據(jù)庫服務(wù)器的瞬間壓力過大的問題,同時,也防止了業(yè)務(wù)服務(wù)器因基礎(chǔ)數(shù)據(jù)間存在依賴關(guān)系,而被依賴的基礎(chǔ)數(shù)據(jù)未能及時接收所導(dǎo)致的組裝任務(wù)掛起,或強(qiáng)制訪問數(shù)據(jù)庫服務(wù)器等問題,使得本組裝基礎(chǔ)數(shù)據(jù)緩存的裝置具有更強(qiáng)的適應(yīng)性和實用性。
通過以上的實施方式的描述可知,本領(lǐng)域的技術(shù)人員可以清楚地了解到本申請可借助軟件加必需的通用硬件平臺的方式來實現(xiàn)?;谶@樣的理解,本申請的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機(jī)軟件產(chǎn)品可以存儲在存儲介質(zhì)中,如ROM/RAM、磁碟、光盤等,包括若干指令用以使得一臺計算機(jī)設(shè)備(可以是個人計算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本申請各個實施例或者實施例的某些部分所述的方法。
本說明書中的各個實施例均采用遞進(jìn)的方式描述,各個實施例之間相同相似的部分互相參見即可,每個實施例重點說明的都是與其他實施例的不同之處。尤其,對于系統(tǒng)或系統(tǒng)實施例而言,由于其基本相似于方法實施例,所以描述得比較簡單,相關(guān)之處參見方法實施例的部分說明即可。以上所描述的系統(tǒng)及系統(tǒng)實施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元, 即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部模塊來實現(xiàn)本實施例方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動的情況下,即可以理解并實施。
以上對本申請所提供的組裝基礎(chǔ)數(shù)據(jù)緩存的方法及裝置,進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個例對本申請的原理及實施方式進(jìn)行了闡述,以上實施例的說明只是用于幫助理解本申請的方法及其核心思想;同時,對于本領(lǐng)域的一般技術(shù)人員,依據(jù)本申請的思想,在具體實施方式及應(yīng)用范圍上均會有改變之處。綜上所述,本說明書內(nèi)容不應(yīng)理解為對本申請的限制。