一種業(yè)務數(shù)據(jù)的處理方法、裝置及服務器的制造方法
【專利說明】一種業(yè)務數(shù)據(jù)的處理方法、裝置及服務器
[0001]本申請要求申請日為2014年10月28日、申請?zhí)枮?01410586667.4、發(fā)明名稱為《一種業(yè)務數(shù)據(jù)的處理方法、裝置及服務器》的中國發(fā)明專利申請的優(yōu)先權。
技術領域
[0002]本發(fā)明涉及數(shù)據(jù)處理技術領域,尤其涉及一種業(yè)務數(shù)據(jù)的處理方法、裝置及服務器。
【背景技術】
[0003]在實時監(jiān)控的場景下,通常只會關注最新時間段的業(yè)務數(shù)據(jù),根據(jù)業(yè)務需求可以是最近30分鐘、最近I小時、甚至于最近幾個小時的數(shù)據(jù)。
[0004]對于業(yè)務數(shù)據(jù)的處理方式,一種方式是,服務器端把業(yè)務數(shù)據(jù)持久化到數(shù)據(jù)庫或者文件,客戶端頁面發(fā)出查詢條件,服務器端接收到查詢條件后再查詢數(shù)據(jù)庫(或文件),返回數(shù)據(jù)結果并傳遞給客戶端頁面。這種處理方法的問題在于,當查詢的結果數(shù)據(jù)很多,并發(fā)查詢很頻繁時,查詢壓力會很大,同時因不斷往數(shù)據(jù)庫(或文件)寫入數(shù)據(jù),會造成讀寫互鎖爭搶資源,讀寫都會產(chǎn)生比較大的延遲,降低了性能。
[0005]另一種做法是服務器端把業(yè)務數(shù)據(jù)寫入內(nèi)存,客戶端查詢發(fā)起的查詢請求時,都是從內(nèi)存中進行查詢?nèi)缓蠓祷夭樵兘Y果。這種做法的缺點在于,由于業(yè)務數(shù)據(jù)都實時地存儲于內(nèi)存之中,一旦服務異常終止之后,內(nèi)存中的數(shù)據(jù)會全部消失,導致無法正常查詢。
【發(fā)明內(nèi)容】
[0006]鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的一種業(yè)務數(shù)據(jù)的處理方法、裝置及服務器。
[0007]基于上述問題,本發(fā)明實施例提供的一種業(yè)務數(shù)據(jù)的處理方法,包括:
[0008]將業(yè)務數(shù)據(jù)寫入持久存儲的存儲實體中時,將所述業(yè)務數(shù)據(jù)寫入到緩存中;
[0009]當接收到業(yè)務數(shù)據(jù)查詢請求時,從所述緩存中讀取對應的業(yè)務數(shù)據(jù)并返回。
[0010]本發(fā)明實施例提供的一種業(yè)務數(shù)據(jù)的處理裝置,包括:
[0011]第一寫入模塊,用于將業(yè)務數(shù)據(jù)寫入持久存儲的存儲實體中;
[0012]第二寫入模塊,用于在將業(yè)務數(shù)據(jù)寫入持久存儲的存儲實體中時,將所述業(yè)務數(shù)據(jù)寫入到緩存中;
[0013]查詢模塊,用于當接收到業(yè)務數(shù)據(jù)查詢請求時,從所述緩存中讀取對應的業(yè)務數(shù)據(jù)并返回。
[0014]本發(fā)明實施例提供的服務器,包括本發(fā)明實施例提供的上述業(yè)務數(shù)據(jù)的處理裝置。
[0015]本發(fā)明實施例的有益效果包括:
[0016]本發(fā)明實施例提供的上述業(yè)務數(shù)據(jù)的處理方法,在將業(yè)務數(shù)據(jù)持久化即將業(yè)務數(shù)據(jù)寫入持久存儲的存儲實體中的同時,還需要將同樣的業(yè)務數(shù)據(jù)寫入到緩存中,這樣,在保證持久存儲的存儲實體中的業(yè)務數(shù)據(jù)與緩存中業(yè)務數(shù)據(jù)一致的前提下,當接收到業(yè)務數(shù)據(jù)查詢請求時,這樣無論并發(fā)量多大,可以直接到緩存中查詢對應的業(yè)務數(shù)據(jù),而不必去持久存儲的存儲實體中查找,既避免了頻繁查詢持久存儲的存儲實體導致的讀寫互鎖爭搶資源降低性能的問題,同時又將業(yè)務數(shù)據(jù)及時地持久化,避免了服務發(fā)生異常時的業(yè)務數(shù)據(jù)的丟失的冋題。
[0017]上述說明僅是本發(fā)明技術方案的概述,為了能夠更清楚了解本發(fā)明的技術手段,而可依照說明書的內(nèi)容予以實施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點能夠更明顯易懂,以下特舉本發(fā)明的【具體實施方式】。
【附圖說明】
[0018]通過閱讀下文優(yōu)選實施方式的詳細描述,各種其他的優(yōu)點和益處對于本領域普通技術人員將變得清楚明了。附圖僅用于示出優(yōu)選實施方式的目的,而并不認為是對本發(fā)明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:
[0019]圖1為本發(fā)明實施例提供的業(yè)務數(shù)據(jù)的處理方法的流程示意圖;
[0020]圖2為本發(fā)明實施例提供的步驟S12的具體流程示意圖;
[0021]圖3為本發(fā)明實施例提供的實例的流程示意圖;
[0022]圖4為本發(fā)明實施例提供的業(yè)務數(shù)據(jù)的處理裝置的結構示意圖。
【具體實施方式】
[0023]下面將參照附圖更詳細地描述本公開的示例性實施例。雖然附圖中顯示了本公開的示例性實施例,然而應當理解,可以以各種形式實現(xiàn)本公開而不應被這里闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達給本領域的技術人員。
[0024]下面結合說明書附圖,對本發(fā)明實施例提供的一種業(yè)務數(shù)據(jù)的處理方法、裝置及服務器的【具體實施方式】進行說明。
[0025]本發(fā)明實施例提供的一種業(yè)務數(shù)據(jù)的處理方法,如圖1所示,具體包括以下步驟:
[0026]S11、將業(yè)務數(shù)據(jù)寫入持久存儲的存儲實體中時,將所述業(yè)務數(shù)據(jù)寫入到緩存中;
[0027]S12、當接收到業(yè)務數(shù)據(jù)查詢請求時,從所述緩存中讀取對應的業(yè)務數(shù)據(jù)并返回。
[0028]在本發(fā)明實施例中,持久存儲的存儲實體可以是任何可實現(xiàn)持久存儲(相對于臨時存儲而言)功能的實體,不限定于軟件、硬件或者軟硬件結合的形式。在本發(fā)明實施例中,該持久存儲的存儲實體包括但不限于例如數(shù)據(jù)庫或文件等。
[0029]業(yè)務數(shù)據(jù)存儲在緩存中時,可以采用緩存隊列的方式,本發(fā)明實施例對于采用何種具體存儲方式并不限定。同樣,本發(fā)明實施例對于持久存儲的存儲實體中的采用何種具體的存儲方式也不并不限定。
[0030]本發(fā)明實施例提供的上述業(yè)務數(shù)據(jù)的處理方法,在將業(yè)務數(shù)據(jù)持久化即將業(yè)務數(shù)據(jù)寫入持久存儲的存儲實體中的同時,還需要將同樣的業(yè)務數(shù)據(jù)寫入到緩存中,這樣,在保證持久存儲的存儲實體中的業(yè)務數(shù)據(jù)與緩存中業(yè)務數(shù)據(jù)一致的前提下,當接收到業(yè)務數(shù)據(jù)查詢請求時,這樣無論并發(fā)量多大,可以直接到緩存中查詢對應的業(yè)務數(shù)據(jù),而不必去持久存儲的存儲實體中查找,既避免了頻繁查詢持久存儲的存儲實體導致的讀寫互鎖爭搶資源降低性能的問題,同時又將業(yè)務數(shù)據(jù)及時地持久化,避免了服務發(fā)生異常時的業(yè)務數(shù)據(jù)的丟失的冋題。
[0031]進一步地,上述步驟Sll中,將業(yè)務數(shù)據(jù)寫入持久存儲的存儲實體的步驟,具體可以通過下述過程實現(xiàn):
[0032]對用戶的業(yè)務請求進行監(jiān)聽;
[0033]當接收到用戶發(fā)出業(yè)務請求時,根據(jù)該請求的定義形式反序列化數(shù)據(jù)對象;
[0034]序列化是將數(shù)據(jù)對象狀態(tài)轉換為可保持或傳輸?shù)母袷降臄?shù)據(jù)(一般為數(shù)據(jù)流)過程。反序列化是與之相反的一個過程,即將網(wǎng)絡數(shù)據(jù)流轉換為數(shù)據(jù)對象。
[0035]為了包含用戶發(fā)出的業(yè)務請求的數(shù)據(jù)流轉換成數(shù)據(jù)對象,需要按照該請求定義的形式將其轉變成數(shù)據(jù)對象。具體的反序列化的實施方法,可以參照現(xiàn)有技術。
[0036]將數(shù)據(jù)對象放入到持久存儲的存儲實體中保存。
[0037]用戶的業(yè)務請求包括但不限于HTTP請求,還可以是采用其他協(xié)議類型的業(yè)務請求。
[0038]較佳地,在根據(jù)該請求的定義形式反序列化數(shù)據(jù)對象之前,還可以包括對請求內(nèi)容是否合法的檢查的步驟,如果合法,再進行反序列化數(shù)據(jù)對象的操作。
[0039]進一步地,上述業(yè)務數(shù)據(jù)的處理方法,還可以根據(jù)業(yè)務數(shù)據(jù)所屬業(yè)務的需求,預先確定緩存中業(yè)務數(shù)據(jù)中熱數(shù)據(jù)的生命周期,該熱數(shù)據(jù)是指緩存中滿足業(yè)務查詢請求的數(shù)據(jù)。
[0040]在實時監(jiān)控系統(tǒng)的場景下,通常只會關注最新時間段的業(yè)務數(shù)據(jù),根據(jù)業(yè)務需求可以是最近30分鐘、最近I小時、甚至于最近幾個小時的數(shù)據(jù),這部分被關注的數(shù)據(jù)或者說是可以滿足業(yè)務查詢需求的數(shù)據(jù),在本發(fā)明實施例中稱之為熱數(shù)據(jù),當業(yè)務數(shù)據(jù)失去時效性后,稱之為冷數(shù)據(jù)。隨著時間的推移,熱數(shù)據(jù)會變?yōu)槔鋽?shù)據(jù),最新接收到的數(shù)據(jù)變?yōu)闊釘?shù)據(jù)。
[0041]熱數(shù)據(jù)的生命周期可以根據(jù)業(yè)務數(shù)據(jù)所屬的業(yè)務需求來確定,具體如何確定可參考現(xiàn)有技術。
[0042]進一步地,本發(fā)明實施例提供的上述業(yè)務數(shù)據(jù)的處理方法,還可以根據(jù)熱數(shù)據(jù)的生命周期,在緩存中不斷刪除冷數(shù)據(jù),即那些產(chǎn)生時間超過該熱數(shù)據(jù)的生命周期的數(shù)據(jù)。
[0043]在本發(fā)明實施例中,業(yè)務數(shù)據(jù)包含業(yè)務的各種維度、指標和時間戳,這個時間戳標志著業(yè)務數(shù)據(jù)的產(chǎn)生時間,并且,緩存中的數(shù)據(jù)是按照時間先后順序放入的,前面的業(yè)務數(shù)據(jù)的時間戳小于后面數(shù)據(jù)的時間戳,所以,在本發(fā)明實施例中,可以依照業(yè)務數(shù)據(jù)的時間戳來確定哪些業(yè)務數(shù)據(jù)是熱數(shù)據(jù),哪些業(yè)務數(shù)據(jù)是冷數(shù)據(jù)并將冷數(shù)據(jù)刪除,具體來說,可以將緩存中保存的最后一行業(yè)務數(shù)據(jù)的時間戳減去熱數(shù)據(jù)的生命周期,得到冷數(shù)據(jù)的截止時間;
[0044]將緩存中時間戳在計算得到的冷數(shù)據(jù)的截止時間之前的所有業(yè)務數(shù)據(jù)刪除。
[0045]這樣,在緩存中不斷地刪除冷數(shù)據(jù),保留熱數(shù)據(jù),使得緩存中總保留著對查詢業(yè)務有用的最新的熱數(shù)據(jù),既滿足了查詢請求,又可避免對緩存的過度占用。
[0046]進一步地,如圖2所示,步驟S12具體可以包括:
[0047]S121、當接收到業(yè)務數(shù)據(jù)查詢請求時,確定當前服務是否發(fā)生異常;
[0048]S122、若S121的確定結果為是,則從持久存儲的存儲實體中讀取對應的業(yè)務數(shù)據(jù)并返回;
[0049]S123、若S121的確定結果為否,則從緩存中讀取對應的業(yè)務數(shù)據(jù)并返回。
[0050]為了更好地說明本發(fā)明實施例提供的上述業(yè)務數(shù)據(jù)的處理方法,下面以一個簡單的實例對其進行說明:
[0051]該實例的流程圖如圖3所示,該流程包括下述步驟:
[0052]S21、流程開始時,初始化數(shù)據(jù)集合以及該方法執(zhí)行期間需要使用的內(nèi)部變量;
[0053]S22、開啟HTTP請求的監(jiān)聽;
[0054]S23、判斷是否接收到HTTP請求;若是,執(zhí)行S24,否則,繼續(xù)執(zhí)行S22 ;
[0055]S24、接收到請求后判斷請求內(nèi)容是否合法;如果合法,則執(zhí)行S25 ;否則,繼續(xù)執(zhí)行 S22 ;
[0056]S25、根據(jù)請求的定義形式反序列化成數(shù)據(jù)對象。
[0057]S26、把數(shù)據(jù)對象放入到數(shù)據(jù)庫隊列中,數(shù)據(jù)庫隊列包括業(yè)務的各種維度和指標以及時間戳。
[0058]本步驟S25在具體實施時,可以利用一個單獨的線程定時把數(shù)據(jù)庫隊列更新到數(shù)據(jù)庫,該線程按照定時周期性調(diào)用(幾秒或者幾十秒等等),更新完畢后刪除已更新的數(shù)據(jù)庫隊列成員。
[0059]S27、把數(shù)據(jù)對象同時放入到緩存隊列中;
[0060]因為數(shù)據(jù)是按照先后順序放入隊列的,所以前面數(shù)據(jù)的時間戳一定小于后面數(shù)據(jù)的時間戳,緩存隊列包括業(yè)務的各種維度和指標以及時間戳。
[0061]在本步驟S27