基于实时宽表的业务请求处理方法、设备及存储介质
文献发布时间:2024-04-18 20:01:30
技术领域
本发明涉及数据处理领域,尤其涉及一种基于实时宽表的业务请求处理方法、设备及存储介质。
背景技术
传统的业务系统中,系统获取数据的方式是通过联表查询来获取的,而在像类似金融行业中,业务流程是非常复杂的,比如一个列表展示的数据可能就需要将大量表进行关联,然后经过复杂的计算得出。
而对于存库、跨域关联的表,很难通过简单的联表查询获取。对于联表查询,应用层会让用户体验不好,数据迟迟加载不出来,另一方面,对于运维来说,这样的查询方式会对mysql数据库带来很大的压力,带来mysql数据库崩溃的风险;联表查询需要编写成大量的sql代码,可维护性变得很差。
发明内容
本发明的主要目的在于解决联表查询需要编写成大量的sql代码,可维护性变得很差的技术问题。
本发明第一方面提供了一种基于实时宽表的业务请求处理方法,所述基于实时宽表的业务请求处理方法包括:
获取数据源表,并将所述数据源表加载到Hive数据仓库;
使用所述Hive数据仓库中的SQL语句创建宽表;
将所述数据源表加载到所述宽表中,得到目标宽表;
检测到所述数据源表对应的binlog时,根据所述binlog对应的事件信息,对所述目标宽表执行逻辑处理,得到实时宽表;
接收到所述数据源表对应的查询请求时,对所述实时宽表执行逻辑处理,以响应所述查询请求。
可选的,在本发明第一方面的第一种实现方式中,所述检测到所述数据源表对应的binlog时,根据所述binlog对应的事件信息,对所述目标宽表执行逻辑处理,得到实时宽表的步骤包括:
同时检测到所述数据源表对应的多条binlog时,执行并行度增加操作,得到多个并行处理单元;
利用多个所述并行处理单元,根据多条所述binlog对应的事件信息,对所述目标宽表进行并行逻辑处理,得到实时宽表。
可选的,在本发明第一方面的第二种实现方式中,所述检测到所述数据源表对应的binlog时,根据所述binlog对应的事件信息,对所述目标宽表执行逻辑处理,得到实时宽表的步骤包括:
检测到所述数据源表对应的binlog时,判断所述binlog中事件信息的事件类型;
在所述事件类型为更新时,判断所述binlog的复杂度;
在所述复杂度小于阈值时,从所述binlog中获取待更新数据;
根据所述待更新数据,对所述目标宽表执行更新操作,得到实时宽表。
可选的,在本发明第一方面的第三种实现方式中,所述在所述事件类型未更新事件时,判断所述binlog的复杂度的步骤之后,所述方法还包括:
在所述复杂度大于等于阈值时,从所述binlog中获取关联键值;
根据所述关联键值在所述数据源表获取待更新数据;
根据所述待更新数据,对所述目标宽表执行更新操作,得到实时宽表。
可选的,在本发明第一方面的第四种实现方式中,所述检测到所述数据源表对应的binlog时,根据所述binlog对应的事件信息,对所述目标宽表执行逻辑处理,得到实时宽表的步骤包括:
检测到所述数据源表对应的binlog时,根据所述binlog对应的事件信息,利用Impala对所述目标宽表执行逻辑处理,得到实时宽表。
可选的,在本发明第一方面的第五种实现方式中,所述接收到所述数据源表对应的查询请求时,对所述实时宽表执行逻辑处理,以响应所述查询请求的步骤包括:
接收到所述数据源表对应的查询请求时,利用Impala对所述实时宽表执行逻辑处理,以响应所述查询请求。
可选的,在本发明第一方面的第六种实现方式中,所述将所述数据源表加载到所述宽表中,得到目标宽表的步骤之后,实时方法还包括:
使用DataX将所述目标宽表同步到Impala中。
可选的,在本发明第一方面的第七种实现方式中,所述检测到所述数据源表对应的binlog时,根据所述binlog对应的事件信息,对所述目标宽表执行逻辑处理,得到实时宽表的步骤之后,所述方法还包括:
周期性备份所述实时宽表。
本发明第二方面提供了一种基于实时宽表的业务请求处理设备,包括:存储器和至少一个处理器,所述存储器中存储有指令,所述存储器和所述至少一个处理器通过线路互连;所述至少一个处理器调用所述存储器中的所述指令,以使得所述基于实时宽表的业务请求处理设备执行上述的基于实时宽表的业务请求处理方法。
本发明的第三方面提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述的基于实时宽表的业务请求处理方法。
在本发明实施例中,获取数据源表,并将所述数据源表加载到Hive数据仓库;使用所述Hive数据仓库中的SQL语句创建宽表;将所述数据源表加载到所述宽表中,得到目标宽表;检测到所述数据源表对应的binlog时,根据所述binlog对应的事件信息,对所述目标宽表执行逻辑处理,得到实时宽表;接收到所述数据源表对应的查询请求时,对所述实时宽表执行逻辑处理,以响应所述查询请求。基于实时宽表的业务请求处理设备通过实时监测和处理数据源表的变化,并实时更新目标宽表,可使得基于宽表的数据模型具有较高的灵活性和扩展性,能够适应业务需求和数据变化。通过对实时宽表进行逻辑处理,还可以实现对数据的实时加工和处理,满足不同业务场景下的需求。同时,实时宽表的处理也可以帮助优化数据存储和查询性能,提高资源利用效率。在面对复杂的业务场景和多维度的数据分析需求时,基于实时宽表的处理方法能够更好地支持复杂的数据关联和计算,提供更全面的数据视图和分析结果。通过对数据变化的实时监测和处理,可以增强数据的一致性和可追溯性。业务用户可以更可靠地追溯数据的来源和变化,增强数据治理和合规性。通过实时宽表响应业务请求,可使得用户体验得到极大提升,数据库查询压力大幅降低,后端开发压力得到极大释放,提高了可维护性。
附图说明
图1为本发明实施例中基于实时宽表的业务请求处理方法的一个实施例示意图;
图2为本发明实施例中基于实时宽表的业务请求处理方法104步骤的一个具体实施方式示意图;
图3为本发明实施例中基于实时宽表的业务请求处理设备的一个实施例示意图。
具体实施方式
本发明实施例提供了一种基于实时宽表的业务请求处理方法、设备及存储介质。
下面将参照附图更详细地描述本发明公开的实施例。虽然附图中显示了本发明公开的某些实施例,然而应当理解的是,本发明公开可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本公开。应当理解的是,本发明公开的附图及实施例仅用于示例性作用,并非用于限制本发明公开的保护范围。
在本发明公开的实施例的描述中,术语“包括”及其类似用语应当理解为开放性包含,即“包括但不限于”。术语“基于”应当理解为“至少部分地基于”。术语“一个实施例”或“该实施例”应当理解为“至少一个实施例”。术语“第一”、“第二”等等可以指代不同的或相同的对象。下文还可能包括其他明确的和隐含的定义。
为便于理解,下面对本发明实施例的具体流程进行描述,请参阅图1,本发明实施例中基于实时宽表的业务请求处理方法的一个实施例包括:
101、获取数据源表,并将所述数据源表加载到Hive数据仓库;
具体的,建立到数据源的连接,数据源可以是关系型数据库(如MySQL、Oracle等)、NoSQL数据库(如MongoDB、Cassandra等)、文件系统(如CSV、JSON、Parquet等)或者其他数据存储系统。
建立了与数据源的连接后,执行数据抽取操作。包括从数据源中检索需要的数据,可以根据时间戳增量抽取或全量抽取数据。
在数据抽取后,可能需要对数据进行一些转换操作,比如数据清洗、格式转换、字段映射等,以确保数据的质量和适用性。
数据准备就绪后,就可以将数据加载到Hive数据仓库中。可以通过Hive提供的LOAD DATA或INSERT INTO语句实现,也可以使用ETL工具(如Apache NiFi、Apache Airflow等)自动化数据加载过程。Hive以Hadoop分布式文件系统(HDFS)作为底层存储,利用Hadoop集群的计算和存储资源来处理数据。Hive允许用户将结构化的数据存储在Hadoop集群中,这些数据可以来自各种来源,如日志文件、关系型数据库等。Hive维护了一个元数据存储,描述了存储在Hadoop中的数据的结构和位置,这使得用户能够通过类似于SQL的查询语言对数据进行操作。Hive提供了类似于SQL的查询语言——HiveQL,使得用户能够使用熟悉的SQL语法对Hadoop中的数据进行查询和分析。Hive支持数据提取、转换和加载(ETL)操作,用户可以通过Hive对数据进行清洗、转换和整合。由于Hive是建立在Hadoop集群之上的,因此具有良好的水平扩展性,能够处理大规模数据和并行计算任务。
在加载数据到Hive数据仓库时,对数据进行分区,以便更高效地进行查询和分析。分区可以基于时间、地区、业务线等维度进行划分。
102、使用所述Hive数据仓库中的SQL语句创建宽表;
具体的,在Hive客户端中,执行编写好的SQL语句,以创建宽表。
103、将所述数据源表加载到所述宽表中,得到目标宽表;
具体的,根据数据源表和宽表之间字段的映射关系,在Hive或其他数据库管理系统中执行编写好的查询语句,从数据源表中获取需要的数据。将查询语句返回的结果数据插入到宽表中,得到目标宽表。
可选的,创建一个预制配置文件,记录数据源表与宽表之间的关系。配置文件可以使用JSON、XML或其他合适的格式。在配置文件中,为每个目的宽表指定对应的数据源表,并定义数据源表和宽表之间字段的映射关系。
104、检测到所述数据源表对应的binlog时,根据所述binlog对应的事件信息,对所述目标宽表执行逻辑处理,得到实时宽表;
具体的,当检测到数据源表的binlog变更时,使用binlog解析库或CDC工具解析binlog事件,获取详细的事件信息,包括操作类型(插入、更新、删除)、受影响的字段和对应的值等。根据解析得到的binlog事件信息,对目标宽表进行相应的逻辑处理。具体的处理方式取决于业务需求。
可选的,在FlinkCDC程序启动时,读取预制配置文件,并将其中定义的目标宽表进行注册。注册过程可以使用Flink的Table API或类似的机制,将目标宽表信息存储在程序的内部或外部注册表中。使用Flink提供的CDC(Change Data Capture)功能,监控MySQL的binlog文件,并实时解析binlog数据。
根据预制配置文件中定义的数据源表和目标宽表关系,判断是否需要同步当前解析到的binlog数据。
对于需要同步的数据源表,根据预制配置文件中定义的源表字段,比较字段内容前后是否发生变化。
如果发生变化,触发相应的宽表更新操作,可以通过Flink的流处理功能来实现。
在触发更新操作后,根据预制配置文件中定义的宽表字段和源表字段的映射关系,执行相应的更新操作,得到实时宽表。
可选的,通过字段变化检查,只有发生变化时才触发后续的宽表更新操作,以降低不必要的数据处理和资源消耗。
可选的,检测到所述数据源表对应的binlog时,判断所述binlog中事件信息的事件类型;在所述事件类型为更新时,判断所述binlog的复杂度;在所述复杂度小于阈值时,从所述binlog中获取待更新数据;根据所述待更新数据,对所述目标宽表执行更新操作,得到实时宽表。具体的,一条binlog日志对应的只更新大宽表中和该日志中涉及的表有关系的字段,简单的更新,直接从binlog中获取变更的数据。
可选的,在所述复杂度大于等于阈值时,从所述binlog中获取关联键值;根据所述关联键值在所述数据源表获取待更新数据;根据所述待更新数据,对所述目标宽表执行更新操作,得到实时宽表。具体的,需要通过联合其他表获取的,则通过提取binlog中关联键的值,用关联键的值去数据库中通过最简单的基于索引的方式快速查询出需要关联的各表信息,按规则算出最终的数据给与更新,此种方式避免了通过缓存查询方式造成的数据不一致问题。
可选的,每一条binlog日志都是一个表中的数据记录的增删改情况,该方案构建实时宽表时会根据宽表的具体逻辑选择一张表,对其插入时先删后插入,保证故障恢复时的幂等性操作,插入时会根据需要实时从数据库中通过简单的 基于索引的方式查询其他字段所在表信息后一起插入,而其他宽表使用到表数据变更过来的binlog日志记录则只触发更新各自涉及到的字段,提升更新效率。
可选的,使用DataX将所述目标宽表同步到Impala中。Impala使用类似于传统关系型数据库的SQL语法,使得用户可以用熟悉的方式查询和分析大规模数据集,而无需事先对数据进行转换或移动。通过利用集群中各个节点的内存和计算资源,Impala能够加速复杂的分析查询,并在秒级甚至毫秒级内返回结果。Impala的主要特点包括快速查询、与Hadoop生态系统集成、SQL兼容性高、科并行处理、实时性高。
进一步的,检测到所述数据源表对应的binlog时,根据所述binlog对应的事件信息,利用Impala对所述目标宽表执行逻辑处理,得到实时宽表。Impala是一种开源的、基于内存的分布式SQL查询引擎,旨在提供快速的交互式查询能力,可以在Hadoop生态系统中对存储在HDFS(Hadoop分布式文件系统)中的数据进行实时查询和分析。
进一步的,接收到所述数据源表对应的查询请求时,利用Impala对所述实时宽表执行逻辑处理,以响应所述查询请求。
105、接收到所述数据源表对应的查询请求时,对所述实时宽表执行逻辑处理,以响应所述查询请求。
具体的,设置一个接口或服务接收查询请求,可以是RESTful API、消息队列订阅、RPC调用等方式,可根据具体情况选择合适的通信方式接收查询请求。对接收到的查询请求进行解析,获取查询的条件、需要查询的字段、排序方式等相关信息。根据查询请求中的条件和要求,对实时宽表进行相应的逻辑处理。将经过逻辑处理后得到的数据作为查询结果返回给请求方。可以根据具体情况选择合适的数据传输方式,例如返回JSON格式数据、通过消息队列发送结果等。在处理查询请求的过程中,可以记录相关的日志信息,包括请求信息、处理耗时、返回结果等,便于后续监控和故障排查。
可选的,周期性备份所述实时宽表。具体的,定时对程序做保存点操作,以防数据出错时可以及时从最近的保存点进行流量回放,恢复数据。
在本实施例中,获取数据源表,并将所述数据源表加载到Hive数据仓库;使用所述Hive数据仓库中的SQL语句创建宽表;将所述数据源表加载到所述宽表中,得到目标宽表;检测到所述数据源表对应的binlog时,根据所述binlog对应的事件信息,对所述目标宽表执行逻辑处理,得到实时宽表;接收到所述数据源表对应的查询请求时,对所述实时宽表执行逻辑处理,以响应所述查询请求。基于实时宽表的业务请求处理设备通过实时监测和处理数据源表的变化,并实时更新目标宽表,可使得基于宽表的数据模型具有较高的灵活性和扩展性,能够适应业务需求和数据变化。通过对实时宽表进行逻辑处理,还可以实现对数据的实时加工和处理,满足不同业务场景下的需求。同时,实时宽表的处理也可以帮助优化数据存储和查询性能,提高资源利用效率。在面对复杂的业务场景和多维度的数据分析需求时,基于实时宽表的处理方法能够更好地支持复杂的数据关联和计算,提供更全面的数据视图和分析结果。通过对数据变化的实时监测和处理,可以增强数据的一致性和可追溯性。业务用户可以更可靠地追溯数据的来源和变化,增强数据治理和合规性。通过实时宽表响应业务请求,可使得用户体验得到极大提升,数据库查询压力大幅降低,后端开发压力得到极大释放,提高了可维护性。
请参阅图2,图2为本发明实施例中基于实时宽表的业务请求处理方法104步骤的一个具体实施方式示意图,在104步骤中可以执行以下步骤:
1041、同时检测到所述数据源表对应的多条binlog时,执行并行度增加操作,得到多个并行处理单元;
1042、利用多个所述并行处理单元,根据多条所述binlog对应的事件信息,对所述目标宽表进行并行逻辑处理,得到实时宽表。
具体的,同时检测到所述数据源表对应的多条binlog时,执行并行度增加操作,得到多个并行处理单元;利用多个所述并行处理单元,根据多条所述binlog对应的事件信息,对所述目标宽表进行并行逻辑处理,得到实时宽表。
在本实施例中,由于业务流程复杂,数据流程操作存在较多的事务,一个事务里对同一条记录会同时有增删改等多种操作,采用增加并行度的方式来提高同步速度时采用默认的随机分区方式,由于不确定那条记录会先到会造成很多的数据一致性问题并造成过多的mysql死锁,所以,采用读取binglog 获取表名和主键ID ,通过对表名和主键进行联合hash分区,增加并行度的同时,让同一条记录的变更进入同一个分区去进行操作,从而避免了数据一致性问题,死锁的频度也大大降低,并通过死锁重试完成最终的数据更新,以此保证构建实时宽表的同步效率以及数据一致性。
图3是本发明实施例提供的一种基于实时宽表的业务请求处理设备的结构示意图,该基于实时宽表的业务请求处理设备500可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(central processing units,CPU)510(例如,一个或一个以上处理器)和存储器520,一个或一个以上存储应用程序533或数据532的存储介质530(例如一个或一个以上海量存储设备)。其中,存储器520和存储介质530可以是短暂存储或持久存储。存储在存储介质530的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对基于实时宽表的业务请求处理设备500中的一系列指令操作。更进一步地,处理器510可以设置为与存储介质530通信,在基于实时宽表的业务请求处理设备500上执行存储介质530中的一系列指令操作。
基于实时宽表的业务请求处理设备500还可以包括一个或一个以上电源540,一个或一个以上有线或无线网络接口550,一个或一个以上输入输出接口560,和/或,一个或一个以上操作系统531,例如Windows Serve,Mac OS X,Unix,Linux,Free BSD等等。本领域技术人员可以理解,图3示出的基于实时宽表的业务请求处理设备结构并不构成对基于实时宽表的业务请求处理设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
本发明还提供一种计算机可读存储介质,该计算机可读存储介质可以为非易失性计算机可读存储介质,该计算机可读存储介质也可以为易失性计算机可读存储介质,所述计算机可读存储介质中存储有指令,当所述指令在计算机上运行时,使得计算机执行所述基于实时宽表的业务请求处理方法的步骤。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
此外,虽然采用特定次序描绘了各操作,但是这应当理解为要求这样操作以所示出的特定次序或以顺序次序执行,或者要求所有图示的操作应被执行以取得期望的结果。在一定环境下,多任务和并行处理可能是有利的。同样地,虽然在上面论述中包含了若干具体实现细节,但是这些不应当被解释为对本公开的范围的限制。在单独的实施例的上下文中描述的某些特征还可以组合地实现在单个实现中。相反地,在单个实现的上下文中描述的各种特征也可以单独地或以任何合适的子组合的方式实现在多个实现中。
尽管已经采用特定于结构特征和/或方法逻辑动作的语言描述了本主题,但是应当理解所附权利要求书中所限定的主题未必局限于上面描述的特定特征或动作。相反,上面所描述的特定特征和动作仅仅是实现权利要求书的示例形式。
- 一种便于调节的变速箱悬置支架用打磨装置
- 一种便于使用的磁铁打磨装置
- 一种便于调节角度的汽车零部件用打磨装置
- 一种便于废屑清除的铁板打磨装置
- 一种便于操作的管道口打磨装置及其打磨方法
- 一种便于操作的管道口打磨装置及其打磨方法