一種數(shù)據(jù)處理方法、裝置和系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及軟件測試領(lǐng)域,尤其涉及一種數(shù)據(jù)處理方法、裝置和系統(tǒng)。
【背景技術(shù)】
[0002]計算機系統(tǒng)上普遍存在在特定時間點對特定數(shù)據(jù)進行修改的需求。例如,交易系統(tǒng)中的訂單通常會設(shè)置一個η分鐘的有效期,訂單生成后經(jīng)過η分鐘如果用戶仍未進行支付,則自動失效或變更價格。這類需求具有這樣的特點,每一個數(shù)據(jù)項需要進行修改的時間獨立計算,因此在任意時刻都可能需要進行修改數(shù)據(jù)的操作,而對單個數(shù)據(jù)項進行修改操作的代價較低。為了方便描述,下文中將應(yīng)該對數(shù)據(jù)進行修改操作的時間稱為“到期時間”,當數(shù)據(jù)尚未到達應(yīng)該修改的時間時稱為“未到期”,當數(shù)據(jù)到達應(yīng)該修改的時間后,稱為“已到期”。在web服務(wù)中,由于HTTP協(xié)議是無狀態(tài)的,web服務(wù)器要跟蹤這些數(shù)據(jù)的變化情況變要比其他類型服務(wù)器更為復(fù)雜?,F(xiàn)有技術(shù)中,通常采用以下三種方案對web服務(wù)器上的這類數(shù)據(jù)進行修改:
[0003]方案一:在接收到用戶對數(shù)據(jù)進行查詢的HTTP請求時,先檢查所述數(shù)據(jù)是否已到期,若已到期,則先對數(shù)據(jù)進行修改,然后再對HTTP請求進行處理。在論壇系統(tǒng)經(jīng)常采用這種方法,以論壇系統(tǒng)中的“限時置頂”功能為例,版主可以將主題設(shè)為置頂,并設(shè)置一定期限后自動取消。在有HTTP請求到達時,服務(wù)器先檢查是否有已經(jīng)到達限時的置頂主題,如有,則將主題的置頂標志取消,再進行常規(guī)的HTTP請求處理。
[0004]方案二:使用定時任務(wù)定期對已到期數(shù)據(jù)進行修改。在后臺設(shè)置一個定時任務(wù),每隔一定時間(例如5分鐘)運行一次。每次運行時,該任務(wù)查詢出所有已到期的數(shù)據(jù),并對它們進行統(tǒng)一的修改。
[0005]方案三:使用后臺守護進程。通過后臺守護進程來繞開HTTP協(xié)議無狀態(tài)性帶來的限制,后臺守護進程不受HTTP服務(wù)器的軟件控制,啟動后一直運行,專門負責跟蹤數(shù)據(jù)的變化情況并盡可能在每一項數(shù)據(jù)剛到期時對其進行修改。
【發(fā)明內(nèi)容】
[0006]現(xiàn)有的技術(shù)方案分別存在以下缺點:
[0007]方案一在每次接收到HTTP請求時都要查詢一次是否存在已到期的數(shù)據(jù),占用服務(wù)器資源,影響服務(wù)器性能;同時,由于需要先對已到期數(shù)據(jù)進行修改再對HTTP請求進行處理,如果已到期的數(shù)據(jù)量較大時,將嚴重影響HTTP請求的響應(yīng)速度,用戶體驗較差。
[0008]方案二采用定期檢查的方法,每次任務(wù)中僅對已到期數(shù)據(jù)進行修改,數(shù)據(jù)在到期后往往不能及時得到修改,而需要等到下一次定時任務(wù)運行時才進行統(tǒng)一修改,數(shù)據(jù)修改滯后,實時性較差。
[0009]方案三雖然在一定程度上避免了方案一、二的缺點,但是具體實施當中,守護進程的實現(xiàn)相對比較復(fù)雜,而且會對web服務(wù)器的運維帶來較大的影響。這種影響主要體現(xiàn)在:代碼部署時需要額外啟動守護進程;代碼更新時需要額外執(zhí)行重啟守護進程的操作;為了避免程序偶然錯誤導(dǎo)致守護進程退出,還需要采取額外的防護措施,例如增加自動重啟機制。
[0010]本發(fā)明實施例的目的在于提供了一種數(shù)據(jù)處理方法、裝置和系統(tǒng),提高數(shù)據(jù)修改的實時性,實現(xiàn)偶然錯誤后的自動恢復(fù),降低服務(wù)器運維的復(fù)雜度和難度。
[0011]為了實現(xiàn)上述目的,本發(fā)明實施例提供一種數(shù)據(jù)處理方法,包括:
[0012]每隔預(yù)設(shè)的時間間隔T,遍歷所有數(shù)據(jù)并獲取到期時間早于^的數(shù)據(jù);其中,所述到期時間為計劃對所述數(shù)據(jù)進行修改的時間,tizto+T’to為系統(tǒng)的當前時間;
[0013]將獲取的數(shù)據(jù)按到期時間從早到晚排序,形成待處理隊列;
[0014]從所述待處理隊列中的第一個數(shù)據(jù)開始,獲取所述第一個數(shù)據(jù)及所述第一個數(shù)據(jù)對應(yīng)的到期時間,在所述第一個數(shù)據(jù)到期后,對所述第一個數(shù)據(jù)的特征信息進行修改;
[0015]按照排序順序從所述待處理隊列中獲取下一個數(shù)據(jù)及所述下一個數(shù)據(jù)對應(yīng)的到期時間,在所述下一個數(shù)據(jù)到期后,對所述下一個數(shù)據(jù)的特征信息進行修改,直至所述待處理隊列中的所有數(shù)據(jù)的特征信息被修改完成。
[0016]具體地,所述獲取所述第一個數(shù)據(jù)及所述第一個數(shù)據(jù)對應(yīng)的到期時間,在所述第一個數(shù)據(jù)到期后,對所述第一個數(shù)據(jù)的特征信息進行修改,具體為:
[0017]獲取所述第一個數(shù)據(jù)、所述第一個數(shù)據(jù)對應(yīng)的到期時間以及系統(tǒng)的當前時間;
[0018]判斷所述第一個數(shù)據(jù)對應(yīng)的到期時間是否早于所述系統(tǒng)的當前時間;
[0019]若是,則確定所述第一個數(shù)據(jù)已到期,對所述第一個數(shù)據(jù)的特征信息進行修改;
[0020]若否,則確定所述第一個數(shù)據(jù)未到期,睡眠至所述第一個數(shù)據(jù)對應(yīng)的到期時間,再對所述第一個數(shù)據(jù)的特征信息進行修改。
[0021]優(yōu)選地,所述時間間隔T小于或等于最小的數(shù)據(jù)有效期,其中,所述數(shù)據(jù)有效期1?? 為所述數(shù)據(jù)的到期時間,t。為所述數(shù)據(jù)的產(chǎn)生時間。
[0022]優(yōu)選地,所述每隔預(yù)設(shè)的時間間隔T,遍歷所有數(shù)據(jù)并獲取到期時間早于的數(shù)據(jù),具體為:
[0023]通過系統(tǒng)的cron服務(wù),每隔預(yù)設(shè)的時間間隔T啟動計劃任務(wù),遍歷目標位置中的數(shù)據(jù)并獲取到期時間早于^的數(shù)據(jù)。
[0024]優(yōu)選地,所述特征信息包括狀態(tài)信息和數(shù)據(jù)內(nèi)容。
[0025]優(yōu)選地,所述數(shù)據(jù)處理方法還包括:
[0026]接收客戶端發(fā)送的對所述數(shù)據(jù)的特征信息進行查詢的請求;
[0027]將所述數(shù)據(jù)當前的特征信息反饋給所述客戶端,以使所述客戶端顯示所述特征信息。
[0028]相應(yīng)地,本發(fā)明實施例還提供了一種數(shù)據(jù)處理裝置,包括:
[0029]遍歷模塊,用于每隔預(yù)設(shè)的時間間隔T,遍歷所有數(shù)據(jù)并獲取到期時間早于的數(shù)據(jù);其中,所述到期時間為計劃對所述數(shù)據(jù)進行修改的時間,tizto+T’to為系統(tǒng)的當前時間;
[0030]排序模塊,用于將獲取的數(shù)據(jù)按到期時間從早到晚排序,形成待處理隊列;
[0031 ]第一修改模塊,用于從所述待處理隊列中的第一個數(shù)據(jù)開始,獲取所述第一個數(shù)據(jù)及所述第一個數(shù)據(jù)對應(yīng)的到期時間,在所述第一個數(shù)據(jù)到期后,對所述第一個數(shù)據(jù)的特征信息進行修改;
[0032]第二修改模塊,用于按照排序順序從所述待處理隊列中獲取下一個數(shù)據(jù)及所述下一個數(shù)據(jù)對應(yīng)的到期時間,在所述下一個數(shù)據(jù)到期后,對所述下一個數(shù)據(jù)的特征信息進行修改,直至所述待處理隊列中的所有數(shù)據(jù)的特征信息被修改完成。
[0033]具體地,所述第一修改模塊包括:
[0034]獲取單元,用于獲取所述第一個數(shù)據(jù)、所述第一個數(shù)據(jù)對應(yīng)的到期時間以及系統(tǒng)的當前時間;
[0035]判斷單元,用于判斷所述第一個數(shù)據(jù)對應(yīng)的到期時間是否早于所述系統(tǒng)的當前時間;
[0036]第一修改單元,用于當所述第一個數(shù)據(jù)對應(yīng)的到期時間早于所述系統(tǒng)的當前時間時,對所述第一個數(shù)據(jù)的特征信息進行修改;
[0037]第二修改單元,用于當所述第一個數(shù)據(jù)對應(yīng)的到期時間晚于所述系統(tǒng)的當前時間時,睡眠至所述第一個數(shù)據(jù)對應(yīng)的到期時間,再對所述第一個數(shù)據(jù)的特征信息進行修改。
[0038]優(yōu)選地,所述遍歷模塊包括:
[0039]計劃任務(wù)單元,用于通過系統(tǒng)的cron服務(wù),每隔預(yù)設(shè)的時間間隔T啟動計劃任務(wù);
[0040]數(shù)據(jù)遍歷單元,用于遍歷目標位置中的數(shù)據(jù)并獲取到期時間早于^的數(shù)據(jù)。
[0041 ]優(yōu)選地,所述數(shù)據(jù)處理裝置還包括:
[0042]接收模塊,用于接收客戶端發(fā)送的對所述數(shù)據(jù)的特征信息進行查詢的請求;
[0043]反饋模塊,用于將所述數(shù)據(jù)當前的特征信息反饋給所述客戶端,以使所述客戶端顯示所述特征信息。
[0044]優(yōu)選地,所述特征信息包括狀態(tài)信息和數(shù)據(jù)內(nèi)容。
[0045]進一步地,本發(fā)明還提供了一種數(shù)據(jù)處理系統(tǒng),所述數(shù)據(jù)處理系統(tǒng)包括客戶端和服務(wù)器端;
[0046]所述服務(wù)器端配置有如權(quán)利要求7至12任一項所述的數(shù)據(jù)處理裝置。
[0047]與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點:
[0048]本發(fā)明提供的數(shù)據(jù)處理方法、裝置和系統(tǒng)通過周期性的計劃任務(wù),遍歷所有數(shù)據(jù)并獲取任務(wù)周期內(nèi)到期的所有數(shù)據(jù),將數(shù)據(jù)按到期時間的早晚進行排序,在數(shù)據(jù)到期后對數(shù)據(jù)的特征信息進行修改,實現(xiàn)對到期數(shù)據(jù)的精確修改,提高了數(shù)據(jù)修改的實時性。
[0049]此外,本發(fā)明提供的數(shù)據(jù)處理方法、裝置和系統(tǒng)可實現(xiàn)從偶然異常中自動恢復(fù)。由于采用周期性的計劃任務(wù),即使任務(wù)進程意外退出,只要系統(tǒng)的定時任務(wù)服務(wù)還在正常運行,仍然可通過系統(tǒng)的定時任務(wù)服務(wù)在下一周期到來時觸發(fā)任務(wù)執(zhí)行;同時,對于上一任務(wù)周期中因意外未處理的已到期數(shù)據(jù),由于到期時間早于的條件限制以及從早到晚的到期排序規(guī)則,在本任務(wù)周期中仍可納入待處理隊列中優(yōu)先處理。
[0050]進一步地,本發(fā)明提供的數(shù)據(jù)處理方法、裝置和系統(tǒng)只需要進行一次性的定時任務(wù)設(shè)置,可有效降低web服務(wù)器的運維難度和復(fù)雜度。在需要發(fā)布新版本的web服務(wù)時,只需要按照一般流程,更新