CN114265875B - 一种基于流数据的实时建宽表的方法 - Google Patents
一种基于流数据的实时建宽表的方法 Download PDFInfo
- Publication number
- CN114265875B CN114265875B CN202210204367.XA CN202210204367A CN114265875B CN 114265875 B CN114265875 B CN 114265875B CN 202210204367 A CN202210204367 A CN 202210204367A CN 114265875 B CN114265875 B CN 114265875B
- Authority
- CN
- China
- Prior art keywords
- data
- log
- structured
- target
- model
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种基于流数据的实时建宽表方法,至少包括以下步骤:数据引擎采集数据,保存至数据库中;将采集到的所述数据转化为结构化数据;将所述结构化数据保存到数据缓存库;模型计算引擎接收数据更新事件,根据所述结构化数据与目标模型是否存在映射关系,提取与目标主表相关联的所述结构化数据,更新到所述目标主表中。该方法具有实时性高、灵活性高、快速响应、全局模型关联、支持跨库乱序的特性。
Description
技术领域
本申请涉及一种基于流数据的实时建宽表的方法,属于数据处理领域。
背景技术
无论是传统数仓建设,还是现代数据驱动的应用业务,大部分的数据开发工作就是要构建一些新的数据表,为各种分析模型或业务模型服务。特别是互联网公司由于数据量普遍偏大,多表关联的方式通常不会被采用。这种情况下构建宽表用于支持各种业务查询是非常主流的数据开发工作。
传统的建模、建表都是基于SQL来完成的。基于SQL的方式有这些局限性:
1、目标模型表和原始表数据脱节:
SQL是基于一个固定数据集来进行查询计算并输出到目标表的方式,适合于定期批量运算。如果涉及到的原始表比较大,那这种操作往往会需要执行数分钟甚至数小时,这样会造成目标的数据无法反应当前真实的状态。
2、并发任务性能瓶颈:
由于传统建模的全表计算模式,在数仓内同时进行的任务基本不能超过2-3个。这个严重限制了传统数据平台跑批建模的能力。
发明内容
根据本申请的一个方面,提供了一种基于流数据的实时建宽表的方法,该方法具有实时性高、灵活性高、快速响应、全局模型关联、支持跨库乱序的特性。
基于流数据的实时建宽表的方法,至少包括以下步骤:
数据引擎采集数据,保存至数据库中;
将采集到的所述数据转化为结构化数据;
将所述结构化数据保存到数据缓存库;
模型计算引擎接收数据更新事件,根据所述结构化数据与目标模型是否存在映射关系,提取与目标主表相关联的所述结构化数据,更新到所述目标主表中。
可选地,所述数据缓存库为MongoDB。
可选地,所述结构化数据保存在所述数据缓存库的统一数据缓冲层中。
可选地,所述统一数据缓冲层为FDM层。
可选地,所述数据引擎采集数据的同时,日志采集器形成数据日志,并将所述数据日志保存到所述数据缓存库的日志存储中心;
所述日志存储中心将所述数据日志与任务采集器同步,从而实现数据日志与用户目标数据库的共享。
可选地,所述模型计算引擎接收数据更新事件,包括:
所述模型计算引擎接收到的数据更新日志;
发送数据库共享关联指令;
若数据日志与用户目标数据库的共享成功,逐步判断所述数据更新日志是否包含日志采集任务,所述日志采集任务是否包含所需要的表,所述日志采集任务的起始采集时间是否早于上一次同步任务的起始时间,如是,则通过所述日志存储中心读取数据日志,作为增量数据日志;
若数据日志与用户目标数据库的共享不成功,或所述数据更新日志不包含日志采集任务,或所述日志采集任务不包含所需要的表,或所述日志采集任务的起始采集时间晚于上一次同步任务的起始时间,则所述模型计算引擎直接读取所述数据库中的数据日志,作为增量数据日志。
可选地,对于与目标模型存在映射关系的所述结构化数据,从所述数据缓存库中查询含有该结构化数据的表,即子表,将所述子表与目标主表数据合并,更新目标主表;
对于与目标模型不存在映射关系的所述结构化数据,将该结构化数据写入数据缓存库的子表缓存表中,根据新建立的映射关系,将子表更新到目标主表中。
本申请能产生的有益效果包括:
1)本申请所提供的基于流数据的实时建宽表的方法,实时监听源数据的增量变化,能达到亚秒级的延时,与传统定时轮询方式(基于SQL语句)相比,具备更高的实时性;
2)本申请所提供的基于流数据的实时建宽表的方法,具备多模型存储能力,支持随时修改模型,与传统关系型模型(模型预先创建且修改成本较高)相比,对于模型变化的需求响应更加及时且全局灵活性。
3)本申请所提供的基于流数据的实时建宽表的方法,基于已有的数据模型进行简单的配置,创建数据同步任务,就可以实现数据建模;现有的数据处理平台(Flink)需要代码需要编码的配合,开发周期较长,与之相比,本申请方法具有低代码数据开发、甚至零代码的能力,达到了快速响应业务的目的。
4)本申请所提供的基于流数据的实时建宽表的方法,在同步过程中会有统一数据缓存层,因此支持关联全局数据,与Flink支持时间窗口时间缓存相比,功能更强大。
5)本申请所提供的基于流数据的实时建宽表的方法,将所有数据源汇聚到统一数据缓存层;当子表事件先进入时,会先写入数据缓存层,后续主表事件过来可以从数据缓存层中查询相关联的子表数据,进行模型合并计算,具有支持跨库乱序的特点。
附图说明
图1为本申请方法一种实施方式的流程示意图;
图2为本申请方法中共享模式的流程示意图;
图3为本申请的更新事件流程示意图。
具体实施方式
下面结合实施例详述本申请,但本申请并不局限于这些实施例。
本申请一种基于流数据的实时建宽表的方法,其流程如图1所示,包括以下步骤:
数据引擎采集数据,保存至数据库中;
如图2所示,所述数据引擎采集数据的同时,需要对日志数据进行挖掘和共享,具体为:
日志采集器形成数据日志,并将所述数据日志保存到所述数据缓存库的日志存储中心;
所述日志存储中心将所述数据日志与任务采集器同步,从而实现数据日志与用户目标数据库的共享。
将采集到的所述数据转化为结构化数据;
将所述结构化数据保存到数据缓存库;
模型计算引擎接收数据更新事件,根据所述结构化数据与目标模型是否存在映射关系,提取与目标主表相关联的所述结构化数据,更新到所述目标主表中。
如图3所示,所述模型计算引擎接收数据更新事件,包括:
所述模型计算引擎接收到的数据更新日志;
发送数据库共享关联指令;
若数据日志与用户目标数据库的共享成功,逐步判断所述数据更新日志是否包含日志采集任务,所述日志采集任务是否包含所需要的表,所述日志采集任务的起始采集时间是否早于上一次同步任务的起始时间,如是,则通过所述日志存储中心读取数据日志,作为增量数据日志;
若数据日志与用户目标数据库的共享不成功,或所述数据更新日志不包含日志采集任务,或所述日志采集任务不包含所需要的表,或所述日志采集任务的起始采集时间晚于上一次同步任务的起始时间,则所述模型计算引擎直接读取所述数据库中的数据日志,作为增量数据日志。
对于与目标模型存在映射关系的所述结构化数据,从所述数据缓存库中查询含有该结构化数据的表,即子表,将所述子表与目标主表数据合并,更新目标主表;
对于与目标模型不存在映射关系的所述结构化数据,将该结构化数据写入数据缓存库的子表缓存表中,根据新建立的映射关系,将子表更新到目标主表中。
本申请将源端数据库的日志,抽取到数据缓存库(MongoDB)中,后续任务作为消费者,直接从数据缓存库中获取自身需要的数据,再传递到后续的任务处理当中。目前日志数据的挖掘共享模式可用于Oracle,Mysql,PostgreSql,Sqlserver,MongoDB等。MongoDB作为数据缓存库的优势有:内存数据库的高性能,又可以像MySQL一样持久化。由于日志数据缓存在MongoDB(间接是在硬盘上),这样可以快速解决大事务场景,特异性事务,同步故障后无法溯源的问题。
在处理大事务的场景下,日志数据的挖掘共享以缓存MongoDB为载体,记录大事务中所有的数据变化,当大事务结束后,所有的数据变化从MongoDB中直接取出消费,与大事务无关的其他事务正常处理,两者互不干扰,从而减少大事务对同步性能的影响,同时由于使用MongoDB记录,***不会因为大事务的发生导致数据丢失或者软件因为内存溢出崩溃。在这个大事务场景中,一般产生的数据变化量较大,由于我们使用的是MongoDB作为中间载体,其毫秒级别的***/查询速度的特性,不会造成同步时间的增长,这点经过实测比Oracle OGG处理最大事务还要大3.2倍。
在针对特异性事务(部分回滚,违反约束事务等)情形下,因为各种数据库实现不同,源库的事务往往会有很复杂的非常规场景,例如部分回滚,违反数据库约束的事务等。在源库内对这些复杂场景进行直接进行处理需要耗费大量的源库资源,影响业务。在使用基于缓存的共享日志以后,我们能够基于我们积累的事务只是针对各种复杂场景进行较为全面的分析匹配,并进行相应的处理。
非缓存模式的日志通常很快就会被清除或者归档。基于缓存以后,由于有持久化能力,可以按需求动态调整日志缓存的日期和大小。这样对以后发现数据不一致时进行追溯,提供了历史变化数据,使得同步故障后溯源更加便捷。
在日志数据的挖掘共享模式下,比如Oracle为源库的同步场景中,***只需要1个logminer进程,即可获得这个数据库中所有的目标数据及其实时变化(注:在Oracle中每启动一个logminer进程都会增加源库的内存,磁盘,cpu损耗,并且会产生日志级别的争用,logminer任务大于5个就会源数据库产生性能上的影响),即减小了数据增量更新过程对于源库的影响。
每种数据库的日志挖掘都有不小的差异性,Tapdata结合共享挖掘模式对每种数据库的挖掘都进行优化,以Oracle为例,在经过大量的内部实验以及客户实际场景的验证,我们总结出来logminer的优化项,性能上有50-100倍的差别。对于挖掘的先决条件我们形成了固定配置项,包含了源端Oracle的优化设置,用于减少源端的性能损耗以及提高Logminer的性能。对于挖掘过程中,在不同同步场景中,我们设置了数个关键参数,能够识别当前同步效率、同步状态,动态调整同步参数,时刻保证最优的同步效率。例如参数cursor fetch size,这个参数决定Oracle每次输送日志到***的行数,在大事务场景下,这个参数需要设置成更大的值,比如1000,此时同步效率会有50-100倍的差别,但是不利于正常事务的同步,因为Oracle会基于这个值的设置捕获到足够的fetch size数量后才会推送到***,如果设置为1000,则需要捕获够1000个事件才会开始推送,这样不利于小事务的同步,当小事务频繁发生时候,因为fetch size过大导致同步延迟,这时候***会根据同步效率,动态调整这个参数,无需人工干预,即能保持最优同步效率。
场景例
构建客户保单视图(CustomerPolicy)时,具体技术实现流程:
a、客户表(Customer)和保单表(Policy),一个客户有多份保单,属于一(客户)对多(保单)的关联关系,通过客户表的客户ID(id)和保单表的客户ID(customer_id)进行关联;
b.在实际的数据采集过程中,会遇到时序问题,以下为时序问题场景及处理方式:
i.老客户新创建一份保单,数据采集时会先读取到一条客户(Customer)记录,将客户数据根据客户id(id)写入到目标(CustomerPolicy);第二再读取到保单(Policy)数据,根据保单信息中的客户ID(customer_id)与目标(CustomerPolicy)的客户ID(id)进行关联写入,合并成内嵌数组。
ii.新客户新创建一份保单,当客户数据和保单数据在同一事务中提交时,数据采集有可能会先读取到保单(Policy)信息,但目标(CustomerPolicy)中还没有客户信息,因此会将保单信息先缓存中临时表中;后面读取到客户(Customer)信息时,再根据客户ID(id)与临时表中找到客户对应的保单信息,再同步到目标表(CustomerPolicy)。
以上所述,仅是本申请的几个实施例,并非对本申请做任何形式的限制,虽然本申请以较佳实施例揭示如上,然而并非用以限制本申请,任何熟悉本专业的技术人员,在不脱离本申请技术方案的范围内,利用上述揭示的技术内容做出些许的变动或修饰均等同于等效实施案例,均属于技术方案范围内。
Claims (3)
1.一种基于流数据的实时建宽表的方法,其特征在于,所述方法至少包括以下步骤:
数据引擎采集数据,保存至数据库中;
将采集到的所述数据转化为结构化数据;
将所述结构化数据保存到数据缓存库;
模型计算引擎接收数据更新事件,根据所述结构化数据与目标模型是否存在映射关系,提取与目标主表相关联的所述结构化数据,更新到所述目标主表中;
所述数据引擎采集数据的同时,日志采集器形成数据日志,并将所述数据日志保存到所述数据缓存库的日志存储中心;
所述日志存储中心将所述数据日志与任务采集器同步,从而实现数据日志与用户目标数据库的共享;
所述模型计算引擎接收数据更新事件,包括:
所述模型计算引擎接收到的数据更新日志;
发送数据库共享关联指令;
若数据日志与用户目标数据库的共享成功,逐步判断所述数据更新日志是否包含日志采集任务,所述日志采集任务是否包含所需要的表,所述日志采集任务的起始采集时间是否早于上一次同步任务的起始时间,如是,则通过所述日志存储中心读取数据日志,作为增量数据日志;
若数据日志与用户目标数据库的共享不成功,或所述数据更新日志不包含日志采集任务,或所述日志采集任务不包含所需要的表,或所述日志采集任务的起始采集时间晚于上一次同步任务的起始时间,则所述模型计算引擎直接读取所述数据库中的数据日志,作为增量数据日志;
对于与目标模型存在映射关系的所述结构化数据,从所述数据缓存库中查询含有该结构化数据的表,即子表,将所述子表与目标主表数据合并,更新目标主表;
对于与目标模型不存在映射关系的所述结构化数据,将该结构化数据写入数据缓存库的子表缓存表中,根据新建立的映射关系,将子表更新到目标主表中;
所述数据缓存库为MongoDB。
2.根据权利要求1所述的方法,其特征在于,所述结构化数据保存在所述数据缓存库的统一数据缓冲层中。
3.根据权利要求2所述的方法,其特征在于,所述统一数据缓冲层为FDM层。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210204367.XA CN114265875B (zh) | 2022-03-03 | 2022-03-03 | 一种基于流数据的实时建宽表的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210204367.XA CN114265875B (zh) | 2022-03-03 | 2022-03-03 | 一种基于流数据的实时建宽表的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114265875A CN114265875A (zh) | 2022-04-01 |
CN114265875B true CN114265875B (zh) | 2022-07-22 |
Family
ID=80834024
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210204367.XA Active CN114265875B (zh) | 2022-03-03 | 2022-03-03 | 一种基于流数据的实时建宽表的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114265875B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116501715B (zh) * | 2023-04-28 | 2024-03-12 | 重庆赛力斯凤凰智创科技有限公司 | 一种多表全量数据的实时关联更新方法及装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110347662B (zh) * | 2019-07-12 | 2021-08-03 | 之江实验室 | 一种基于通用数据模型的多中心医疗数据结构标准化*** |
CN110362632B (zh) * | 2019-07-22 | 2022-11-15 | 无限极(中国)有限公司 | 一种数据同步方法、装置、设备及计算机可读存储介质 |
CN112789606A (zh) * | 2019-09-11 | 2021-05-11 | 华为技术有限公司 | 数据重分布方法、装置及*** |
-
2022
- 2022-03-03 CN CN202210204367.XA patent/CN114265875B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN114265875A (zh) | 2022-04-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10180946B2 (en) | Consistent execution of partial queries in hybrid DBMS | |
EP3968175B1 (en) | Data replication method and apparatus, and computer device and storage medium | |
CN109460349B (zh) | 一种基于日志的测试用例生成方法和装置 | |
US10664473B2 (en) | Database optimization based on forecasting hardware statistics using data mining techniques | |
CN112445863B (zh) | 一种数据实时同步方法及*** | |
CN111563102A (zh) | 缓存更新方法、服务器、***及存储介质 | |
CN111125260A (zh) | 一种基于SQL Server的数据同步方法及*** | |
US11061899B2 (en) | Query optimization in hybrid DBMS | |
CN113535777A (zh) | 数据库查询方法、装置和*** | |
CN114579614A (zh) | 一种实时数据全量获取方法、装置及计算机设备 | |
CN102063449A (zh) | 提高数据库中数据对象统计信息可靠性的方法及装置 | |
CN112286941A (zh) | 一种基于Binlog+HBase+Hive的大数据同步方法和装置 | |
CN114265875B (zh) | 一种基于流数据的实时建宽表的方法 | |
CN111752804B (zh) | 一种基于数据库日志扫描的数据库缓存*** | |
CN114153809A (zh) | 基于数据库日志并行实时增量统计的方法 | |
US11449521B2 (en) | Database management system | |
CN113961546A (zh) | 一种支持在线分析统计的实时查询库设计方法 | |
CN114003660B (zh) | 基于flink的高效同步实时数据到ClickHouse的方法及装置 | |
CN111258977A (zh) | 一种税务大数据存储及分析平台 | |
CN116414902B (zh) | 一种快速数据源接入方法 | |
CN112380164B (zh) | 基于快照技术的电力***场景化数据管理方法、装置及*** | |
CN109299035A (zh) | 一种chr文件管理方法、***及计算机可读存储介质 | |
CN115952200B (zh) | 一种基于mpp架构的多源异构数据聚合查询方法及装置 | |
US20240070180A1 (en) | Mutation-Responsive Documentation Regeneration Based on Knowledge Base | |
US20230244723A1 (en) | Mutation-responsive documentation generation based on knowledge base |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |