CN115344270A - 数据处理方法及装置、存储介质及电子设备 - Google Patents
数据处理方法及装置、存储介质及电子设备 Download PDFInfo
- Publication number
- CN115344270A CN115344270A CN202211013826.2A CN202211013826A CN115344270A CN 115344270 A CN115344270 A CN 115344270A CN 202211013826 A CN202211013826 A CN 202211013826A CN 115344270 A CN115344270 A CN 115344270A
- Authority
- CN
- China
- Prior art keywords
- data
- type
- memory object
- record
- memory
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
Abstract
本发明提供了一种数据处理方法及装置、存储介质及电子设备,该方法包括:确定处理指令对应的数据记录以及数据处理类型;获取数据记录对应的源代码,源代码基于数据记录的类型定义模板转换得到,类型定义模板包括数据记录的数据结构以及索引信息;对源代码进行编译,获得数据预处理指令;若数据处理类型为写数据类型,通过预设的数据写入服务调用数据预处理指令,以将数据记录转换为内存对象,并将内存对象写入到预设的数据区中,进而将内存对象存储到与数据区相对应的数据文件中;若数据处理类型为读数据类型,通过预设的数据读取服务调用所述数据预处理指令,以在预设的数据区中读取内存映射数据。应用本发明提供的方法,能够提升数据读写效率。
Description
技术领域
本发明涉及计算机技术领域,特别涉及一种数据处理方法及装置、存储介质及电子设备。
背景技术
随着互联网尤其移动互联网的蓬勃发展,大幅流量对电子商务后台系统的高并发和高性能要求越来越高,在此类后台系统中,通常需要在短时间内处理大量复杂的业务数据,系统对业务数据的存储及读取速度成为影响系统性能的关键因素之一。
现有技术中,通常采用关系型和非关系型数据库进行业务数据的读取,然而,在一些密集读取数据的交易场景中,现有的数据库系统的性能无法满足交易需求。同时,伴随复杂业务而生的复杂内部数据结构,在存取时不得不进行大量的序列化和反序列化,增加了软件开发成本,及相应的交易时间开销。
发明内容
本发明所要解决的技术问题是提供一种数据处理方法,能够提升数据读写效率。
本发明还提供了一种数据处理装置,用以保证上述方法在实际中的实现及应用。
一种数据处理方法,包括:
响应于处理指令,确定所述处理指令对应的数据记录以及数据处理类型;所述数据处理类型包括读数据类型和写数据类型中的一种;
获取所述数据记录对应的源代码,所述源代码基于所述数据记录的类型定义模板转换得到,所述类型定义模板包括所述数据记录的数据结构以及索引信息;
对所述源代码进行编译,获得数据预处理指令;
在所述数据处理类型为写数据类型的情况下,通过预设的数据写入服务调用所述数据预处理指令,以将所述数据记录转换为内存对象,并将所述内存对象写入到预设的数据区中,进而将所述内存对象存储到与所述数据区相对应的数据文件中;
在所述数据处理类型为读数据类型的情况下,通过预设的数据读取服务调用所述数据预处理指令,以在预设的数据区中读取内存映射数据,所述内存映射数据预先由所述数据读取服务对所述数据文件中的与所述数据记录相对应的内存对象映射得到。
一种数据处理装置,包括:
确定单元,用于响应于处理指令,确定所述处理指令对应的数据记录以及数据处理类型;所述数据处理类型包括读数据类型和写数据类型中的一种;
获取单元,用于获取所述数据记录对应的源代码,所述源代码基于所述数据记录的类型定义模板转换得到,所述类型定义模板包括所述数据记录的数据结构以及索引信息;
编译单元,用于对所述源代码进行编译,获得数据预处理指令;
第一执行单元,用于在所述数据处理类型为写数据类型的情况下,通过预设的数据写入服务调用所述数据预处理指令,以将所述数据记录转换为内存对象,并将所述内存对象写入到预设的数据区中,进而将所述内存对象存储到与所述数据区相对应的数据文件中;
第二执行单元,用于在所述数据处理类型为读数据类型的情况下,通过预设的数据读取服务调用所述数据预处理指令,以在预设的数据区中读取内存映射数据,所述内存映射数据预先由所述数据读取服务对所述数据文件中的与所述数据记录相对应的内存对象映射得到。
一种存储介质,所述存储介质包括存储指令,其中,在所述指令运行时控制所述存储介质所在的设备执行如上所述的数据处理方法。
一种电子设备,包括存储器,以及一个或者一个以上的指令,其中一个或一个以上指令存储于存储器中,且经配置以由一个或者一个以上处理器执行如上述的数据处理方法。
基于上述的方案,本发明提供了一种数据处理方法及装置、存储介质及电子设备,该方法包括:响应于处理指令,确定所述处理指令对应的数据记录以及数据处理类型;所述数据处理类型包括读数据类型和写数据类型中的一种;获取所述数据记录对应的源代码,所述源代码基于所述数据记录的类型定义模板转换得到,所述类型定义模板包括所述数据记录的数据结构以及索引信息;对所述源代码进行编译,获得数据预处理指令;在所述数据处理类型为写数据类型的情况下,通过预设的数据写入服务调用所述数据预处理指令,以将所述数据记录转换为内存对象,并将所述内存对象写入到预设的数据区中,进而将所述内存对象存储到与所述数据区相对应的数据文件中;在所述数据处理类型为读数据类型的情况下,通过预设的数据读取服务调用所述数据预处理指令,以在预设的数据区中读取内存映射数据,所述内存映射数据预先由所述数据读取服务对所述数据文件中的与所述数据记录相对应的内存对象映射得到。能够提升数据读写效率,无需进行序列化和反序列化,降低了软件开发成本,及相应的交易时间开销。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明提供的一种数据处理方法的方法流程图;
图2为本发明提供的一种将内存对象存储到与数据区相关联的数据文件的过程的流程图;
图3为本发明提供的一种数据区示例图;
图4为本发明提供的一种数据区逻辑结构示例图;
图5为本发明提供的一种在数据区中读取内存映射数据的过程的流程图;
图6为本发明提供的一种内存数据库系统的结构示意图;
图7为本发明提供的一种索引结构示意图;
图8为本发明提供的一种数据映射过程的示例图;
图9为本发明提供的一种文件组成的示例图;
图10为本发明提供的一种地址空间规划示意图;
图11为本发明提供的一种转储文件的示例图;
图12为本发明提供的一种数据处理装置的结构示意图;
图13为本发明提供的一种电子设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本申请中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本发明实施例提供了一种数据处理方法,该方法可以应用于电子设备,电子设备可以是各种类型的计算机设备,所述方法的方法流程图如图1所示,具体包括:
S101:响应于处理指令,确定所述处理指令对应的数据记录以及数据处理类型;所述数据处理类型包括读数据类型和写数据类型中的一种。
在本实施例中,处理指令可以是电子设备上运行的业务进程存在数据读写需求的情况下触发的指令。
可选的,对处理指令进行解析,获得指令信息,根据指令信息确定出待处理的数据记录,数据记录可以是待处理的原始数据,例如,可以是待存储或者待读取的原始数据,也即,数据处理类型可以是读数据类型和写数据类型中的一种。
S102:获取所述数据记录对应的源代码,所述源代码基于所述数据记录的类型定义模板转换得到,所述类型定义模板包括所述数据记录的数据结构以及索引信息。
在本实施例中,获取数据记录对应的源代码的一种可行的实现方式是,获取数据记录的类型定义模板,根据类型定义模板生成数据记录对应的源代码,源代码可以是各种类型编程语言实现的结构体源代码,例如,可以是C++结构体源代码,具体的,可以根据电子设备中的基于内存映射文件的内存数据库系统MMDB中的预处理器对数据记录的类型定义模板进行转换,获得数据记录对应的源代码,在转换过程中,还可以添加一些数据记录的关联信息,例如,唯一类型标识和生效标识等,唯一类型标识可以用于标识数据的类型,生效标识可以用于辅助数据的生成、修改、删除和访问等。
可选的,数据记录的数据结构可以是存文本数据,可以是带有内存指针的嵌套、组合数据,索引信息可以包含索引的数量、构成和名称等信息。
S103:对所述源代码进行编译,获得数据预处理指令。
在本实施例中,通过对源代码进行编译,获得电子设备可执行的数据预处理指令。
S104:在所述数据处理类型为写数据类型的情况下,通过预设的数据写入服务调用所述数据预处理指令,以将所述数据记录转换为内存对象,并将所述内存对象写入到预设的数据区中,进而将所述内存对象存储到与所述数据区相对应的数据文件中。
在本实施例中,数据写入服务可以根据数据预处理指令以及预设的共享函数库,完成数据的写入,具体可以将数据记录转换为内存对象,将内存对象写入数据区中,然后将数据区中的内存对象转储到数据文件中,数据文件可以是由内存对象转储得到的,也可以是预先生成的。
S105:在所述数据处理类型为读数据类型的情况下,通过预设的数据读取服务调用所述数据预处理指令,以在预设的数据区中读取内存映射数据,所述内存映射数据预先由所述数据读取服务对所述数据文件中的与所述数据记录相对应的内存对象映射得到。
在本实施例中,数据读取服务开根据数据预处理指令以及预设的共享函数库,完成数据的读取,具体可以确定出数据记录被写入的数据区中的地址空间,在该地址空间的数据区读取到内存映射数据,数据记录对应的内存对象指的是由该数据记录转换得到的对象。
应用本发明实施例提供的方法,能够提升数据读写效率,无需进行序列化和反序列化,降低了软件开发成本,及相应的交易时间开销。
在本发明提供的一实施例中,基于上述的实施过程,可选的,所述将所述内存对象写入到预设的数据区中,进而将所述内存对象存储到与所述数据区相关联的数据文件中,如图2所示,包括:
S201:确定所述数据记录对应的预先分配好的数据区。
在本实施例中,数据区是对数据库DB进行划分得到的,如图3所示,一个DB可以划分为多个数据区,每一数据区拥有一段连续地址空间,每一数据区用于存储特定数据类型的数据对象,数据区大小由其容纳的数据对象大小及数量决定,需要在数据构建之前估算出数据区足够的大小,例如,DB4的地址空间区间为0x3F0000000000~0x300000000000,可以在此区间为每一数据区划分出一段连续的地址空间。
具体的,如图4所示,数据区可以包含数据区头Header以及数据存储区域Data两部分,数据区头Header部分描述数据文件的元信息,例如,可以包含版本、数据区大小、首地址、尾地址和下一待分配地址等;Data部分用于存储任意C++数据类型及其嵌套类型。
可选的,可以根据数据记录的索引值确定数据记录对应的预先分配好的数据区。
S202:将所述内存对象写入所述数据区中,并设置所述内存对象的生效标识。
在本实施例中,可以将内存对象存储到数据区中的已为该内存对象分配的地址空间中。
可选的,可以为内存对象设置表征为有效的生效标识。
S203:在所述数据区满足转储条件的情况下,对所述数据区进行转储,以完成将已设置所述生效标识的所述内存对象存储到与所述数据区相关联的数据文件中。
在本实施例中,通过对数据区进行转储,可以获得持久化的数据文件,数据文件中包含内存对象。
在本发明提供的一实施例中,基于上述的实施过程,可选的,所述将所述内存对象写入预设的数据区之后,还包括:
当接收到针对所述数据区的内存对象操作信息时,利用所述内存对象操作信息对所述数据区中执行目标操作,以完成对所述数据区的更新;所述目标操作包括内存对象添加操作、内存对象修改操作和内存对象删除操作中的至少一种;
利用更新后的数据区中的内存对象更新所述数据文件。
在本实施例中,内存对象操作信息中包含执行添加操作所需的数据、执行修改操作所需的数据和执行删除操作所需的数据等其中至少一种,通过对数据区执行目标操作,可以完成对内存对象的添加、修改或删除等,并根据具体的操作类型更新内存对象的生效标识。
在本发明提供的一实施例中,基于上述的实施过程,可选的,所述在预设的数据区中读取内存映射数据,如图5所示,包括:
S501:获取所述数据记录的索引信息中的索引值。
在本实施例中,数据记录的索引信息中包含索引值。
S502:根据所述数据记录的索引信息中的索引值获取所述数据记录的生效标识。
在本实施例中,可以根据索引值遍历数据记录表,以确定出该数据记录的生效标识,数据记录表包含各个索引值与各个数据记录的生效标识之间的对应关系。
S503:在所述数据记录的生效标识表征所述数据记录的状态为生效状态的情况下,在所述索引值对应的数据区中读取内存映射数据。
在本实施例中,可以先确定生效标识所表征的状态,若生效标识所表征的状态为无效状态,则退出数据的读取,或者执行其他预设的逻辑流程以读取到相应数据。
在本发明提供的一实施例中,基于上述的实施过程,可选的,基于所述数据记录的类型定义模板转换得到源代码的过程,包括:
对所述类型定义模板进行解析,获得所述数据记录的数据结构以及索引信息;
根据所述数据记录的数据结构以及索引信息生成所述源代码。
本实施例中的类型定义模板中包含两类信息,其中一类为数据定义模板,用以描述数据记录的结构,数据记录的结构可以是简单的纯文本数据,也可以是非常复杂的带有内存指针的嵌套、组合数据。另一类为索引定义模板,用以描述该数据记录所必须的索引的结构,具体包含了索引的数量、构成、名称等信息,索引将被用于读写时对数据记录的寻址。
在本发明实施例提供数据处理方法,可以应用在多种领域当中,例如,可以应用在电子商务领域,下面以应用于机票业务数据处理为例,对本发明提供的方案做进一步的说明:
首先,如图6所示,为本发明实施例提供的一种内存数据库系统的结构示意图,内存数据库系统运行于电子设备中,以存映射技术为基础,支持复杂对象的读写,利用内存映射(Memory Mapping)方法将原始数据生成C++对象并存储于物理文件中;该数据库系统中包括MMDB组件、宿主服务、中间文件以及各类数据。
其中,MMDB组件包括预处理器组件和共享函数库组件;宿主服务可以包括数据读取服务和数据写入服务,分别代表了数据库使用场景中的负责写入、读取的进程角色。中间文件指中间生成的类型定义模板及C++结构源代码等文件。数据库系统中涉及的数据包括外部数据记录、内存映射数据及最后的持久化数据文件。
在本实施例中,对于任意的数据记录,均可以通过一种名为类型定义模板的描述文件定义其结构及索引,进而通过MMDB预处理器将之自动转换为对应的C++数据结构源代码,这些源代码最终将与MMDB提供的函数库libmmdb.so一起,实现对MMDB中指定数据记录的存取功能。
其中,类型定义模板中包含两类信息,其中一类为数据定义模板,用以描述数据记录的结构,数据记录的结构可以是简单的纯文本数据,也可以是非常复杂的带有内存指针的嵌套、组合数据。另一类称为索引定义模板,用以描述数据记录所必须的索引的结构。如图7所示,索引的结构包含了索引的数量、构成、名称等信息,索引将被用于读写时对数据记录的寻址。
MMDB预处理器将类型定义模板转换为对应的C++结构体源代码,在转换过程中,还将添加一些额外的信息便于MMDB的管理,这些信息将反映的每一条数据上。添加的信息中,包括有唯一类型标识,可以用于标识数据的类型;添加的信息中还可以包括生效标识用于辅助数据的生成、修改、删除和访问。同时,MMDB预处理器还负责生成数据类型对应的索引结构,进而可以通过索引快速访问到指定的数据,MMDB访问数据的一种方式为主键索引,另一种方式方式是遍历。
在数据读写过程中,宿主进程利用数据类型模板生成的C++数据类型源代码和MMDB提供的共享函数库libmmdb.so完成数据的写入和读取操作。数据写入的宿主进程为数据写入服务,数据读取的进程为数据读取服务。在宿主程序中继承MemoryMapDB类即可创建具体的DB类,MemoryMap类对DB数据文件及其映射进行管理,MemoryMapAllocator则将各种复杂数据类型分配到数据文件映射的数据内存区中。
数据写入方面,MMDB使用数据写入服务作为创建DB、读取原始数据、加工处理、并生成DB物理文件的工具。各个具体的DB类中包含着具体的数据记录对象及其对应索引对象。具体的,索引对象同样基于Key-Value结构,其中,key是上述数据记录中定义的各个索引值,value为该类数据记录的列表。Key-Value结构采用C++标准模板库(StandardTemplate Library,STL)中的map类或unordered_map类,并利用MemoryMapAllocator将其分配到索引文件映射的数据区中。除了类型定义模板中定义的索引,数据写入服务也可以在各个具体的DB类中根据实际需要定义其它的索引结构。数据写入服务在数据不断更新的过程中完成数据的创建、添加、修改和删除操作。创建操作发生在全量原始数据初次或完全重构生成DB时。由于是初始构建,相对而言构建过程较为简单,只需要将原始数据转换成C++对象后依次存储在已分配好的数据区中。添加、修改和删除操作则在初始DB生成后进行追加修改时发生。此时,需要打开原来的DB,如果是新增的数据,则把新增的数据追加到DB中;如果是对已有数据的修改和删除,根据数据有效与否修改原有对象的生效标识。
数据读取方面,在使用数据的场景中,如图8所示,数据读取服务加载DB文件,并将数据文件映射到与数据写入服务相同的地址空间,即相同的绝对地址空间,这充分保证了数据写入服务生成的数据对象能由数据读取服务正确读取。数据读取时,可根据索引值遍历数据记录列表并读取数据记录对象的生效标识,当生效标识为生效状态时读取该对象,否则不予读取。对数据读取服务而言,DB文件是只读的,数据读取服务通过各种索引对象,能快速的访问到各种业务数据对象,之后对数据的使用与具体业务有关,在此不再赘述。
本实施例中的数据写入与读取方式,关键技术在于写入服务、读取服务将包含复杂数据/绝对指针的数据加载到约定的相同位置,使得绝对指针可以在新的节点上仍然有效,其表达的复杂对象与关系在跨网络/跨节点/跨进程的前提下,无需经过序列化-反序列化即可以方便表达,极大地增强了应用数据的便利性。
在本实施例中预置了共享内存映射、绝对地址和复杂关系的情况下,仍可以通过定义业务意义上的多索引,以极致的速度找到想要寻找的数据的可行性。例如,运价计算的每个票价都有自己的唯一标识,且每个票价其后又关联了大批的规则,票价与规则、规则与规则之间的关系十分复杂,并非一对一、一对多这种简单模式,可能是多对多甚至互相关联互相引用的图状或网状结构。在这种情况下,基于本实施例中的方案,只需定义票价、规则数据及其各自相应索引,就可以自动生成源文件,经过编译后,获得超高性能读写能力,无需序列化地通过唯一标识对票价与规则的复杂关系以百纳秒的效率进行存取。
在本实施例中,MMDB提供MemoryMap类进行DB文件映射处理、地址空间管理、地址空间内数据区管理等,并同样将功能函数打包汇集至共享函数库libmmdb.so。如图9所示,MMDB生成的物理文件分成三类:一是文本格式的配置文件,用以描述DB配置信息,如DB名称、版本、构建时间、地址空间范围、数据区等信息;此类文件是Ascii文本文件,进程可直接读取文件中的相应信息。二是存储为二进制格式的数据文件,使用此文件需要通过mmap将其映射到进程的地址空间中,文件中存储着原始数据生成的C++内存对象。三是存储为二进制格式的索引文件,同样,此类文件也需要通过mmap映射到进程的地址空间中,索引文件中存储Key-Value结构的索引内存对象。将数据和索引分成单独的文件有利于增加、删除和修改索引数据文件,即重构索引文件时不用重新生成数据文件。
MMDB同时支持多个DB的存储,其中所有DB共享进程寻址空间,换言之,各DB地址空间不能冲突。在构建DB集合之前,需要先完成各DB地址空间的规划及分配。在64位进程地址空间中,有大量的空闲空间可供程序使用,将这些空闲空间划分出足够大小的地址区间供各个DB使用,如图10所示,为本发明实施例提供的一种地址空间规划示意图,展示了一个包含多DB的DB集合地址空间规划示例,规划好的DB地址空间将被存入DB配置文件中。一旦地址空间规划好之后,数据写入服务和数据读取服务就在这片规划好的地址空间里写入和读取数据,当规划的地址空间容纳不下数据时则需要重新规划。
MMDB内部为了提供高效的地址空间管理,实现了对于数据区的支持。一个DB可以划分为多个数据区,每个数据区将拥有一段连续地址空间,在持久化时也将被转储dump为一个数据文件。数据区大小由其容纳的数据对象大小及数量决定,需要在数据构建之前估算出数据区足够的大小。
在本实施例中,数据区内部在逻辑上划分为Header和Data两部分,Header部分描述数据文件的元信息,具体如表1所示:
表1
在本实施例中,Data部分存储任意C++数据类型及其嵌套类型,利用C++标准模板库STL并通过libmmdb.so中的内存分配器MemoryMapAllocator,可将任何复杂的数据类型分配到Data区域的地址范围内。在DB业务数据文件中Data区域是根据原始数据生成的C++对象,而在DB索引数据文件中Data区域用来存储Key-Value结构的索引对象。
为了更好地理解本发明的技术方案,在此举例进行说明。
客票运价的原始数据来自于美国航空运价出版公司(Airline TariffPublishing Company,ATPCO),各种运价数据约有一百多种,总数据量约为169GB。
将所有的数据存储入一个DB,可以该DB的名称可以为“ATPCO_DB”,并为其规划4TB大小的地址空间0x100000000000~0x040000000000。为每种数据类型规划一个数据区,定义其数据记录和索引模板,数据类型的标识可以包含R1、R0、R10、P04、P05、P06、R20C和R3C007等等,此处不再一一列举。
其中,ATPCO运价数据的完整快照(Snapshot)生成atpcodb后其DB数据文件大小为260G左右,选取R1相关数据(包括R1以及相关联的R1片段)为例,生成的转储文件大小约为34GB,其中数据文件约为14.3GB,四种索引文件约为19.8GB,如图11所示,为本发明实施例提供的一种转储文件的示例图。
具体的,R1对应的数据定义模板可以如表2所示:
表2
其中,Seg和Loc1等字段的类型为自定义类型或其指针。MMDB可以处理任意C++类型及其复杂的组合、嵌套类型,此外还支持自定义数据及标准模板库(STL)中的容器。
R1对应的索引定义模板如表3所示:
表3
其中,表3中包含了记录类型(RecordType)、索引数量(Indexnum)、索引名称(Indexname)和索引字段(Indexfield)。
在本实施例中,根据数据定义模板和索引定义模板,可以对应生成的C++结构源代码,具体如下:
structR1{
unsignedshortsegCount;
R1Segment*seg;
utils::SizedString<3>CXR;
utils::SizedString<3>TRF_R;
utils::SizedString<4>RuleNo;
location_union_standardLoc1;
//...
boolisDeleted;
staticconstRecordTypeIdRECORD_TYPE_ID;
};
在本实施例中,R1相关数据总量约6700万条,平均大小约为150Byte,采用一个线程写入多个线程读取的方式,其每条读写效率如表4所示:
表4
在本实施例中,表4中的读写效率的单位为纳秒ns,从表四可以看出,本发明采用嵌入进程空间内存存储数据的方式,支持了极致的读写性能。本发明能够支持任意类型的快捷存储,MMDB可以支持任意已有类型、STL容器、自定义类型及其相互嵌套、组合。本发明的读取效率不随着并发增加而衰减,也不随着数据复杂度增加而衰减,可以被广泛应用于只读、读多写少的高性能场景。
与图1所述的方法相对应,本发明实施例还提供了一种数据处理装置,用于对图1中方法的具体实现,本发明实施例提供的数据处理装置可以应用于电子设备中,其结构示意图如图12所示,具体包括:
确定单元1201,用于响应于处理指令,确定所述处理指令对应的数据记录以及数据处理类型;所述数据处理类型包括读数据类型和写数据类型中的一种;
获取单元1202,用于获取所述数据记录对应的源代码,所述源代码基于所述数据记录的类型定义模板转换得到,所述类型定义模板包括所述数据记录的数据结构以及索引信息;
编译单元1203,用于对所述源代码进行编译,获得数据预处理指令;
第一执行单元1204,用于在所述数据处理类型为写数据类型的情况下,通过预设的数据写入服务调用所述数据预处理指令,以将所述数据记录转换为内存对象,并将所述内存对象写入到预设的数据区中,进而将所述内存对象存储到与所述数据区相对应的数据文件中;
第二执行单元1205,用于在所述数据处理类型为读数据类型的情况下,通过预设的数据读取服务调用所述数据预处理指令,以在预设的数据区中读取内存映射数据,所述内存映射数据预先由所述数据读取服务对所述数据文件中的与所述数据记录相对应的内存对象映射得到。
在本发明提供的一实施例中,基于上述的方案,具体的,所述第一执行单元1204,包括:
第一确定子单元,用于确定所述数据记录对应的预先分配好的数据区;
第一执行子单元,用于将所述内存对象写入所述数据区中,并设置所述内存对象的生效标识;
存储子单元,用于在所述数据区满足转储条件的情况下,对所述数据区进行转储,以完成将已设置所述生效标识的所述内存对象存储到与所述数据区相关联的数据文件中。
在本发明提供的一实施例中,基于上述的方案,具体的,所述第二执行单元1205,包括:
第一获取子单元,用于获取所述数据记录的索引信息中的索引值;
第二获取子单元,用于根据所述数据记录的索引信息中的索引值获取所述数据记录的生效标识;
读取子单元,用于在所述数据记录的生效标识表征所述数据记录的状态为生效状态的情况下,在所述索引值对应的数据区中读取内存映射数据。
在本发明提供的一实施例中,基于上述的方案,具体的,所述数据处理装置还包括第三执行单元;所述第三执行单元被配置为:
当接收到针对所述数据区的内存对象操作信息时,利用所述内存对象操作信息对所述数据区中执行目标操作,以完成对所述数据区的更新;所述目标操作包括内存对象添加操作、内存对象修改操作和内存对象删除操作中的至少一种;
利用更新后的数据区中的内存对象更新所述数据文件。
在本发明提供的一实施例中,基于上述的方案,具体的,所述获取单元1202被配置为:
对所述类型定义模板进行解析,获得所述数据记录的数据结构以及索引信息;
根据所述数据记录的数据结构以及索引信息生成所述源代码。
上述本发明实施例公开的数据处理装置中的各个单元和模块具体的原理和执行过程,与上述本发明实施例公开的数据处理方法相同,可参见上述本发明实施例提供的数据处理方法中相应的部分,这里不再进行赘述。
本发明实施例还提供了一种存储介质,所述存储介质包括存储的指令,其中,在所述指令运行时控制所述存储介质所在的设备执行上述数据处理方法,所述方法具体包括:
响应于处理指令,确定所述处理指令对应的数据记录以及数据处理类型;所述数据处理类型包括读数据类型和写数据类型中的一种;
获取所述数据记录对应的源代码,所述源代码基于所述数据记录的类型定义模板转换得到,所述类型定义模板包括所述数据记录的数据结构以及索引信息;
对所述源代码进行编译,获得数据预处理指令;
在所述数据处理类型为写数据类型的情况下,通过预设的数据写入服务调用所述数据预处理指令,以将所述数据记录转换为内存对象,并将所述内存对象写入到预设的数据区中,进而将所述内存对象存储到与所述数据区相对应的数据文件中;
在所述数据处理类型为读数据类型的情况下,通过预设的数据读取服务调用所述数据预处理指令,以在预设的数据区中读取内存映射数据,所述内存映射数据预先由所述数据读取服务对所述数据文件中的与所述数据记录相对应的内存对象映射得到。
上述的方法,可选的,所述将所述内存对象写入到预设的数据区中,进而将所述内存对象存储到与所述数据区相关联的数据文件中,包括:
确定所述数据记录对应的预先分配好的数据区;
将所述内存对象写入所述数据区中,并设置所述内存对象的生效标识;
在所述数据区满足转储条件的情况下,对所述数据区进行转储,以完成将已设置所述生效标识的所述内存对象存储到与所述数据区相关联的数据文件中。
上述的方法,可选的,所述将所述内存对象写入预设的数据区之后,还包括:
当接收到针对所述数据区的内存对象操作信息时,利用所述内存对象操作信息对所述数据区中执行目标操作,以完成对所述数据区的更新;所述目标操作包括内存对象添加操作、内存对象修改操作和内存对象删除操作中的至少一种;
利用更新后的数据区中的内存对象更新所述数据文件。
上述的方法,可选的,所述在预设的数据区中读取内存映射数据,包括:
获取所述数据记录的索引信息中的索引值;
根据所述数据记录的索引信息中的索引值获取所述数据记录的生效标识;
在所述数据记录的生效标识表征所述数据记录的状态为生效状态的情况下,在所述索引值对应的数据区中读取内存映射数据。
上述的方法,可选的,基于所述数据记录的类型定义模板转换得到源代码的过程,包括:
对所述类型定义模板进行解析,获得所述数据记录的数据结构以及索引信息;
根据所述数据记录的数据结构以及索引信息生成所述源代码。
本发明实施例还提供了一种电子设备,其结构示意图如图13所示,具体包括存储器1301,以及一个或者一个以上的指令1302,其中一个或者一个以上指令1302存储于存储器1301中,且经配置以由一个或者一个以上处理器1303执行所述一个或者一个以上指令1302进行以下操作:
响应于处理指令,确定所述处理指令对应的数据记录以及数据处理类型;所述数据处理类型包括读数据类型和写数据类型中的一种;
获取所述数据记录对应的源代码,所述源代码基于所述数据记录的类型定义模板转换得到,所述类型定义模板包括所述数据记录的数据结构以及索引信息;
对所述源代码进行编译,获得数据预处理指令;
在所述数据处理类型为写数据类型的情况下,通过预设的数据写入服务调用所述数据预处理指令,以将所述数据记录转换为内存对象,并将所述内存对象写入到预设的数据区中,进而将所述内存对象存储到与所述数据区相对应的数据文件中;
在所述数据处理类型为读数据类型的情况下,通过预设的数据读取服务调用所述数据预处理指令,以在预设的数据区中读取内存映射数据,所述内存映射数据预先由所述数据读取服务对所述数据文件中的与所述数据记录相对应的内存对象映射得到。
根据本公开的一个或多个实施例,图1的实施例提供了一种数据处理方法,该方法包括:
响应于处理指令,确定所述处理指令对应的数据记录以及数据处理类型;所述数据处理类型包括读数据类型和写数据类型中的一种;
获取所述数据记录对应的源代码,所述源代码基于所述数据记录的类型定义模板转换得到,所述类型定义模板包括所述数据记录的数据结构以及索引信息;
对所述源代码进行编译,获得数据预处理指令;
在所述数据处理类型为写数据类型的情况下,通过预设的数据写入服务调用所述数据预处理指令,以将所述数据记录转换为内存对象,并将所述内存对象写入到预设的数据区中,进而将所述内存对象存储到与所述数据区相对应的数据文件中;
在所述数据处理类型为读数据类型的情况下,通过预设的数据读取服务调用所述数据预处理指令,以在预设的数据区中读取内存映射数据,所述内存映射数据预先由所述数据读取服务对所述数据文件中的与所述数据记录相对应的内存对象映射得到。
上述的方法,可选的,所述将所述内存对象写入到预设的数据区中,进而将所述内存对象存储到与所述数据区相关联的数据文件中,包括:
确定所述数据记录对应的预先分配好的数据区;
将所述内存对象写入所述数据区中,并设置所述内存对象的生效标识;
在所述数据区满足转储条件的情况下,对所述数据区进行转储,以完成将已设置所述生效标识的所述内存对象存储到与所述数据区相关联的数据文件中。
上述的方法,可选的,所述将所述内存对象写入预设的数据区之后,还包括:
当接收到针对所述数据区的内存对象操作信息时,利用所述内存对象操作信息对所述数据区中执行目标操作,以完成对所述数据区的更新;所述目标操作包括内存对象添加操作、内存对象修改操作和内存对象删除操作中的至少一种;
利用更新后的数据区中的内存对象更新所述数据文件。
上述的方法,可选的,所述在预设的数据区中读取内存映射数据,包括:
获取所述数据记录的索引信息中的索引值;
根据所述数据记录的索引信息中的索引值获取所述数据记录的生效标识;
在所述数据记录的生效标识表征所述数据记录的状态为生效状态的情况下,在所述索引值对应的数据区中读取内存映射数据。
上述的方法,可选的,基于所述数据记录的类型定义模板转换得到源代码的过程,包括:
对所述类型定义模板进行解析,获得所述数据记录的数据结构以及索引信息;
根据所述数据记录的数据结构以及索引信息生成所述源代码。
根据本公开的一个或多个实施例,图12的实施例提供了一种数据处理装置,该装置包括:
确定单元1201,用于响应于处理指令,确定所述处理指令对应的数据记录以及数据处理类型;所述数据处理类型包括读数据类型和写数据类型中的一种;
获取单元1202,用于获取所述数据记录对应的源代码,所述源代码基于所述数据记录的类型定义模板转换得到,所述类型定义模板包括所述数据记录的数据结构以及索引信息;
编译单元1203,用于对所述源代码进行编译,获得数据预处理指令;
第一执行单元1204,用于在所述数据处理类型为写数据类型的情况下,通过预设的数据写入服务调用所述数据预处理指令,以将所述数据记录转换为内存对象,并将所述内存对象写入到预设的数据区中,进而将所述内存对象存储到与所述数据区相对应的数据文件中;
第二执行单元1205,用于在所述数据处理类型为读数据类型的情况下,通过预设的数据读取服务调用所述数据预处理指令,以在预设的数据区中读取内存映射数据,所述内存映射数据预先由所述数据读取服务对所述数据文件中的与所述数据记录相对应的内存对象映射得到。
上述的装置,可选的,所述第一执行单元1204,包括:
第一确定子单元,用于确定所述数据记录对应的预先分配好的数据区;
第一执行子单元,用于将所述内存对象写入所述数据区中,并设置所述内存对象的生效标识;
存储子单元,用于在所述数据区满足转储条件的情况下,对所述数据区进行转储,以完成将已设置所述生效标识的所述内存对象存储到与所述数据区相关联的数据文件中。
上述的装置,可选的,所述第二执行单元1205,包括:
第一获取子单元,用于获取所述数据记录的索引信息中的索引值;
第二获取子单元,用于根据所述数据记录的索引信息中的索引值获取所述数据记录的生效标识;
读取子单元,用于在所述数据记录的生效标识表征所述数据记录的状态为生效状态的情况下,在所述索引值对应的数据区中读取内存映射数据。
上述的装置,可选的,所述数据处理装置还包括第三执行单元;所述第三执行单元被配置为:
当接收到针对所述数据区的内存对象操作信息时,利用所述内存对象操作信息对所述数据区中执行目标操作,以完成对所述数据区的更新;所述目标操作包括内存对象添加操作、内存对象修改操作和内存对象删除操作中的至少一种;
利用更新后的数据区中的内存对象更新所述数据文件。
上述的装置,可选的,所述获取单元被配置为:
对所述类型定义模板进行解析,获得所述数据记录的数据结构以及索引信息;
根据所述数据记录的数据结构以及索引信息生成所述源代码。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本发明时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
以上对本发明所提供的一种数据处理方法进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (10)
1.一种数据处理方法,其特征在于,包括:
响应于处理指令,确定所述处理指令对应的数据记录以及数据处理类型;所述数据处理类型包括读数据类型和写数据类型中的一种;
获取所述数据记录对应的源代码,所述源代码基于所述数据记录的类型定义模板转换得到,所述类型定义模板包括所述数据记录的数据结构以及索引信息;
对所述源代码进行编译,获得数据预处理指令;
在所述数据处理类型为写数据类型的情况下,通过预设的数据写入服务调用所述数据预处理指令,以将所述数据记录转换为内存对象,并将所述内存对象写入到预设的数据区中,进而将所述内存对象存储到与所述数据区相对应的数据文件中;
在所述数据处理类型为读数据类型的情况下,通过预设的数据读取服务调用所述数据预处理指令,以在预设的数据区中读取内存映射数据,所述内存映射数据预先由所述数据读取服务对所述数据文件中的与所述数据记录相对应的内存对象映射得到。
2.根据权利要求1所述的方法,其特征在于,所述将所述内存对象写入到预设的数据区中,进而将所述内存对象存储到与所述数据区相关联的数据文件中,包括:
确定所述数据记录对应的预先分配好的数据区;
将所述内存对象写入所述数据区中,并设置所述内存对象的生效标识;
在所述数据区满足转储条件的情况下,对所述数据区进行转储,以完成将已设置所述生效标识的所述内存对象存储到与所述数据区相关联的数据文件中。
3.根据权利要求1或2所述的方法,其特征在于,所述将所述内存对象写入预设的数据区之后,还包括:
当接收到针对所述数据区的内存对象操作信息时,利用所述内存对象操作信息对所述数据区中执行目标操作,以完成对所述数据区的更新;所述目标操作包括内存对象添加操作、内存对象修改操作和内存对象删除操作中的至少一种;
利用更新后的数据区中的内存对象更新所述数据文件。
4.根据权利要求1所述的方法,其特征在于,所述在预设的数据区中读取内存映射数据,包括:
获取所述数据记录的索引信息中的索引值;
根据所述数据记录的索引信息中的索引值获取所述数据记录的生效标识;
在所述数据记录的生效标识表征所述数据记录的状态为生效状态的情况下,在所述索引值对应的数据区中读取内存映射数据。
5.根据权利要求1所述的方法,其特征在于,基于所述数据记录的类型定义模板转换得到源代码的过程,包括:
对所述类型定义模板进行解析,获得所述数据记录的数据结构以及索引信息;
根据所述数据记录的数据结构以及索引信息生成所述源代码。
6.一种数据处理装置,其特征在于,包括:
确定单元,用于响应于处理指令,确定所述处理指令对应的数据记录以及数据处理类型;所述数据处理类型包括读数据类型和写数据类型中的一种;
获取单元,用于获取所述数据记录对应的源代码,所述源代码基于所述数据记录的类型定义模板转换得到,所述类型定义模板包括所述数据记录的数据结构以及索引信息;
编译单元,用于对所述源代码进行编译,获得数据预处理指令;
第一执行单元,用于在所述数据处理类型为写数据类型的情况下,通过预设的数据写入服务调用所述数据预处理指令,以将所述数据记录转换为内存对象,并将所述内存对象写入到预设的数据区中,进而将所述内存对象存储到与所述数据区相对应的数据文件中;
第二执行单元,用于在所述数据处理类型为读数据类型的情况下,通过预设的数据读取服务调用所述数据预处理指令,以在预设的数据区中读取内存映射数据,所述内存映射数据预先由所述数据读取服务对所述数据文件中的与所述数据记录相对应的内存对象映射得到。
7.根据权利要求6所述的装置,其特征在于,所述第一执行单元,包括:
第一确定子单元,用于确定所述数据记录对应的预先分配好的数据区;
第一执行子单元,用于将所述内存对象写入所述数据区中,并设置所述内存对象的生效标识;
存储子单元,用于在所述数据区满足转储条件的情况下,对所述数据区进行转储,以完成将已设置所述生效标识的所述内存对象存储到与所述数据区相关联的数据文件中。
8.根据权利要求6所述的装置,其特征在于,所述第二执行单元,包括:
第一获取子单元,用于获取所述数据记录的索引信息中的索引值;
第二获取子单元,用于根据所述数据记录的索引信息中的索引值获取所述数据记录的生效标识;
读取子单元,用于在所述数据记录的生效标识表征所述数据记录的状态为生效状态的情况下,在所述索引值对应的数据区中读取内存映射数据。
9.一种存储介质,其特征在于,所述存储介质包括存储指令,其中,在所述指令运行时控制所述存储介质所在的设备执行如权利要求1~5任意一项所述的数据处理方法。
10.一种电子设备,其特征在于,包括存储器,以及一个或者一个以上的指令,其中一个或一个以上指令存储于存储器中,且经配置以由一个或者一个以上处理器执行如权利要求1~5任意一项所述的数据处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211013826.2A CN115344270A (zh) | 2022-08-23 | 2022-08-23 | 数据处理方法及装置、存储介质及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211013826.2A CN115344270A (zh) | 2022-08-23 | 2022-08-23 | 数据处理方法及装置、存储介质及电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115344270A true CN115344270A (zh) | 2022-11-15 |
Family
ID=83954699
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211013826.2A Pending CN115344270A (zh) | 2022-08-23 | 2022-08-23 | 数据处理方法及装置、存储介质及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115344270A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116755637A (zh) * | 2023-08-17 | 2023-09-15 | 深圳华锐分布式技术股份有限公司 | 交易数据存储方法、装置、设备及介质 |
-
2022
- 2022-08-23 CN CN202211013826.2A patent/CN115344270A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116755637A (zh) * | 2023-08-17 | 2023-09-15 | 深圳华锐分布式技术股份有限公司 | 交易数据存储方法、装置、设备及介质 |
CN116755637B (zh) * | 2023-08-17 | 2024-02-09 | 深圳华锐分布式技术股份有限公司 | 交易数据存储方法、装置、设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11816100B2 (en) | Dynamically materialized views for sheets based data | |
US11086894B1 (en) | Dynamically updated data sheets using row links | |
US9292573B2 (en) | Extended database engine providing versioning and embedded analytics | |
CN103559323B (zh) | 数据库实现方法 | |
US7861222B2 (en) | Discoscript: a simplified distributed computing scripting language | |
US9928283B2 (en) | Tracing data through a transformation process using tracer codes | |
US20090007031A1 (en) | Method and system for implementing cached parameterized cells | |
US7313572B2 (en) | Attribute partitioning for user extensibility | |
CN104866497A (zh) | 分布式文件系统列式存储的元数据更新方法、装置、主机 | |
JPH09146821A (ja) | 異質データタイプに対して透明性を持った持続的なデータサポートを提供する方法と装置 | |
US7685127B2 (en) | Database access system, method of accessing a database, and method of designing a database access system | |
JPH06175898A (ja) | ファイル内部構造の構成方法及び装置 | |
US9971822B1 (en) | Replicated state management using journal-based registers | |
JP2015514258A (ja) | データ選択および識別 | |
CN115344270A (zh) | 数据处理方法及装置、存储介质及电子设备 | |
Bachman | The evolution of storage structures | |
CN113254455B (zh) | 数据库的动态配置方法、装置、计算机设备及存储介质 | |
CN115455050A (zh) | 一种分布式数据库及查询方法 | |
CN111506628B (zh) | 数据处理方法及装置 | |
KR100985192B1 (ko) | 소프트웨어 개발 시스템 | |
CN114647633A (zh) | 创建数据库状态树 | |
Bianchi et al. | Iterative reengineering of legacy functions | |
CN117234466B (zh) | 企业管理软件开发方法、系统、设备及存储介质 | |
US10768912B1 (en) | Platform class creation | |
JP7201474B2 (ja) | 仕訳データ生成装置、仕訳データ生成方法および仕訳データ生成プログラム |
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 |