CN117909344A - 数据更新方法、装置、非易失性存储介质及计算机设备 - Google Patents

数据更新方法、装置、非易失性存储介质及计算机设备 Download PDF

Info

Publication number
CN117909344A
CN117909344A CN202311748104.6A CN202311748104A CN117909344A CN 117909344 A CN117909344 A CN 117909344A CN 202311748104 A CN202311748104 A CN 202311748104A CN 117909344 A CN117909344 A CN 117909344A
Authority
CN
China
Prior art keywords
data
service data
cache object
key
updating
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.)
Pending
Application number
CN202311748104.6A
Other languages
English (en)
Inventor
陈陆洋
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tianyi Electronic Commerce Co Ltd
Original Assignee
Tianyi Electronic Commerce Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Tianyi Electronic Commerce Co Ltd filed Critical Tianyi Electronic Commerce Co Ltd
Priority to CN202311748104.6A priority Critical patent/CN117909344A/zh
Publication of CN117909344A publication Critical patent/CN117909344A/zh
Pending legal-status Critical Current

Links

Abstract

本发明公开了一种数据更新方法、装置、非易失性存储介质及计算机设备。其中,该方法包括:获取第一业务数据,其中,第一业务数据用于更新数据库系统中的第二业务数据,第二业务数据存储于数据库系统中的目标数据表,目标数据表存储于数据库系统的磁盘;将第一业务数据存入与目标数据表对应的更新缓存对象,其中,更新缓存对象存储于数据库系统的内存中,更新缓存对象用于响应对第一业务数据的查询请求。本发明解决了数据库系统无法对小批量数据进行高效的同步更新的技术问题。

Description

