一種歷史數(shù)據(jù)新增方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及一種數(shù)據(jù)處理方法,尤其是涉及一種歷史數(shù)據(jù)新增方法。
【背景技術(shù)】
[0002] 對于業(yè)務(wù)系統(tǒng)中狀態(tài)類信息,一般只記錄最新信息。當(dāng)分析需要關(guān)注這些信息的 歷史時點信息時,直接同步業(yè)務(wù)系統(tǒng)中數(shù)據(jù)就不夠了。
[0003] 業(yè)務(wù)系統(tǒng)無法在每次發(fā)生的增刪改時記錄原始信息和最新信息;分析系統(tǒng)雖難以 獲實時的增刪改的信息,但在每天同步一次情況下,將每天的全量數(shù)據(jù)加上開始時間(數(shù) 據(jù)日期)作為增量加載,就可以獲得每個時點(每天)的信息,但為這種方式數(shù)據(jù)冗余度驚 人,據(jù)測算,一般每天只有不到10 %的數(shù)據(jù)發(fā)生變化,90 %的數(shù)據(jù)冗余。
[0004] 將每天與前一天的重復(fù)數(shù)據(jù)刪除后加上開始時間作為增量加載,在信息完整性上 可以達(dá)到要求,但在需要獲得特定時點的記錄時需要比較按時間排序的前后兩條記錄,大 大加劇了查詢負(fù)擔(dān)。在實際分析系統(tǒng)使用中不可行,一般只作為數(shù)據(jù)存儲和分發(fā)使用。
[0005] 因此在實際使用時需增加開始時間、結(jié)束時間和加載類型,才能兼顧數(shù)據(jù)存儲容 量和數(shù)據(jù)查詢的性能,而更新前一天數(shù)據(jù)的結(jié)束時間就成為數(shù)據(jù)歷史實現(xiàn)方法的性能瓶 頸。
[0006] 現(xiàn)有的數(shù)據(jù)歷史基本實現(xiàn)方法通常為:通過比較前后兩天的全量數(shù)據(jù)可以獲得新 一天的增刪改數(shù)據(jù),將這些增量數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫后,利用主鍵相等更新前一天的結(jié)束時間 為當(dāng)天數(shù)據(jù)日期的前一天(稱這個過程為關(guān)時間窗口)。這個過程在可以同一張表內(nèi),使 用Update技術(shù)完成。但在數(shù)據(jù)庫中使用Update技術(shù),變化量達(dá)到幾百萬量級時生成的日 志量將嚴(yán)重影響系統(tǒng)性能,達(dá)到10小時以上,在3500萬當(dāng)前記錄,2000萬變動記錄的極端 情況,需要40小時處理。
【發(fā)明內(nèi)容】
[0007] 本發(fā)明的目的就是為了克服上述現(xiàn)有技術(shù)存在的缺陷而提供一種高效的歷史數(shù) 據(jù)新增方法。
[0008] 本發(fā)明的目的可以通過以下技術(shù)方案來實現(xiàn):
[0009] -種歷史數(shù)據(jù)新增方法,該方法以天為單位進(jìn)行歷史數(shù)據(jù)的新增,包括以下步 驟:
[0010] 1)獲取歷史數(shù)據(jù)區(qū)中的第一當(dāng)前數(shù)據(jù)和第一歷史數(shù)據(jù),所述第一當(dāng)前數(shù)據(jù)為數(shù)據(jù) 存儲上無結(jié)束時間的數(shù)據(jù),所述第一歷史數(shù)據(jù)為數(shù)據(jù)存儲上有結(jié)束時間的數(shù)據(jù);
[0011] 2)對第一當(dāng)前數(shù)據(jù)進(jìn)行備份;
[0012] 3)獲取當(dāng)天的新數(shù)據(jù),將所述新數(shù)據(jù)與第一當(dāng)前數(shù)據(jù)進(jìn)行比對,獲取當(dāng)天的第二 當(dāng)前數(shù)據(jù)和第二歷史數(shù)據(jù);
[0013] 4)將所述第二當(dāng)前數(shù)據(jù)與第一當(dāng)前數(shù)據(jù)作整體切換,同時將所述第二歷史數(shù)據(jù)以 增量方式合并至第一歷史數(shù)據(jù)中;
[0014] 5)返回步驟2),開始新一天的數(shù)據(jù)處理。
[0015] 所述結(jié)束時間通過C程序模擬SQL實現(xiàn)的算法獲取。
[0016] 所述步驟3)中,將所述新數(shù)據(jù)與第一當(dāng)前數(shù)據(jù)進(jìn)行比對時,按主關(guān)鍵字和整行方 式進(jìn)行比較。
[0017] 所述步驟3)中,將所述新數(shù)據(jù)與第一當(dāng)前數(shù)據(jù)進(jìn)行比對具體為:
[0018] 301)根據(jù)所述新數(shù)據(jù)、主關(guān)鍵詞的主關(guān)鍵字和整行生成相應(yīng)的md5文件;
[0019] 302)將md5文件進(jìn)行比對,獲得相應(yīng)的比對結(jié)果文件;
[0020] 303)對所述比對結(jié)果文件添加相應(yīng)的參數(shù),生成第二當(dāng)前數(shù)據(jù)和第二歷史數(shù)據(jù)。
[0021] 所述比對結(jié)果文件包括新增文件、刪除文件、原有修改文件和原有文件。
[0022] 所述參數(shù)包括開始時間、結(jié)束時間和裝載類型。
[0023] 與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點:
[0024] 1)本發(fā)明取消了 Update方式,改為無日志的全刪、全增替換方式,效率高;
[0025] 2)本發(fā)明根據(jù)數(shù)據(jù)歷史的特點,將整個歷史數(shù)據(jù)區(qū)分為當(dāng)前數(shù)據(jù)和歷史數(shù)據(jù),作 為兩個分區(qū)存儲,這樣可以方便地對當(dāng)前數(shù)據(jù)作整體替換同時對歷史數(shù)據(jù)作添加處理;
[0026] 3)由于本發(fā)明中數(shù)據(jù)比對只涉及前后相鄰的兩天數(shù)據(jù),因此用專用的C程序處理 生成數(shù)據(jù)當(dāng)天的當(dāng)前數(shù)據(jù)和歷史數(shù)據(jù),比用通用的SQL算法有高的處理效率,而且可以使 數(shù)據(jù)處理的服務(wù)器獨立于數(shù)據(jù)庫,不與數(shù)據(jù)使用在硬件資源上沖突,處理的數(shù)據(jù)量單文件 達(dá)到3億行,涵蓋了目前已有的業(yè)務(wù)數(shù)據(jù)量。
[0027] 4)鑒于主關(guān)鍵字和整行的長度在原始數(shù)據(jù)中是不等長的,本發(fā)明統(tǒng)一轉(zhuǎn)換成md5 碼定長格式后再進(jìn)行比對,提高了比對效率,數(shù)據(jù)歷史關(guān)心的是相同主鍵數(shù)據(jù)的變化,只關(guān) 注是否相同,不關(guān)注大小,而md5碼正好符合這個需求。
【附圖說明】
[0028] 圖1為本發(fā)明比對過程的流程示意圖;
[0029] 圖2為本發(fā)明比對后產(chǎn)生的文件示意圖。
【具體實施方式】
[0030] 下面結(jié)合附圖和具體實施例對本發(fā)明進(jìn)行詳細(xì)說明。本實施例以本發(fā)明技術(shù)方案 為前提進(jìn)行實施,給出了詳細(xì)的實施方式和具體的操作過程,但本發(fā)明的保護(hù)范圍不限于 下述的實施例。
[0031] 本實施例提供一種歷史數(shù)據(jù)新增方法,具有以下關(guān)鍵點:
[0032] 1)改造了底層數(shù)據(jù)庫表的存儲方式,明確區(qū)分的當(dāng)前數(shù)據(jù)和歷史數(shù)據(jù);
[0033] 2)生成結(jié)束時間的方法,用專用C程序模擬SQL實現(xiàn)的算法;
[0034] 3)從一臺服務(wù)器實現(xiàn)明確區(qū)分為數(shù)據(jù)處理服務(wù)器和數(shù)據(jù)庫服務(wù)器兩臺服務(wù)器實 現(xiàn)。
[0035] 該歷史數(shù)據(jù)新增方法以天為單位進(jìn)行歷史數(shù)據(jù)的新增,具體包括以下步驟:
[0036] 1)獲取歷史數(shù)據(jù)區(qū)中的第一當(dāng)前數(shù)據(jù)和第一歷史數(shù)據(jù),所述第一當(dāng)前數(shù)據(jù)為數(shù)據(jù) 存儲上無結(jié)束時間的數(shù)據(jù),所述第一歷史數(shù)據(jù)為數(shù)據(jù)存儲上有結(jié)束時間的數(shù)據(jù)。結(jié)束時間 通過C程序模擬SQL實現(xiàn)的算法獲取。
[0037] 2)在數(shù)據(jù)處理服務(wù)器上對第一當(dāng)前數(shù)據(jù)進(jìn)行備份。
[0038] 3)獲取當(dāng)天的新數(shù)據(jù),將所述新數(shù)據(jù)與第一當(dāng)前數(shù)據(jù)進(jìn)行比對,獲取當(dāng)天的第二 當(dāng)前數(shù)據(jù)和第二歷史數(shù)據(jù),如圖1所示,具體為:
[0039] 301)根據(jù)所述新數(shù)據(jù)、主關(guān)鍵詞的主關(guān)鍵字和整行生成相應(yīng)的md5文件;
[0040] 302)將md5文件進(jìn)行比對,獲得相應(yīng)的比對結(jié)果文件,包括新增文件、刪除文件、 原有修改文件和原有文件;
[0041] 303)對所述比對結(jié)果文件添加相應(yīng)的參數(shù),包括開始時間、結(jié)束時間和裝載類型, 生成第二當(dāng)前數(shù)據(jù)和第二歷史數(shù)據(jù)。加 Dt (數(shù)據(jù)開始時間、數(shù)據(jù)結(jié)束時間)和Type (數(shù)據(jù) 裝載類型)對于不同的文件加的是不同的。
[0042] 完成上述比對后,可對當(dāng)天的第二當(dāng)前數(shù)據(jù)重新做一次md5碼,將下一次比較需 要的處理提肖LI完成,進(jìn)一步提尚效率。
[0043] 如圖2所示,本實施例進(jìn)行比對后生成6個文件,分別為old. d、old. u、old. s、new. u、new. s、new. a,其中,a表示新增,u表示修改,s表示相同,d表示刪除,old文件中包含 開始時間和前一次的裝載類型。組合old. s、new. a、new. u就可以得到新一天的當(dāng)前數(shù)據(jù), new. a、new. u的開始時間就是當(dāng)數(shù)據(jù)日期,裝載類型就是a和u。替換當(dāng)前數(shù)據(jù)。組合old. u、old. d就可以得到前一天的歷史數(shù)據(jù),old. u、old. d的開始時間原始就有,結(jié)束時間就是 數(shù)據(jù)日期的前一天,裝載類型就是u和d。
[0044] 4)將所述第二當(dāng)前數(shù)據(jù)與第一當(dāng)前數(shù)據(jù)作整體切換,同時將所述第二歷史數(shù)據(jù)以 增量方式合并至第一歷史數(shù)據(jù)中;
[0045] 5)返回步驟2),開始新一天的數(shù)據(jù)處理。
[0046] 以下以具體歷史數(shù)據(jù)新增過程為例說明上述方法。當(dāng)前系統(tǒng)已更新到20150101, 以下示例處理20150102數(shù)據(jù)的處理流程和合并流程。其中,灰色表頭是數(shù)據(jù)文件,保存在 數(shù)據(jù)處理服務(wù)器中,黑色表頭是數(shù)據(jù)庫表,保存在數(shù)據(jù)庫服務(wù)器中。
[0047] 1、表狀態(tài)
[0048] 當(dāng)前數(shù)據(jù)表
[0052] 2、數(shù)據(jù)狀態(tài)
[0053] 前一天數(shù)據(jù)文件(20150101),與表的當(dāng)前數(shù)據(jù)一致
[0054]
[0067] 裝載后歷史數(shù)據(jù)表(添加)
[0068]
【主權(quán)項】
1. 一種歷史數(shù)據(jù)新增方法,其特征在于,該方法以天為單位進(jìn)行歷史數(shù)據(jù)的新增,包括 以下步驟: 1) 獲取歷史數(shù)據(jù)區(qū)中的第一當(dāng)前數(shù)據(jù)和第一歷史數(shù)據(jù),所述第一當(dāng)前數(shù)據(jù)為數(shù)據(jù)存儲 上無結(jié)束時間的數(shù)據(jù),所述第一歷史數(shù)據(jù)為數(shù)據(jù)存儲上有結(jié)束時間的數(shù)據(jù); 2) 對第一當(dāng)前數(shù)據(jù)進(jìn)行備份; 3) 獲取當(dāng)天的新數(shù)據(jù),將所述新數(shù)據(jù)與第一當(dāng)前數(shù)據(jù)進(jìn)行比對,獲取當(dāng)天的第二當(dāng)前 數(shù)據(jù)和第二歷史數(shù)據(jù); 4) 將所述第二當(dāng)前數(shù)據(jù)與第一當(dāng)前數(shù)據(jù)作整體切換,同時將所述第二歷史數(shù)據(jù)以增量 方式合并至第一歷史數(shù)據(jù)中; 5) 返回步驟2),開始新一天的數(shù)據(jù)處理。2. 根據(jù)權(quán)利要求1所述的歷史數(shù)據(jù)新增方法,其特征在于,所述結(jié)束時間通過C程序模 擬SQL實現(xiàn)的算法獲取。3. 根據(jù)權(quán)利要求1所述的歷史數(shù)據(jù)新增方法,其特征在于,所述步驟3)中,將所述新數(shù) 據(jù)與第一當(dāng)前數(shù)據(jù)進(jìn)行比對時,按主關(guān)鍵字和整行方式進(jìn)行比較。4. 根據(jù)權(quán)利要求3所述的歷史數(shù)據(jù)新增方法,其特征在于,所述步驟3)中,將所述新數(shù) 據(jù)與第一當(dāng)前數(shù)據(jù)進(jìn)行比對具體為: 301) 根據(jù)所述新數(shù)據(jù)、主關(guān)鍵詞的主關(guān)鍵字和整行生成相應(yīng)的md5文件; 302) 將md5文件進(jìn)行比對,獲得相應(yīng)的比對結(jié)果文件; 303) 對所述比對結(jié)果文件添加相應(yīng)的參數(shù),生成第二當(dāng)前數(shù)據(jù)和第二歷史數(shù)據(jù)。5. 根據(jù)權(quán)利要求4所述的歷史數(shù)據(jù)新增方法,其特征在于,所述比對結(jié)果文件包括新 增文件、刪除文件、原有修改文件和原有文件。6. 根據(jù)權(quán)利要求4所述的歷史數(shù)據(jù)新增方法,其特征在于,所述參數(shù)包括開始時間、結(jié) 束時間和裝載類型。
【專利摘要】本發(fā)明涉及一種歷史數(shù)據(jù)新增方法,該方法以天為單位進(jìn)行歷史數(shù)據(jù)的新增,包括以下步驟:1)獲取歷史數(shù)據(jù)區(qū)中的第一當(dāng)前數(shù)據(jù)和第一歷史數(shù)據(jù),所述第一當(dāng)前數(shù)據(jù)為數(shù)據(jù)存儲上無結(jié)束時間的數(shù)據(jù),所述第一歷史數(shù)據(jù)為數(shù)據(jù)存儲上有結(jié)束時間的數(shù)據(jù);2)對第一當(dāng)前數(shù)據(jù)進(jìn)行備份;3)獲取當(dāng)天的新數(shù)據(jù),將所述新數(shù)據(jù)與第一當(dāng)前數(shù)據(jù)進(jìn)行比對,獲取當(dāng)天的第二當(dāng)前數(shù)據(jù)和第二歷史數(shù)據(jù);4)將所述第二當(dāng)前數(shù)據(jù)與第一當(dāng)前數(shù)據(jù)作整體切換,同時將所述第二歷史數(shù)據(jù)以增量方式合并至第一歷史數(shù)據(jù)中;5)返回步驟2),開始新一天的數(shù)據(jù)處理。與現(xiàn)有技術(shù)相比,本發(fā)明具有處理方便、高效等優(yōu)點。
【IPC分類】G06F17/30
【公開號】CN105045881
【申請?zhí)枴緾N201510430543
【發(fā)明人】吳衛(wèi)軍, 范磊
【申請人】上海融甸信息科技有限公司
【公開日】2015年11月11日
【申請日】2015年7月21日