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