一个典型案例为你解读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,则交易没有问题,否则该用户在当天的交易存在错误。
对于按固定时间段对账,主要存在以下三个问题:
时效性差:对于错误交易,不能立即发现并反馈,延迟了以固定时间段为单位的一段时间后才能发现错误。
对账不精准:定位错误交易较复杂。例如:如果用户在一天内发生的多笔交易,其中一笔出现了错误,通过按天对账的方式不能直接定位到具体的哪条交易出现错误,而只能定位到用户级别,即仍然需要人工参与,将该错误用户的当天交易都确认一遍,才能找到具体的错误交易。
对账不灵活:按固定时间段对账,如以天为单位,则只能等这一天内的增量数据沉淀下来,才能进行对账,如果有跨天对账需求(如昨天下午至今天上午),对账所用数据需要跨多个表才能执行,这可能改变对账业务的流程。
对账优化
基于本文提出的数据模型和增量计算方法,可以很好的解决按天对账所存在的问题。结合3.1.2中的示例,我们给出在互联网金融的对账业务中,增量计算的实际应用。
T-TDSQL可以基于增量计算的功能将账户余额表(user)和账户流水表(water)进行精准比对,进行流水级别的细粒度对账,从而即时发现交易错误,并可以立即定位到错误的那一条交易,省去繁杂的错误交易定位过程。
优化后的对账的核心思想是:总账算摘要、细账笔笔精。
优化后的对账的效果是:总账快对、细账精确、不受时限、任意对账[1]。
对账步骤1—总账对账:首先读取给出对账时间段[s_start,s_stop]内的所有账户表数据块,对每个数据块内数据采用与传统对账方式类似的公式来确认账户情况,即进行“总期末余额-总期初余额=总交易变动”试算[2],总期初余额代表s_start时的总余额,总期末余额代表s_stop时的总余额,总交易变动代表每块内账户对应产生的流水,如果有数据块内的总账不平,意味着有细账错误,因此要进行步骤2、3所描述的精准对账。
对账步骤2—精准对账—对账过程:执行如下SQL,将账户余额块和对应账户流水块进行“快照差连接”,返回结果集中每条记录将含有{交易前余额,交易后余额,交易变动}。
对应的执行效果图如图13所示:
SELECT * FROM
(
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节提及的三种快照读操作。这是闪回实现的原理。
基于此原理,实现了多种类型的联机闪回功能,包括:闪回查询,闪回删除,闪回归档。
闪回查询:可以查询过去某个时间段的数据库状态,可将某个表回退到过去某个时间点。
闪回删除:闪回删除可以将一个已经被Drop的表还原。相应的索引也会被还原(索引的还原是通过重建的方式进行)。
闪回归档:闪回数据归档可使表具有回退到过去任何时间点。
业务分析
时态数据的双时态特性、全态属性、LineAge特性,以及在数据项上可识别发生的操作的特性等,为数据项赋予了5W的潜能。
5W是指:
原因(何因Why):数据挖掘和分析的目标。
对象(何事What):数据项上执行了什么操作,数据变化因何而起(LineAge)。
地点(何地Where):数据项的存储位置。
时间(何时When):双时态属性。
人员(何人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)为会计程序中其中的一个流程,它简单的定义就是在检查日记簿的所有交易分录的借方、贷方金额是否有错误之情形。但是在做试算检查时,应每笔交易分录纪录后即做此一动作。
问答
云数据库MySQL连接方式
相关阅读
TDSQL 全时态数据库系统--核心技术
10款常见MySQL高可用方案选型解读
利用Zipkin追踪Mysql数据库调用链
**此文已由作者授权腾讯云+社区发布,原文链接:https://cloud.tencent.com/developer/article/1151509?fromSource=waitui **
欢迎大家前往腾讯云+社区或关注云加社区微信公众号(QcloudCommunity),第一时间获取更多海量技术实践干货哦~
一个典型案例为你解读TDSQL 全时态数据库系统的更多相关文章
- 揭秘TDSQL全时态数据库系统的核心技术
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯技术工程官方号发表在腾讯云+社区 Design 本节讨论T-TDSQL的关键之处,即影响T-TDSQL架构的设计之处.一是新的数据 ...
- java线程基础巩固---分析Thread的join方法详细介绍,结合一个典型案例
关于Thread中的join方法貌似在实际多线程编程当中没怎么用过,在当初学j2se的时候倒时去学习过它的用法,不过现在早已经忘得差不多啦,所以对它再复习复习下. 首先先观察下JDK对它的介绍: 其实 ...
- NB-IoT的相关资料整理(基本概念,技术优势,典型案例和当前的进展)
人与人之间的通讯规模已近天花板,物与物的则刚刚进入增长快车道.随着可穿戴.车联网.智能抄表等新兴市场的开启,工业4.0.智慧城市.智慧农业等理念照进现实,万物互联的时代正加速到来. 一 ...
- 用一个开发案例详解Oracle临时表
用一个开发案例详解Oracle临时表 2016-11-14 bisal ITPUB  一.开发需求 最近有一个开发需求,大致需要先使用主表,或主表和几张子表关联查询出ID(主键)及一些主表字段 ...
- SAP C/4HANA与人工智能和增强现实(AR)技术结合的又一个创新案例
今天这篇迟到的文章,来自我的同事Aviva. 去年SAP C/4HANA发布之后,SAP的从业者们可能或多或少都读过一些来自SAP官方渠道,比如微信公众号"SAP天天事"发布的一些 ...
- HBase基本知识介绍及典型案例分析
本次分享的内容主要分为以下五点: HBase基本知识: HBase读写流程: RowKey设计要点: HBase生态介绍: HBase典型案例分析. 首先我们简单介绍一下 HBase 是什么. HBa ...
- 【Java新特性】Lambda表达式典型案例,你想要的的都在这儿了!!
写在前面 不得不说,有些小伙伴的学习热情真高,学完了Lambda表达式的语法,想来几个典型案例再强化下.于是问冰河能否给几个Lambda表达式的典型使用示例.于是乎,便有了这篇文章. 案例一 需求 调 ...
- elasticsearch中的mapping映射配置与查询典型案例
elasticsearch中的mapping映射配置与查询典型案例 elasticsearch中的mapping映射配置示例比如要搭建个中文新闻信息的搜索引擎,新闻有"标题".&q ...
- 第一个struts案例及分析
软件中的框架,是一种半成品: 我们项目开发需要在框架的基础上进行!因为框架已经实现了一些功能,这样就可以提高开发效率! Struts2 = struts1 + xwork (struts是基于MV ...
随机推荐
- 多个fragment中重叠问题的解决方法
这个方法适用性有限. 我的是一个mainActivity,然后下部四个按钮,点击时先隐藏所有的fragment,然后再new一个新的出来,如果存在,则直接显示出来,看上去一切都没有问题. 但是通过fr ...
- 制作百度地图离线JavaScript API加载本地瓦片地图
全面介绍,请看下列介绍地址,改写目前最新版本的百度V2.0地图,已全面实现离线操作,能到达在线功能的95%以上 http://api.jjszd.com:8081/apituiguang/gistg. ...
- 从头开始学eShopOnContainers——Visual Studio 2017环境配置
一.安装和配置Docker环境 1.安装Docker CE for Windows 从官方网站下载并安装,https://docs.docker.com/docker-for-windows/inst ...
- Springcloud踩坑记---使用feignclient远程调用服务404
公司项目进行微服务改造,由之前的dubbo改用SpringCloud,微服务之间通过FeignClient进行调用,今天在测试的时候,eureka注册中心有相应的服务,但feignclient就是无法 ...
- 六、Note开发工具Visual Studio Code下载安装以及Visual Studio Code的使用
专业的人干专业的事,我们搞Node总不能真的使用文本编辑器傻乎乎的搞吧,文本编辑器来开发Node程序,效率太低,运行Node程序还需要在命令行单独敲命令.如果还需要调试程序,就更加麻烦了.所以我们需要 ...
- sqlite数据库文件查看
- 洛谷P4517 [JSOI2018]防御网络(dp)
题面 传送门 题解 翻译一下题意就是每次选出一些点,要用最少的边把这些点连起来,求期望边数 我也不知道为什么反正总之就是暴力枚举太麻烦了所以我们考虑贡献 如果一条边是割边,那么它会在图里当且仅当两边的 ...
- postgresql中的各种scan的比较
最近在看postgresql的查询计划,在查询中对表的扫描计划大概有如下几种: Seq Scan Index Scan Bitmap Heap Scan Index Only Scan 这里就把自己的 ...
- RFC3920
RFC3920 可扩展的消息和出席信息协议 (XMPP): 核心协议 关于本文的说明 本文为互联网社区定义了一个互联网标准跟踪协议,并且申请讨论协议和提出了改进的建议.请参照"互联网官方协议 ...
- 带权并查集 - How Many Answers Are Wrong
思路: 带权并查集+向量偏移 #include <iostream> using namespace std; int n, m; ]; ]; // 到根节点的距离 ; void init ...