本文大綱:
1
TDSQL是騰訊公司研發(fā)的一款事務型分布式數(shù)據(jù)庫。
T-TDSQL是基于TDSQL的一個分布式全時態(tài)數(shù)據(jù)庫。其特點是可擴展、多版本事務管理、分布式存儲和計算、強數(shù)據(jù)一致性和強同步機制,且提供有效時間、事務時間雙時態(tài)的全態(tài)數(shù)據(jù)存儲、管理、計算。
這篇文章描述了T-TDSQL的架構、雙時態(tài)特性集,以及全雙時態(tài)設計思考點和決策的因素。另外,基于MVCC技術描述了一種“全態(tài)數(shù)據(jù)可見性判斷算法/歷史態(tài)數(shù)據(jù)可見性判斷算法”,這種算法能夠讀取到全態(tài)/歷史態(tài)數(shù)據(jù)和其上發(fā)生的操作,這是T-TDSQL全時態(tài)數(shù)據(jù)庫系統(tǒng)實現(xiàn)的關鍵算法。另外,T-TDSQL支持多種強大的特性,諸如:無阻塞讀歷史態(tài)數(shù)據(jù)、無鎖只讀事務、增量抽取、增量計算、全時態(tài)一致性快照等。
全時態(tài)數(shù)據(jù)庫T-TDSQL核心價值觀是:歷史數(shù)據(jù)富有價值。
全時態(tài)數(shù)據(jù)庫T-TDSQL核心理念是:為數(shù)據(jù)賦能。
2
研究動機
騰訊公司的計費業(yè)務系統(tǒng),是世界上領先的金融云計費業(yè)務系統(tǒng)。這個系統(tǒng)包括SAAS、PAAS、IAAS三個層面。在SAAS層面,包括米大師、云商店、TDSQL等系統(tǒng)。
TDSQL托管賬戶近280億,米大師依托TDSQL進行金融交易,騰訊充值及其相關合作伙伴的日流水量超過150億條,每天處理的交易量超過100億筆。金融數(shù)據(jù)在TDSQL數(shù)據(jù)庫中進行結算、對賬、審計、風控數(shù)據(jù)分析、構建用戶畫像等業(yè)務。如王者榮耀游戲點券的對賬業(yè)務、用戶賬戶消費充值變化審計與風控業(yè)務等。
要進行諸如對賬、審計等業(yè)務,數(shù)據(jù)來源有兩部分。一部分數(shù)據(jù)來源是從不同系統(tǒng)(關系數(shù)據(jù)庫或NoSQL系統(tǒng))的日志數(shù)據(jù)中來,稱為流水日志。但某個這樣的系統(tǒng)每天的日志流水數(shù)據(jù)近百G且從趨勢看增量數(shù)據(jù)遞增很快。另外,有些數(shù)據(jù)是在TDSQL中按時間分表,需在一段時間結束后對按時間分表的數(shù)據(jù)利用流水日志進行對賬計算。
對賬主要是解決幾種異常情況:
1.系統(tǒng)存在BUG,或者在故障時,未表現(xiàn)出預期的情況。這可能導致發(fā)貨成功扣款不成功,或者扣款成功未發(fā)貨的情況。如騰訊視頻VIP管理系統(tǒng)的充值、發(fā)貨。
2.規(guī)避黑客/內(nèi)部風險。例如不法人員繞過業(yè)務系統(tǒng)去給自己充值等舞弊行為。
這樣的對賬業(yè)務種類很多,不同的應用其日志流水格式不完全相同,TDSQL托管的賬戶需要定時對多級數(shù)千種業(yè)務和賬戶做數(shù)據(jù)一致性對賬檢驗。
從技術的角度看,存在四個問題:
1.應用開發(fā)復雜:使用業(yè)務日志,需要業(yè)務系統(tǒng)不斷產(chǎn)生日志信息,然后耗費計算資源對不同的日志格式進行解析,把日志信息存儲到分析系統(tǒng)。由此帶來了開發(fā)的負擔和資源的浪費。
2.數(shù)據(jù)邏輯割裂:TDSQL中按時間分表,只能按確定的時間段進行結算,不能靈活、方便的計算。如計算任意時間段內(nèi)的數(shù)據(jù),按時間段的分表在物理上割裂了數(shù)據(jù)按時間的邏輯連續(xù)特性,需要指定若干個特定的分表才能進行計算。
3.實時特性丟失:如上兩個問題,隱含地,意味著進行計算的數(shù)據(jù)需要導入到一個新的分析系統(tǒng)進行計算,導出/導入數(shù)據(jù)的過程也帶來了資源和時間的消耗、使得分析系統(tǒng)難以具備實時計算特性。
4.數(shù)據(jù)管理復雜:另外,日志等信息,是歷史態(tài)數(shù)據(jù)圖書管理系統(tǒng)數(shù)據(jù)庫設計概念,需要長期保存。在騰訊公司每日對不同格式的、超過150億條流水日志進行生成、存儲、解析與管理等,這成為一個巨大的挑戰(zhàn)。
現(xiàn)代的數(shù)據(jù)庫系統(tǒng)只保留有數(shù)據(jù)的當前值,而因存儲成本等原因,歷史態(tài)數(shù)據(jù)被丟棄。而數(shù)據(jù)作為重要的資產(chǎn),不管是當前數(shù)據(jù),還是歷史上曾經(jīng)存在過的數(shù)據(jù),都具有重要價值。因此,歷史態(tài)數(shù)據(jù)存儲、被分析、被挖掘、被反復使用,是當前互聯(lián)網(wǎng)等企業(yè)的需求。尤其是金融類歷史態(tài)數(shù)據(jù),因為安全、需要被多次計算的原因,在騰訊公司的計費業(yè)務中,帶有時態(tài)屬性的數(shù)據(jù)被管理的需求日益旺盛。
基于上述原因,騰訊公司基于TDSQL關系型數(shù)據(jù)庫研發(fā)了時態(tài)數(shù)據(jù)庫 T-TDSQL,由數(shù)據(jù)庫系統(tǒng)統(tǒng)一管理海量的全時態(tài)數(shù)據(jù)、當前數(shù)據(jù),解決了上述四個業(yè)務
的問題。
TDSQL整體架構
TDSQL是騰訊公司基于MySQL/實現(xiàn)的一個可擴展的分布式數(shù)據(jù)庫,支撐了騰訊公司如2017年的2377.6億人民幣的金融計費業(yè)務。
TDSQL整體架構如圖1,采用技術把邏輯表轉換為不同物理實例上的子物理表,從而提供了數(shù)據(jù)分布的功能。每份數(shù)據(jù)為一個SET,一個SET內(nèi)存在多個副本,副本間通過TDSQL的強同步技術實現(xiàn)數(shù)據(jù)強一致。
SET中的數(shù)據(jù)可以線性擴容。節(jié)點失效通過進行管理[2],并提供了兩種節(jié)點級、級數(shù)據(jù)恢復技術。跨節(jié)點的寫事務通過XA接口和2PC技術實現(xiàn)分布式事務對數(shù)據(jù)操作的原子性、一致性。
圖1中的TSI部分,體現(xiàn)了T-TDSQL全時態(tài)數(shù)據(jù)庫在存儲層面對于TDSQL的創(chuàng)新與擴展,通過統(tǒng)一的數(shù)據(jù)管理接口,以滿足對海量的歷史態(tài)數(shù)據(jù)進行存儲、管理。歷史態(tài)數(shù)據(jù)的計算,則體現(xiàn)在圖1的SQL計算層。詳情參見第三、四章。
圖1 T-TDSQL架構圖
TDSQL對時態(tài)數(shù)據(jù)庫的需求
基于TDSQL數(shù)據(jù)庫構建的金融計費業(yè)務,存在如上的問題外,還有一些時態(tài)需求,如金融監(jiān)管部門或一位內(nèi)部審計人員要求計費部門報告在過去5年內(nèi)一家客戶的金融賬戶所做的更改。
常規(guī)的解決辦法,是按業(yè)務特點存儲若干年流水日志數(shù)據(jù),當需要時,把5年內(nèi)的這些流水日志數(shù)據(jù)讀取,從中過濾出特定客戶的歷史態(tài)數(shù)據(jù)。
顯然,當需要個別用戶的歷史態(tài)數(shù)據(jù),要過濾大量非相關用戶的數(shù)據(jù),會浪費大量的計算資源和時間,數(shù)據(jù)的檢索方式原始且低效。
而我們期望,構建一個數(shù)據(jù)庫系統(tǒng),解決如上問題,新系統(tǒng)的核心價值觀是“歷史數(shù)據(jù)富有價值”,新系統(tǒng)應該提供的特性如下:
1. 全時態(tài)數(shù)據(jù)模型。能在數(shù)據(jù)庫系統(tǒng)內(nèi)統(tǒng)一管理數(shù)據(jù)的生命周期,即一個數(shù)據(jù)的誕生、修改、消亡的全過程、過程中的狀態(tài)變遷操作的動作都能被一個數(shù)據(jù)庫系統(tǒng)管理;也能按照對象的時間屬性對對象進行管理和檢索。如此,需要一個數(shù)據(jù)模型對數(shù)據(jù)進行管理。在3.1節(jié)討論了全時態(tài)數(shù)據(jù)模型這個問題。
2. 全時態(tài)數(shù)據(jù)存儲。現(xiàn)有的數(shù)據(jù)庫系統(tǒng),只能保存數(shù)據(jù)的當前狀態(tài)值(當前態(tài)數(shù)據(jù))。實現(xiàn)了MVCC技術的數(shù)據(jù)庫,能在有限時長的時刻內(nèi)保存尚被活躍事務使用的舊版本數(shù)據(jù)(過渡態(tài)數(shù)據(jù))。但不再被活躍的事務操作的舊版本數(shù)據(jù)(歷史態(tài)數(shù)據(jù))被清理了,所以保存歷史態(tài)數(shù)據(jù)是一個需要解決的問題,在3.2節(jié)討論了如何存儲歷史態(tài)數(shù)據(jù),并根據(jù)數(shù)據(jù)的特點提供了行存、列存等多種存儲格式。4.3節(jié)討論了如何構建合適的索引以助高效讀取歷史態(tài)數(shù)據(jù)。數(shù)據(jù)的有效時間狀態(tài)的存儲和管理(T-TDSQL提供了有效時間時態(tài)屬性)圖書管理系統(tǒng)數(shù)據(jù)庫設計概念,類似普通列,4.4節(jié)討論。
3. 全時態(tài)數(shù)據(jù)管理。數(shù)據(jù)一旦轉變?yōu)闅v史態(tài)數(shù)據(jù),就只具有歸檔的價值不可再更改。而歷史態(tài)數(shù)據(jù)的數(shù)據(jù)量越來越大后,單機不能夠容納,存儲海量歷史態(tài)數(shù)據(jù)也將變?yōu)樘魬?zhàn)。所以4.5節(jié)討論了時態(tài)數(shù)據(jù)的常規(guī)管理如備份恢復等、4.6節(jié)討論了海量的歷史態(tài)數(shù)據(jù)如何集群化管理的問題。
4. 全時態(tài)數(shù)據(jù)計算。歷史態(tài)數(shù)據(jù)存儲在現(xiàn)有的數(shù)據(jù)庫系統(tǒng)中,基于現(xiàn)有的MVCC技術是不能夠讀取到歷史態(tài)數(shù)據(jù)的,如何歷史態(tài)數(shù)據(jù)讀取是一個歷史態(tài)數(shù)據(jù)可見性判斷的問題,在4.3節(jié)對這個問題進行了描述[1]。第4.3節(jié)討論了如何利用索引高效讀取歷史態(tài)數(shù)據(jù)。
這些特性的實現(xiàn),踐行了“歷史數(shù)據(jù)富有價值”,是的歷史數(shù)據(jù)能夠被存儲、管理、參與到計算當中。
T-TDSQL核心技術與系統(tǒng)的價值
TDSQL The ,簡稱T-TDSQL。
T-TDSQL是騰訊公司基于上節(jié)需求實現(xiàn)的一個帶有雙時態(tài)特征的分布式數(shù)據(jù)庫系統(tǒng)。
其核心思想,是利用MVCC技術,確保數(shù)據(jù)庫系統(tǒng)中有數(shù)據(jù)的舊版本,然后在系統(tǒng)清理舊版本數(shù)據(jù)的時刻,把將被清理的數(shù)據(jù)存儲而不是被清理,從而實現(xiàn)了歷史態(tài)數(shù)據(jù)的存儲。
之后根據(jù)騰訊公司提出的“歷史態(tài)數(shù)據(jù)可見性判斷算法”、基于索引高效地讀取歷史態(tài)數(shù)據(jù),從而使得獲取歷史態(tài)數(shù)據(jù)時只訪問特定范圍的數(shù)據(jù)而提高查詢效率。
基于數(shù)學中集合對稱差的原理的“歷史態(tài)數(shù)據(jù)可見性判斷算法”(4.1.1節(jié)),提出了快照差的概念和元組的歷史態(tài)版本可見性算法,可讀取任意歷史時間段的歷史態(tài)數(shù)據(jù)。
當歷史態(tài)數(shù)據(jù)可讀取時,基于歷史上任何一個時間點T,可求出此時節(jié)點之后的任意一個時間段內(nèi)相對于時間點T的數(shù)據(jù)的變化情況,如新插入的數(shù)據(jù)、連續(xù)被更新的數(shù)據(jù)、以及被刪除的數(shù)據(jù),并能識別出針對數(shù)據(jù)的操作動作是插入、更新還是刪除。如此能追蹤數(shù)據(jù)的歷史軌跡,并能方便獲取基于時間點T之后任意時間段的增量數(shù)據(jù),還能在增量數(shù)據(jù)的基礎上進行多表連接的增量計算。
數(shù)據(jù)庫中存儲有數(shù)據(jù)的歷史狀態(tài)信息,數(shù)據(jù)的安全性得到保證。防止篡改數(shù)據(jù)、數(shù)據(jù)誤刪除的恢復、賬戶變化軌跡追蹤、回溯歷史時空里的“過去的”數(shù)據(jù)等,在T-TDSQL中成為現(xiàn)實。
數(shù)據(jù)庫中存儲有數(shù)據(jù)的歷史狀態(tài)信息,基于歷史上任何一個時間點T,可求出此時節(jié)點之后的任意一個時間段內(nèi)相對于時間點T的數(shù)據(jù)的變化情況,使得基于日志、觸發(fā)器等開發(fā)方式獲取數(shù)據(jù)的變遷流水和增量數(shù)據(jù)等傳統(tǒng)的開發(fā)方式,成為過去。
T-TDSQL存儲、管理海量歷史態(tài)數(shù)據(jù)、當前數(shù)據(jù),使得隨時都可以獲取任何時間段的數(shù)據(jù),因而流水日志不再重要。基于索引檢索歷史態(tài)數(shù)據(jù)時如同基于索引檢索當前數(shù)據(jù)一樣的方便快捷且消耗最少量的計算資源,這對于審計、安全、檔案等部門有幫助。
T-TDSQL方便獲取增量數(shù)據(jù)使得基于觸發(fā)器或日志方式進行數(shù)據(jù)同步的系統(tǒng)以實現(xiàn)ETL、OLAP等應用開發(fā)變得簡單,基于MVCC的歷史態(tài)數(shù)據(jù)獲取技術不會有讀-寫、寫-讀阻塞,因而數(shù)據(jù)讀取的效率很高。
根據(jù)業(yè)務特點,T-TDSQL提供了兩種歷史態(tài)數(shù)據(jù)的存儲方式,一個是行存、一個是列存,使得基于T-TDSQL的OLAP系統(tǒng)成為現(xiàn)實,且計算高效。T-TDSQL結合諸如Spark下推、列存等機制,能有效地支持“數(shù)據(jù)在生命周期范圍內(nèi)的聯(lián)機分析”而不僅僅是“基于當前狀態(tài)值的聯(lián)機分析”。
T-TDSQL存儲、管理海量歷史態(tài)數(shù)據(jù),分為兩個層面:第一,不僅受限于單機系統(tǒng)的存儲能力,其支持分布式網(wǎng)絡文件系統(tǒng)以支持單機無限數(shù)據(jù)量的存儲。第二,數(shù)據(jù)可以從單機系統(tǒng)脫機,然后聯(lián)機到一個集群計算系統(tǒng),把多個單機的海量數(shù)據(jù)聚集到一個集群中,并支持在集群中進行計算。
T-TDSQL不僅是存儲、管理了歷史數(shù)據(jù),而且還參與到了“創(chuàng)造數(shù)據(jù)”的環(huán)節(jié)中,為數(shù)據(jù)賦予了事務時態(tài)、與用戶的關聯(lián)關系等,甚至還可以創(chuàng)造數(shù)據(jù)之間的關聯(lián)關系以實現(xiàn)Data 等。
富有價值的全時態(tài)數(shù)據(jù)存儲在數(shù)據(jù)庫中,為數(shù)據(jù)安全、數(shù)據(jù)重演、數(shù)據(jù)挖掘和AI技術的施展提供了物理基礎。
總結T-TDSQL的特點,可以概括為:一切過往(數(shù)據(jù)的歷史和狀態(tài))兼可追溯。
T-TDSQL解決了的問題
T-TDSQL基于TDSQL,所做的功能增強如表1所示,主要使用于金融、保險、預訂系統(tǒng)、決策支持、安全等領域。
表1 T-TDSQL功能對比(√數(shù)據(jù)庫原生支持;?不支持;?通過配套工具支持)
比較項
TDSQL
T-TDSQL
事務型數(shù)據(jù)庫的一切特性
√
√
分布式特性
√
√
有效時間類應用(履歷管理、合同管理、圖書管理、檔案管理)
?
√
事務時間類應用(按DML操作追溯數(shù)據(jù)的變遷史)
?
√
數(shù)據(jù)增量抽取
?
√
數(shù)據(jù)增量計算(對賬:總賬快對、細賬精確)
?
√
軌跡數(shù)據(jù)管理(類似軌跡數(shù)據(jù)庫)
?
√
消失的數(shù)據(jù)查詢(歷史值和所發(fā)生操作)--數(shù)據(jù)歷史不丟失
√
海量數(shù)據(jù)存儲(本地存儲、網(wǎng)絡存儲)
√
數(shù)據(jù)按熱度存儲
?
√
歷史數(shù)據(jù)集群化存儲、管理(HTAP)
?
√
安全:數(shù)據(jù)訂正、歷史追蹤、聯(lián)機閃回
√
數(shù)據(jù)重演:在數(shù)據(jù)庫引擎層提供分析應用負載
?
√
基于用戶數(shù)據(jù)的歷史變遷進行用戶畫像多維度分析
?
√
本項目在騰訊TEG計費平臺部立項,研究內(nèi)容和實現(xiàn)過程得到中國人民大學信息學院教育部數(shù)據(jù)工程和知識工程重點實驗室和騰訊公司的參與和支持,特別向項目參與人、支持者致謝。
[1] Li et al. “- Data in MVCC-based RDBMS”. World Wide Web . 2018, pp.922–933.
[2] 姜曉軼 蔣雪中 周云軒 時態(tài)數(shù)據(jù)庫研究進展 計算機工程與應用 2005
[3] , Kumar: A model for NoSQL . and 101: 43-58 (2015)
[4]湯庸 時態(tài)數(shù)據(jù)庫導論 2004
[5] Li, Yi Feng, Fan. The Art : and . First . . China Press. 2017-10-01
[6]David B. Lomet, Roger S. Barga, F. , , Rui Wang, Zhu: Time a . ICDE 2006: 35
騰訊技術工程官號
騰訊前沿技術 | 產(chǎn)品 | 行業(yè)信息交流發(fā)布平臺