TDSQL 全时态数据库系统 -- 典型案例
本文大綱:
經典案例
增量計算
對賬業務
對賬優化
?安全
聯機閃回
業務分析
數據重演
數據分析
經典案例
增量抽取、增量計算等都是T-TDSQL的經典案例。如下以增量計算為例,來分析T-TDSQL在騰訊金融業務中的典型應用。
增量計算
基于T-TDSQL全時態數據存儲的特性,我們可以方便的進行增量式的數據查詢、抽取和計算。
對于單表的數據增量抽取/計算[1],T-TDSQL首先通過快照差讀方法,獲取對應與給出快照范圍的增量數據集,然后根據用戶定義的計算規則,組合調用系統內置的聚集函數,如SUM,AVG,GROUP BY等,實現增量計算的功能。歷史上任何時間段內的的數據都可以通過增量計算的技術進行“增量抽取”。
對于多表增量計算,T-TDSQL通過“快照差連接”支持增量計算場景。即首先得到兩個快照差集合R和S,然后通過連接操作將兩表合并,之后再使用聚集函數等完成計算。
本節通過在互聯網金融中常用的對賬業務來對增量計算的原理和實際應用進行介紹。
對賬業務
互聯網金融行業對數據的準確性要求極高,而在互聯網環境中,數據不一致或數據錯誤時有發生,因此,通過對賬來降低賬戶余額等數據錯誤造成的風險十分重要。
在騰訊計費業務中,采用將賬戶余額表(user)和賬戶流水表(water)按小時/天為周期進行比對的方式,來發現賬戶余額與交易流水的不一致現象,從而及時對錯誤交易進行修正。
傳統的對賬采用按固定時間段(如分鐘/小時/天)為單位進行對賬。如現對2018年4月11日的交易進行對賬,首先需要得到4月11日期初賬戶余額表和期末賬戶余額表,以及當天的交易流水表;然后對賬戶表通過按用戶ID分組,并計算每個用戶的期末余額減去期初余額,記為結果A,對流水表按用戶ID分組,并將交易金額分組求和,記為結果B;最后將每個用戶的結果A和結果B進行比對,如果A=B,則交易沒有問題,否則該用戶在當天的交易存在錯誤。
對于按固定時間段對賬,主要存在以下三個問題:
1.? 時效性差:對于錯誤交易,不能立即發現并反饋,延遲了以固定時間段為單位的一段時間后才能發現錯誤。
2.? 對賬不精準:定位錯誤交易較復雜。例如:如果用戶在一天內發生的多筆交易,其中一筆出現了錯誤,通過按天對賬的方式不能直接定位到具體的哪條交易出現錯誤,而只能定位到用戶級別,即仍然需要人工參與,將該錯誤用戶的當天交易都確認一遍,才能找到具體的錯誤交易。
3.? 對賬不靈活:按固定時間段對賬,如以天為單位,則只能等這一天內的增量數據沉淀下來,才能進行對賬,如果有跨天對賬需求(如昨天下午至今天上午),對賬所用數據需要跨多個表才能執行,這可能改變對賬業務的流程。
?對賬優化
基于本文提出的數據模型和增量計算方法,可以很好的解決按天對賬所存在的問題。結合3.1.2中的示例,我們給出在互聯網金融的對賬業務中,增量計算的實際應用。
T-TDSQL可以基于增量計算的功能將賬戶余額表(user)和賬戶流水表(water)進行精準比對,進行流水級別的細粒度對賬,從而即時發現交易錯誤,并可以立即定位到錯誤的那一條交易,省去繁雜的錯誤交易定位過程。
優化后的對賬的核心思想是:總賬算摘要、細賬筆筆精。
優化后的對賬的效果是:總賬快對、細賬精確、不受時限、任意對賬[1]。
對賬步驟1—總賬對賬:首先讀取給出對賬時間段[s_start,s_stop]內的所有賬戶表數據塊,對每個數據塊內數據采用與傳統對賬方式類似的公式來確認賬戶情況,即進行“總期末余額-總期初余額=總交易變動”試算[2],總期初余額代表s_start時的總余額,總期末余額代表s_stop時的總余額,總交易變動代表每塊內賬戶對應產生的流水,如果有數據塊內的總賬不平,意味著有細賬錯誤,因此要進行步驟2、3所描述的精準對賬。
對賬步驟2—精準對賬—對賬過程:執行如下SQL,將賬戶余額塊和對應賬戶流水塊進行“快照差連接”,返回結果集中每條記錄將含有{交易前余額,交易后余額,交易變動}。
對應的執行效果圖如圖13所示:
(
User READVIEW START s_start TOs_stop as A ORDER BY User_id, Init_trx_id DESC
FULL OUTER JOIN
User READVIEW STARTs_start TO s_stop as B ORDER BY User_id, Init_trx_id DESC
ON A.trx_id= B.init_trx_id
)
FULL OUTER JOIN
Water READVIEW START s_start TO s_stop as C ORDER BYUser_id, Trx_id DESC
ON C.trx_id = A.trx_id
圖13 精準對賬示意圖
對賬步驟3—精準對賬—精準之意:對步驟2結果里的每一條返回記錄進行“交易后余額-交易前余額=交易變動”的試算[3](After-Before=Change),即可確認交易是否有誤。如果有不滿足此等式的情況存在,即為錯誤交易。
錯誤交易主要分為賬戶表錯誤和流水表錯誤兩種。例如,圖13中,結果集中第2條元組,不滿足試算公式,表明流水ID為2的交易進行了錯誤的帳戶余額更新或流水記錄的交易變動值出錯。結果集中的第4條元組,Change字段的值為NULL,代表該條交易的流水缺失。通過下表,我們對各種錯誤情況進行總結,這些錯誤,都需要在對賬過程中進行報警。
表2? 精準對賬錯誤對照表
Before | After | Change | 對賬結果 |
M1 | M2 | M2-M1 | 正確 |
M1 | M2 | NULL | 流水缺失 |
M1 | M2 | (M2-M1)’ | 流水記錄有誤 |
NULL | NULL | M3 | 流水誤增 |
M1 | M2’ | M2-M1 | 賬戶表更新有誤 |
M1 | NULL | M2-M1 | 賬戶表沒有更新 |
NULL | M2 | NULL | 賬戶表誤增元組 |
?
安全
T-TDSQL中有一個邏輯結構“UNDO SEGMENT”,用于撤銷數據即存放反轉DML語句結果所需的信息,只要某個事務修改了數據,那么更新前的原有數據就會被寫入一個撤銷段。
而T-TDSQL實現了全時態數據管理,基于歷史態和存于“UNDO SEGMENT”的過渡態數據,實現了歷史上任何時間點上的數據閃回功能。
聯機閃回
T-TDSQL提供聯機的數據閃回,可以查詢過去某個時間段的數據庫狀態。
而讀取數據庫的過去某個時間點的數據狀態(歷史態被儲存而不是被清理),依據的是4.1.1節提及的三種快照讀操作。這是閃回實現的原理。
基于此原理,實現了多種類型的聯機閃回功能,包括:閃回查詢,閃回刪除,閃回歸檔。
1. 閃回查詢:可以查詢過去某個時間段的數據庫狀態,可將某個表回退到過去某個時間點。
2. 閃回刪除:閃回刪除可以將一個已經被Drop的表還原。相應的索引也會被還原(索引的還原是通過重建的方式進行)。
3. 閃回歸檔:閃回數據歸檔可使表具有回退到過去任何時間點。
業務分析
時態數據的雙時態特性、全態屬性、LineAge特性,以及在數據項上可識別發生的操作的特性等,為數據項賦予了5W的潛能。
5W是指:
1.原因(何因Why):數據挖掘和分析的目標。
2. 對象(何事What):數據項上執行了什么操作,數據變化因何而起(LineAge)。
3. 地點(何地Where):數據項的存儲位置。
4. 時間(何時When):雙時態屬性。
5. 人員(何人Who):用戶和數據項進行關聯,在事務屬性項上建立與用戶UID標識的關聯。
有了這5W的潛能,基于數據項和其歷史,利用AI技術和全數據挖掘技術,可以進行無限想象力的數據分析。這是一個數據分析的新天地。
根據歷史數據負載等情況用AI對系統進行細粒度地、帶有峰值(預測峰值時段壓力)和資源(資源自動配給)特性的調優。
多維分析全數據挖掘技術,可以對以多維形式組織起來的數據進行上卷、下鉆、切片、切塊、旋轉等各種分析操作,以便剖析數據,使分析者、決策者能從多個角度、多個側面觀察數據庫中的數據,從而深入了解包含在數據中的信息和內涵,透視未來。比如,實施上卷操作評估整體情況,實施下鉆操作追查操作細節,為系統的監控和調優等打下基礎。
?
數據重演
T-TDSQL提供數據重演的能力。
歷史態數據存儲,全時態數據中帶有事務時間,基于這兩點,可以分析數據的演變情況和某個時間點的事務發生情況,從而推演數據庫在時間軸上的演進情況。
從數據推斷應用的負載、推斷數據的演化進程,是數據重演的意義所在。T-TDSQL可有效支持數據重演。
?
數據分析
基于用戶數據的歷史變遷進行用戶畫像多維度分析,在歷史態數據的支持下,可方便進行用戶的深度分析;在雙時態的支持下,可以方便根據時間的變遷和事務的執行情況進行數據的分析工作。
Acknowledgments
本項目在騰訊TEG計費平臺部立項,研究內容和實現過程得到中國人民大學教育部數據工程和知識工程重點實驗室和騰訊公司的參與和支持,特別向項目參與人、支持者致謝。
References
[1] Haixiang Li et al. “EfficientTime-interval Data Extraction in MVCC-based RDBMS”. World Wide Web Journal. 2018, pp. 922–933.
[2] 姜曉軼 蔣雪中 周云軒 時態數據庫研究進展 計算機工程與應用 2005
[3] Dharavath Ramesh, Chiranjeev Kumar: A scalablegeneric transaction model scenario for distributed NoSQL databases. Journal ofSystems and Software 101: 43-58 (2015)
[4] 湯庸 時態數據庫導論 2004
[5] Haixiang Li, Yi Feng, PengchengFan. The Art of Database Transaction Processiong: Transaction Management andConcurrency Control. First edition. Beijing. China Machine Press. 2017-10-01
[6] David B. Lomet, Roger S. Barga, Mohamed F.Mokbel, German Shegalov, Rui Wang, Yunyue Zhu: Transaction Time Support Insidea Database Engine. ICDE 2006: 35
[1]不受時限、任意對賬:對賬的SQL語句中指定快照差即可,FROM子句中涉及的表名等不發生變化,即對賬使用的數據源沒有改變,故不影響對賬流程。
[2]試算(Spreadsheet)為會計程序中其中的一個流程,它簡單的定義就是在檢查日記簿的所有交易分錄的借方、貸方金額是否有錯誤之情形。但是在做試算檢查時,應每筆交易分錄紀錄后即做此一動作。
[3]試算(Spreadsheet)為會計程序中其中的一個流程,它簡單的定義就是在檢查日記簿的所有交易分錄的借方、貸方金額是否有錯誤之情形。但是在做試算檢查時,應每筆交易分錄紀錄后即做此一動作。
往期回顧?
TDSQL 全時態數據庫系統-理念與愿景
??
騰訊前沿技術 | 產品 | 行業信息交流發布平臺
?總結
以上是生活随笔為你收集整理的TDSQL 全时态数据库系统 -- 典型案例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 教育机构如何提升在线教育技术能力? |
- 下一篇: TDSQL 全时态数据库系统--核心技术