为数据赋能:腾讯TDSQL分布式金融级数据库前沿技术
?
作者簡(jiǎn)介:李海翔,網(wǎng)名“那海藍(lán)藍(lán)”,騰訊金融云數(shù)據(jù)庫(kù)技術(shù)專家。中國(guó)人民大學(xué)信息學(xué)院工程碩士企業(yè)導(dǎo)師。著有《數(shù)據(jù)庫(kù)事務(wù)處理的藝術(shù):事務(wù)管理和并發(fā)訪問(wèn)控制》、《數(shù)據(jù)庫(kù)查詢優(yōu)化器的藝術(shù):原理解析與SQL性能優(yōu)化》,廣受好評(píng)。
?
2018年5月11日,騰訊TDSQL團(tuán)隊(duì)為中國(guó)數(shù)據(jù)庫(kù)技術(shù)大會(huì)DTCC帶來(lái)了騰訊最新的數(shù)據(jù)庫(kù)核心技術(shù):TDSQL原創(chuàng)的全態(tài)數(shù)據(jù)的概念和基于歷史態(tài)數(shù)據(jù)的可見(jiàn)性判斷算法。
騰訊專家工程師李海翔在DTCC上做了主題為“為數(shù)據(jù)賦能---騰訊TDSQL分布式金融級(jí)數(shù)據(jù)庫(kù)前沿技術(shù)”的技術(shù)內(nèi)容分享。本次分享,基于數(shù)據(jù)庫(kù)事務(wù)處理的核心技術(shù)并發(fā)訪問(wèn)控制技術(shù),TDSQL原創(chuàng)性提出了全態(tài)數(shù)據(jù)的概念和基于歷史態(tài)數(shù)據(jù)的可見(jiàn)性判斷算法,并基于此實(shí)現(xiàn)了全時(shí)態(tài)數(shù)據(jù)庫(kù)。
如下是本次分享的主要內(nèi)容。主要包括:TDSQL背景介紹、T-TDSQL原創(chuàng)技術(shù)出發(fā)點(diǎn)、T-TDSQL核心技術(shù)點(diǎn)、T-TDSQL典型應(yīng)用、T-TDSQL核心理念、項(xiàng)目致謝六個(gè)部分。
TDSQL是一個(gè)穩(wěn)定運(yùn)行了十年之久的分布式數(shù)據(jù)庫(kù),不僅支撐了騰訊公司的計(jì)費(fèi)業(yè)務(wù),而且還在微眾銀行等金融單位的核心業(yè)務(wù)系統(tǒng)穩(wěn)定、高效地運(yùn)行了四年之久。這幾年,TDSQL在技術(shù)層面不斷進(jìn)步,研發(fā)了很多新特性,諸如多級(jí)分區(qū)、熱點(diǎn)更新、隱含主鍵、分布式事務(wù)等,不僅有力的支撐了事務(wù)型的數(shù)據(jù)庫(kù)應(yīng)用,而且在體系結(jié)構(gòu)上也朝Spanner架構(gòu)上邁進(jìn),是一個(gè)名副其實(shí)的NewSQL系統(tǒng)。
TDSQL分布式事務(wù)處理技術(shù),有了長(zhǎng)足進(jìn)步,不僅表現(xiàn)在基于XA實(shí)現(xiàn)了2PC以支持分布式事務(wù)的原子提交,而且在MVCC技術(shù)的基礎(chǔ)上,做了創(chuàng)新,使得TDSQL的事務(wù)處理技術(shù)基于原創(chuàng)技術(shù)而不斷發(fā)展。
TDSQL的原創(chuàng)技術(shù),不是為技術(shù)而技術(shù),而是基于業(yè)務(wù)的需求,為解決業(yè)務(wù)問(wèn)題而進(jìn)行的創(chuàng)新。
騰訊公司的計(jì)費(fèi)業(yè)務(wù)系統(tǒng),是世界上領(lǐng)先的金融云計(jì)費(fèi)業(yè)務(wù)系統(tǒng)。這個(gè)系統(tǒng)包括SAAS、PAAS、IAAS三個(gè)層面。在SAAS層面,包括米大師、云商店、TDSQL等系統(tǒng)。
TDSQL托管賬戶近280億,米大師依托TDSQL進(jìn)行金融交易,騰訊充值及其相關(guān)合作伙伴的日流水量超過(guò)150億條,每天處理的交易量超過(guò)100億筆。金融數(shù)據(jù)在TDSQL數(shù)據(jù)庫(kù)中進(jìn)行結(jié)算、對(duì)賬、審計(jì)、風(fēng)控?cái)?shù)據(jù)分析、構(gòu)建用戶畫(huà)像等業(yè)務(wù)。如王者榮耀游戲點(diǎn)券的對(duì)賬業(yè)務(wù)、用戶賬戶消費(fèi)充值變化審計(jì)與風(fēng)控業(yè)務(wù)等。
要進(jìn)行諸如對(duì)賬、審計(jì)等業(yè)務(wù),數(shù)據(jù)來(lái)源有兩部分。一部分?jǐn)?shù)據(jù)來(lái)源是從不同系統(tǒng)(關(guān)系數(shù)據(jù)庫(kù)或NoSQL系統(tǒng))的日志數(shù)據(jù)中來(lái),稱為流水日志。但某個(gè)這樣的系統(tǒng)每天的日志流水?dāng)?shù)據(jù)近百G且從趨勢(shì)看增量數(shù)據(jù)遞增很快。另外,有些數(shù)據(jù)是在TDSQL中按時(shí)間分表,需在一段時(shí)間結(jié)束后對(duì)按時(shí)間分表的數(shù)據(jù)利用流水日志進(jìn)行對(duì)賬計(jì)算。
對(duì)賬主要是解決幾種異常情況:
1.?? 系統(tǒng)存在BUG,或者在故障時(shí),未表現(xiàn)出預(yù)期的情況。這可能導(dǎo)致發(fā)貨成功扣款不成功,或者扣款成功未發(fā)貨的情況。如騰訊視頻VIP管理系統(tǒng)的充值、發(fā)貨。
2.?? 規(guī)避黑客/內(nèi)部風(fēng)險(xiǎn)。例如不法人員繞過(guò)業(yè)務(wù)系統(tǒng)去給自己充值等舞弊行為。
這樣的對(duì)賬業(yè)務(wù)種類很多,不同的應(yīng)用其日志流水格式不完全相同,TDSQL托管的賬戶需要定時(shí)對(duì)多級(jí)數(shù)千種業(yè)務(wù)和賬戶做數(shù)據(jù)一致性對(duì)賬檢驗(yàn)。
從技術(shù)的角度看,存在四個(gè)問(wèn)題:
1.?? 應(yīng)用開(kāi)發(fā)復(fù)雜:使用業(yè)務(wù)日志,需要業(yè)務(wù)系統(tǒng)不斷產(chǎn)生日志信息,然后耗費(fèi)計(jì)算資源對(duì)不同的日志格式進(jìn)行解析,把日志信息存儲(chǔ)到分析系統(tǒng)。由此帶來(lái)了開(kāi)發(fā)的負(fù)擔(dān)和資源的浪費(fèi)。
2.?? 數(shù)據(jù)邏輯割裂:TDSQL中按時(shí)間分表,只能按確定的時(shí)間段進(jìn)行結(jié)算,不能靈活、方便的計(jì)算。如計(jì)算任意時(shí)間段內(nèi)的數(shù)據(jù),按時(shí)間段的分表在物理上割裂了數(shù)據(jù)按時(shí)間的邏輯連續(xù)特性,需要指定若干個(gè)特定的分表才能進(jìn)行計(jì)算。
3.?? 實(shí)時(shí)特性丟失:如上兩個(gè)問(wèn)題,隱含地,意味著進(jìn)行計(jì)算的數(shù)據(jù)需要導(dǎo)入到一個(gè)新的分析系統(tǒng)進(jìn)行計(jì)算,導(dǎo)出/導(dǎo)入數(shù)據(jù)的過(guò)程也帶來(lái)了資源和時(shí)間的消耗、使得分析系統(tǒng)難以具備實(shí)時(shí)計(jì)算特性。
4.?? 數(shù)據(jù)管理復(fù)雜:另外,日志等信息,是歷史態(tài)數(shù)據(jù),需要長(zhǎng)期保存。在騰訊公司每日對(duì)不同格式的、超過(guò)150億條流水日志進(jìn)行生成、存儲(chǔ)、解析與管理等,這成為一個(gè)巨大的挑戰(zhàn)。
現(xiàn)代的數(shù)據(jù)庫(kù)系統(tǒng)只保留有數(shù)據(jù)的當(dāng)前值,而因存儲(chǔ)成本等原因,歷史態(tài)數(shù)據(jù)被丟棄。而數(shù)據(jù)作為重要的資產(chǎn),不管是當(dāng)前數(shù)據(jù),還是歷史上曾經(jīng)存在過(guò)的數(shù)據(jù),都具有重要價(jià)值。因此,歷史態(tài)數(shù)據(jù)存儲(chǔ)、被分析、被挖掘、被反復(fù)使用,是當(dāng)前互聯(lián)網(wǎng)等企業(yè)的需求。尤其是金融類歷史態(tài)數(shù)據(jù),因?yàn)榘踩⑿枰欢啻斡?jì)算的原因,在騰訊公司的計(jì)費(fèi)業(yè)務(wù)中,帶有時(shí)態(tài)屬性的數(shù)據(jù)被管理的需求日益旺盛。
基于上述原因,騰訊公司基于TDSQL關(guān)系型數(shù)據(jù)庫(kù)研發(fā)了時(shí)態(tài)數(shù)據(jù)庫(kù) T-TDSQL,由數(shù)據(jù)庫(kù)系統(tǒng)統(tǒng)一管理海量的全時(shí)態(tài)數(shù)據(jù)、當(dāng)前數(shù)據(jù),解決了上述四個(gè)業(yè)務(wù)中的問(wèn)題。
業(yè)務(wù)痛點(diǎn)的解決,是基于數(shù)據(jù)庫(kù)的特點(diǎn)和業(yè)務(wù)場(chǎng)景進(jìn)行深入分析和思考而得以解決的。
因?yàn)閿?shù)據(jù)有價(jià)值,所以TDSQL團(tuán)隊(duì)認(rèn)為:歷史數(shù)據(jù)富有價(jià)值。這是TDSQL時(shí)態(tài)數(shù)據(jù)庫(kù)T-TDSQL的核心價(jià)值觀。因此,我們給出了TDSQL對(duì)于數(shù)據(jù)的新的認(rèn)識(shí)。
TDSQL認(rèn)為:
數(shù)據(jù)的狀態(tài)屬性,標(biāo)識(shí)數(shù)據(jù)的生命周期軌跡。數(shù)據(jù)的生命周期分為三個(gè)階段,每個(gè)階段刻畫(huà)數(shù)據(jù)的不同狀態(tài)屬性,以標(biāo)識(shí)數(shù)據(jù)的生命周期軌跡中所處的狀態(tài)。
1.??當(dāng)前態(tài)(Current State):數(shù)據(jù)項(xiàng)的最新版本的數(shù)據(jù),是處于當(dāng)前階段的數(shù)據(jù)。處于當(dāng)前階段的數(shù)據(jù)的狀態(tài),稱為當(dāng)前態(tài)。
2.??歷史態(tài)(Historical state):數(shù)據(jù)項(xiàng)在歷史上的一個(gè)狀態(tài),其值是舊值,不是當(dāng)前值。處于歷史階段的數(shù)據(jù)的狀態(tài),稱為歷史態(tài)。一個(gè)數(shù)據(jù)項(xiàng)的歷史態(tài),可以有多個(gè),反映了數(shù)據(jù)的狀態(tài)變遷的過(guò)程。處于歷史態(tài)的數(shù)據(jù),只能被讀取不能再被修改或刪除。
3.??過(guò)渡態(tài)(Transitional State):不是數(shù)據(jù)項(xiàng)的最新的版本也不是歷史態(tài)版本,處于從當(dāng)前態(tài)向歷史態(tài)轉(zhuǎn)變的過(guò)程中。處于過(guò)渡態(tài)的數(shù)據(jù),稱為半衰數(shù)據(jù)。
?
這三個(gè)狀態(tài),涵蓋了一個(gè)數(shù)據(jù)項(xiàng)的生命周期,合稱為數(shù)據(jù)全態(tài)(full-state),或稱為全態(tài)數(shù)據(jù)。在MVCC機(jī)制下,數(shù)據(jù)的三種狀態(tài)均存在;在非MVCC機(jī)制下,數(shù)據(jù)只存在歷史態(tài)和當(dāng)前態(tài)。
1.??當(dāng)前態(tài):MVCC或封鎖并發(fā)訪問(wèn)控制機(jī)制下,事務(wù)提交后的數(shù)據(jù)的新值處于當(dāng)前態(tài)。
2.??歷史態(tài):MVCC機(jī)制下,當(dāng)前活躍事務(wù)列表中最小的事務(wù)之前的事務(wù)生成的數(shù)據(jù),其狀態(tài)處于歷史態(tài)。在封鎖并發(fā)訪問(wèn)控制機(jī)制下,事務(wù)提交后,提交前的數(shù)據(jù)的值變?yōu)闅v史態(tài)的值,即數(shù)據(jù)項(xiàng)的舊值處于歷史態(tài)。
3.??過(guò)渡態(tài):MVCC機(jī)制下,被讀取的版本上尚有活躍事務(wù)(非最新相關(guān)事務(wù))在使用,因最新相關(guān)事務(wù)修改了數(shù)據(jù)項(xiàng)的值,其最新值已經(jīng)處于一個(gè)當(dāng)前態(tài),被讀取到的值相對(duì)當(dāng)前態(tài)已經(jīng)處于一個(gè)歷史狀態(tài),故其數(shù)據(jù)狀態(tài)介于當(dāng)前態(tài)和歷史態(tài)之間,所以稱為過(guò)渡態(tài)。
數(shù)據(jù)的雙時(shí)態(tài)屬性,分別為有效時(shí)間屬性、事務(wù)時(shí)間屬性。
有效時(shí)間屬性表示數(shù)據(jù)表示的對(duì)象在時(shí)間屬性上的情況。如Kate中學(xué)起止時(shí)間是2000-09-01到2003-07-30,而大學(xué)起止時(shí)間是2003-09-01到2007-07-30,這里的時(shí)間就是有效時(shí)間。
事務(wù)時(shí)間屬性表示數(shù)據(jù)的某個(gè)狀態(tài)的時(shí)間發(fā)生時(shí)刻。數(shù)據(jù)具有其時(shí)態(tài)屬性,即在何時(shí)數(shù)據(jù)庫(kù)系統(tǒng)進(jìn)行了什么樣的操作。某項(xiàng)操作在數(shù)據(jù)庫(kù)系統(tǒng)內(nèi)被封裝為事務(wù),而事務(wù)具有原子性。因此,我們采用了事務(wù)標(biāo)志來(lái)標(biāo)識(shí)一個(gè)數(shù)據(jù)的事務(wù)時(shí)態(tài)屬性。
從形式上看,有效時(shí)間屬性和事務(wù)時(shí)間屬性,在數(shù)據(jù)模型中用普通的用戶自定義字段進(jìn)行表示,只是用特定的關(guān)鍵字加以描述,供數(shù)據(jù)庫(kù)引擎進(jìn)行約束檢查和賦值。
TDSQL團(tuán)隊(duì)期望,構(gòu)建一個(gè)數(shù)據(jù)庫(kù)系統(tǒng),解決如上問(wèn)題,新系統(tǒng)應(yīng)該提供的特性如下:
?
因此,基于TDSQL的T-TDSQL時(shí)態(tài)數(shù)據(jù)庫(kù),有了如下的特性,這些特性,能夠涵蓋雙時(shí)態(tài)的數(shù)據(jù)應(yīng)用、數(shù)據(jù)安全、數(shù)據(jù)分析、簡(jiǎn)化應(yīng)用開(kāi)發(fā)等四大方面的問(wèn)題:
T-TDSQL的核心技術(shù)之一,是數(shù)據(jù)模型的定義,全態(tài)數(shù)據(jù)模型和雙時(shí)態(tài)數(shù)據(jù)模型的結(jié)合,造就了T-TDSQL。
1.T-TDSQL的核心技術(shù)一,數(shù)據(jù)模型
在這個(gè)模型中,全態(tài)數(shù)據(jù)體現(xiàn)在了數(shù)據(jù)項(xiàng)的歷史版本上;時(shí)態(tài)數(shù)據(jù)不僅有事務(wù)時(shí)態(tài)、還有有效時(shí)間時(shí)態(tài)。而全態(tài)數(shù)據(jù)的歷史態(tài)數(shù)據(jù),不僅可以追溯數(shù)據(jù)庫(kù)系統(tǒng)的操作發(fā)生時(shí)間,還可以追溯發(fā)生的操作類型,如下圖中的“Operation”列,可以知道在數(shù)據(jù)項(xiàng)上曾經(jīng)發(fā)生的DML操作是UPDATE還是INSERT還是DELETE。這是一個(gè)非常酷的特性,這使得用戶在T-TDSQL系統(tǒng)中可以實(shí)現(xiàn)“一切過(guò)往兼可追溯”的夢(mèng)想。
2.T-TDSQL的核心技術(shù)二,歷史數(shù)據(jù)轉(zhuǎn)儲(chǔ)時(shí)機(jī)
歷史數(shù)據(jù)的存儲(chǔ)時(shí)機(jī),是T-TDSQL的另外一個(gè)核心技術(shù)。
T-TDSQL用全態(tài)的數(shù)據(jù)概念,巧妙地利用MySQL的回滾段和Purge機(jī)制,實(shí)現(xiàn)了歷史態(tài)數(shù)據(jù)的轉(zhuǎn)儲(chǔ)。一個(gè)原理圖如下:
3.T-TDSQL的核心技術(shù)二,一致性快照點(diǎn)
在PostgreSQL中,如果實(shí)現(xiàn)本技術(shù),可以考慮結(jié)合多版本的存儲(chǔ)特點(diǎn),實(shí)現(xiàn)當(dāng)前態(tài)數(shù)據(jù)與歷史態(tài)、過(guò)渡態(tài)的存儲(chǔ)分離,這需要修改已有的數(shù)據(jù)可見(jiàn)性判斷算法、頁(yè)面存儲(chǔ)格式、數(shù)據(jù)的合并時(shí)機(jī)、緩沖區(qū)的讀寫(xiě)和heap的構(gòu)造方式等,更重要的是要實(shí)現(xiàn)新的數(shù)據(jù)一致性快照點(diǎn)。
而T-TDSQL基于MySQL實(shí)現(xiàn)了新的數(shù)據(jù)一致性快照點(diǎn)的構(gòu)建,因而可以獲取任何時(shí)間段(包括歷史發(fā)生過(guò)的時(shí)間)上的任何狀態(tài)的數(shù)據(jù)。
作為原創(chuàng)技術(shù),T-TDSQL的核心技術(shù)點(diǎn)及其思路,相關(guān)論文已經(jīng)在World Wide Web journal上以題為《Efficienttime-interval data extraction in MVCC-based RDBMS》發(fā)表,詳情可參見(jiàn):
https://link.springer.com/article/10.1007/s11280-018-0552-7
?
四、T-TDSQL的典型應(yīng)用時(shí)態(tài)信息處理已經(jīng)成為許多新一代數(shù)據(jù)庫(kù)與信息系統(tǒng)的關(guān)鍵技術(shù),特別是在金融領(lǐng)域 、電子商務(wù)、數(shù)據(jù)倉(cāng)庫(kù)、地籍管理系統(tǒng)、土地利用規(guī)劃系統(tǒng)、地理信息系統(tǒng)中扮演著日益重要的角色。
電子商務(wù)、金融業(yè)務(wù)系統(tǒng)中,存在大量的收入、支出、余額等數(shù)據(jù),并且隨著業(yè)務(wù)的推進(jìn),新數(shù)據(jù)源源不斷地產(chǎn)生,這些數(shù)據(jù)將在對(duì)賬、審計(jì)、用戶畫(huà)像等業(yè)務(wù)中發(fā)揮重要作用。通過(guò)實(shí)現(xiàn)事務(wù)時(shí)態(tài)功能,T-TDSQL能快速、精細(xì)、實(shí)時(shí)地獲取這些數(shù)據(jù)。
在互聯(lián)網(wǎng)金融業(yè)務(wù)中,對(duì)賬業(yè)務(wù)是一個(gè)經(jīng)典的業(yè)務(wù)。
T-TDSQL為騰訊的計(jì)費(fèi)對(duì)賬業(yè)務(wù)提供了完美的解決方案。
?
1.對(duì)賬業(yè)務(wù)
互聯(lián)網(wǎng)金融行業(yè)對(duì)數(shù)據(jù)的準(zhǔn)確性要求極高,而在互聯(lián)網(wǎng)環(huán)境中,數(shù)據(jù)不一致或數(shù)據(jù)錯(cuò)誤時(shí)有發(fā)生,因此,通過(guò)對(duì)賬來(lái)降低賬戶余額等數(shù)據(jù)錯(cuò)誤造成的風(fēng)險(xiǎn)十分重要。
在騰訊計(jì)費(fèi)業(yè)務(wù)中,采用將賬戶余額表(user)和賬戶流水表(water)按小時(shí)/天為周期進(jìn)行比對(duì)的方式,來(lái)發(fā)現(xiàn)賬戶余額與交易流水的不一致現(xiàn)象,從而及時(shí)對(duì)錯(cuò)誤交易進(jìn)行修正。
傳統(tǒng)的對(duì)賬采用按固定時(shí)間段(如分鐘/小時(shí)/天)為單位進(jìn)行對(duì)賬。如現(xiàn)對(duì)2018年4月11日的交易進(jìn)行對(duì)賬,首先需要得到4月11日期初賬戶余額表和期末賬戶余額表,以及當(dāng)天的交易流水表;然后對(duì)賬戶表通過(guò)按用戶ID分組,并計(jì)算每個(gè)用戶的期末余額減去期初余額,記為結(jié)果A,對(duì)流水表按用戶ID分組,并將交易金額分組求和,記為結(jié)果B;最后將每個(gè)用戶的結(jié)果A和結(jié)果B進(jìn)行比對(duì),如果A=B,則交易沒(méi)有問(wèn)題,否則該用戶在當(dāng)天的交易存在錯(cuò)誤。
對(duì)于按固定時(shí)間段對(duì)賬,主要存在以下三個(gè)問(wèn)題:
1.??時(shí)效性差:對(duì)于錯(cuò)誤交易,不能立即發(fā)現(xiàn)并反饋,延遲了以固定時(shí)間段為單位的一段時(shí)間后才能發(fā)現(xiàn)錯(cuò)誤。
2.??對(duì)賬不精準(zhǔn):定位錯(cuò)誤交易較復(fù)雜。例如:如果用戶在一天內(nèi)發(fā)生的多筆交易,其中一筆出現(xiàn)了錯(cuò)誤,通過(guò)按天對(duì)賬的方式不能直接定位到具體的哪條交易出現(xiàn)錯(cuò)誤,而只能定位到用戶級(jí)別,即仍然需要人工參與,將該錯(cuò)誤用戶的當(dāng)天交易都確認(rèn)一遍,才能找到具體的錯(cuò)誤交易。
3.??對(duì)賬不靈活:按固定時(shí)間段對(duì)賬,如以天為單位,則只能等這一天內(nèi)的增量數(shù)據(jù)沉淀下來(lái),才能進(jìn)行對(duì)賬,如果有跨天對(duì)賬需求(如昨天下午至今天上午),對(duì)賬所用數(shù)據(jù)需要跨多個(gè)表才能執(zhí)行,這可能改變對(duì)賬業(yè)務(wù)的流程。
2.對(duì)賬優(yōu)化
基于本文提出的數(shù)據(jù)模型和增量計(jì)算方法,可以很好的解決按天對(duì)賬所存在的問(wèn)題。結(jié)合3.1.2中的示例,我們給出在互聯(lián)網(wǎng)金融的對(duì)賬業(yè)務(wù)中,增量計(jì)算的實(shí)際應(yīng)用。
T-TDSQL可以基于增量計(jì)算的功能將賬戶余額表(user)和賬戶流水表(water)進(jìn)行精準(zhǔn)比對(duì),進(jìn)行流水級(jí)別的細(xì)粒度對(duì)賬,從而即時(shí)發(fā)現(xiàn)交易錯(cuò)誤,并可以立即定位到錯(cuò)誤的那一條交易,省去繁雜的錯(cuò)誤交易定位過(guò)程。
優(yōu)化后的對(duì)賬的核心思想是:總賬算摘要、細(xì)賬筆筆精。
優(yōu)化后的對(duì)賬的效果是:總賬快對(duì)、細(xì)賬精確、不受時(shí)限、任意對(duì)賬[1]。
對(duì)賬步驟1—總賬對(duì)賬:首先讀取給出對(duì)賬時(shí)間段[s_start,s_stop]內(nèi)的所有賬戶表數(shù)據(jù)塊,對(duì)每個(gè)數(shù)據(jù)塊內(nèi)數(shù)據(jù)采用與傳統(tǒng)對(duì)賬方式類似的公式來(lái)確認(rèn)賬戶情況,即進(jìn)行“總期末余額-總期初余額=總交易變動(dòng)”試算[2],總期初余額代表s_start時(shí)的總余額,總期末余額代表s_stop時(shí)的總余額,總交易變動(dòng)代表每塊內(nèi)賬戶對(duì)應(yīng)產(chǎn)生的流水,如果有數(shù)據(jù)塊內(nèi)的總賬不平,意味著有細(xì)賬錯(cuò)誤,因此要進(jìn)行步驟2、3所描述的精準(zhǔn)對(duì)賬。
對(duì)賬步驟2—精準(zhǔn)對(duì)賬—對(duì)賬過(guò)程:執(zhí)行如下SQL,將賬戶余額塊和對(duì)應(yīng)賬戶流水塊進(jìn)行“快照差連接”,返回結(jié)果集中每條記錄將含有{交易前余額,交易后余額,交易變動(dòng)}。對(duì)應(yīng)的執(zhí)行效果圖下圖所示:
精準(zhǔn)對(duì)賬示意圖
?
對(duì)賬步驟3—精準(zhǔn)對(duì)賬—精準(zhǔn)之意:對(duì)步驟2結(jié)果里的每一條返回記錄進(jìn)行“交易后余額-交易前余額=交易變動(dòng)”的試算[3](After-Before=Change),即可確認(rèn)交易是否有誤。如果有不滿足此等式的情況存在,即為錯(cuò)誤交易。
錯(cuò)誤交易主要分為賬戶表錯(cuò)誤和流水表錯(cuò)誤兩種。例如,上圖中,結(jié)果集中第2條元組,不滿足試算公式,表明流水ID為2的交易進(jìn)行了錯(cuò)誤的帳戶余額更新或流水記錄的交易變動(dòng)值出錯(cuò)。結(jié)果集中的第4條元組,Change字段的值為NULL,代表該條交易的流水缺失。通過(guò)上圖中的表,我們對(duì)各種錯(cuò)誤情況進(jìn)行總結(jié),這些錯(cuò)誤,都需要在對(duì)賬過(guò)程中進(jìn)行報(bào)警。
?
3.有效時(shí)間的時(shí)態(tài)類應(yīng)用
基于T-TDSQL的全時(shí)態(tài)核心技術(shù),本次分享還從雙時(shí)態(tài)的角度對(duì)典型應(yīng)用做了介紹。如下圖所示。
4.數(shù)據(jù)安全類應(yīng)用
基于歷史狀態(tài)查詢這一特性,T-TDSQL系統(tǒng)在數(shù)據(jù)訂正、歷史追蹤等方面,提供靈活強(qiáng)大的數(shù)據(jù)安全保障功能,可以大大簡(jiǎn)化和加快審計(jì)、對(duì)賬等業(yè)務(wù)。
查詢時(shí)間段內(nèi)插入的數(shù)據(jù),用于數(shù)據(jù)統(tǒng)計(jì)和追蹤,如統(tǒng)計(jì)新開(kāi)賬戶、異常記錄何時(shí)被添加等。
查詢時(shí)間段內(nèi)刪除的數(shù)據(jù),在安全保障和數(shù)據(jù)統(tǒng)計(jì)等方面作用顯著,如恢復(fù)誤刪的數(shù)據(jù)、統(tǒng)計(jì)銷戶人數(shù)等。
查詢時(shí)間段內(nèi)更新的數(shù)據(jù),能夠追蹤數(shù)據(jù)異常的發(fā)生時(shí)間和發(fā)生異常前的數(shù)據(jù),用于數(shù)據(jù)異常的修復(fù)。
綜合查詢所有狀態(tài)的歷史態(tài)數(shù)據(jù),在數(shù)據(jù)重演方面,可以輔助災(zāi)后恢復(fù),或用于線下演練;數(shù)據(jù)統(tǒng)計(jì)方面,因支持任意時(shí)空節(jié)點(diǎn)的數(shù)據(jù)計(jì)算,對(duì)對(duì)賬等業(yè)務(wù)大有裨益;安全保障方面,簡(jiǎn)化了錯(cuò)誤數(shù)據(jù)、誤刪數(shù)據(jù)的追蹤和恢復(fù)。
如下是一些安全方面的示例:
除此之外,基于全時(shí)態(tài)態(tài)數(shù)據(jù),實(shí)現(xiàn)數(shù)據(jù)重演、更有價(jià)值的數(shù)據(jù)分析和挖掘、使用AI技術(shù)對(duì)系統(tǒng)自動(dòng)調(diào)優(yōu)等成為可能。
為什么T-TDSQL要去實(shí)現(xiàn)全時(shí)態(tài)數(shù)據(jù)庫(kù)?
原創(chuàng)技術(shù)的背后,是什么在驅(qū)動(dòng)著T-TDSQL團(tuán)隊(duì)做出這樣的一個(gè)全時(shí)態(tài)數(shù)據(jù)庫(kù)系統(tǒng)?
這些問(wèn)題,其實(shí)更為重要。挖掘這些問(wèn)題的原因,為倡導(dǎo)原創(chuàng)而努力,當(dāng)是TDSQL團(tuán)隊(duì)致力于技術(shù)分享時(shí)更看重的價(jià)值因素。
在TDSQL團(tuán)隊(duì)看來(lái),“數(shù)據(jù)富有價(jià)值,歷史數(shù)據(jù)富有價(jià)值”。在業(yè)務(wù)當(dāng)中,挖掘數(shù)據(jù)的價(jià)值是非常重要的一環(huán),這也是很多人在思考的內(nèi)容,認(rèn)為任何數(shù)據(jù)都有價(jià)值是很有意義的。
因此,T-TDSQL項(xiàng)目的思考之后的觀點(diǎn)是“Historical data are valuable. Business is a sword, Technology is only ashield.”。那么,什么是盾?什么是劍?盾和劍之間有什么關(guān)系呢?
在TDSQL看來(lái),技術(shù)只是一個(gè)防守工具,用于把夢(mèng)想變成現(xiàn)實(shí)。夢(mèng)想是技術(shù)人想利用各種高大上、高精尖的技術(shù)解決現(xiàn)實(shí)問(wèn)題的美好愿景,諸如分布式、一致性、快照、RDMA、NVM、AI、全數(shù)據(jù)挖掘等各種技術(shù)的炫酷使用。業(yè)務(wù)只是一個(gè)進(jìn)攻的工具,用于發(fā)現(xiàn)夢(mèng)想。TDSQL并不倡導(dǎo)業(yè)務(wù)為王的觀點(diǎn),而是左手盾右手劍,兩手都要硬。但僅是左手盾右手劍,行走在技術(shù)的江湖,這只能成就技術(shù)人行俠仗義的夢(mèng)想。其背后,還缺少靈魂的支柱。
而歷史數(shù)據(jù)富有價(jià)值,在(金融/騰訊/互聯(lián)網(wǎng)/一切…)業(yè)務(wù)中,挖掘數(shù)據(jù)的價(jià)值,更是富有意義。
但是,百尺竿頭更進(jìn)一步。
數(shù)據(jù)的創(chuàng)造是由用戶和其業(yè)務(wù)決定的,他們是創(chuàng)造數(shù)據(jù)的甲方。數(shù)據(jù)庫(kù)承載了數(shù)據(jù)的管理職責(zé),是否數(shù)據(jù)庫(kù)系統(tǒng)也可以參與到數(shù)據(jù)的創(chuàng)造環(huán)節(jié)中來(lái)呢?
在TDSQL團(tuán)隊(duì)看來(lái),全時(shí)態(tài)這一概念,正是數(shù)據(jù)庫(kù)系統(tǒng)參與到數(shù)據(jù)創(chuàng)造環(huán)節(jié)的最佳契機(jī)。數(shù)據(jù)庫(kù)系統(tǒng)為數(shù)據(jù)賦于了事務(wù)時(shí)態(tài)、賦于了DML操作過(guò)程中的事件源,甚至可能為數(shù)據(jù)之間賦于關(guān)聯(lián)關(guān)系(如下圖中的5W、Lineage),這使得數(shù)據(jù)庫(kù)系統(tǒng)也成為了數(shù)據(jù)的創(chuàng)造者。
這就是我們、TDSQL團(tuán)隊(duì)在技術(shù)和業(yè)務(wù)背后的驅(qū)動(dòng)要素:“為數(shù)據(jù)賦能”的理念。
在“為數(shù)據(jù)賦能”這個(gè)理念的支撐下,基于TDSQL的T-TDSQL因此而誕生。為數(shù)據(jù)賦能,因而能讓數(shù)據(jù)擁有更多的價(jià)值,讓數(shù)據(jù)庫(kù)變成數(shù)據(jù)的生產(chǎn)者,參與數(shù)據(jù)的創(chuàng)造。下圖表明,為數(shù)據(jù)賦能,T-TDSQL從5W角度,讓數(shù)據(jù)擁有了時(shí)間(雙時(shí)態(tài),WHEN)、地點(diǎn)(存儲(chǔ)的歷史表,WHERE)、人物(用戶ID,WHO)、對(duì)象(全態(tài)數(shù)據(jù),WHAT)、原因(DML等操作,WHY)等要素,使得數(shù)據(jù)不再僅僅是用戶使用CREATETABLE語(yǔ)句所創(chuàng)建的數(shù)據(jù),而是包含了多種由數(shù)據(jù)庫(kù)系統(tǒng)所創(chuàng)造的數(shù)據(jù)、且在數(shù)據(jù)的生命周期中融入了數(shù)據(jù)歷史使其富有縱深的有價(jià)值的全部數(shù)據(jù)。
有了這些,數(shù)據(jù)庫(kù)系統(tǒng)能夠更加主動(dòng)地追溯數(shù)據(jù)的歷史,推演數(shù)據(jù)的變遷,預(yù)測(cè)數(shù)據(jù)(世界)的未來(lái)。
?
六、致謝本項(xiàng)目在騰訊立項(xiàng),研究?jī)?nèi)容和實(shí)現(xiàn)過(guò)程得到中國(guó)人民大學(xué)教育部數(shù)據(jù)工程和知識(shí)工程重點(diǎn)實(shí)驗(yàn)室和騰訊公司的參與和支持,特別向項(xiàng)目參與人、支持者致謝。
為從思維、理念、技術(shù)等多個(gè)角度為本項(xiàng)目做出貢獻(xiàn)的人致敬!
[1]不受時(shí)限、任意對(duì)賬:對(duì)賬的SQL語(yǔ)句中指定快照差即可,FROM子句中涉及的表名等不發(fā)生變化,即對(duì)賬使用的數(shù)據(jù)源沒(méi)有改變,故不影響對(duì)賬流程。
[2]試算(Spreadsheet)為會(huì)計(jì)程序中其中的一個(gè)流程,它簡(jiǎn)單的定義就是在檢查日記簿的所有交易分錄的借方、貸方金額是否有錯(cuò)誤之情形。但是在做試算檢查時(shí),應(yīng)每筆交易分錄紀(jì)錄后即做此一動(dòng)作。
[3]試算(Spreadsheet)為會(huì)計(jì)程序中其中的一個(gè)流程,它簡(jiǎn)單的定義就是在檢查日記簿的所有交易分錄的借方、貸方金額是否有錯(cuò)誤之情形。但是在做試算檢查時(shí),應(yīng)每筆交易分錄紀(jì)錄后即做此一動(dòng)作。
超強(qiáng)干貨來(lái)襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生
總結(jié)
以上是生活随笔為你收集整理的为数据赋能:腾讯TDSQL分布式金融级数据库前沿技术的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 如何让xtrabackup恢复速度提升2
- 下一篇: 腾讯研发专家:TXSQL如何成为云计算时