TDSQL的原创技术,不是为技术而技术,而是基于业务的需求,为解决业务问题而进行的创新。
腾讯公司的计费业务系统,是世界上领先的金融云计费业务系统。这个系统包括SAAS、PAAS、IAAS三个层面。在SAAS层面,包括米大师、云商店、TDSQL等系统。
TDSQL托管账户近280亿,米大师依托TDSQL进行金融交易,腾讯充值及其相关合作伙伴的日流水量超过150亿条,每天处理的交易量超过100亿笔。金融数据在TDSQL数据库中进行结算、对账、审计、风控数据分析、构建用户画像等业务。如王者荣耀游戏点券的对账业务、用户账户消费充值变化审计与风控业务等。
要进行诸如对账、审计等业务,数据来源有两部分。一部分数据来源是从不同系统(关系数据库或NoSQL系统)的日志数据中来,称为流水日志。但某个这样的系统每天的日志流水数据近百G且从趋势看增量数据递增很快。另外,有些数据是在TDSQL中按时间分表,需在一段时间结束后对按时间分表的数据利用流水日志进行对账计算。
对账主要是解决几种异常情况:
-
系统存在BUG,或者在故障时,未表现出预期的情况。这可能导致发货成功扣款不成功,或者扣款成功未发货的情况。如腾讯视频VIP管理系统的充值、发货。
-
规避黑客/内部风险。例如不法人员绕过业务系统去给自己充值等舞弊行为。
这样的对账业务种类很多,不同的应用其日志流水格式不完全相同,TDSQL托管的账户需要定时对多级数千种业务和账户做数据一致性对账检验。
从技术的角度看,存在四个问题:
-
应用开发复杂:使用业务日志,需要业务系统不断产生日志信息,然后耗费计算资源对不同的日志格式进行解析,把日志信息存储到分析系统。由此带来了开发的负担和资源的浪费。
-
数据逻辑割裂:TDSQL中按时间分表,只能按确定的时间段进行结算,不能灵活、方便的计算。如计算任意时间段内的数据,按时间段的分表在物理上割裂了数据按时间的逻辑连续特性,需要指定若干个特定的分表才能进行计算。
-
实时特性丢失:如上两个问题,隐含地,意味着进行计算的数据需要导入到一个新的分析系统进行计算,导出/导入数据的过程也带来了资源和时间的消耗、使得分析系统难以具备实时计算特性。
-
数据管理复杂:另外,日志等信息,是历史态数据,需要长期保存。在腾讯公司每日对不同格式的、超过150亿条流水日志进行生成、存储、解析与管理等,这成为一个巨大的挑战。
现代的数据库系统只保留有数据的当前值,而因存储成本等原因,历史态数据被丢弃。而数据作为重要的资产,不管是当前数据,还是历史上曾经存在过的数据,都具有重要价值。因此,历史态数据存储、被分析、被挖掘、被反复使用,是当前互联网等企业的需求。尤其是金融类历史态数据,因为安全、需要被多次计算的原因,在腾讯公司的计费业务中,带有时态属性的数据被管理的需求日益旺盛。
基于上述原因,腾讯公司基于TDSQL关系型数据库研发了时态数据库 T-TDSQL,由数据库系统统一管理海量的全时态数据、当前数据,解决了上述四个业务中的问题。
业务痛点的解决,是基于数据库的特点和业务场景进行深入分析和思考而得以解决的。
因为数据有价值,所以TDSQL团队认为:历史数据富有价值。这是TDSQL时态数据库T-TDSQL的核心价值观。因此,我们给出了TDSQL对于数据的新的认识。
TDSQL认为:
数据的状态属性,标识数据的生命周期轨迹。数据的生命周期分为三个阶段,每个阶段刻画数据的不同状态属性,以标识数据的生命周期轨迹中所处的状态。
-
当前态(Current State):数据项的最新版本的数据,是处于当前阶段的数据。处于当前阶段的数据的状态,称为当前态。
-
历史态(Historical state):数据项在历史上的一个状态,其值是旧值,不是当前值。处于历史阶段的数据的状态,称为历史态。一个数据项的历史态,可以有多个,反映了数据的状态变迁的过程。处于历史态的数据,只能被读取不能再被修改或删除。
-
过渡态(Transitional State):不是数据项的最新的版本也不是历史态版本,处于从当前态向历史态转变的过程中。处于过渡态的数据,称为半衰数据。
这三个状态,涵盖了一个数据项的生命周期,合称为数据全态(full-state),或称为全态数据。在MVCC机制下,数据的三种状态均存在;在非MVCC机制下,数据只存在历史态和当前态。
-
当前态:MVCC或封锁并发访问控制机制下,事务提交后的数据的新值处于当前态。
-
历史态:MVCC机制下,当前活跃事务列表中最小的事务之前的事务生成的数据,其状态处于历史态。在封锁并发访问控制机制下,事务提交后,提交前的数据的值变为历史态的值,即数据项的旧值处于历史态。
-
过渡态:MVCC机制下,被读取的版本上尚有活跃事务(非最新相关事务)在使用,因最新相关事务修改了数据项的值,其最新值已经处于一个当前态,被读取到的值相对当前态已经处于一个历史状态,故其数据状态介于当前态和历史态之间,所以称为过渡态。
数据的双时态属性,分别为有效时间属性、事务时间属性。
有效时间属性表示数据表示的对象在时间属性上的情况。如Kate中学起止时间是2000-09-01到2003-07-30,而大学起止时间是2003-09-01到2007-07-30,这里的时间就是有效时间。
事务时间属性表示数据的某个状态的时间发生时刻。数据具有其时态属性,即在何时数据库系统进行了什么样的操作。某项操作在数据库系统内被封装为事务,而事务具有原子性。因此,我们采用了事务标志来标识一个数据的事务时态属性。
从形式上看,有效时间属性和事务时间属性,在数据模型中用普通的用户自定义字段进行表示,只是用特定的关键字加以描述,供数据库引擎进行约束检查和赋值。
TDSQL团队期望,构建一个数据库系统,解决如上问题,新系统应该提供的特性如下:
因此,基于TDSQL的T-TDSQL时态数据库,有了如下的特性,这些特性,能够涵盖双时态的数据应用、数据安全、数据分析、简化应用开发等四大方面的问题: