一种实时变换数据存储方法、装置、电子设备及存储介质
文献发布时间:2023-06-19 11:08:20
技术领域
本发明涉及数据存储技术领域,尤其涉及一种实时变换数据存储方法、装置、电子设备及存储介质。
背景技术
随着信息技术的发展和普及,用户产生的数据会越来越多,对数据的实时要求也更高,需要大规模地、高效地存储实时数据。
以游戏产品为例,可以包含两类数据,一类是大量的聊天数据,一类是游戏房间的画像数据。其中聊天类的数据,包含文字、图片、音视频,是流水数据,会随着聊天的进行不断新增,并且已经产生的数据不会再发生变化。游戏房间的画像数据,则是不断变化的,随着游戏进度的同步,房间人员的流动时刻会发生变化。
在匹配游戏玩家的过程中,产生的数据多,且实时延迟要求高,如果数据处理速度不如数据生产速度,就会出现数据堆积的情况,造成数据处理延迟,从而造成用户漫长的无畏等待。为了防止用户在漫长的无畏等待中离开,目前主要会采用跳帧的方式,直接抛弃延迟超过容忍时间的数据。但由于抛弃了部分数据,匹配的精准度会下降,使得用户体验大打折扣,同时,为了最大化处理速度,过程数据会采用内存性数据库进行短暂的存储,而不是实时的永久性存储,由此导致实时计算的数据不具备可靠性和完整性,给后续的数据分析造成了一定的障碍。
发明内容
本发明提供了一种实时变换数据存储方法、装置、电子设备及存储介质,用于解决现有的实时数据的存储方式数据处理效率较低的技术问题。
本发明提供了一种实时变换数据存储方法,包括:
获取实时变换数据;
将所述实时变换数据转换为预写式日志数据块;
获取所述预写式日志数据块的操作标识;
根据所述操作标识合并所述预写式日志数据块,得到合并数据块;
对所述合并数据块进行压缩,得到列式数据块;
存储所述列式数据块。
可选地,所述将所述实时变换数据转换为预写式日志数据块的步骤,包括:
将所述实时变换数据转换为多个预写式日志;
按照时间顺序,将多个所述预写式日志进行排序;
按照预设分块时长对排序后的多个所述预写式日志进行分块,得到预写式日志数据块。
可选地,所述对所述合并数据块进行压缩,得到列式数据块的步骤之后,还包括:
提取所述预写式日志的核心指标摘要;
基于所述核心指标摘要生成数据清单;
生成所述预写式日志的快照文件;
基于所述快照文件生成快照清单;
采用所述数据清单和所述快照清单生成数据清单列表,并保存所述数据清单列表。
可选地,还包括:
当接收到数据查询请求时,从所述数据清单列表中,获取满足预设条件的目标数据清单和目标快照清单;
基于所述目标数据清单和所述目标快照清单,确定目标数据块;
获取所述目标数据块的文件路径;
基于所述文件路径加载所述目标数据块;
按照时间序列对所述目标数据块进行排序,得到查询数据。
可选地,所述基于所述目标数据清单和所述目标快照清单,确定目标数据块的步骤,包括:
根据所述目标快照清单确定阻断时间点;
从所述数据查询请求中获取要求时间;
将处于所述阻断时间点和所述要求时间之间的列式数据块确定为目标数据块。
本发明还提供了一种实时变换数据存储装置,包括:
实时变换数据获取模块,用于获取实时变换数据;
转换模块,用于将所述实时变换数据转换为预写式日志数据块;
操作标识获取模块,用于获取所述预写式日志数据块的操作标识;
合并模块,用于根据所述操作标识合并所述预写式日志数据块,得到合并数据块;
压缩模块,用于对所述合并数据块进行压缩,得到列式数据块;
存储模块,用于存储所述列式数据块。
可选地,所述转换模块,包括:
预写式日志转换子模块,用于将所述实时变换数据转换为多个预写式日志;
排序子模块,用于按照时间顺序,将多个所述预写式日志进行排序;
分块子模块,用于按照预设分块时长对排序后的多个所述预写式日志进行分块,得到预写式日志数据块。
可选地,所述装置还包括:
提取模块,用于提取所述预写式日志的核心指标摘要;
数据清单生成模块,用于基于所述核心指标摘要生成数据清单;
快照文件生成模块,用于生成所述预写式日志的快照文件;
快照清单生成模块,用于基于所述快照文件生成快照清单;
数据清单列表生成模块,用于采用所述数据清单和所述快照清单生成数据清单列表,并保存所述数据清单列表。
本发明还提供了一种电子设备,所述设备包括处理器以及存储器:
所述存储器用于存储程序代码,并将所述程序代码传输给所述处理器;
所述处理器用于根据所述程序代码中的指令执行如上任一项所述的实时变换数据存储方法。
本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质用于存储程序代码,所述程序代码用于执行如上任一项所述的实时变换数据存储方法。
从以上技术方案可以看出,本发明具有以下优点:
本发明提供了一种实时变换数存储方法,包括:获取实时变换数据;将实时变换数据转换为预写式日志数据块;获取预写式日志数据块的操作标识;根据操作标识合并预写式日志数据块,得到合并数据块;对合并数据块进行压缩,得到列式数据块;存储列式数据块。本发明通过采用行日志记录异步转列的方式,提高了数据存储的处理效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。
图1为本发明实施例提供的一种实时变换数据存储方法的步骤流程图;
图2为本发明另一实施例提供的一种实时变换数据存储方法的步骤流程图;
图3为本发明实施例提供的一种实时变换数据存储方法的过程示意图;
图4为Sigmoid算法曲线示意图;
图5为本发明实施例提供的数据清单列表生成示意图;
图6为本发明实施例提供的数据查询流程示意图;
图7为本发明实施例提供的一种实时变换数据存储装置的结构框图。
具体实施方式
本发明实施例提供了一种实时变换数据存储方法、装置、电子设备及存储介质,用于解决现有的实时数据的存储方式数据处理效率较低的技术问题。
为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本发明一部分实施例,而非全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
请参阅图1,图1为本发明实施例提供的一种实时变换数据存储方法的步骤流程图。
本发明提供的一种实时变换数据存储方法,具体可以包括以下步骤:
步骤101,获取实时变换数据;
实时变换数据,是指在数据访问的过程中,可以对数据进行更改和删除等变换而产生的数据,以在游戏房间中一起玩游戏的数据为例,数据表的数据在不同表之间流动,并且在数据访问的过程中频繁地读写数据,可以对数据进行更改和删除,数据量非常大。
步骤102,将实时变换数据转换为预写式日志数据块;
在实际场景中,在产生的实时变换数据多,且实时延迟要求高的情况下,如果数据处理速度不如数据生产速度,就会出现数据堆积的情况,造成数据处理延迟,从而造成用户漫长的无畏等待。
有鉴于此,在一个示例中,本发明实施例采用行列结合的存储结构来进行数据存储。行列结合的存储结构是将表中的数据先划分成多个行组,在每一个行组内都放一个HDFS(Hadoop Distributed File System,分布式文件系统)。同时,在每一个行组中按照列来垂直划分成子关系表,压缩其中的数据后单独放在DHFS中。按照这种方式可以确保行列存储结构中所有的数据位于同一个节点上,这样使得读取记录的速度加快,在进行压缩工作时,压缩效果更加明显,对于压缩中的一些不需要访问的列可以直接跳过。
基于上述行列结合的存结构,在本发明实施例中,首先需要将实时变换数据转换为预写式日志数据块进行记录。其中,每条实时变换数据独立一行进行记录。
步骤103,获取预写式日志数据块的操作标识;
步骤104,根据操作标识合并预写式日志数据块,得到合并数据块;
在得到预写式日志数据块后,可以获取预写式日志数据块的操作标识,如增加(Insert)、删除(Delete)和修改(Update)等,对数据进行合并处理,得到合并数据块作为最终的合并结果。
需要说明的是,由于数据是变化的,涉及到增加、删除和修改等操作,因此所有的变换数据都是有状态的,只有先增加数据才有可能被修改或删除,因此实时变换数据需要携带有时间信息,以便于根据时间信息对数据进行处理。在一个示例中,实时变换数据按时间顺序如下表1所示:
表1
如表1所示,从时间序列处理,实时产生的数据首先是先增加两条记录“1,张三”和“2,李四”,然后将“1,张三”修改成“1,张飞”,最后把“2,李四”的记录删除,因此,数据最终结果呈现如表2所示:
表2
需要说明的是,虽然最终结果只会根据操作表示呈现相同Id(主键)的最近的一条数据,如最后只显示“1,张飞”,当实际的删除、修改操作前的数据并不会实际删除,只是不参与后续的压缩存储。
步骤105,对合并数据块进行压缩,得到列式数据块;
对于上述处理得到的合并数据块采用列式存储的方式压缩,可以得到列式数据块作为新的文件片。
需要说明的是,在完成压缩操作后,可以将压缩的日志标识为删除,以便回收空间。
步骤106,存储列式数据块。
在完成压缩后,可以将压缩得到的列式数据块写到分布式磁盘上进行存储。
本发明提供了一种实时变换数存储方法,包括:获取实时变换数据;将实时变换数据转换为预写式日志数据块;获取预写式日志数据块的操作标识;根据操作标识合并预写式日志数据块,得到合并数据块;对合并数据块进行压缩,得到列式数据块;存储列式数据块。本发明通过采用行日志记录异步转列的方式,提高了数据存储的处理效率。
请参阅图2,图2为本发明另一实施例提供的一种实时变换数据存储方法的步骤流程图。具体可以包括以下步骤:
步骤201,获取实时变换数据;
步骤202,将实时变换数据转换为多个预写式日志;
步骤203,按照时间顺序,将多个预写式日志进行排序;
步骤204,按照预设分块时长对排序后的多个预写式日志进行分块,得到预写式日志数据块;
在本发明实施例中,如图3所示,在获取到实时变换数据后,首先可以将其转换为预写式日志(Write-ahead logging,Wal)的格式进行记录,其中,每条数据独立一行。接着,按照时间顺序将多个预写式日志进行排序,并对排序后的预写式日志按照一定的分块时长进行分块,形成预写式日志数据块(Wal File)。在一个示例中,可以按照时间戳(TimeStamp)进行分块,将每一时刻的预写式日志分为一组,形成不同的预写式日志数据块。
步骤205,获取预写式日志数据块的操作标识;
步骤206,根据操作标识合并预写式日志数据块,得到合并数据块;
在本发明实施例中,如图3所示,在得到预写式日志数据块后,可以获取预写式日志数据块的操作标识,如增加(Insert)、删除(Delete)和修改(Update)等,按照时间倒序对预写式日志数据块进行合并处理,得到合并数据块。
步骤207,对合并数据块进行压缩,得到列式数据块;
步骤208,存储列式数据块。
如图3所示,对于上述处理得到的合并数据块采用列式存储的方式压缩,可以得到列式数据块作为新的文件片。在完成压缩后,可以将压缩得到的列式数据块写到分布式磁盘上,并根据服务器的负载情况,均匀地分发到不同服务器上进行持久化存储。
在一个示例中,可以使用独立的低优先级线程进行数据的转移压缩,转移逻辑是将一组Wal文件片作为输入,将每个文件切片中的所有日志文件转化成列式格式,生成新的压缩文件片,写入到对应的列空间中,最后根据转移结果再时间轴上标记。由于采用的是异步压缩的方式,因此不会阻塞数据的写入。
需要说明的是,上述方法,会对延迟上报的数据产生非常多的数据碎片,给读取、写入都带来了比较大的延迟,为此,本发明实施例除了在记录中使用了Wal行转列的方式,还对数据读取进行了优化。
具体地,在本发明实施例中,可以开辟独立的低优先级线程,对压缩后的数据进行合并,减少过多的文件碎片,合并文件的同时,提取数据文件的核心指标摘要(max,min,avg)生成数据清单列表(manifest llist)。使得进行数据查询时,可以优先通过导航文件进行过滤。其具体步骤如下:
S11,提取预写式日志的核心指标摘要;
S12,基于核心指标摘要生成数据清单;
S13,生成预写式日志的快照文件;
S14,基于快照文件生成快照清单;
S15,采用数据清单和快照清单生成数据清单列表,并保存数据清单列表。
在实际应用中,首先可以提取预写式日志的核心指标摘要生成数据清单(manifest)。
接着,引入镜像快照的方式进行查询优化,开辟独立的低优先级线程生成预写式日志的快照文件(snapshot)以及对应的快照清单(manifest snapshot)。需要说明的是,本发明不对标记为更新或者删除的数据进行数据清理,而是保留所有的数据。
在实际应用中,根据数据热度和存储空间成本的平衡,可选择不同的快照生成策略。如采用Sigmoid算法进行时间片段间隔划分。由于存储有成本,同时数据也因热度的要求不同。发生时间越近的数据,需要的精细度越高,而历史遗留数据,则精细度的要求不高。采用Sigmoid算法,可以实现对snapshot的时间进行限定。Sigmoid算法是一种典型的S曲线算法,前期会高频保留,随着时间的推移,频率会成S型曲线下降。具体如图4所示。
在一个具体的示例中,如图5所示,预写式日志数据块通过数据转移压缩操作后,会形成列式数据块,对压缩后产生的列式数据块进行碎片整理,可以生成数据清单作为导航文件,同时,通过引入镜像快照的方式,可以生成快照文件和快照清单。结数据清单和快照清单,可以生成数据清单列表。便于后续进行数据查询。通过加入导航文件和快照清单进行优化后,读取的逻辑将由直接Id+时间扫描数据变成先检索数据清单列表,再查询真实的数据块的操作。其中,导航文件可以采用B+树的方式进行记录。
在完成实时变换数据的存储之后,当用户需要对已存储的舒适数据进行查询时,可以通过以下步骤实现:
S21,当接收到数据查询请求时,从数据清单列表中,获取满足预设条件的目标数据清单和目标快照清单;
S22,基于目标数据清单和目标快照清单,确定目标数据块;
S23,获取目标数据块的文件路径;
S24,基于文件路径加载目标数据块;
S25,按照时间序列对目标数据块进行排序,得到查询数据。
在具体实现中,如图6所示,在进行数据查询(Query)时,首先需要查询数据清单列表获取所有满足条件的数据清单和快照清单,其中,预设的条件可以是时间条件也可以是其他,具体可根据实际需要限定。
接着,通过数据清单和快照清单进行过滤,可以得到满足条件的所有目标数据块的文件路径,根据文件路径可以加载所有命中的目标数据块。
在一个示例中,确定目标数据块的过程通过包括以下方式实现:
根据目标快照清单确定阻断时间点;从数据查询请求中获取要求时间;将处于阻断时间点和要求时间之间的列式数据块确定为目标数据块。
再接着,对目标数据块按照时间序列进行排序,可以获取目标数据块中的数据记录。
进一步地,如果需要获取最新的实时数据,可以追加查询未压缩的Wal File,综合所有的数据后,得到最终查询结果。
基于以上数据结构的查询过程,可以大幅度地减少数据查询的范围,减少IO开销,最终实现查询性能的提升。
本发明实施例采用行日志记录异步转列的方式,存储的效率更高。此外,本发明实施例加入数据概要导航文件,并形成多层级的数据结构,加速了时空分析查询的效率。而且,本发明实施例保留了所有的历史数据,可以查询任一历史时刻的数据,结合snapshot,有效防止空查询击穿所有的时空分区的问题。
请参阅图7,图7为本发明实施例提供的一种实时变换数据存储装置的结构框图。
本发明实施例提供了一种实时变换数据存储装置,包括:
实时变换数据获取模块701,用于获取实时变换数据;
转换模块702,用于将实时变换数据转换为预写式日志数据块;
操作标识获取模块703,用于获取预写式日志数据块的操作标识;
合并模块704,用于根据操作标识合并预写式日志数据块,得到合并数据块;
压缩模块705,用于对合并数据块进行压缩,得到列式数据块;
存储模块706,用于存储列式数据块。
在本发明实施例中,转换模块702,包括:
预写式日志转换子模块,用于将实时变换数据转换为多个预写式日志;
排序子模块,用于按照时间顺序,将多个预写式日志进行排序;
分块子模块,用于按照预设分块时长对排序后的多个预写式日志进行分块,得到预写式日志数据块。
在本发明实施例中,装置还包括:
提取模块,用于提取预写式日志的核心指标摘要;
数据清单生成模块,用于基于核心指标摘要生成数据清单;
快照文件生成模块,用于生成预写式日志的快照文件;
快照清单生成模块,用于基于快照文件生成快照清单;
数据清单列表生成模块,用于采用数据清单和快照清单生成数据清单列表,并保存数据清单列表。
在本发明实施例中,装置还包括:
目标数据清单和目标快照清单获取模块,用于当接收到数据查询请求时,从数据清单列表中,获取满足预设条件的目标数据清单和目标快照清单;
目标数据块确定模块,用于基于目标数据清单和目标快照清单,确定目标数据块;
文件路径获取模块,用于获取目标数据块的文件路径;
加载模块,用于基于文件路径加载目标数据块;
查询数据获取模块,用于按照时间序列对目标数据块进行排序,得到查询数据。
在本发明实施例中,目标数据块确定模块,包括:
阻断时间点确定子模块,用于根据目标快照清单确定阻断时间点;
要求时间获取子模块,用于从数据查询请求中获取要求时间;
目标数据块确定子模块,用于将处于阻断时间点和要求时间之间的列式数据块确定为目标数据块。
本发明实施例还提供了一种电子设备,设备包括处理器以及存储器:
存储器用于存储程序代码,并将程序代码传输给处理器;
处理器用于根据程序代码中的指令执行本发明任一实施例的实时变换数据存储方法。
本发明实施例还提供了一种计算机可读存储介质,计算机可读存储介质用于存储程序代码,程序代码用于执行本发明任一实施例的实时变换数据存储方法。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
- 一种实时变换数据存储方法、装置、电子设备及存储介质
- 一种数据树形结构存储方法及装置、电子设备、存储介质