一種基于時間窗口可移動的動態(tài)數(shù)據(jù)快速處理方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及基于時間窗口移動的動態(tài)數(shù)據(jù)處理技術(shù),提供對隨時間窗口移動而變 動的動態(tài)數(shù)據(jù)處理及存儲方法,主要適用于風(fēng)控、營銷、行為習(xí)慣挖掘等技術(shù)領(lǐng)域。
【背景技術(shù)】
[0002] 在風(fēng)控、營銷等領(lǐng)域,經(jīng)常會涉及如"過去24小時的交易量"、"過去5天的交易最 大額"等相關(guān)變量等的計算問題。因為當(dāng)前時間是一直向前推進(jìn)的,因而"過去24小時"這 種變量的計算需要考慮時間窗口一直在移動這個事實。
[0003] 傳統(tǒng)的處理方式主要是直接通過數(shù)據(jù)庫查詢方式進(jìn)行,一般通過對數(shù)據(jù)庫中的時 間字段構(gòu)建基于指定時間窗口的查詢條件,然后針對查詢出來的這部分?jǐn)?shù)據(jù)進(jìn)行相應(yīng)的計 算即可??紤]到時間窗口是移動的,這部分計算出來的結(jié)果僅對當(dāng)前或者指定時間戳有效, 隨著時間窗口的移動,這個查詢結(jié)果只能使用一次,使用后即過期,相當(dāng)于每次用到這個計 算結(jié)果都需要重新進(jìn)行查詢。由于此原因,導(dǎo)致這部分計算結(jié)果處理緩慢,延時基本需要幾 百毫秒到幾秒之間,且會導(dǎo)致數(shù)據(jù)庫的查詢壓力過大;在需要頻繁密集使用這部分計算結(jié) 果的場景下(如超低延時、超高并發(fā)實時風(fēng)控場景),這種簡單粗暴的數(shù)據(jù)處理方式基本不 可使用。
[0004] 另外一種基于數(shù)據(jù)庫緩存的技術(shù)可以在一定程度上提升這部分動態(tài)數(shù)據(jù)的處理 速度。大體做法有兩種:一種是通過采用內(nèi)存數(shù)據(jù)庫、或者類似OracleTimesTen這種 CAC(ContentAwareCache)數(shù)據(jù)庫緩存技術(shù);另外一種是米用MemCached或者Redis等 CBC(ContentBlindCache)緩存技術(shù)用于緩存上次執(zhí)行的查詢結(jié)果。因為數(shù)據(jù)多在內(nèi)存 中,即使頻繁執(zhí)行這種查詢也會大大緩解傳統(tǒng)的基于磁盤的數(shù)據(jù)庫的IO壓力,大部分情況 下這樣的查詢能夠在幾毫秒內(nèi)返回。在一定程度上,這種動態(tài)數(shù)據(jù)處理技術(shù)能夠?qū)崿F(xiàn)TPS 在幾百~幾千左右的處理性能,延時一般可以控制在幾毫秒到幾十毫秒之間。
[0005] 然而,通過直接查詢數(shù)據(jù)庫的形式(上述兩種方法)有幾個缺陷一直無法克服,具 體如下:
[0006] 1.查詢結(jié)果集過大的情況下,處理效率低下,甚至無法處理。在真實場景下,很多 時候需要處理"某業(yè)務(wù)過去30天交易額波動情況",因為業(yè)務(wù)是一個非常大的數(shù)據(jù)維度,一 般大企業(yè)某業(yè)務(wù)過去30天的交易流水會達(dá)到幾十億甚至幾百億這個規(guī)模,該情況下,計算 該變量所在宿主機(jī)需要的內(nèi)存是巨大的,在內(nèi)存不足的情況會導(dǎo)致無法計算的最壞結(jié)果。
[0007] 2.待計算變量線性增長時,計算延時不可控,吞吐量驟降。在實時風(fēng)控或者營銷等 場景,完成一個決策需要用到的計算變量往往不是一個或者幾個,而是需要很多變量進(jìn)行 統(tǒng)籌并構(gòu)建決策樹的,一般至少有幾十、上百、甚至上千個變量同時參與該決策。該情況下, 這種數(shù)據(jù)處理方式延時以及處理吞吐量基本呈現(xiàn)線性增長的特性,這種處理方式往往難以 滿足企業(yè)后續(xù)業(yè)務(wù)發(fā)展的需求。
[0008] 3.需要較大規(guī)模的計算設(shè)備。由于處理方式需要進(jìn)行密集的數(shù)據(jù)庫查詢,從而導(dǎo) 致對數(shù)據(jù)庫的IOPS要求,以及計算設(shè)備的CPU要求等過高,一般需采購上百萬人民幣的中 間件加硬件設(shè)備才能滿足一般的業(yè)務(wù)需求。
【發(fā)明內(nèi)容】
[0009] 針對傳統(tǒng)動態(tài)數(shù)據(jù)處理方式的問題,本發(fā)明提供一種基于時間窗口可移動的動態(tài) 數(shù)據(jù)快速處理方法,實現(xiàn)在海量數(shù)據(jù)模式下對動態(tài)數(shù)據(jù)的快速處理。
[0010] 本發(fā)明的目的是通過以下技術(shù)方案來實現(xiàn)的:一種基于時間窗口可移動的動態(tài)數(shù) 據(jù)快速處理方法,包括以下步驟:
[0011] (1)數(shù)據(jù)采集,獲取批量數(shù)據(jù):判斷數(shù)據(jù)源中的數(shù)據(jù)是否具備增量字段,若有則從 數(shù)據(jù)源中增量獲取一批數(shù)據(jù);若無,則全量獲取數(shù)據(jù);
[0012] (2)數(shù)據(jù)預(yù)處理,包括以下子步驟:
[0013] (2. 1)生成可增量計算的最小數(shù)據(jù)處理單元:根據(jù)每條流水?dāng)?shù)據(jù)需要處理的邏輯 生成最小的可增量計算的數(shù)據(jù)處理單元,所述邏輯包括計數(shù)、求和、平均、最大、最小、方差、 標(biāo)準(zhǔn)差、采集、去重采集等中的一種或多種,所述最小的可增量計算的數(shù)據(jù)處理單元附帶時 間戳;
[0014] (2. 2)生成時間戳序列:將所有流水?dāng)?shù)據(jù)生成的最小的可增量計算的數(shù)據(jù)處理單 元根據(jù)不同數(shù)據(jù)維度中的每一個主鍵進(jìn)行歸組,生成一系列時間戳序列;所述數(shù)據(jù)維度包 括賬號、手機(jī)號、身份證號、業(yè)務(wù)號等;任意數(shù)據(jù)維度中,每個主鍵中的每個計算邏輯分別對 應(yīng)一時間戳序列,所述時間戳序列對應(yīng)計算變量;
[0015] (2. 3)時間戳序列合并:對于時間戳序列過于龐大的情況,可以按照不同的時間 單元進(jìn)行時間戳序列合并,從而節(jié)約內(nèi)存;所述時間單元為年、季度、月、周、日、時、分、秒;
[0016] (2. 4)保存時間戳序列:將合并后的時間戳序列合并到原緩存或其他數(shù)據(jù)源中已 經(jīng)存在的當(dāng)前數(shù)據(jù)維度、當(dāng)前數(shù)據(jù)主鍵和當(dāng)前計算變量中,以滿足增量計算、增量保存的能 力;
[0017] (3)數(shù)據(jù)輸出:指定時間戳、時間窗口、數(shù)據(jù)維度、數(shù)據(jù)主鍵和計算變量,在緩存或 其他數(shù)據(jù)源中提取對應(yīng)的時間戳序列,對時間戳序列中的最小的可增量計算的數(shù)據(jù)處理單 元進(jìn)行合并,得到動態(tài)時間窗口對應(yīng)的計算結(jié)果。
[0018] 本發(fā)明的有益效果是:本發(fā)明基于時間窗口可移動的動態(tài)數(shù)據(jù)快速處理方法,在 設(shè)計之初就考慮了傳統(tǒng)計算方式所不具備的高速、海量數(shù)據(jù)處理能力,非常適用于基于海 量數(shù)據(jù)挖掘的營銷、實時風(fēng)控等領(lǐng)域,其帶來的優(yōu)勢是不言而喻的,概括起來,主要包括:
[0019] 1.超低延時,超高吞吐量。一般對于單個計算變量的計算,其延時可以控制在微秒 級,及時考慮分布式緩存的存儲,其延時也可以控制在10毫秒以內(nèi)。單個計算設(shè)備,一般可 以達(dá)到單變量每秒處理幾百萬流水的能力;即使考慮這部分中間變量的存儲問題,基本上 也能達(dá)到幾萬、甚至幾十萬的TPS。