数据更新方法、装置、非易失性存储介质及计算机设备
技术领域
本发明涉及大数据领域,具体而言,涉及一种数据更新方法、装置、非易失性存储介质及计算机设备。
背景技术
随着大数据时代的到来,数据处理和分析成为各种业务领域的重要需求,随着数据量的指数级增长和业务需求的不断演进,传统的关系型数据库和基于磁盘存储的数据处理系统逐渐显露出性能瓶颈和可扩展性的限制。为了应对这些挑战,列式数据库管理系统应运而生,专门设计用于处理海量数据的高性能分析和查询。该系统在处理互联网搜索、在线广告和大规模数据分析等领域经受了实际考验。列式数据库管理系统的设计目标是提供快速、可靠、可扩展和经济高效的数据处理解决方案。但列式数据库管理系统在实时更新场景下存在很多问题,目前业界主流方案是使用其ReplacingMergeTree进行大批量的数据批量更新并且去重,但是该数据更新方式为异步更新,每次数据更新都需要将大量的数据从磁盘中取出,导致更新效率不高,无法应对小批量、高频次的同步数据更新需求。
针对上述的问题,目前尚未提出有效的解决方案。
发明内容
本发明实施例提供了一种数据更新方法、装置、非易失性存储介质及计算机设备,以至少解决数据库系统无法对小批量数据进行高效的同步更新的技术问题。
根据本发明实施例的一个方面,提供了一种数据更新方法,包括:获取第一业务数据,其中,所述第一业务数据用于更新数据库系统中的第二业务数据,所述第二业务数据存储于所述数据库系统中的目标数据表,所述目标数据表存储于所述数据库系统的磁盘;将所述第一业务数据存入与所述目标数据表对应的更新缓存对象,其中,所述更新缓存对象存储于所述数据库系统的内存中,所述更新缓存对象用于响应对所述第一业务数据的查询请求。
可选地,所述更新缓存对象包括:哈希地图结构对象,分区信息,排序键和版本键;其中,所述哈希地图结构对象用于存储所述第一业务数据;所述分区信息用于存储所述第一业务数据在所述磁盘中对应的分区文件;所述排序键用于存储所述第一业务数据在所述目标数据表中对应的排序列的值;所述版本键用于存储所述第一业务数据在所述目标数据表中对应的版本列的值。
可选地,将所述第一业务数据存入与所述目标数据表对应的更新缓存对象之后,所述方法还包括:接收查询方发起的数据查询请求,其中,所述数据查询请求用于请求查询所述第一业务数据;将所述第一业务数据从所述更新缓存对象反馈至所述查询方。
可选地,将所述第一业务数据存入与所述目标数据表对应的更新缓存对象之后,所述方法还包括:响应于ReplacingMergeTree合并去重请求,从所述磁盘中获取所述目标数据表,其中,所述ReplacingMergeTree合并去重请求用于请求更新所述目标数据表;基于所述更新缓存对象,将所述第一业务数据替换所述目标数据表中的所述第二业务数据,生成更新后的目标数据表;将所述更新后的目标数据表回存至所述磁盘。
可选地,所述将所述第一业务数据存入与所述目标数据表对应的更新缓存对象,包括:获取所述第一业务数据对应的第一键值,其中,所述第一键值为所述第一业务数据对应的排序键;判断所述更新缓存对象的排序键中是否存在所述第一键值;在所述更新缓存对象的排序键中不存在所述第一键值的情况下,将所述第一业务数据存入所述更新缓存对象。
可选地,所述方法还包括:在所述更新缓存对象的排序键中存在所述第一键值的情况下,获取所述第一业务数据对应的第二键值,其中,所述第二键值为所述第一业务数据对应的版本键;获取所述更新缓存对象中排序键为所述第一键值的在先业务数据的第三键值,其中,所述第三键值为所述在先业务数据的版本键;在根据所述第二键值和所述第三键值确定所述第一业务数据的版本比所述在先业务数据的版本新的情况下,使用所述第一业务数据替换掉所述在先业务数据。
可选地,所述将所述第一业务数据存入与所述目标数据表对应的更新缓存对象,包括:确定所述第一业务数据对应的数据表为所述目标数据表;在所述内存中查找与所述目标数据表对应的所述更新缓存对象;在所述内存中不存在所述更新缓存对象的情况下,在所述内存中创建与所述目标数据表对应的所述更新缓存对象;将所述第一业务数据存入所述更新缓存对象。
根据本发明实施例的另一方面,还提供了一种数据更新装置,包括:获取模块,用于获取第一业务数据,其中,所述第一业务数据用于更新数据库系统中的第二业务数据,所述第二业务数据存储于所述数据库系统中的目标数据表,所述目标数据表存储于所述数据库系统的磁盘;存储模块,用于将所述第一业务数据存入与所述目标数据表对应的更新缓存对象,其中,所述更新缓存对象存储于所述数据库系统的内存中,所述更新缓存对象用于响应对所述第一业务数据的查询请求。
可选地,所述更新缓存对象包括:哈希地图结构对象,分区信息,排序键和版本键;其中,所述哈希地图结构对象用于存储所述第一业务数据;所述分区信息用于存储所述第一业务数据在所述磁盘中对应的分区文件;所述排序键用于存储所述第一业务数据在所述目标数据表中对应的排序列的值;所述版本键用于存储所述第一业务数据在所述目标数据表中对应的版本列的值。
可选地,所述装置还包括:接收模块,用于接收查询方发起的数据查询请求,其中,所述数据查询请求用于请求查询所述第一业务数据;反馈模块,用于将所述第一业务数据从所述更新缓存对象反馈至所述查询方。
可选地,所述装置还包括:读取模块,用于响应于ReplacingMergeTree合并去重请求,从所述磁盘中获取所述目标数据表,其中,所述ReplacingMergeTree合并去重请求用于请求更新所述目标数据表;替换模块,用于基于所述更新缓存对象,将所述第一业务数据替换所述目标数据表中的所述第二业务数据,生成更新后的目标数据表;回存模块,用于将所述更新后的目标数据表回存至所述磁盘。
可选地,所述存储模块,还用于获取所述第一业务数据对应的第一键值,其中,所述第一键值为所述第一业务数据对应的排序键;判断所述更新缓存对象的排序键中是否存在所述第一键值;在所述更新缓存对象的排序键中不存在所述第一键值的情况下,将所述第一业务数据存入所述更新缓存对象。
可选地,所述装置还用于:在所述更新缓存对象的排序键中存在所述第一键值的情况下,获取所述第一业务数据对应的第二键值,其中,所述第二键值为所述第一业务数据对应的版本键;获取所述更新缓存对象中排序键为所述第一键值的在先业务数据的第三键值,其中,所述第三键值为所述在先业务数据的版本键;在根据所述第二键值和所述第三键值确定所述第一业务数据的版本比所述在先业务数据的版本新的情况下,使用所述第一业务数据替换掉所述在先业务数据。
可选地,所述存储模块,还用于:确定所述第一业务数据对应的数据表为所述目标数据表;在所述内存中查找与所述目标数据表对应的所述更新缓存对象;在所述内存中不存在所述更新缓存对象的情况下,在所述内存中创建与所述目标数据表对应的所述更新缓存对象;将所述第一业务数据存入所述更新缓存对象。
根据本发明实施例的又一方面,还提供了一种非易失性存储介质,所述非易失性存储介质包括存储的程序,其中,在所述程序运行时控制所述非易失性存储介质所在设备执行上述任意一项所述数据更新方法。
根据本发明实施例的再一方面,还提供了一种计算机设备,所述计算机设备包括存储器和处理器,所述存储器用于存储程序,所述处理器用于运行所述存储器存储的程序,其中,所述程序运行时执行上述任意一项所述数据更新方法。
在本发明实施例中,通过获取第一业务数据,其中,第一业务数据用于更新数据库系统中的第二业务数据,第二业务数据存储于数据库系统中的目标数据表,目标数据表存储于数据库系统的磁盘;将第一业务数据存入与目标数据表对应的更新缓存对象,其中,更新缓存对象存储于数据库系统的内存中,更新缓存对象用于响应对第一业务数据的查询请求,达到了使得数据库系统可以支持小批量多频次的同步数据更新的目的,从而实现了提高数据库系统的数据更新效率的技术效果,进而解决了数据库系统无法对小批量数据进行高效的同步更新的技术问题。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1示出了一种用于实现数据更新方法的计算机终端的硬件结构框图;
图2是根据本发明实施例提供的数据更新方法的流程示意图;
图3是根据本发明可选实施例的数据库系统数据更新流程的示意图;
图4是根据本发明实施例提供的数据更新装置的结构框图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
首先,对本申请实施例进行描述的过程中出现的部分名词或者术语适用于如下解释:
列式数据库管理系统(Click Stream,Data WareHouse):列式数据库管理系统(本申请中简称为数据库系统)是一种用于在线分析处理查询(OLAP:Online AnalyticalProcessing)MPP架构的列式存储数据库(DBMS:Database Management System),能够使用SQL查询实时生成分析数据报告。
Partition(分区):在数据库系统中,Partition(分区)是一种用于在表中组织数据的概念。它允许将表中的数据按照特定的方式进行水平分割和存储,以便更高效地执行查询和管理数据。每个分区可以看作是表中的一个子集,它们之间相互独立,可以独立地进行查询、备份和维护。
Merge(合并):在数据库系统中,Merge(合并)是关于数据的合并和整合,是指将数据从多个副本或分区(Partition)中合并到一个副本或分区(Partition)的过程。
MergeTree(Efficient storage engine for sorted time-series data):是数据库系统的一种存储引擎,通过合并排序的数据块来组织和管理数据。MergeTree采用了时间序列的思想,适用于按照时间戳进行查询和聚合的数据场景。它支持数据的快速插入、更新和删除操作,并提供了多种灵活的分区和排序策略,以满足不同的数据需求。
ReplacingMergeTree(Time-based data replacement storage engine):是数据库系统的一种存储引擎,基本与MergeTree功能相同,唯一不同点是该引擎具备删除相同排序键(Sorting Key)的重复条目的功能,当插入具有相同主键的新数据时,它会替换旧数据,确保存储中只保留最新的数据版本,达到更新数据的目的。
Sorting Key(排序键):用于对数据进行排序和组织的关键属性。排序键决定了数据在物理存储上的排列顺序,对查询性能和压缩效果有重要影响。在ReplacingMergeTree中,排序键是由一个或多个列组成的。数据按照排序键的定义进行排序,以便相邻的行具有相似的排序键值。
Version(版本号):在ReplacingMergeTree中,每条数据都有一个版本号(version),用于标识数据的更新历史。当有新的数据插入到表中时,如果与现有数据的主键(primary key)匹配,那么根据主键和版本号的比较,会判断数据是否为新版本(higherversion)的数据。
根据本发明实施例,提供了一种数据更新的方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
本申请实施例所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。图1示出了一种用于实现数据更新方法的计算机终端的硬件结构框图。如图1所示,计算机终端10可以包括一个或多个(图中采用处理器102a、处理器102b,……,处理器102n来示出)处理器(处理器可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)、用于存储数据的存储器104。除此以外,还可以包括:显示器、输入/输出接口(I/O接口)、通用串行总线(USB)端口(可以作为BUS总线的端口中的一个端口被包括)、网络接口、电源和/或相机。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,计算机终端10还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
应当注意到的是上述一个或多个处理器和/或其他数据处理电路在本文中通常可以被称为“数据处理电路”。该数据处理电路可以全部或部分的体现为软件、硬件、固件或其他任意组合。此外,数据处理电路可为单个独立的处理模块,或全部或部分的结合到计算机终端10中的其他元件中的任意一个内。如本申请实施例中所涉及到的,该数据处理电路作为一种处理器控制(例如与接口连接的可变电阻终端路径的选择)。
存储器104可用于存储应用软件的软件程序以及模块,如本发明实施例中的数据更新方法对应的程序指令/数据存储装置,处理器通过运行存储在存储器104内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的应用程序的数据更新方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端10。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
显示器可以例如触摸屏式的液晶显示器(LCD),该液晶显示器可使得用户能够与计算机终端10的用户界面进行交互。
列式数据库管理系统(简称数据库系统)是一种面向联机分析处理(OLAP)的列式存储数据库管理系统,主要用于在线分析处理查询(OLAP),能够使用SQL查询实时生成分析数据报告。数据库系统是一个完全的列式数据库管理系统,允许在运行时创建表和数据库,加载数据和运行查询,而无需重新配置和重新启动服务器,支持线性扩展,简单方便,高可靠性,容错。它采用Local attached storage作为存储,没有采用Hadoop生态,而是提供了一些SQL直接接口,有比较丰富的原生client。数据库系统当前的数据更新方式存在如下具体弊端:
数据库系统无法支持真正的同步数据更新,数据库系统的ReplacingMergeTree引擎不具备同步更新数据的功能,只能进行异步更新,无论是原生的update语句还是借助ReplacingMergeTree引擎,都只能发送更新请求,然后等待后台异步更新完毕,数据库系统无法保证第一时间同步更新数据。
数据库系统无法支持高并发的更新操作,数据库系统的ReplacingMergeTree引擎的每一次数据更新,本质上都是一种Merge操作,都需要将数据表的整个历史partition数据与更新partition数据读取至内存中,在内存中对数据更新后,再将新的全量数据生成新的partition文件,即使更新单行数据,也会涉及全表数据的重新加载写入,故根本无法支撑高并发的update操作。
数据库系统不适合做实时小批量的更新去重操作,数据库系统的更新逻辑注定了它无论是更新单行数据还是更新万行数据,都需要进行全表数据的重新读写,那么该特性下,一次性更新尽可能多的数据就成了数据库系统的数据更新最优解,而单批数据量越小反而越不利于数据库系统的更新操作。
数据库系统使用ReplacingMergeTree引擎更新数据具有数据可见性的问题,该引擎具有根据排序键做去重更新的功能,也是目前业界使用数据库系统时主流的数据更新方案,但是使用该引擎更新数据时,新、旧数据会同时存在一定时间,该时间段内,用户既能查询到最新数据,也能查询到历史数据,这就造成了一定的数据错误显示问题。
为了解决上述问题,本申请提出了一种针对数据库系统的数据更新方法,图2是根据本发明实施例提供的数据更新方法的流程示意图,如图2所示,该方法包括如下步骤:
步骤S202,获取第一业务数据,其中,第一业务数据用于更新数据库系统中的第二业务数据,第二业务数据存储于数据库系统中的目标数据表,目标数据表存储于数据库系统的磁盘。其中,第一业务数据可以是数据库系统中的第二业务数据对应的更新数据,第二业务数据存储在磁盘中,采用相关技术的数据更新方案,需要先将第二业务数据所在分区文件(partition文件)整体读取到内存中,然后在内存中进行数据更新,这会产生大量的磁盘与内存之间的数据交互开销,使得整体的更新频率较慢,且更新过程为异步过程。
步骤S204,将第一业务数据存入与目标数据表对应的更新缓存对象,其中,更新缓存对象存储于数据库系统的内存中,更新缓存对象用于响应对第一业务数据的查询请求。
本步骤实现了利用内存中的更新缓存对象实现数据更新,即在更新缓存对象中采用第一业务数据替换第二业务数据,即完成数据更新,该过程不需要磁盘与内存进行数据传输,因此可以大大加快数据更新速度。后续可以在内存中利用更新缓存对象积累了很多频次的更新后,再调用数据库系统的ReplacingMergeTree,将磁盘中对应分区的数据文件读取到内存中,用更新缓存对象中的数据替换读取到的磁盘中的分区文件,然后将更新后的分区文件再回存到磁盘中,完成更新数据的持久化。在将更新数据持久化到磁盘之前,用户如果希望查询对应的数据,可以直接从内存中的更新缓存对象中读取数据来反馈给用户,而不需要去磁盘中获取数据,因此可以保证给到用户正确的最新数据。
作为一种可选的实施例,更新缓存对象包括:哈希地图结构对象(hashmap),分区信息(partition信息),排序键和版本键;其中,哈希地图结构对象用于存储第一业务数据;分区信息用于存储第一业务数据在磁盘中对应的分区文件;排序键用于存储第一业务数据在目标数据表中对应的排序列的值;版本键用于存储第一业务数据在目标数据表中对应的版本列的值。
其中,哈希地图结构对象(HashMap)是数据库系统中的一个数据结构,用于存储键值对数据。在数据库系统中,HashMap用于存储数据的索引和分区信息。HashMap的键可以是任意类型的数据,而值可以是整数、字符串等类型的数据。在查询过程中,数据库系统会使用HashMap来加速数据的查询和过滤操作,提高查询效率。分区信息用于指示第一业务数据在磁盘中所应当存入的分区是哪个。
在数据库系统中,排序键(ORDER BY)用于指定查询结果的排序方式,可以是一组列的元组或任意的表达式。如果没有使用PRIMARY KEY显式的指定主键,数据库系统会使用排序键作为主键。
版本键(Version Key)是数据库系统中的一个概念,用于记录数据的版本信息。在数据库系统中,数据会按照时间戳或其他标识进行版本划分,每个版本的数据都有一个对应的版本键。版本键可以帮助数据库系统追踪数据的变化,并实现数据的回滚和历史数据的保留。
作为一种可选的实施例,将第一业务数据存入与目标数据表对应的更新缓存对象,包括:确定第一业务数据对应的数据表为目标数据表;在内存中查找与目标数据表对应的更新缓存对象;在内存中不存在更新缓存对象的情况下,在内存中创建与目标数据表对应的更新缓存对象;将第一业务数据存入更新缓存对象。
可选地,可以为数据库系统中的每一个数据表创建一个对应的更新缓存对象,专门维护对应的数据表的数据更新,实现一表一维护,保证磁盘和内存之间的数据传输开销最小化。
作为一种可选的实施例,将第一业务数据存入与目标数据表对应的更新缓存对象,包括:获取第一业务数据对应的第一键值,其中,第一键值为第一业务数据对应的排序键;判断更新缓存对象的排序键中是否存在第一键值;在更新缓存对象的排序键中不存在第一键值的情况下,将第一业务数据存入更新缓存对象。基于本可选的实施例,先判断是否存在与第一业务数据具有相同排序键的业务数据,如果没有的话,说明该排序键的数据为首次更新,因此可以将第一业务数据存入更新缓存对象。
作为一种可选的实施例,方法还包括:在更新缓存对象的排序键中存在第一键值的情况下,获取第一业务数据对应的第二键值,其中,第二键值为第一业务数据对应的版本键;获取更新缓存对象中排序键为第一键值的在先业务数据的第三键值,其中,第三键值为在先业务数据的版本键;在根据第二键值和第三键值确定第一业务数据的版本比在先业务数据的版本新的情况下,使用第一业务数据替换掉在先业务数据。基于本可选的实施例,可以保证更新缓存对象中存储的第一业务数据为版本最新的数据,通过比较版本键,保证内存获取到新版本的数据的时候,将旧数据覆盖掉。
作为一种可选的实施例,将第一业务数据存入与目标数据表对应的更新缓存对象之后,数据更新方法还可以包括如下步骤:接收查询方发起的数据查询请求,其中,数据查询请求用于请求查询第一业务数据;将第一业务数据从更新缓存对象反馈至查询方。
作为一种可选的实施例,将第一业务数据存入与目标数据表对应的更新缓存对象之后,数据更新方法还可以包括:响应于ReplacingMergeTree合并去重请求,从磁盘中获取目标数据表,其中,ReplacingMergeTree合并去重请求用于请求更新目标数据表;基于更新缓存对象,将第一业务数据替换目标数据表中的第二业务数据,生成更新后的目标数据表;将更新后的目标数据表回存至磁盘。
ReplacingMergeTree是数据库系统中的一种表引擎,它是在MergeTree的基础上添加了“处理重复数据”的功能。ReplacingMergeTree引擎的主要特点是它会删除具有相同主键的重复项,只会在合并分区时进行去重操作,写入相同数据时并不会引发异常。因此,ReplacingMergeTree适用于在后台清除重复的数据以节省空间,但是它不保证没有重复的数据出现。通过本可选的实施例,实现了将内存中的多批次更新的数据持久化到磁盘中,实现了数据同步。
上述步骤中,通过获取第一业务数据,其中,第一业务数据用于更新数据库系统中的第二业务数据,第二业务数据存储于数据库系统中的目标数据表,目标数据表存储于数据库系统的磁盘;将第一业务数据存入与目标数据表对应的更新缓存对象,其中,更新缓存对象存储于数据库系统的内存中,更新缓存对象用于响应对第一业务数据的查询请求,达到了使得数据库系统可以支持小批量多频次的同步数据更新的目的,从而实现了提高数据库系统的数据更新效率的技术效果,进而解决了数据库系统无法对小批量数据进行高效的同步更新的技术问题。
基于上述实施例及可选实施例,本申请提供了如图3所示的为数据库系统进行数据更新的具体实施例,该具体实施例可以克服现有技术中的数据库系统在高并发更新、小批次更新、同步更新等场景下的技术不足,能够支持ReplacingMergeTree快速实施同步进行去重更新,且支持小批次更新,同时避免了ReplacingMergeTree固有的历史脏数据展示问题,其具体实施方式包括以下的步骤:
步骤(1),在数据库系统进程内部,为每个ReplacingMergeTree引擎都新构建一个对应的“更新缓存对象”,该更新缓存对象的作用就是在内存中记录每个ReplacingMergeTree引擎表的更新记录,快速缓存更新信息,并在查询时获取更新信息,此更新缓存对象所有操作均为内存中完成,不涉及磁盘,故速度也得以保证。
步骤(2),内存中的更新缓存对象中主要包含四部分信息:
更新数据所属的partition信息。所有数据本质上都存放于本地磁盘的partition文件中,内存中的更新一样也有对应的本地partition。
HashMap结构对象,该map中每个键值对即单条更新数据记录,key为“排序键”,value为记录详情。
对应ReplacingMergeTree引擎表的“排序键”名。
对应ReplacingMergeTree引擎表的“版本键”名。
步骤(3),当ReplacingMergeTree引擎表发生更新数据的写入时,需要将更新数据集加入对应的更新缓存对象,
首先根据更新数据集的所属partition找到当前已有的更新缓存对象。
如果无法找到则新建更新缓存对象,更新缓存对象中的partition信息为此次更新数据所属的partition信息,排序键名与版本键名均为ReplacingMergeTree表固有信息。在创建map对象时,会将所有更新记录存入hashmap。
在将更新数据集写入map时,需要判断数据记录的key(排序键)是否已经存在,如果已经存在则表示有相同记录已经缓存,则需要比较二者记录的“版本键”值,保证相同排序键数据在map中只存在一条,且该条为“版本”键值最新的数据。
此步骤目的为“缓存对象”的初始构建逻辑与更新逻辑。
此步骤是本申请的关键之一,在更新数据传输至数据库系统内存时即可完成,当更新缓存对象完成之后,更新数据本质上即完成了更新。
由于全在内存中进行,故可以实现同步更新的效果,并且该逻辑由于没有涉及磁盘merge逻辑,故支持高并发操作,且单条更新记录与多条更新记录的底层逻辑均为“缓存对象”的更新,故也同时支持小批次数据的更新。
步骤(4),当有sql进行ReplacingMergeTree引擎表的查询请求时,初始还是正常进行磁盘partition的扫描读取至内存,读取完毕后开始本申请的改进操作:
校验每个partition是否存在对应的更新缓存对象,如果不存在,则表示该partition没有发生过更新,忽略该partition数据集。
如果partition存在对应更新缓存对象,则表示需要针对该partition的数据进行更新替换操作。
针对扫描磁盘至内存的partition数据集中的数据进行hash计算,判断该条记录是否存在“更新缓存”map中的更新记录,如果存在,则在当前内存中发生替换,使用“更新缓存”中的最新记录。
此步骤是本申请的关键之一,为更新缓存对象的具体使用逻辑。
由于此步骤发生于查询操作,故可避免原有技术中的历史脏数据展示问题(历史脏数据均被更新替换),并且由于所有操作均于内存中完成,故性能也得以保证。
步骤(5),ReplacingMergeTree引擎内部原生具有合并去重功能,其通过磁盘partition的重写合并以达到保留去重结果partition的目的,即意味着被合并的partition中已经没有了重复数据,所有数据均为最新数据。此处本申请会进行优化:当发生ReplacingMergeTree合并去重时,会根据其操作的partition信息,删除内存中该partition对应的“缓存对象”,因为此时本质上来说partition已没有历史脏数据了,只剩下更新后的磁盘数据,故也不需要进行缓存了。
此步骤在原有技术中为更新数据的关键步骤,只有此逻辑完成,才标志着数据的正式更新完毕。
而本申请避免了对于该逻辑的依赖,该逻辑资源消耗大,耗时久,在本申请方案中,数据更新并不依赖此步骤的完成,此步骤仅仅时对于缓存数据的清除作用。
步骤(6),本申请还具有横向扩展的能力,由于所有的“缓存对象”都存储于内存中,故当单节点内存达到瓶颈时,可以横向扩展集群节点数,分散单节点的partition压力的同时,也分散了单节点partition的对应“缓存对象”压力。
上述具体实施例解决了现有技术中存在的如下问题:1、针对数据库系统的无法支持真正的同步数据更新的问题,本申请提出了一种内存结构,数据的更新会优先存放与内存中,而原有的磁盘合并更新逻辑只起到备份作用,由于更新操作改为内存中进行,故更新代价大大降低,从而到达同步更新的目的。2、针对数据库系统无法支持高并发的更新操作,之所以原先无法支持高并发操作,根本原因在于ReplacingMergeTree引擎的更新操作,每一次都会生成单独待更新的partition数据文件,然后通过历史数据与更新数据的全量加载后的mere操作进行更新,当并发度上来后会生成大量更新partition文件,也会带来大量IO压力,而本申请的更新数据存放于内存中,故高并发下只会涉及内存操作,避免了高IO压力。3、针对数据库系统ReplacingMergeTree引擎不适合做实时小批量的更新去重操作的问题,之所以不适合小批量更新,根本原因在于其更新数据无论数据量大小,均需要全量partition数据的载入更新重写,故更新单大批量数据的压力远小于多次更新小批量数据的压力,而本申请的更新是在内存中进行,数据的使用不涉及全量数据的合并重写,故多次小批量更新与单次大批量更新的效果是一样的。4、针对ReplacingMergeTree引擎更新数据时,会存在异步更新前,历史数据与更新数据并存展示的问题,本申请的核心点是在数据查询时内存中对结果数据进行hash命中并更新的,而非依赖异步的磁盘partition文件数据的合并更新操作,故每次查询出的数据都是更新后的最新数据,也就不存在历史数据与更新数据并存展示的问题。
现有技术中ReplacingMergeTree引擎的更新操作,每一次都会生成单独待更新的partition数据文件,然后通过历史数据与更新数据的全量加载后的mere操作进行更新,当并发度上来后会生成大量更新partition文件,也会带来大量IO压力。而本申请由于数据更新操作为内存中进行,高并发场景下不会有IO操作,故支持的并发度远高于现有技术。
现有技术中,如果数据库系统面临多次小批量数据更新的场景,需要借助kafka等外部缓冲队列,对数据进行缓冲积攒,然后一次性消费足够的大批量数据更新。而本申请更新是在内存中进行,数据的使用不涉及全量数据的合并重写,故多次小批量更新与单次大批量更新的效果是一样的。
现有技术中数据库系统ReplacingMergeTree引擎的所有更新去重行为本质上均为异步操作,因为整个更新的本质是partition文件的merge,该操作涉及大量磁盘IO,较为耗时,要么在更新请求的时候增加“sync”关键字等待异步完成merge后返回请求,要么在查询的时候增加“final”关键字,查询时强行进行Merge合并去重后返回更新结果。而本申请中所有更新数据皆第一时间写入内存,同步写入内存后更新即可完成,其更新数据的展示逻辑是在查询时内存中数据通过hash命中后更新并展示,故在不涉及磁盘IO的情况下,即可完成同步数据更新。
现有技术中数据库系统ReplacingMergeTree引擎由于其执行特点导致整个更新去重的逻辑为:(1)先生成更新partition文件(2)将新旧partition文件均加载进内存(3)内存合并更新完毕后再写入磁盘生成新的partition文件并删除所有旧partition文件。该模式就决定了当第一步新partition文件生成的时候,此时针对数据库系统集群进行数据查询就会同时展示新旧数据,里面会包含旧的脏数据。而本申请核心点是在数据查询时内存中对结果数据进行hash命中并更新的,而非依赖异步的磁盘partition文件数据的合并更新操作,故每次查询出的数据都是更新后的最新数据,也就不存在历史数据与更新数据并存展示的问题。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的数据更新方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例的方法。
根据本发明实施例,还提供了一种用于实施上述数据更新方法的数据更新装置,图4是根据本发明实施例提供的数据更新装置的结构框图,如图4所示,该数据更新装置包括:获取模块42和存储模块44,下面对该数据更新装置进行说明。
获取模块42,用于获取第一业务数据,其中,第一业务数据用于更新数据库系统中的第二业务数据,第二业务数据存储于数据库系统中的目标数据表,目标数据表存储于数据库系统的磁盘;
存储模块44,连接于上述获取模块42,用于将第一业务数据存入与目标数据表对应的更新缓存对象,其中,更新缓存对象存储于数据库系统的内存中,更新缓存对象用于响应对第一业务数据的查询请求。
此处需要说明的是,上述获取模块42和存储模块44对应于实施例中的步骤S202至步骤S204,两个模块与对应的步骤所实现的实例和应用场景相同,但不限于上述实施例所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在实施例提供的计算机终端10中。
作为一种可选的实施例,更新缓存对象包括:哈希地图结构对象,分区信息,排序键和版本键;其中,哈希地图结构对象用于存储第一业务数据;分区信息用于存储第一业务数据在磁盘中对应的分区文件;排序键用于存储第一业务数据在目标数据表中对应的排序列的值;版本键用于存储第一业务数据在目标数据表中对应的版本列的值。
作为一种可选的实施例,装置还包括:接收模块,用于接收查询方发起的数据查询请求,其中,数据查询请求用于请求查询第一业务数据;反馈模块,用于将第一业务数据从更新缓存对象反馈至查询方。
作为一种可选的实施例,装置还包括:读取模块,用于响应于ReplacingMergeTree合并去重请求,从磁盘中获取目标数据表,其中,ReplacingMergeTree合并去重请求用于请求更新目标数据表;替换模块,用于基于更新缓存对象,将第一业务数据替换目标数据表中的第二业务数据,生成更新后的目标数据表;回存模块,用于将更新后的目标数据表回存至磁盘。
作为一种可选的实施例,存储模块,还用于获取第一业务数据对应的第一键值,其中,第一键值为第一业务数据对应的排序键;判断更新缓存对象的排序键中是否存在第一键值;在更新缓存对象的排序键中不存在第一键值的情况下,将第一业务数据存入更新缓存对象。
作为一种可选的实施例,装置还用于:在更新缓存对象的排序键中存在第一键值的情况下,获取第一业务数据对应的第二键值,其中,第二键值为第一业务数据对应的版本键;获取更新缓存对象中排序键为第一键值的在先业务数据的第三键值,其中,第三键值为在先业务数据的版本键;在根据第二键值和第三键值确定第一业务数据的版本比在先业务数据的版本新的情况下,使用第一业务数据替换掉在先业务数据。
作为一种可选的实施例,存储模块,还用于:确定第一业务数据对应的数据表为目标数据表;在内存中查找与目标数据表对应的更新缓存对象;在内存中不存在更新缓存对象的情况下,在内存中创建与目标数据表对应的更新缓存对象;将第一业务数据存入更新缓存对象。
本发明的实施例可以提供一种计算机设备,可选地,在本实施例中,上述计算机设备可以位于计算机网络的多个网络设备中的至少一个网络设备。该计算机设备包括存储器和处理器。
其中,存储器可用于存储软件程序以及模块,如本发明实施例中的数据更新方法和装置对应的程序指令/模块,处理器通过运行存储在存储器内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的数据更新方法。存储器可包括高速随机存储器,还可以包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器可进一步包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
处理器可以通过传输装置调用存储器存储的信息及应用程序,以执行下述步骤:获取第一业务数据,其中,第一业务数据用于更新数据库系统中的第二业务数据,第二业务数据存储于数据库系统中的目标数据表,目标数据表存储于数据库系统的磁盘;将第一业务数据存入与目标数据表对应的更新缓存对象,其中,更新缓存对象存储于数据库系统的内存中,更新缓存对象用于响应对第一业务数据的查询请求。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一非易失性存储介质中,存储介质可以包括:闪存盘、只读存储器(Read-Only Memory,ROM)、随机存取器(RandomAccess Memory,RAM)、磁盘或光盘等。
本发明的实施例还提供了一种非易失性存储介质。可选地,在本实施例中,上述非易失性存储介质可以用于保存上述实施例所提供的数据更新方法所执行的程序代码。
可选地,在本实施例中,上述非易失性存储介质可以位于计算机网络中计算机终端群中的任意一个计算机终端中,或者位于移动终端群中的任意一个移动终端中。
可选地,在本实施例中,非易失性存储介质被设置为存储用于执行以下步骤的程序代码:获取第一业务数据,其中,第一业务数据用于更新数据库系统中的第二业务数据,第二业务数据存储于数据库系统中的目标数据表,目标数据表存储于数据库系统的磁盘;将第一业务数据存入与目标数据表对应的更新缓存对象,其中,更新缓存对象存储于数据库系统的内存中,更新缓存对象用于响应对第一业务数据的查询请求。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个非易失性取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (10)

1.一种数据更新方法,其特征在于,包括:
获取第一业务数据,其中,所述第一业务数据用于更新数据库系统中的第二业务数据,所述第二业务数据存储于所述数据库系统中的目标数据表,所述目标数据表存储于所述数据库系统的磁盘;
将所述第一业务数据存入与所述目标数据表对应的更新缓存对象,其中,所述更新缓存对象存储于所述数据库系统的内存中,所述更新缓存对象用于响应对所述第一业务数据的查询请求。
2.根据权利要求1所述的方法,其特征在于,所述更新缓存对象包括:哈希地图结构对象,分区信息,排序键和版本键;其中,所述哈希地图结构对象用于存储所述第一业务数据;所述分区信息用于存储所述第一业务数据在所述磁盘中对应的分区文件;所述排序键用于存储所述第一业务数据在所述目标数据表中对应的排序列的值;所述版本键用于存储所述第一业务数据在所述目标数据表中对应的版本列的值。
3.根据权利要求2所述的方法,其特征在于,将所述第一业务数据存入与所述目标数据表对应的更新缓存对象之后,所述方法还包括:
接收查询方发起的数据查询请求,其中,所述数据查询请求用于请求查询所述第一业务数据;
将所述第一业务数据从所述更新缓存对象反馈至所述查询方。
4.根据权利要求2所述的方法,其特征在于,将所述第一业务数据存入与所述目标数据表对应的更新缓存对象之后,所述方法还包括:
响应于ReplacingMergeTree合并去重请求,从所述磁盘中获取所述目标数据表,其中,所述ReplacingMergeTree合并去重请求用于请求更新所述目标数据表;
基于所述更新缓存对象,将所述第一业务数据替换所述目标数据表中的所述第二业务数据,生成更新后的目标数据表;
将所述更新后的目标数据表回存至所述磁盘。
5.根据权利要求2所述的方法,其特征在于,所述将所述第一业务数据存入与所述目标数据表对应的更新缓存对象,包括:
获取所述第一业务数据对应的第一键值,其中,所述第一键值为所述第一业务数据对应的排序键;
判断所述更新缓存对象的排序键中是否存在所述第一键值;
在所述更新缓存对象的排序键中不存在所述第一键值的情况下,将所述第一业务数据存入所述更新缓存对象。
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
在所述更新缓存对象的排序键中存在所述第一键值的情况下,获取所述第一业务数据对应的第二键值,其中,所述第二键值为所述第一业务数据对应的版本键;
获取所述更新缓存对象中排序键为所述第一键值的在先业务数据的第三键值,其中,所述第三键值为所述在先业务数据的版本键;
在根据所述第二键值和所述第三键值确定所述第一业务数据的版本比所述在先业务数据的版本新的情况下,使用所述第一业务数据替换掉所述在先业务数据。
7.根据权利要求1至6中任意一项所述的方法,其特征在于,所述将所述第一业务数据存入与所述目标数据表对应的更新缓存对象,包括:
确定所述第一业务数据对应的数据表为所述目标数据表;
在所述内存中查找与所述目标数据表对应的所述更新缓存对象;
在所述内存中不存在所述更新缓存对象的情况下,在所述内存中创建与所述目标数据表对应的所述更新缓存对象;
将所述第一业务数据存入所述更新缓存对象。
8.一种数据更新装置,其特征在于,包括:
获取模块,用于获取第一业务数据,其中,所述第一业务数据用于更新数据库系统中的第二业务数据,所述第二业务数据存储于所述数据库系统中的目标数据表,所述目标数据表存储于所述数据库系统的磁盘;
存储模块,用于将所述第一业务数据存入与所述目标数据表对应的更新缓存对象,其中,所述更新缓存对象存储于所述数据库系统的内存中,所述更新缓存对象用于响应对所述第一业务数据的查询请求。
9.一种非易失性存储介质,其特征在于,所述非易失性存储介质包括存储的程序,其中,在所述程序运行时控制所述非易失性存储介质所在设备执行权利要求1至7中任意一项所述数据更新方法。
10.一种计算机设备,其特征在于,所述计算机设备包括存储器和处理器,所述存储器用于存储程序,所述处理器用于运行所述存储器存储的程序,其中,所述程序运行时执行权利要求1至7中任意一项所述数据更新方法。
CN202311748104.6A 2023-12-18 2023-12-18 数据更新方法、装置、非易失性存储介质及计算机设备 Pending CN117909344A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311748104.6A CN117909344A (zh) 2023-12-18 2023-12-18 数据更新方法、装置、非易失性存储介质及计算机设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311748104.6A CN117909344A (zh) 2023-12-18 2023-12-18 数据更新方法、装置、非易失性存储介质及计算机设备

Publications (1)

Publication Number Publication Date
CN117909344A true CN117909344A (zh) 2024-04-19

Family

ID=90680968

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311748104.6A Pending CN117909344A (zh) 2023-12-18 2023-12-18 数据更新方法、装置、非易失性存储介质及计算机设备

Country Status (1)

Country Link
CN (1) CN117909344A (zh)

Similar Documents

Publication Publication Date Title
US11816126B2 (en) Large scale unstructured database systems
Gupta et al. Mesa: Geo-replicated, near real-time, scalable data warehousing
CN111046034B (zh) 管理内存数据及在内存中维护数据的方法和系统
US20180011861A1 (en) Managing storage of individually accessible data units
US11275759B2 (en) Data storage method and apparatus, server, and storage medium
Tang et al. Deferred lightweight indexing for log-structured key-value stores
CN111522880A (zh) 一种基于mysql数据库集群的提升数据读写性能的方法
US11836132B2 (en) Managing persistent database result sets
CN111917834A (zh) 一种数据同步方法、装置、存储介质及计算机设备
CN112334891B (zh) 用于搜索服务器的集中式存储
US20200125584A1 (en) Reorganization of partition by growth space with lob columns
Santos et al. Optimizing data warehouse loading procedures for enabling useful-time data warehousing
CN114610680A (zh) 分布式文件系统元数据管理方法、装置、设备及存储介质
WO2017156855A1 (en) Database systems with re-ordered replicas and methods of accessing and backing up databases
WO2023197904A1 (zh) 一种数据处理方法、装置、计算机设备及存储介质
CN117909344A (zh) 数据更新方法、装置、非易失性存储介质及计算机设备
WO2023033721A2 (en) Storage engine for hybrid data processing
CN114036226A (zh) 一种数据同步方法、装置、设备及存储介质
US11232095B2 (en) Composite metadata objects for database systems
CN117131023B (zh) 数据表处理方法、装置、计算机设备和可读存储介质
US11507560B2 (en) Mutable data ingestion and storage
CN117312370A (zh) 数据查询方法、系统及相关设备
US20220171788A1 (en) Data synchronization system, data synchronization apparatus, and data synchronization method
CN116955495A (zh) 数据处理方法、装置、介质及设备
CN116225822A (zh) 数据处理方法、计算设备及计算机存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination