CN111736776A - 一种数据存储、读取方法及装置 - Google Patents
一种数据存储、读取方法及装置 Download PDFInfo
- Publication number
- CN111736776A CN111736776A CN202010591275.2A CN202010591275A CN111736776A CN 111736776 A CN111736776 A CN 111736776A CN 202010591275 A CN202010591275 A CN 202010591275A CN 111736776 A CN111736776 A CN 111736776A
- Authority
- CN
- China
- Prior art keywords
- data
- stored
- calculation engine
- heap memory
- storage
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0608—Saving storage space on storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0662—Virtualisation aspects
- G06F3/0664—Virtualisation aspects at device level, e.g. emulation of a storage device or system
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Combined Controls Of Internal Combustion Engines (AREA)
Abstract
本发明实施例涉及大数据技术领域,提供了一种数据存储、读取方法及装置。该数据存储方法包括:获取待存储数据;确定预设存储格式对应的各个存储单位,与待存储数据中的各个子数据的对应关系;通过调用预设的数据接口,按照对应关系,将待存储数据存储到Spark计算引擎的堆外内存中。该数据读取方法包括:在接收到待处理业务时,确定待处理业务所需数据的过滤条件;通过调用预设的数据接口,从Spark计算引擎的堆外内存中,读取满足过滤条件的目标数据;将目标数据存储到Spark计算引擎的堆内内存中,以使待处理业务被处理时,从堆内内存中读取目标数据。与现有技术相比,应用本发明实施例提供的方案,可以提高JVM的业务处理效率。
Description
技术领域
本发明涉及大数据技术领域,特别是涉及一种数据存储、读取方法及装置。
背景技术
JVM(Java Virtual Machine,Java虚拟机)是一种新的网络计算平台,其 通过在实体计算机上仿真模拟各种计算机功能实现。通常,JVM使用Spark计 算引擎对所处理的各个业务中所涉及到的数据进行管理。并且,当JVM应用 于一数据处理系统中时,该数据处理系统中便可以同时包括该JVM所使用的 Spark计算引擎。
其中,Spark计算引擎是一种支持分布式数据集,可以用于进行大规模数 据处理的快速通用的计算引擎,其可以完成文本处理、机器学习、SQL (Structured QueryLanguage,结构化查询语言)查询等各种数据处理任务。
相关技术中,基于Spark计算引擎对数据进行处理时,数据通常被存储到 JVM的堆内(ON_HEAP)内存中。
由于存储到堆内内存中的数据中,可能存在长期未被利用的数据,因此, 避免大量数据长时间存储到堆内内存中,Spark计算引擎可以通过频繁地发起 GC(GarbageCollection,垃圾回收)来对堆内内存中所存储的数据进行清理, 以节省堆内内存的存储空间。
然而,由于在GC过程中,JVM将暂停对当前业务的处理,因此,当Spark 频繁发起GC时,将导致JVM频繁暂停对当前业务的处理,从而,导致JVM 的业务处理效率降低。
发明内容
本发明实施例的目的在于提供一种数据存储、读取方法及装置,以减少由 于频繁GC导致的JVM频繁暂停对当前业务的处理的频率,进而,提高JVM 的业务处理效率。具体技术方案如下:
第一方面,本发明实施例提供了一种数据存储方法,应用于数据处理系统 中的Spark计算引擎,所述数据处理系统还包括Java虚拟机,所述Java虚拟机使 用所述Spark计算引擎进行数据管理;所述方法包括:
获取待存储数据;
确定预设存储格式对应的各个存储单位,与所述待存储数据中的各个子数 据的对应关系;其中,每一子数据为预设数据量的数据;
通过调用预设的数据接口,按照所述对应关系,将所述待存储数据存储到 所述Spark计算引擎的堆外内存中;
其中,所述数据接口为对所述堆外内存进行数据读写所需调用的接口。
可选的,一种具体实现方式中,所述预设的存储格式为:列存储;
所述确定预设存储格式对应的各个存储单位,与所述待存储数据中的各个 子数据的对应关系的步骤,包括:
确定用于存储所述待存储数据的各个数据列的Value值;其中,每一数据列 的Value值表征:该数据列所存储的所述待存储数据中的子数据的数据范围;
相应的,所述通过调用预设的数据接口,按照所述对应关系,将所述待存 储数据存储到所述Spark计算引擎的堆外内存中的步骤,包括:
通过调用预设的数据接口,按照各个数据列的Value值,以列存储方式将所 述待存储数据存储到所述Spark计算引擎的堆外内存中。
可选的,一种具体实现方式中,在所述确定预设存储格式对应的各个存储 单位,与所述待存储数据中的各个子数据的对应关系的步骤之前,所述方法还 包括:
确定所述Spark计算引擎的存储区域中是否存储有所述待存储数据;其中, 所述存储区域包括:所述Spark计算引擎的硬盘存储区域、所述Spark计算引擎 的堆内内存和所述堆外内存;
如果否,执行所述确定预设存储格式对应的各个存储单位,与所述待存储 数据中的各个子数据的对应关系的步骤。
可选的,一种具体实现方式中,所述Spark计算引擎包括:弹性分布式数 据集RDD算子层、数据块Block管理层和存储层;
所述获取待存储数据的步骤,包括:
所述RDD算子层中的预设RDD获取待存储数据;
所述确定用于存储所述待存储数据的各个数据列的Value值的步骤,包括:
所述预设RDD确定用于存储所述待存储数据的各个数据列的Value值;
所述通过调用预设的数据接口,按照各个数据列的Value值,以列存储方式 将所述待存储数据存储到所述Spark计算引擎的堆外内存中的步骤,包括:
所述预设RDD按照各个数据列的Value值,将各个数据列所存储的所述待 存储数据中的子数据传输到所述Block管理层;
所述Block管理层调用预设的数据接口,以列存储方式,将所接收到的各 个子数据存储到所述存储层的堆外内存中。
第二方面,本发明实施例提供了一种数据读取方法,应用于数据处理系统 中的Spark计算引擎,所述数据处理系统还包括Java虚拟机,所述Java虚拟机使 用所述Spark计算引擎进行数据管理;所述方法包括:
在接收到待处理业务时,确定所述待处理业务所需数据的过滤条件;
通过调用预设的数据接口,从所述Spark计算引擎的堆外内存中,读取满 足所述过滤条件的目标数据;其中,所述数据接口为对所述堆外内存进行数据 读写所需调用的接口;
将所述目标数据存储到所述Spark计算引擎的堆内内存中,以使所述待处 理业务被处理时,从所述堆内内存中读取所述目标数据。
可选的,一种具体实现方式中,所述堆外内存中所存储的数据的存储格式 为:列存储;
所述通过调用预设的数据接口,从所述Spark计算引擎的堆外内存中,读 取满足所述过滤条件的目标数据的步骤,包括:
通过调用预设的数据接口,从所述Spark计算引擎的堆外内存中,读取满 足所述过滤条件的目标数据列;
所述将所述目标数据存储到所述Spark计算引擎的堆内内存中,以使所述 待处理业务被处理时,从所述堆内内存中读取所述目标数据的步骤,包括:
将所述目标数据列存储到所述Spark计算引擎的堆内内存中,以使所述待 处理业务被处理时,从所述堆内内存中读取所述目标数据列。
可选的,一种具体实现方式中,所述Spark计算引擎包括:弹性分布式数 据集RDD算子层、数据块Block管理层和存储层;
所述在接收到待处理业务时,确定所述待处理业务所需数据的过滤条件的 步骤,包括:
所述RDD算子层中的预设RDD在接收到待处理业务时,确定所述待处理业 务所需数据的过滤条件;
所述调用预设的数据接口,从所述Spark计算引擎的堆外内存中,读取满 足所述过滤条件的目标数据的步骤:
所述预设RDD将所述数据过滤条件传输至所述Block管理层;
所述Block管理层调用预设的数据接口,从所述存储层的堆外内存中,读 取满足所述过滤条件的目标数据;
所述将所述目标数据存储到所述Spark计算引擎的堆内内存中的步骤,包 括:
所述Block管理层将所述目标数据存储到所述存储层的堆内内存中。
第三方面,本发明实施例提供了一种数据存储装置,应用于数据处理系统 中的Spark计算引擎,所述数据处理系统还包括Java虚拟机,所述Java虚拟机使 用所述Spark计算引擎进行数据管理;所述装置包括:
数据获取模块,用于获取待存储数据;
关系确定模块,用于确定预设存储格式对应的各个存储单位,与所述待存 储数据中的各个子数据的对应关系;其中,每一子数据为预设数据量的数据;
第一数据存储模块,用于通过调用预设的数据接口,按照所述对应关系, 将所述待存储数据存储到所述Spark计算引擎的堆外内存中;
其中,所述数据接口为对所述堆外内存进行数据读写所需调用的接口。
可选的,一种具体实现方式中,所述预设的存储格式为:列存储;所述关 系确定模块具体用于:
确定用于存储所述待存储数据的各个数据列的Value值;其中,每一数据列 的Value值表征:该数据列所存储的所述待存储数据中的子数据的数据范围;
相应的,所述第一数据存储模块具体用于:
通过调用预设的数据接口,按照各个数据列的Value值,以列存储方式将所 述待存储数据存储到所述Spark计算引擎的堆外内存中。
可选的,一种具体实现方式中,所述装置还包括:数据检测模块;
所述数据检测模块,用于在所述确定预设存储格式对应的各个存储单位, 与所述待存储数据中的各个子数据的对应关系之前,确定所述Spark计算引擎 的存储区域中是否存储有所述待存储数据;其中,所述存储区域包括:所述 Spark计算引擎的硬盘存储区域、所述Spark计算引擎的堆内内存和所述堆外内 存;如果否,触发所述关系确定模块。
可选的,一种具体实现方式中,所述Spark计算引擎包括:弹性分布式数 据集RDD算子层、数据块Block管理层和存储层;所述RDD算子层中的预设RDD 包括:所述数据获取模块、所述关系确定模块和数据传输模块;所述Block管 理层包括:所述第一数据存储模块;
所述数据传输模块,用于按照各个数据列的Value值,将各个数据列所存储 的所述待存储数据中的子数据传输到所述Block管理层;
第一数据存储模块,具体用于:调用预设的数据接口,以列存储方式,将 所接收到的各个子数据存储到所述存储层的堆外内存中。
第四方面,本发明实施例提供了一种数据读取装置,应用于数据处理系统 中的Spark计算引擎,所述数据处理系统还包括Java虚拟机,所述Java虚拟机使 用所述Spark计算引擎进行数据管理;所述装置包括:
条件确定模块,用于在接收到待处理业务时,确定所述待处理业务所需数 据的过滤条件;
数据读取模块,用于通过调用预设的数据接口,从所述Spark计算引擎的 堆外内存中,读取满足所述过滤条件的目标数据;其中,所述数据接口为对所 述堆外内存进行数据读写所需调用的接口;
第二数据存储模块,用于将所述目标数据存储到所述Spark计算引擎的堆 内内存中,以使所述待处理业务被处理时,从所述堆内内存中读取所述目标数 据。
可选的,一种具体实现方式中,所述堆外内存中所存储的数据的存储格式 为:列存储;
所述数据读取模块,具体用于:通过调用预设的数据接口,从所述Spark 计算引擎的堆外内存中,读取满足所述过滤条件的目标数据列;
所述第二数据存储模块,具体用于:将所述目标数据列存储到所述Spark 计算引擎的堆内内存中,以使所述待处理业务被处理时,从所述堆内内存中读 取所述目标数据列。
可选的,一种具体实现方式中,所述Spark计算引擎包括:弹性分布式数 据集RDD算子层、数据块Block管理层和存储层;所述RDD算子层中的预设RDD 包括:所述条件确定模块和条件传输模块;所述Block管理层包括:所述数据 读取模块和所述第二数据存储模块;
所述条件传输模块,用于将所述数据过滤条件传输至所述Block管理层;
所述第二数据存储模块,具体用于:将所述目标数据存储到所述存储层的 堆内内存中,以使所述待处理业务被处理时,从所述堆内内存中读取所述目标 数据。
第五方面,本发明实施例提供了一种电子设备,所述电子设备安装有Spark 计算引擎,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信 接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现上述第一方面提供的任 一数据存储方法和/或上述第二方面提供的任一数据读取方法。
第六方面,本发明实施例提供了一种计算机可读存储介质,所述计算机可 读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述第 一方面提供的任一数据存储方法和/或上述第二方面提供的任一数据读取方法。
第七方面,本发明实施例提供了一种包含指令的计算机程序产品,当其在 计算机上运行时,使得计算机执行上述第一方面提供的任一数据存储方法和/ 或上述第二方面提供的任一数据读取方法。
本发明实施例有益效果:
应用本发明实施例提供的方案,JVM在基于Spark计算引擎对数据进行处 理时,可以将所获取到的待存储数据存储到Spark计算引擎的堆外内存中。进 而,在接收到待处理业务时,便可以从堆外内存中,读取满足该待处理业务所 需数据的过滤条件的目标数据,并将该目标数据存储到Spark计算引擎的堆内 内存中,以使该待处理业务被处理时,可以从堆内内存中读取到该目标数据。
基于此,由于Spark所获取到的待存储数据被存储到堆外内存中,并且, 将从堆外内存中读取到的满足待处理业务所需数据的过滤条件的目标数据,因 此,可以减少长时间存储到堆内内存中的数据,从而,降低Spark计算引擎发 起GC的频率,从而,减少由于频繁GC导致的JVM频繁暂停对当前业务的处理 的频率,进而,提高JVM的业务处理效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施 例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述 中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付 出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种Spark计算引擎的结构示意图;
图2为本发明实施例提供的第一种数据存储方法的流程示意图;
图3为本发明实施例提供的第二种数据存储方法的流程示意图;
图4(a)为本发明实施例提供的第三种数据存储方法的流程示意图;
图4(b)为在图4(a)所示具体实现方式的基础上,图1所示的Spark 计算引擎的存储过程示意图;
图5(a)和图5(b)分别为在图2和图3所示具体实现方式的基础上, 本发明实施例提供的一种数据存储方法的流程示意图;
图6为本发明实施例提供的第一种数据读取方法的流程示意图;
图7为本发明实施例提供的第二种数据读取方法的流程示意图;
图8为本发明实施例提供的第三种数据读取方法的流程示意图;
图9为本发明实施例提供的一种数据存储装置的结构示意图;
图10为本发明实施例提供的一种数据读取装置的结构示意图;
图11为本发明实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清 楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是 全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造 性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
相关技术中,基于Spark计算引擎对数据进行处理时,数据通常被存储到 JVM的堆内内存中。其中,为了避免大量数据长时间存储到堆内内存中,Spark 计算引擎可以通过频繁地发起GC来对堆内内存中所存储的数据进行清理,以 节省堆内内存的存储空间。然而,由于在GC过程中,JVM将暂停对当前业务 的处理,因此,当Spark频繁发起GC时,将导致JVM频繁暂停对当前业务的 处理,从而,导致JVM的业务处理效率降低。
为了解决上述技术问题,本发明实施例提供了一种数据存储方法和一种数 据读取方法。
其中,本发明实施例提供的一种数据存储方法和一种数据读取方法,应用 于数据处理系统中的Spark计算引擎,其中,该数据处理系统可以适用于任一 需要进行数据处理的应用场景,并且,该数据处理系统中包括JVM,该JVM 使用该Spark计算引擎进行数据管理;也就是说,该数据处理系统可以为任一 运行有JVM的应用场景下的数据处理系统,从而,该Spark计算引擎便可以 适用于任一运行有JVM的应用场景。此外,该Spark可以应用于任一运行有JVM的电子设备,从而,该JVM便可以使用该Spark计算引擎对自身所处理 的各个业务中所涉及到的数据进行管理。
需要说明的是,本发明实施例不对上述应用场景进行具体限定,同样的, 本发明实施例也不会对运行有JVM的电子设备的相关信息进行具体限定。例 如,本发明实施例不会限定该电子设备的类型、该电子设备所在的系统等。
其中,本发明实施例提供的一种数据存储方法,可以包括如下步骤:
获取待存储数据;
确定预设存储格式对应的各个存储单位,与所述待存储数据中的各个子数 据的对应关系;其中,每一子数据为预设数据量的数据;
通过调用预设的数据接口,按照所述对应关系,将所述待存储数据存储到 所述Spark计算引擎的堆外内存中;
其中,所述数据接口为对所述堆外内存进行数据读写所需调用的接口。
此外,本发明实施例提供的一种数据读取方法,可以包括如下步骤:
在接收到待处理业务时,确定所述待处理业务所需数据的过滤条件;
调用预设的数据接口,从所述Spark计算引擎的堆外内存中,读取满足所 述过滤条件的目标数据;其中,所述数据接口为对所述堆外内存进行数据读写 所需调用的接口;
将所述目标数据存储到所述Spark计算引擎的堆内内存中,以使所述待处 理业务被处理时,从所述堆内内存中读取所述目标数据。
以上可见,应用本发明实施例提供的方案,JVM在基于Spark计算引擎对 数据进行处理时,可以将所获取到的待存储数据存储到Spark计算引擎的堆外 内存中。进而,在接收到待处理业务时,便可以从堆外内存中,读取满足该待 处理业务所需数据的过滤条件的目标数据,并将该目标数据存储到Spark计算 引擎的堆内内存中,以使该待处理业务被处理时,可以从堆内内存中读取到该 目标数据。
基于此,由于Spark所获取到的待存储数据被存储到堆外内存中,并且, 将从堆外内存中读取到的满足待处理业务所需数据的过滤条件的目标数据,因 此,可以减少长时间存储到堆内内存中的数据,从而,降低Spark计算引擎发 起GC的频率,从而,减少由于频繁GC导致的JVM频繁暂停对当前业务的处理 的频率,进而,提高JVM的业务处理效率。
在对本发明实施例提供的一种数据存储方法和一种数据读取方法进行具 体说明之前,首先对Spark计算引擎进行简要介绍。
如图1所示,为Spark计算引擎的结构示意图。其中,Spark计算引擎可以包 括:RDD(Resilient Distributed Datasets,弹性分布式数据集)算子层,Block (数据块)管理层,以及存储层。
1、RDD算子层是Spark计算引擎的核心,用于提供算子对所获取到的数据 进行转换,以及在业务处理过程中,对数据进行计算。
其中,可选的,可以在RDD算子层中添加ColumnRDD,该ColumnRDD为 自定义RDD,可以支持对Spark计算引擎的堆外内存中存储的数据的列式过滤 和计算。
在获取到待存储数据时,RDD算子层中的ColumnRDD便可以对迭代器 (iterator)中的数据实体(DataEntity)进行重新定义,从而,使得Spark计算 引擎可以实现按照预设存储格式,在存储层中对该待存储数据进行存储,以及, 在业务处理过程中,按照预设存储格式对应的方式,对存储层中所存储的数据 进行读取和对所读取到的数据进行计算。
其中,数据实体的结构可以如下:
其中,DataSchema为数据实体的结构定义,并且,该结构定义的字段属性 可以为Java程序设计语言中的常用数据类型,例如,Boolean(布尔类型),Int (整数类型),String(字符串类型),Long(整数类型)等;values为DataSchema 所定义的数据实体的结构下,各个存储单位的Value值,Array[Any]为:数组类 型,也就是说,Array[Any]定义了上述各个存储单位的类型。
这样,Spark计算引擎按照预设存储格式对待存储数据的存储,是依赖于 上述对DataSchem以及上述各个存储单位的Value值的定义实现的。
也就是说,DataSchema的定义表征了:待存储数据按照预设存储格式所对 应的何种结构进行存储,例如,当预设存储格式为列存储时,DataSchema的定 义表征了按列存储待存储数据;当预设存储格式为行存储时,DataSchema的定 义表征了按行存储待存储数据;
而各个存储单位的Value值的定义则表征了:每个存储单位所存储的待存储 数据中的子数据的数据范围,例如,当预设存储格式为列存储时,各个存储单 位的Value值的定义表征了按列存储待存储数据时,每一数据列中所存储的数据 为待存储数据中的哪些数据;当预设存储格式为行存储时,各个存储单位的 Value值的定义表征了按行存储待存储数据时,每一数据行中所存储的数据为待 存储数据中的哪些数据。
此外,RDD算子层还可以包括除上述ColumnRDD外的其他RDD。
2、Block管理层在Spark计算引擎中,负责分布式处理Block的存储管理。 其中,Block管理层中的BlockInfoManager(Block Information Manager,数据块 信息管理程序)用于管理BlockInfo(Block Information,数据块信息)数组, 从而,BlockInfoManager可以通过提供读写锁的控制,为Block管理层服务。
可选的,Block管理层可以通过对Block的管理,在现有MemoryStore(内 存存储的模块定义)提供序列化实体(SerializedEntity)和非序列化实体 (DeserializedEntity)的基础上,引入支持堆外列式存储的结构体 (ColumnMemoryEntity)。进而,MemoryStore便可以包括:序列化实体、非序 列化实体和支持堆外列式存储的结构体。
其中,ColumnMemoryEntity可以定义Block的数据结构,并由MemoryStore 统一管理,其定义结构可以如下:
其中,上述ColumnMemoryEntity的定义结构中包括MemoryMode(内存模 式),并且,MemoryMode定义了数据的存储方式。
此外,上述ColumnMemoryEntity的定义结构中还包括可以提供具体的数据 存储接口和读取接口的StorageBuffer,并且,StorageBuffer的定义结构可以如下:
其中,StorageBuffer为抽象类,其可以定义putIterator和getValues;并且, 由于putIterator是数据存储需要调用的方法,getValues是数据读取需要调用的方 法,因此,针对Spark存储引擎的堆外内存,可以通过继承StorageBuffer实现针 对该堆外内存的数据存储和数据读取。
此外,Block管理层还包括DiskStore(磁盘存储的模块定义),用于对在磁 盘中存储的数据的结构体进行定义和管理。
3、存储层包括Spark计算引擎中的各个存储空间,包括内存(Memory)和 磁盘(Disk),其中,内存包括JVM可以直接管理的堆内内存(ON_HEAP), 以及不能被JVM直接管理的堆外内存(OFF_HEAP)。
其中,Block管理层可以通过对Block的StorageLevel的选择,将待存储数据 存储到内存或磁盘中。而当待存储数据被存储到内存中时,Block管理层可以 将数据存储到堆内内存或堆外内存中。
需要说明的是,由于堆外内存不能被JVM直接管理,因此,上述Block管 理层中还可以设置有对堆外内存进行数据读写所需调用的数据接口。
其中,在存储过程中,可以通过定义好的迭代器,逐一从待存储数据中, 读取到每一存储单位所存储的子数据,从而,以迭代的形式,将待存储数据中 的各个子数据,按照预设存储格式,逐一存储到存储层中。
下面,对本发明实施例提供的一种数据存储方法进行具体说明。
图2为本发明实施例提供的一种数据存储方法的流程示意图。如图2所示, 该数据存储方法可以包括如下步骤:
S201:获取待存储数据;
在业务处理过程中,JVM在获取到业务的相关信息的同时,还可以同时获 取到与业务相关的各类数据,例如,处理所需的原始数据、业务处理过程中产 生的相关数据、业务处理完成后的结构数据等。由于JVM是使用Spark计算引 擎对所处理的各个业务中所涉及到的数据进行管理的,因此,Spark计算引擎 便可以获取到上述各类数据,从而,当所获取到的各类数据中,存在需要存储 的数据时,Spark便可以获取到待存储数据。
S202:确定预设存储格式对应的各个存储单位,与待存储数据中的各个子 数据的对应关系;
其中,每一子数据为预设数据量的数据;
可以理解的,在对待存储数据进行存储时,Spark计算引擎是按照预设存 储格式对待存储数据进行存储的,例如,Spark计算引擎可以按照列存储格式 对待存储数据进行存储,也可以按照行存储格式对待存储数据进行存储。
也就是说,Spark计算引擎是利用预设存储格式对应的各个存储单位存储 待存储数据中的各个子数据,实现对待存储数据的存储的。
例如,当预设存储格式为列存储时,Spark计算引擎确定待存储数据中, 存储到每一列中的子数据,从而,通过按列存储每一列的子数据,完成对待存 储数据的存储;其中,当预设存储格式为列存储时,存储单位为:数据列,并 且每一列所存储的子数据的数据量是预设且相同的。
又例如,当预设存储格式为行存储时,Spark计算引擎确定待存储数据中, 存储到每一行中的子数据,从而,通过按列存储每一行的子数据,完成对待存 储数据的存储;其中,当预设存储格式为行存储时,存储单位为:数据行,并 且每一行所存储的子数据的数据量是预设且相同的。
基于此,在获取到待存储数据时,Spark计算引擎便可以根据预设存储格 式,以及预设的每一存储单位的数据量,确定用于存储该待存储数据的各个存 储单位,与待存储数据中的各个子数据的对应关系;其中,每一子数据即为上 述预设数量的数据。
S203:通过调用预设的数据接口,按照对应关系,将待存储数据存储到 Spark计算引擎的堆外内存中;
其中,数据接口为对堆外内存进行数据读写所需调用的接口。
由于Spark计算引擎的堆外内存不能直接接收JVM的管理,因此,Spark计 算引擎预设有对堆外内存进行数据读写所需调用的数据接口。
这样,在确定上述各个存储单位与各个子数据的对应关系后,Spark计算 引擎便可以通过调用预设的数据接口,按照上述所确定的各个存储单位与各个 子数据的对应关系,将上述待存储数据存储到Spark计算引擎的堆外内存中。
其中,上述待存储数据是按照上述预设存储格式存储到上述堆外内存中的。 例如,上述预设存储格式为列存储,则上述待存储数据是按列存储到上述堆外 内存中的;又例如,上述预设存储格式为行存储,则上述待存储数据是按行存 储到上述堆外内存中的。
以上可见,由于Spark所获取到的待存储数据被存储到堆外内存中,并且, 将从堆外内存中读取到的满足待处理业务所需数据的过滤条件的目标数据,因 此,可以减少长时间存储到堆内内存中的数据,从而,降低Spark计算引擎发 起GC的频率,从而,减少由于频繁GC导致的JVM频繁暂停对当前业务的处理 的频率,进而,提高JVM的业务处理效率。
可选的,一种具体实现方式中,上述预设的存储格式可以列存储。
相应的,在本具体实现方式中,如图3所示,上述步骤S202,确定预设存 储格式对应的各个存储单位,与待存储数据中的各个子数据的对应关系,便可 以包括如下步骤:
S202A:确定用于存储待存储数据的各个数据列的Value值;
其中,每一数据列的Value值表征:该数据列所存储的待存储数据中的子数 据的数据范围;
进而,上述步骤S203,通过调用预设的数据接口,按照对应关系,将待存 储数据存储到Spark计算引擎的堆外内存中,便可以包括如下步骤:
S203A:通过调用预设的数据接口,按照各个数据列的Value值,以列存储 方式将待存储数据存储到Spark计算引擎的堆外内存中。
在本具体实现方式中,由于预设存储格式为列存储,因此,各个存储单位 为各个数据列,因此,在存储待存储数据时,Spark计算引擎需要确定按列存 储待存储数据时,待存储数据中被存储到每一数据列中的子数据,即确定所存 储的每一数据列中的子数据是该待存储数据中的哪些数据。
基于此,在本具体实现方式中,Spark计算引擎确定用于存储待存储数据 的各个数据列的Value值。其中,由于每一数据列的Value值可以表征:该数据 列所存储的待存储数据中的子数据的数据范围,因此,Spark计算引擎便可以 确定按列存储待存储数据时,所存储的每一数据列中的子数据是该待存储数据 中的哪些数据。
进而,Spark计算引擎便可以通过调用预设的数据接口,按照所确定的各 个数据列的Value值,针对每个数据列,从待存储数据中读取该数据列所存储的 子数据,从而,将该子数据按列存储到Spark计算引擎的堆外内存中。
这样,在确定用于存储待存储数据的各个数据列的Value值后,Spark计算 引擎便可以通过调用预设的数据接口,按照各个数据列的Value值,以列存储方 式将待存储数据存储到Spark计算引擎的堆外内存中。也就是说,在本具体实 现方式中,Spark计算引擎可以支持数据的按列存储。
在本具体实现方式中,由于待存储数据是按列存储到Spark计算引擎的堆 外内存中的,因此,在处理待处理业务时,Spark计算引擎可以从上述堆外内 存中,读取到处理该待处理业务所需的数据列,即可以实现从上述堆外内存中, 按列读取数据。
这样,便可以过滤掉业务处理不需要的数据列,使得非待处理业务所需的 数据列可以不被存储到Spark计算引擎的队内内存中,进而,使得被存储到Spark 计算引擎的堆内内存中的数据可以进一步减少,从而,进一步降低Spark计算 引擎发起GC的频率,减少由于频繁GC导致的JVM频繁暂停对当前业务的处理 的频率,进而,进一步提高JVM的业务处理效率。
可选的,一种具体实现方式中,在图1所示的Spark计算引擎的结构,以及 图3所示的具体实现方式的基础上,如图4(a)所示,上述本发明实施例提供 的一种数据读取方法可以包括如下步骤:
S201B:RDD算子层中的预设RDD获取待存储数据;
其中,可选的,由于ColumnRDD支持对数据的列式过滤和计算,因此, 该预设RDD便可以为ColumnRDD。
S202B:预设RDD确定用于存储待存储数据的各个数据列的Value值;
其中,可选的,由于ColumnRDD支持对数据的列式过滤和计算,因此, 上述步骤S202B可以包括如下步骤:
ColumnRDD基于列存储的格式,对迭代器中的数据实体进行重新定义。
其中,在ColumnRDD在对数据实体的重新定义过程中,便可以确定每一 数据列的Value值。
S203B1:预设RDD按照各个数据列的Value值,将各个数据列所存储的待 存储数据中的子数据传输到Block管理层;
S203B2:Block管理层调用预设的数据接口,以列存储方式,将所接收到 的各个子数据存储到存储层的堆外内存中。
这样,在确定用于存储待存储数据的各个数据列的Value值后,预设RDD 便可以针对每一数据列,根据该数据列的Value值在待存储数据中读取到该数据 列所存储的子数据,从而,按列将各个数据列所存储的待存储数据中的子数据 传输到Block管理层。
进而,Block管理层在接收到各个数据列所存储的待存储数据中的子数据 后,便可以调用预设的数据接口,以列存储方式,即按列将所接收到的各个子 数据存储到存储层的堆外内存中。
这样,便可以实现在Spark计算引擎的堆外内存中,按列对待存储数据进 行存储。
具体的,如图4(b)所示,RDD算子层中的ColumnRDD获取待存储数据, 并将待存储按列进行划分,确定每一数据列所存储的子数据。从而,通过迭代 器逐一读取到每一数据列所存储的子数据,并将该子数据传输给Block管理层, 从而,Block管理层便可以将每一数据列所存储的子数据存储到存储层,从而, 将待存储数据存储到存储层。
其中,由于存储层中包括内存和磁盘两类存储空间,并且,内存中包括堆 内内存和堆外内存两种存储区域,因此,Block管理层可以通过对Block的 StorageLevel的选择,从堆内内存、磁盘存储或者针对堆外内存的列式存储中 选取存储方式,将接收到的各个数据列存储的子数据存储到存储层中。
具体的,Block管理层可以通过对Block的StorageLevel的选择,选取针对堆 外内存的列式存储,进而,通过调用预设的数据接口将接收到的各个数据列存 储的子数据存储到堆外内存中。这样,便可以实现对待存储数据的列式存储。
进而,在从堆外内存中读取数据时,便可以通过对数据的列式过滤得到满 足待处理任务所需数据的过滤条件的数据。
并且,在堆外内存中,每个待存储数据对应的各个数据列存储的子数据按 照预设的数据列格式存储到堆外内存的不同存储位置处,并且,每个数据列所 存储的子数据表示为“Column_value n”,n表示该数据列所存储的子数据是待 存储数据的第n个子数据。
例如,在图4(b)中,堆外内存的左侧部分中,按照从上到下的顺序,位 于前三位的“Column_value1,Column_value2”以及“……”表示属于同一待 存储数据对应的各个数据列存储的子数据;位于后三位的“Column_value1, Column_value2”以及“……”表示属于同一待存储数据对应的各个数据列存 储的子数据;堆外内存的右侧部分中,按照从上到下的顺序,位于前三位的 “Column_value1,Column_value2”以及“……”表示属于同一待存储数据对 应的各个数据列存储的子数据;位于后三位的“Column_value1,Column_value2” 以及“……”表示属于同一待存储数据对应的各个数据列存储的子数据。
可以理解的,在实际应用中,JVM可以利用相同的数据处理不同的待处理 业务,从而,Spark计算引擎可以多次获取到相同的待存储数据。这样,当再 次获取到相同的待存储数据时,由于Spark计算引擎中已经存储有该待存储数 据,因此,Spark计算引擎可以不再存储该再次获取到的待存储数据。
基于此,可选的,一种具体实现方式中,如图5(a)所示,本发明实施例 提供的一种数据存储方法还可以包括如下步骤:
S204:确定Spark计算引擎的存储区域中是否存储有待存储数据;
其中,存储区域包括:Spark计算引擎的硬盘存储区域、Spark计算引擎的 堆内内存和堆外内存;
如果否,执行上述步骤S102,确定预设存储格式对应的各个存储单位,与 待存储数据中的各个子数据的对应关系。
在获取到待存储数据后,Spark计算引擎可以首先确定Spark计算引擎的硬 盘存储区域、堆内内存和堆外内存中,是否存储有该待存储数据。
其中,该Spark计算引擎的硬盘存储区域可以为Spark计算引擎中的磁盘。
进而,当确定出Spark计算引擎的堆内内存和堆外内存中未存储有该代存 数据时,则Spark计算引擎确定需要对该待存储数据进行存储,进而,Spark计 算引擎便可以继续执行上述步骤S102,确定预设存储格式对应的各个存储单位, 与待存储数据中的各个子数据的对应关系,以便于可以进一步执行上述步骤 S103,通过调用预设的数据接口,按照对应关系,将待存储数据存储到Spark 计算引擎的堆外内存中。
相应的,当确定出Spark计算引擎的堆内内存和堆外内存中存储有该代存 数据时,则Spark计算引擎确定不需要对该待存储数据进行存储,进而,Spark 计算引擎便可以释放该待存储数据,即Spark计算引擎可以清空该待存储数据。
可选的,另一种具体实现方式中,如图5(b)所示,本发明实施例提供的 一种数据存储方法还可以包括如下步骤:
S204:确定Spark计算引擎的存储区域中是否存储有待存储数据;
其中,存储区域包括:Spark计算引擎的硬盘存储区域、Spark计算引擎的 堆内内存和堆外内存;
如果否,执行上述步骤S202A,确定用于存储待存储数据的各个数据列的 Value值。
下面,对本发明实施例提供的一种数据读取方法进行具体说明。
图6为本发明实施例提供的一种数据读取方法的流程示意图。如图6所示, 该数据读取方法可以包括如下步骤:
S601:在接收到待处理业务时,确定待处理业务所需数据的过滤条件;
在业务处理过程中,由于JVM是使用Spark计算引擎对所处理的各个业务 中所涉及到的数据进行管理的,因此,在JVM获取到待处理业务时,可以将该 待处理业务以及待处理业务的各类信息发送给Spark计算引擎,例如,待处理 业务类型、待处理业务所需数据等。
这样,Spark计算引擎在接收到上述待处理业务时,便可以基于该待处理 业务的各类信息,确定待处理业务业务所需数据的过滤条件。
S602:通过调用预设的数据接口,从Spark计算引擎的堆外内存中,读取 满足过滤条件的目标数据;
其中,数据接口为对堆外内存进行数据读写所需调用的接口;
由于Spark计算引擎的堆外内存不能直接接收JVM的管理,因此,Spark计 算引擎预设有对堆外内存进行数据读写所需调用的数据接口。
这样,在确定待处理业务所需数据的过滤条件后,Spark计算引擎便可以 通过调用预设的数据接口,在Spark计算引擎的堆外内存中所存储的数据中, 读取满足上述过滤条件的目标数据。
即针对Spark计算引擎的堆外内存所存储的数据,在读取过程中,Spark计 算引擎可以将不满足上述过滤条件的数据过滤掉,而只读取能够满足上述过滤 条件的目标数据。
S603:将目标数据存储到Spark计算引擎的堆内内存中,以使待处理业务 被处理时,从堆内内存中读取目标数据。
进而,由于JVM在处理待处理业务时,所使用的数据为Spark计算引擎的 堆内内存中的数据,因此,在从Spark计算引擎的堆外内存中,读取到满足上 述过滤条件的目标数据后,为了保证待处理业务能够顺利被处理,因此,可以 将所读取到的目标数据存储到Spark计算引擎的堆内内存中。这样,待处理业 务被处理时,便可以从Spark计算引擎的堆内内存中读取上述目标数据。
以上可见,由于Spark所获取到的待存储数据被存储到堆外内存中,并且, 将从堆外内存中读取到的满足待处理业务所需数据的过滤条件的目标数据,因 此,可以减少长时间存储到堆内内存中的数据,从而,降低Spark计算引擎发 起GC的频率,从而,减少由于频繁GC导致的JVM频繁暂停对当前业务的处理 的频率,进而,提高JVM的业务处理效率。
可选的,一种具体实现方式中,Spark计算引擎的堆外内存中所存储的数 据的存储格式可以为:列存储;
相应的,在本具体实现方式中,如图7所示,上述步骤S602,调用预设的 数据接口,从Spark计算引擎的堆外内存中,读取满足过滤条件的目标数据,, 便可以包括如下步骤:
S602A:调用预设的数据接口,从Spark计算引擎的堆外内存中,读取满足 过滤条件的目标数据列;
进而,上述步骤S603,将目标数据存储到Spark计算引擎的堆内内存中, 以使待处理业务被处理时,从堆内内存中读取目标数据,便可以包括如下步骤:
S603A:将目标数据列存储到Spark计算引擎的堆内内存中,以使待处理业 务被处理时,从堆内内存中读取目标数据列。
在本具体实现方式中,由于Spark计算引擎的堆外内存中所存储的数据的 存储格式为列存储,因此,Spark计算引擎的堆外内存中按列存储有各个数据, 即在Spark计算引擎的堆外内存中,每个数据被划分为多个子数据,且每个子 数据被存储到一数据列中。
基于此,Spark计算引擎在读取满足上述待处理业务所需数据的过滤条件 时,所读取到的目标数据即为按列存储的目标数据,即Spark计算引擎可以调 用预设的数据接口,从Spark计算引擎的堆外内存中,读取满足过滤条件的目 标数据列;进而,便可以将所读取到的目标数据列存储到Spark计算引擎的堆 内内存中。
其中,在本具体实现方式中,在处理上述待处理业务时,便可以从Spark 计算引擎的堆内内存中读取到目标数据列,从而,通过对该目标数据列的计算, 完成对待处理任务的处理。也就是说,在本具体实现方式中,Spark计算引擎 可以支持数据的按列读取和按列计算。
这样,在读取满足上述待处理任务所需数据的过滤条件的数据时,便可以 过滤掉业务处理不需要的数据列,使得被存储到Spark计算引擎的堆内内存中 的数据进一步减少,从而,进一步降低Spark计算引擎发起GC的频率,减少由 于频繁GC导致的JVM频繁暂停对当前业务的处理的频率,进而,进一步提高 JVM的业务处理效率。
可选的,一种具体实现方式中,在图1所述的Spark计算引擎的结构,以及 图6所示的具体实现方式的基础上,如图8所示,上述本发明实施例提供的一种 数据读取方法可以包括如下步骤:
S601B:RDD算子层中的预设RDD在接收到待处理业务时,确定待处理业 务所需数据的过滤条件;
其中,可选的,由于ColumnRDD支持对数据的列式过滤和计算,因此, 该预设RDD便可以为ColumnRDD。
S602B1:预设RDD将数据过滤条件传输至Block管理层;
S602B2:Block管理层调用预设的数据接口,从存储层的堆外内存中,读 取满足过滤条件的目标数据;
S603B:Block管理层将目标数据存储到存储层的堆内内存中,以使待处理 业务被处理时,从堆内内存中读取目标数据列。
相应于上述本发明实施例提供的一种数据存储方法,本发明实施例还提供 了一种数据存储装置,该数据存储装置应用于数据处理系统中的Spark计算引 擎,所述数据处理系统还包括Java虚拟机,所述Java虚拟机使用所述Spark计算 引擎进行数据管理。
图9为本发明实施例提供的一种数据存储装置的结构示意图。如图9所示, 该数据存储装置包括:
数据获取模块910,用于获取待存储数据;
关系确定模块920,用于确定预设存储格式对应的各个存储单位,与所述 待存储数据中的各个子数据的对应关系;其中,每一子数据为预设数据量的数 据;
第一数据存储模块930,用于通过调用预设的数据接口,按照所述对应关 系,将所述待存储数据存储到所述Spark计算引擎的堆外内存中;
其中,所述数据接口为对所述堆外内存进行数据读写所需调用的接口。
以上可见,由于Spark所获取到的待存储数据被存储到堆外内存中,并且, 将从堆外内存中读取到的满足待处理业务所需数据的过滤条件的目标数据,因 此,可以减少长时间存储到堆内内存中的数据,从而,降低Spark计算引擎发 起GC的频率,从而,减少由于频繁GC导致的JVM频繁暂停对当前业务的处理 的频率,进而,提高JVM的业务处理效率。
可选的,一种具体实现方式中,所述预设的存储格式为:列存储;所述关 系确定模块920具体用于:
确定用于存储所述待存储数据的各个数据列的Value值;其中,每一数据列 的Value值表征:该数据列所存储的所述待存储数据中的子数据的数据范围;
相应的,所述第一数据存储模块930具体用于:
通过调用预设的数据接口,按照各个数据列的Value值,以列存储方式将所 述待存储数据存储到所述Spark计算引擎的堆外内存中。
可选的,一种具体实现方式中,所述装置还包括:数据检测模块;
所述数据检测模块,用于在所述确定预设存储格式对应的各个存储单位, 与所述待存储数据中的各个子数据的对应关系之前,确定所述Spark计算引擎 的存储区域中是否存储有所述待存储数据;其中,所述存储区域包括:所述 Spark计算引擎的硬盘存储区域、所述Spark计算引擎的堆内内存和所述堆外内 存;如果否,触发所述关系确定模块。
可选的,一种具体实现方式中,所述Spark计算引擎包括:弹性分布式数 据集RDD算子层、数据块Block管理层和存储层;所述RDD算子层中的预设RDD 包括:所述数据获取模块910、所述关系确定模块920和数据传输模块;所述 Block管理层包括:所述第一数据存储模块930;
所述数据传输模块,用于按照各个数据列的Value值,将各个数据列所存储 的所述待存储数据中的子数据传输到所述Block管理层;
第一数据存储模块930,具体用于:调用预设的数据接口,以列存储方式, 将所接收到的各个子数据存储到所述存储层的堆外内存中。
相应于上述本发明实施例提供的一种数据读取方法,本发明实施例还提供 了一种数据读取装置。该数据存储装置应用于数据处理系统中的Spark计算引 擎,所述数据处理系统还包括Java虚拟机,所述Java虚拟机使用所述Spark计算 引擎进行数据管理。
图10为本发明实施例提供的一种数据读取装置的结构示意图。如图10所示, 该数据读取装置包括:
条件确定模块1010,用于在接收到待处理业务时,确定所述待处理业务所 需数据的过滤条件;
数据读取模块1020,用于通过调用预设的数据接口,从所述Spark计算引 擎的堆外内存中,读取满足所述过滤条件的目标数据;其中,所述数据接口为 对所述堆外内存进行数据读写所需调用的接口;
第二数据存储模块1030,用于将所述目标数据存储到所述Spark计算引擎 的堆内内存中,以使所述待处理业务被处理时,从所述堆内内存中读取所述目 标数据。
以上可见,由于Spark所获取到的待存储数据被存储到堆外内存中,并且, 将从堆外内存中读取到的满足待处理业务所需数据的过滤条件的目标数据,因 此,可以减少长时间存储到堆内内存中的数据,从而,降低Spark计算引擎发 起GC的频率,从而,减少由于频繁GC导致的JVM频繁暂停对当前业务的处理 的频率,进而,提高JVM的业务处理效率。
可选的,一种具体实现方式中,所述堆外内存中所存储的数据的存储格式 为:列存储;
所述数据读取模块1020,具体用于:通过调用预设的数据接口,从所述 Spark计算引擎的堆外内存中,读取满足所述过滤条件的目标数据列;
所述第二数据存储模块1030,具体用于:将所述目标数据列存储到所述 Spark计算引擎的堆内内存中,以使所述待处理业务被处理时,从所述堆内内 存中读取所述目标数据列。
可选的,一种具体实现方式中,所述Spark计算引擎包括:弹性分布式数 据集RDD算子层、数据块Block管理层和存储层;所述RDD算子层中的预设RDD 包括:所述条件确定模块1010和条件传输模块;所述Block管理层包括:所述 数据读取模块1020和所述第二数据存储模块1030;
所述条件传输模块,用于将所述数据过滤条件传输至所述Block管理层;
所述第二数据存储模块1020,具体用于:将所述目标数据存储到所述存储 层的堆内内存中,以使所述待处理业务被处理时,从所述堆内内存中读取所述 目标数据。
相应于上述本发明实施例提供的一种数据存储方法和数据读取方法,本发 明实施例还提供了一种电子设备,其中,该电子设备中安装有Spark计算引擎。 如图11所示,包括处理器1101、通信接口1102、存储器1103和通信总线1104, 其中,处理器1101,通信接口1102,存储器1103通过通信总线1104完成相互间 的通信,
存储器1103,用于存放计算机程序;
处理器1101,用于执行存储器1103上所存放的程序时,实现上述本发明实 施例提供的任一数据存储方法的步骤,和/或,上述本发明实施例提供的任一数 据读取方法的步骤。
上述电子设备提到的通信总线可以是外设部件互连标准(Peripheral ComponentInterconnect,PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,EISA)总线等。该通信总线可以分为地址总线、数据总 线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根 总线或一种类型的总线。
通信接口用于上述电子设备与其他设备之间的通信。
存储器可以包括随机存取存储器(Random Access Memory,RAM),也可 以包括非易失性存储器(Non-Volatile Memory,NVM),例如至少一个磁盘存 储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器 (DigitalSignal Processing,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA) 或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计 算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现 上述本发明实施例提供的任一数据存储方法的步骤,和/或,上述本发明实施例 提供的任一数据读取方法的步骤。
在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品, 当其在计算机上运行时,使得计算机执行上述本发明实施例提供的任一数据存 储方法的步骤,和/或,上述本发明实施例提供的任一数据读取方法的步骤。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组 合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实 现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行 所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功 能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编 程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算 机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可 以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个 网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可 以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的 服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如, 软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将 一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些 实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包 含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素 的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的 其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在 没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括 所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相 似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。 尤其,对于电子设备实施例、计算机可读存储介质实施例、计算机程序产品实 施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参 见方法实施例的部分说明即可。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。 凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在 本发明的保护范围内。
Claims (11)
1.一种数据存储方法,其特征在于,应用于数据处理系统中的Spark计算引擎,所述数据处理系统还包括Java虚拟机,所述Java虚拟机使用所述Spark计算引擎进行数据管理;所述方法包括:
获取待存储数据;
确定预设存储格式对应的各个存储单位,与所述待存储数据中的各个子数据的对应关系;其中,每一子数据为预设数据量的数据;
通过调用预设的数据接口,按照所述对应关系,将所述待存储数据存储到所述Spark计算引擎的堆外内存中;
其中,所述数据接口为对所述堆外内存进行数据读写所需调用的接口。
2.根据权利要求1所述的方法,其特征在于,所述预设的存储格式为:列存储;
所述确定预设存储格式对应的各个存储单位,与所述待存储数据中的各个子数据的对应关系的步骤,包括:
确定用于存储所述待存储数据的各个数据列的Value值;其中,每一数据列的Value值表征:该数据列所存储的所述待存储数据中的子数据的数据范围;
相应的,所述通过调用预设的数据接口,按照所述对应关系,将所述待存储数据存储到所述Spark计算引擎的堆外内存中的步骤,包括:
通过调用预设的数据接口,按照各个数据列的Value值,以列存储方式将所述待存储数据存储到所述Spark计算引擎的堆外内存中。
3.根据权利要求1所述的方法,其特征在于,在所述确定预设存储格式对应的各个存储单位,与所述待存储数据中的各个子数据的对应关系的步骤之前,所述方法还包括:
确定所述Spark计算引擎的存储区域中是否存储有所述待存储数据;其中,所述存储区域包括:所述Spark计算引擎的硬盘存储区域、所述Spark计算引擎的堆内内存和所述堆外内存;
如果否,执行所述确定预设存储格式对应的各个存储单位,与所述待存储数据中的各个子数据的对应关系的步骤。
4.根据权利要求2所述的方法,其特征在于,所述Spark计算引擎包括:弹性分布式数据集RDD算子层、数据块Block管理层和存储层;
所述获取待存储数据的步骤,包括:
所述RDD算子层中的预设RDD获取待存储数据;
所述确定用于存储所述待存储数据的各个数据列的Value值的步骤,包括:
所述预设RDD确定用于存储所述待存储数据的各个数据列的Value值;
所述通过调用预设的数据接口,按照各个数据列的Value值,以列存储方式将所述待存储数据存储到所述Spark计算引擎的堆外内存中的步骤,包括:
所述预设RDD按照各个数据列的Value值,将各个数据列所存储的所述待存储数据中的子数据传输到所述Block管理层;
所述Block管理层调用预设的数据接口,以列存储方式,将所接收到的各个子数据存储到所述存储层的堆外内存中。
5.一种数据读取方法,其特征在于,应用于数据处理系统中的Spark计算引擎,所述数据处理系统还包括Java虚拟机,所述Java虚拟机使用所述Spark计算引擎进行数据管理;所述方法包括:
在接收到待处理业务时,确定所述待处理业务所需数据的过滤条件;
通过调用预设的数据接口,从所述Spark计算引擎的堆外内存中,读取满足所述过滤条件的目标数据;其中,所述数据接口为对所述堆外内存进行数据读写所需调用的接口;
将所述目标数据存储到所述Spark计算引擎的堆内内存中,以使所述待处理业务被处理时,从所述堆内内存中读取所述目标数据。
6.根据权利要求5所述的方法,其特征在于,所述堆外内存中所存储的数据的存储格式为:列存储;
所述通过调用预设的数据接口,从所述Spark计算引擎的堆外内存中,读取满足所述过滤条件的目标数据的步骤,包括:
通过调用预设的数据接口,从所述Spark计算引擎的堆外内存中,读取满足所述过滤条件的目标数据列;
所述将所述目标数据存储到所述Spark计算引擎的堆内内存中,以使所述待处理业务被处理时,从所述堆内内存中读取所述目标数据的步骤,包括:
将所述目标数据列存储到所述Spark计算引擎的堆内内存中,以使所述待处理业务被处理时,从所述堆内内存中读取所述目标数据列。
7.根据权利要求5所述的方法,其特征在于,所述Spark计算引擎包括:弹性分布式数据集RDD算子层、数据块Block管理层和存储层;
所述在接收到待处理业务时,确定所述待处理业务所需数据的过滤条件的步骤,包括:
所述RDD算子层中的预设RDD在接收到待处理业务时,确定所述待处理业务所需数据的过滤条件;
所述调用预设的数据接口,从所述Spark计算引擎的堆外内存中,读取满足所述过滤条件的目标数据的步骤:
所述预设RDD将所述数据过滤条件传输至所述Block管理层;
所述Block管理层调用预设的数据接口,从所述存储层的堆外内存中,读取满足所述过滤条件的目标数据;
所述将所述目标数据存储到所述Spark计算引擎的堆内内存中的步骤,包括:
所述Block管理层将所述目标数据存储到所述存储层的堆内内存中。
8.一种数据存储装置,其特征在于,应用于数据处理系统中的Spark计算引擎,所述数据处理系统还包括Java虚拟机,所述Java虚拟机使用所述Spark计算引擎进行数据管理;所述装置包括:
数据获取模块,用于获取待存储数据;
关系确定模块,用于确定预设存储格式对应的各个存储单位,与所述待存储数据中的各个子数据的对应关系;其中,每一子数据为预设数据量的数据;
第一数据存储模块,用于通过调用预设的数据接口,按照所述对应关系,将所述待存储数据存储到所述Spark计算引擎的堆外内存中;
其中,所述数据接口为对所述堆外内存进行数据读写所需调用的接口。
9.一种数据读取装置,其特征在于,应用于数据处理系统中的Spark计算引擎,所述数据处理系统还包括Java虚拟机,所述Java虚拟机使用所述Spark计算引擎进行数据管理;所述装置包括:
条件确定模块,用于在接收到待处理业务时,确定所述待处理业务所需数据的过滤条件;
数据读取模块,用于通过调用预设的数据接口,从所述Spark计算引擎的堆外内存中,读取满足所述过滤条件的目标数据;其中,所述数据接口为对所述堆外内存进行数据读写所需调用的接口;
第二数据存储模块,用于将所述目标数据存储到所述Spark计算引擎的堆内内存中,以使所述待处理业务被处理时,从所述堆内内存中读取所述目标数据。
10.一种电子设备,其特征在于,所述电子设备安装有Spark计算引擎,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现权利要求1-4任一所述的方法步骤和/或权利要求5-7任一项所述的方法步骤。
11.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-4任一所述的方法步骤和/或权利要求5-7任一项所述的方法步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010591275.2A CN111736776B (zh) | 2020-06-24 | 2020-06-24 | 一种数据存储、读取方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010591275.2A CN111736776B (zh) | 2020-06-24 | 2020-06-24 | 一种数据存储、读取方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111736776A true CN111736776A (zh) | 2020-10-02 |
CN111736776B CN111736776B (zh) | 2023-10-10 |
Family
ID=72651057
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010591275.2A Active CN111736776B (zh) | 2020-06-24 | 2020-06-24 | 一种数据存储、读取方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111736776B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112506950A (zh) * | 2020-12-10 | 2021-03-16 | 深圳前海微众银行股份有限公司 | 数据聚合处理方法、计算节点、计算集群及存储介质 |
CN112685438A (zh) * | 2020-12-29 | 2021-04-20 | 杭州海康威视数字技术股份有限公司 | 数据处理系统、方法、装置及存储介质 |
Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6971097B1 (en) * | 2000-06-09 | 2005-11-29 | Sun Microsystems, Inc. | Method and apparatus for implementing concurrently running jobs on an extended virtual machine using different heaps managers |
DE102008036479A1 (de) * | 2008-08-05 | 2010-02-11 | Giesecke & Devrient Gmbh | Speicherverwaltung in einem portablen Datenträger |
US20120222005A1 (en) * | 2011-02-24 | 2012-08-30 | Terracotta Inc. | Off-heap direct-memory data stores, methods of creating and/or managing off-heap direct-memory data stores, and/or systems including off-heap direct-memory data store |
CN103488581A (zh) * | 2013-09-04 | 2014-01-01 | 用友软件股份有限公司 | 数据缓存系统和数据缓存方法 |
CN103838844A (zh) * | 2014-03-03 | 2014-06-04 | 珠海市君天电子科技有限公司 | 一种键值对数据存储、传输方法及装置 |
CN106547910A (zh) * | 2016-11-25 | 2017-03-29 | 山东浪潮商用系统有限公司 | moosefs基于Tachyon实现文件多级存储方法 |
CN107015989A (zh) * | 2016-01-27 | 2017-08-04 | 博雅网络游戏开发(深圳)有限公司 | 数据处理方法和装置 |
CN107329982A (zh) * | 2017-06-01 | 2017-11-07 | 华南理工大学 | 一种基于分布式列式存储的大数据并行计算方法及系统 |
CN107590077A (zh) * | 2017-09-22 | 2018-01-16 | 深圳大学 | 一种Spark负载访存行为追踪方法及装置 |
CN109101554A (zh) * | 2018-07-12 | 2018-12-28 | 厦门中控智慧信息技术有限公司 | 用于java平台的数据缓存系统、方法以及计算机终端 |
US10223256B1 (en) * | 2013-10-28 | 2019-03-05 | Pivotal Software, Inc. | Off-heap memory management |
US20190354471A1 (en) * | 2018-05-16 | 2019-11-21 | International Business Machines Corporation | Sharing consumed off-heap for parallel data loading |
CN111125090A (zh) * | 2019-11-12 | 2020-05-08 | 中盈优创资讯科技有限公司 | 数据存取方法及装置 |
US20200150904A1 (en) * | 2014-06-27 | 2020-05-14 | Hcl Technologies Ltd. | System and Method for Managing Content using Generic Content Management Interface |
-
2020
- 2020-06-24 CN CN202010591275.2A patent/CN111736776B/zh active Active
Patent Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6971097B1 (en) * | 2000-06-09 | 2005-11-29 | Sun Microsystems, Inc. | Method and apparatus for implementing concurrently running jobs on an extended virtual machine using different heaps managers |
DE102008036479A1 (de) * | 2008-08-05 | 2010-02-11 | Giesecke & Devrient Gmbh | Speicherverwaltung in einem portablen Datenträger |
US20120222005A1 (en) * | 2011-02-24 | 2012-08-30 | Terracotta Inc. | Off-heap direct-memory data stores, methods of creating and/or managing off-heap direct-memory data stores, and/or systems including off-heap direct-memory data store |
CN103488581A (zh) * | 2013-09-04 | 2014-01-01 | 用友软件股份有限公司 | 数据缓存系统和数据缓存方法 |
US10223256B1 (en) * | 2013-10-28 | 2019-03-05 | Pivotal Software, Inc. | Off-heap memory management |
CN103838844A (zh) * | 2014-03-03 | 2014-06-04 | 珠海市君天电子科技有限公司 | 一种键值对数据存储、传输方法及装置 |
US20200150904A1 (en) * | 2014-06-27 | 2020-05-14 | Hcl Technologies Ltd. | System and Method for Managing Content using Generic Content Management Interface |
CN107015989A (zh) * | 2016-01-27 | 2017-08-04 | 博雅网络游戏开发(深圳)有限公司 | 数据处理方法和装置 |
CN106547910A (zh) * | 2016-11-25 | 2017-03-29 | 山东浪潮商用系统有限公司 | moosefs基于Tachyon实现文件多级存储方法 |
CN107329982A (zh) * | 2017-06-01 | 2017-11-07 | 华南理工大学 | 一种基于分布式列式存储的大数据并行计算方法及系统 |
CN107590077A (zh) * | 2017-09-22 | 2018-01-16 | 深圳大学 | 一种Spark负载访存行为追踪方法及装置 |
US20190354471A1 (en) * | 2018-05-16 | 2019-11-21 | International Business Machines Corporation | Sharing consumed off-heap for parallel data loading |
CN109101554A (zh) * | 2018-07-12 | 2018-12-28 | 厦门中控智慧信息技术有限公司 | 用于java平台的数据缓存系统、方法以及计算机终端 |
CN111125090A (zh) * | 2019-11-12 | 2020-05-08 | 中盈优创资讯科技有限公司 | 数据存取方法及装置 |
Non-Patent Citations (4)
Title |
---|
佚名: ""Apache Spark内存管理"", 《电脑编程技巧与维护》 * |
佚名: ""Apache Spark内存管理"", 《电脑编程技巧与维护》, no. 7, 31 July 2017 (2017-07-31) * |
佚名: ""JVM堆内内存-DirectByteBuffer"", 《HTTPS://MP.WEIXIN.QQ.COM/S/5P2XBNAAWIS5SK50P94JJGW》 * |
佚名: ""JVM堆内内存-DirectByteBuffer"", 《HTTPS://MP.WEIXIN.QQ.COM/S/5P2XBNAAWIS5SK50P94JJGW》, 26 June 2018 (2018-06-26), pages 2 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112506950A (zh) * | 2020-12-10 | 2021-03-16 | 深圳前海微众银行股份有限公司 | 数据聚合处理方法、计算节点、计算集群及存储介质 |
CN112685438A (zh) * | 2020-12-29 | 2021-04-20 | 杭州海康威视数字技术股份有限公司 | 数据处理系统、方法、装置及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111736776B (zh) | 2023-10-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107480198B (zh) | 一种分布式NewSQL数据库系统和全文检索方法 | |
CN107798038B (zh) | 数据响应方法及数据响应设备 | |
KR101682738B1 (ko) | 관리 시스템 확장성 | |
CN104281455A (zh) | 一种接口调用方法、装置及终端 | |
US9164751B2 (en) | System and method of rolling upgrades of data traits | |
US10102046B2 (en) | In-memory data analytic system that provides an integrated tracking mechanism for explicit memory resources | |
CN111736776A (zh) | 一种数据存储、读取方法及装置 | |
CN104423982A (zh) | 请求的处理方法和处理设备 | |
CN113792077A (zh) | 一种数据处理方法、程序产品、可读介质和电子设备 | |
CN107943542A (zh) | 一种配置信息管理方法、装置、可读介质及存储控制器 | |
CN109815241B (zh) | 数据查询方法、装置、设备和存储介质 | |
CN111522626A (zh) | 一种虚拟机列表生成方法、装置及电子设备 | |
US12001458B2 (en) | Multi-cloud object store access | |
CN115759742A (zh) | 企业风险评估方法、装置、计算机设备和存储介质 | |
CN115904785A (zh) | 一种异常定位方法、装置、设备及可读存储介质 | |
US11537499B2 (en) | Self executing and self disposing signal | |
CN113849482A (zh) | 一种数据迁移方法、装置及电子设备 | |
CN106407345A (zh) | 一种脏数据更新方法及装置 | |
US9569482B2 (en) | Transforming default values dynamically | |
US20160162959A1 (en) | Performance Optimization Utilizing Pre-Analysis of Condition Records | |
US11451627B2 (en) | System and method for content management with intelligent data store access across distributed stores | |
CN111915304B (zh) | 数字元素的数据处理方法、装置、设备及存储介质 | |
CN116842085A (zh) | 一种数据处理方法、装置、电子设备及存储介质 | |
CN118132656A (zh) | 知识图谱构建方法、装置、计算机设备和存储介质 | |
CN116049314A (zh) | 一种数据获取方法、装置、电子设备及存储介质 |
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 |