本發(fā)明涉及Java Web領(lǐng)域,并且更具體地,涉及一種用于對并發(fā)生成的業(yè)務(wù)日志的處理方法和系統(tǒng)。
背景技術(shù):
在常規(guī)的傳統(tǒng)web項目中,常常需要各類日志輸出,用以幫助管理人員定位問題、監(jiān)控危險操作等。一般日志分為兩類:
(1)系統(tǒng)日志:指系統(tǒng)級和代碼級的調(diào)試信息,用于系統(tǒng)排查錯誤和程序調(diào)試;
(2)業(yè)務(wù)日志:指業(yè)務(wù)范疇和安全權(quán)限變更的相關(guān)操作記錄,用于監(jiān)控用戶關(guān)鍵操作等。
現(xiàn)在常用的做法一般是業(yè)務(wù)處理代碼中加入額外的日志代碼向用戶數(shù)據(jù)庫業(yè)務(wù)日志表中插入日志記錄,雖然這種方式在低并發(fā)場景下有編碼簡單易懂,實時性高等優(yōu)點,但是在高并發(fā)的環(huán)境下就顯得力不從心了。在日常使用場景中,業(yè)務(wù)日志會被高頻調(diào)用,用戶量達到一定量后,會頻繁的進行數(shù)據(jù)庫讀寫、請求數(shù)據(jù)源連接需求,對應(yīng)用程序和數(shù)據(jù)庫都造成很大負(fù)擔(dān),導(dǎo)致系統(tǒng)響應(yīng)遲緩甚至卡死,阻滯業(yè)務(wù)功能響應(yīng)、嚴(yán)重降低用戶體驗。
技術(shù)實現(xiàn)要素:
本發(fā)明目的在于提供一種用于對并發(fā)生成的業(yè)務(wù)日志的處理方法和系統(tǒng),解決高并發(fā)下插入、查詢業(yè)務(wù)日志時引發(fā)的系統(tǒng)壓力所導(dǎo)致的系統(tǒng)響應(yīng)遲緩等問題。
根據(jù)本發(fā)明的一方面,提供一種用于對并發(fā)生成的業(yè)務(wù)日志的處理方法,所述方法包括,
將并發(fā)生成的業(yè)務(wù)日志寫入緩沖日志區(qū);
判斷緩沖日志區(qū)的狀態(tài)是否達到預(yù)設(shè)條件;
當(dāng)緩沖日志區(qū)的狀態(tài)達到預(yù)設(shè)條件時,將緩沖日志區(qū)中的業(yè)務(wù)日志轉(zhuǎn)存到長期存儲介質(zhì)中;以及
根據(jù)喚醒日志區(qū)中已有的查詢條件,更新喚醒日志區(qū)的查詢結(jié)果集,以實現(xiàn)針對業(yè)務(wù)日志的查詢。
優(yōu)選地,所述預(yù)設(shè)條件為:緩沖日志區(qū)內(nèi)緩存的業(yè)務(wù)日志的數(shù)據(jù)大小是否達到臨界值。
優(yōu)選地,所述預(yù)設(shè)條件為:間隔時間是否滿足進行同步操作的預(yù)定時間段。
優(yōu)選地,當(dāng)間隔時間滿足進行同步操作的預(yù)定時間段時,若緩沖日志區(qū)內(nèi)沒有數(shù)據(jù),則中斷同步并重新開始計時。
優(yōu)選地,通過調(diào)用插入接口將業(yè)務(wù)日志寫入到緩沖日志區(qū)。
優(yōu)選地,所述喚醒日志區(qū)存儲的數(shù)據(jù)為查詢條件與查詢結(jié)果集的對應(yīng)關(guān)系,其中所述查詢條件不包括分頁條件和時間維度。
優(yōu)選地,所述針對業(yè)務(wù)日志的查詢?yōu)椋?/p>
獲得緩沖日志區(qū)中符合查詢條件的業(yè)務(wù)日志的集合R1;
查詢喚醒日志區(qū)中是否存在符合查詢條件的查詢結(jié)果集;
若喚醒日志區(qū)中存在符合查詢條件的查詢結(jié)果集,則根據(jù)查詢結(jié)果集的內(nèi)容獲得業(yè)務(wù)日志的集合R2;
若喚醒日志區(qū)中不存在符合查詢條件的查詢結(jié)果集,則在長期存儲介質(zhì)中進行查詢并獲取符合查詢條件的業(yè)務(wù)日志的集合R2,并更新喚醒日志區(qū)的查詢結(jié)果集;
計算R1和R2的并集R-,并對R-進行時間維度和分頁條件的過濾,得到所有符合查詢條件的業(yè)務(wù)日志的集合R。
優(yōu)選地,所述過濾方法為迭代遍歷法。
優(yōu)選地,若喚醒日志區(qū)中不存在查詢條件,則不更新喚醒日志區(qū)的查詢結(jié)果集。
根據(jù)本發(fā)明的另一方面,提供一種用于對并發(fā)生成的業(yè)務(wù)日志的處理系統(tǒng),包括:
日志寫入單元,用于將并發(fā)生成的業(yè)務(wù)日志寫入緩沖日志區(qū);
狀態(tài)判斷單元,用于判斷緩沖日志區(qū)的狀態(tài)是否達到預(yù)設(shè)條件;
轉(zhuǎn)存單元,用于將緩沖日志區(qū)中的業(yè)務(wù)日志轉(zhuǎn)存到用于長期存儲業(yè)務(wù)日志的長期存儲介質(zhì)中;
日志查詢單元,用于根據(jù)查詢條件獲取緩沖日志區(qū)、喚醒日志區(qū)以及長期存儲介質(zhì)中的業(yè)務(wù)日志并得到查詢結(jié)果;
其中所述喚醒日志區(qū)用于存儲查詢條件與查詢結(jié)果集的對應(yīng)關(guān)系。
優(yōu)選地,所述緩沖日志區(qū)以list形式進行緩存。
優(yōu)選地,所述喚醒日志區(qū)以map形式進行存儲。
優(yōu)選地,所述轉(zhuǎn)存單元在狀態(tài)判斷單元判斷緩沖日志區(qū)的狀態(tài)達到預(yù)設(shè)條件時進行轉(zhuǎn)存。
優(yōu)選地,所述預(yù)設(shè)條件為:緩沖日志區(qū)內(nèi)緩存的業(yè)務(wù)日志的數(shù)據(jù)大小是否達到臨界值。
優(yōu)選地,所述預(yù)設(shè)條件為:間隔時間是否滿足進行同步操作的預(yù)定時間段。
本發(fā)明通過緩沖日志區(qū)將插入和查詢業(yè)務(wù)日志與日志的物理存儲分離開來,在緩沖日志區(qū)中的插入和查詢的速度對比文件系統(tǒng)或數(shù)據(jù)庫系統(tǒng)中的存儲和查詢速度會有所增加,且同步到長期存儲介質(zhì)時是集中且多線程的,給系統(tǒng)帶來的壓力較小,減小系統(tǒng)響應(yīng)遲緩的問題。
附圖說明
通過參考下面的附圖,可以更為完整地理解本發(fā)明的示例性實施方式:
圖1為根據(jù)本發(fā)明優(yōu)選實施例的處理方法的流程圖;
圖2為根據(jù)本發(fā)明優(yōu)選實施例的業(yè)務(wù)日志的查詢方法流程圖;
圖3為根據(jù)本發(fā)明優(yōu)選實施例的處理系統(tǒng)的結(jié)構(gòu)圖。
具體實施方式
現(xiàn)在參考附圖介紹本發(fā)明的示例性實施方式,然而,本發(fā)明可以用許多不同的形式來實施,并且不局限于此處描述的實施例,提供這些實施例是為了詳盡地且完全地公開本發(fā)明,并且向所屬技術(shù)領(lǐng)域的技術(shù)人員充分傳達本發(fā)明的范圍。對于表示在附圖中的示例性實施方式中的術(shù)語并不是對本發(fā)明的限定。在附圖中,相同的單元/元件使用相同的附圖標(biāo)記。
除非另有說明,此處使用的術(shù)語(包括科技術(shù)語)對所屬技術(shù)領(lǐng)域的技術(shù)人員具有通常的理解含義。另外,可以理解的是,以通常使用的詞典限定的術(shù)語,應(yīng)當(dāng)被理解為與其相關(guān)領(lǐng)域的語境具有一致的含義,而不應(yīng)該被理解為理想化的或過于正式的意義。
圖1為根據(jù)本發(fā)明優(yōu)選實施例的處理方法的流程圖。如圖1所示,并發(fā)生成的業(yè)務(wù)日志的處理方法100從步驟101開始。在步驟101中,將并發(fā)生成的業(yè)務(wù)日志通過調(diào)用插入接口寫入到緩沖日志區(qū)內(nèi)進行緩存。優(yōu)選地,緩存日志區(qū)可以為本地內(nèi)存或獨立的緩存服務(wù)器,因為內(nèi)存或獨立的緩存服務(wù)器進行讀寫的速率較快,在高并發(fā)下生成的業(yè)務(wù)日志較多時,可以快速的進行業(yè)務(wù)日志的緩存,減小因頻繁寫入業(yè)務(wù)日志而造成的系統(tǒng)響應(yīng)緩慢等問題。
在步驟102中,判斷緩存日志區(qū)的狀態(tài)是否達到預(yù)設(shè)條件,若緩存日志區(qū)的狀態(tài)已達到預(yù)設(shè)條件,則進行步驟103;若緩存日志區(qū)的狀態(tài)沒有達到預(yù)設(shè)條件,則不進行操作。優(yōu)選地,所述預(yù)設(shè)條件為,緩沖日志區(qū)內(nèi)緩存的業(yè)務(wù)日志的數(shù)據(jù)大小是否達到臨界值;也可以為間隔時間是否滿足進行同步操作的預(yù)定時間段,當(dāng)間隔時間滿足進行同步操作的預(yù)定時間段時,若緩沖日志區(qū)內(nèi)沒有數(shù)據(jù),則中斷同步并重新計時。
在步驟103中,將緩沖日志區(qū)中的業(yè)務(wù)日志轉(zhuǎn)存到長期存儲介質(zhì)中進行長期存儲。優(yōu)選地,長期存儲介質(zhì)可以是數(shù)據(jù)庫或其他能達到同樣效果的存儲介質(zhì),且相對于本地內(nèi)存或獨立的緩存服務(wù)器,長期存儲介質(zhì)的讀寫速度較慢,但可以進行長期安全的數(shù)據(jù)存儲。
在步驟104中,根據(jù)喚醒日志區(qū)中已有的查詢條件,更新喚醒日志區(qū)的查詢結(jié)果集,以實現(xiàn)針對業(yè)務(wù)日志的查詢。優(yōu)選地,喚醒日志區(qū)存儲的數(shù)據(jù)為查詢條件與查詢結(jié)果集的對應(yīng)關(guān)系,即key-value關(guān)系對,key為查詢條件,且這里的查詢條件不包括分頁條件和時間維度,value為查詢結(jié)果集,因每條業(yè)務(wù)日志都有唯一的編號,value即為符合查詢條件key的所有業(yè)務(wù)日志的編號的集合。當(dāng)進行喚醒日志區(qū)的更新時,根據(jù)喚醒日志區(qū)已有的key,將符合查詢條件的新轉(zhuǎn)存到長期存儲介質(zhì)的業(yè)務(wù)日志的編號加入到對應(yīng)的value中。
圖2為根據(jù)本發(fā)明優(yōu)選實施例的業(yè)務(wù)日志的查詢方法流程圖。如圖2所示,業(yè)務(wù)日志的查詢方法200從步驟201開始。在步驟201中,根據(jù)查詢條件,首先獲得緩沖日志區(qū)中符合查詢條件的業(yè)務(wù)日志的集合R1。優(yōu)選地,緩沖日志區(qū)中緩存著還未轉(zhuǎn)存到長期存儲介質(zhì)中的部分業(yè)務(wù)日志,在需要進行業(yè)務(wù)日志的查詢時,因為是查詢所有已經(jīng)產(chǎn)生的業(yè)務(wù)日志,緩沖日志區(qū)和長期存儲介質(zhì)中均存有一部分日志,所以首先獲取緩沖日志區(qū)中符合查詢條件的日志。
在步驟202中,查詢喚醒日志區(qū)中是否存在符合查詢條件的查詢結(jié)果集,若存在,則進行步驟203;若不存在,則進行步驟204。優(yōu)選地,這里的符合查詢條件的查詢結(jié)果集,是指喚醒日志區(qū)中存在一個value,其對應(yīng)的key與本次的查詢條件完全一致,例如本次的查詢條件為“操作人為小明的高危操作”,若喚醒日志區(qū)中存在一個key為“操作人為小明的高危操作”,則將所述key對應(yīng)的value中的值所對應(yīng)的業(yè)務(wù)日志返回作為本次查詢的結(jié)果R2。
當(dāng)喚醒日志區(qū)中存在符合查詢條件的查詢結(jié)果集,則進行步驟203。在步驟203中,將喚醒日志區(qū)中符合查詢條件的查詢結(jié)果集返回作為R2。優(yōu)選地,在將業(yè)務(wù)日志從緩沖日志區(qū)轉(zhuǎn)存至長期存儲介質(zhì)中時,同步進行了喚醒日志區(qū)的更新操作,若喚醒日志區(qū)中存在一個key與本次查詢條件一致,則其對應(yīng)的value的值所對應(yīng)的業(yè)務(wù)日志的集合一定能代表長期存儲介質(zhì)中所有符合查詢條件的業(yè)務(wù)日志的集合,即集合R2。
當(dāng)喚醒日志區(qū)中不存在符合查詢條件的查詢結(jié)果集,則進行步驟204。在步驟204中,喚醒日志區(qū)中不存在符合查詢條件的查詢結(jié)果集,則在長期存儲介質(zhì)中查詢符合條件的業(yè)務(wù)日志,并獲取查詢結(jié)果的集合R2。優(yōu)選地,長期存儲介質(zhì)因存儲量大、讀寫速度相對較慢等原因,只在喚醒日志區(qū)中不存在符合查詢條件的查詢結(jié)果集時,對長期存儲介質(zhì)中存儲的業(yè)務(wù)日志進行查詢。
當(dāng)步驟204執(zhí)行完畢時,執(zhí)行步驟205。根據(jù)長期存儲介質(zhì)中符合查詢條件的業(yè)務(wù)日志的集合更新喚醒日志區(qū)的數(shù)據(jù),增加新的條目保存以本次查詢條件為key,以長期存儲介質(zhì)中的查詢結(jié)果為value的對應(yīng)關(guān)系,以便下次查詢時直接應(yīng)用。
當(dāng)步驟203或205執(zhí)行完畢后,執(zhí)行步驟206。在步驟206中,計算R1和R2的并集R-,并對R-進行時間維度和分頁條件的過濾,得到所有符合查詢條件的業(yè)務(wù)日志的集合R。優(yōu)選地,所述過濾方法為迭代遍歷法,在進行過濾時以先進行時間維度后分頁條件的順序進行。
圖3為根據(jù)本發(fā)明優(yōu)選實施例的處理系統(tǒng)的結(jié)構(gòu)圖。如圖3所示,處理系統(tǒng)300由日志寫入單元301、狀態(tài)判斷單元302、轉(zhuǎn)存單元303、日志查詢單元304、緩沖日志區(qū)305、喚醒日志區(qū)306以及長期存儲介質(zhì)307組成。
優(yōu)選地,日志寫入單元301用于將并發(fā)生成的業(yè)務(wù)日志寫入緩沖日志區(qū)305,故日志寫入單元可以為Java Web中插入接口,也可以為能達到寫入效果的其他接口。
優(yōu)選地,狀態(tài)判斷單元302用于判斷緩沖日志區(qū)305的狀態(tài)是否達到預(yù)設(shè)條件,當(dāng)緩沖日志區(qū)305的狀態(tài)達到預(yù)設(shè)條件時,轉(zhuǎn)存單元303將緩沖日志區(qū)305內(nèi)的所有數(shù)據(jù)轉(zhuǎn)存至長期存儲介質(zhì)307中。優(yōu)選地,所述預(yù)設(shè)條件為,緩沖日志區(qū)305內(nèi)緩存的業(yè)務(wù)日志的數(shù)據(jù)大小是否達到臨界值;也可以為間隔時間是否滿足進行同步操作的預(yù)定時間段,當(dāng)間隔時間滿足進行同步操作的預(yù)定時間段時,若緩沖日志區(qū)305內(nèi)沒有數(shù)據(jù),則中斷轉(zhuǎn)存操作并重新計時。
優(yōu)選地,日志查詢單元304主要用于查詢過程中獲取緩沖日志區(qū)305、喚醒日志區(qū)306以及長期存儲介質(zhì)307中的業(yè)務(wù)日志。在獲取過程中,首先獲取緩沖日志區(qū)305中符合查詢條件的業(yè)務(wù)日志的集合R1,其次判斷喚醒日志區(qū)306中是否存在符合查詢條件的查詢結(jié)果集,若存在,則獲取所述查詢結(jié)果集對應(yīng)業(yè)務(wù)日志集合R2,若不存在,則獲取長期存儲介質(zhì)307中符合查詢條件的業(yè)務(wù)日志集合R2。最后計算R1和R2的并集,并進行時間維度和分頁條件的過濾,得到所有符合查詢條件的業(yè)務(wù)日志的集合R。
優(yōu)選地,所述緩沖日志區(qū)305以list形式進行業(yè)務(wù)日志的緩存,所述喚醒日志區(qū)以map形式進行key-value關(guān)系對的存儲。
已經(jīng)通過參考少量實施方式描述了本發(fā)明。然而,本領(lǐng)域技術(shù)人員所公知的,正如附帶的專利權(quán)利要求所限定的,除了本發(fā)明以上公開的其他的實施例等同地落在本發(fā)明的范圍內(nèi)。
通常地,在權(quán)利要求中使用的所有術(shù)語都根據(jù)他們在技術(shù)領(lǐng)域的通常含義被解釋,除非在其中被另外明確地定義。所有的參考“一個/所述/該[裝置、組件等]”都被開放地解釋為所述裝置、組件等中的至少一個實例,除非另外明確地說明。這里公開的任何方法的步驟都沒必要以公開的準(zhǔn)確的順序運行,除非明確地說明。