一种数据缓存方法及装置与流程

文档序号:19737693发布日期:2020-01-18 04:44阅读:147来源:国知局
一种数据缓存方法及装置与流程

本发明涉及数据处理领域,尤其涉及一种数据缓存方法及装置。



背景技术:

大量的系统或设备一般都将数据存储到磁盘上,但随着互联网时代的发展,数据日益激增,传统访问磁盘获取数据的方式已难以满足用户对于系统或设备的处理速度要求。

目前,为满足用户对于处理速度的需求,通常由开发者手动的从磁盘中提取一些数据缓存到内存,但是这样的方式对于开发者的要求较高,需要开发者分析数据价值、了解内存的空间大小,较易出错,不利于提升数据缓存的效率。



技术实现要素:

本发明提供一种数据缓存方法及装置,用以解决现有技术中存在的数据缓存效率较低的问题。

第一方面,本发明实施例提供一种数据缓存方法,包括:

获取用于指示从磁盘中读取一条数据所需的时长的第一读取成本,以及用于指示从预设内存中读取一条数据所需的时长的第二读取成本;

获取所述磁盘上存储的多个磁盘文件中每个磁盘文件的第一空间占用量和访问次数;所述第一空间占用量用于表征磁盘文件中热点数据所占用的存储空间大小,所述热点数据为磁盘文件中被读取次数大于或等于第一预设阈值的数据;

根据所述第一读取成本、所述第二读取成本、所述每个磁盘文件的第一空间占用量和访问次数,确定所述每个磁盘文件的访问代价;

根据所述每个磁盘文件的第一空间占用量和访问代价,在所述多个磁盘文件中确定出待缓存磁盘文件,并将所述待缓存磁盘文件中的热点数据缓存至所述预设内存。

在一种可选的实现方式中,所述根据所述第一读取成本、所述第二读取成本、所述每个磁盘文件的第一空间占用量和访问次数,确定所述每个磁盘文件的访问代价,包括:

根据所述第一读取成本、第一磁盘文件的第一空间占用量和访问次数,确定所述第一磁盘文件的第一访问成本;其中,所述第一磁盘文件为所述多个磁盘文件中的任意一个,所述第一访问成本用于表征从所述磁盘中多次读取所述第一磁盘文件中的热点数据所需的时长;

根据所述第一读取成本、第一写入成本、所述第二读取成本、所述第一磁盘文件的第一空间占用量和访问次数,确定所述第一磁盘文件的第二访问成本;其中,所述第一写入成本用于指示将一条数据写入所述预设内存中所需的时长,所述第二访问成本用于表征从所述预设内存中多次读取所述第一磁盘文件中的热点数据所需的时长;

将所述第一访问成本和所述第二访问成本之间的差值,确定为所述第一磁盘文件的访问代价。

在一种可选的实现方式中,

所述第一访问成本通过如下方式确定:

cuc(ti)=hr×rsize(ti)×m(ti);

rsize(ti)=count(ti)×size(ti);

其中,cuc(ti)表示所述第一访问成本,ti表示所述第一磁盘文件,hr表示从所述磁盘中读取一条数据所需的时长,rsize(ti)为所述第一磁盘文件的第一空间占用量,m(ti)为所述第一磁盘文件的访问次数,count(ti)为所述第一磁盘文件中热点数据的数量,size(ti)为所述第一磁盘文件中每条数据平均占用的空间大小;

所述第二访问成本通过如下方式确定:

cc(ti)=cw(ti)+m(ti)×cr(ti);

cw(ti)=hr×rsize(ti)+cpuw×rsize(ti);

cr(ti)=cpur×rsize(ti);

其中,cc(ti)表示所述第二访问成本,cw(ti)表示从所述磁盘中读取出所述第一磁盘文件中的热点数据,并将所述第一磁盘文件中的热点数据写入所述预设内存所需的时长,cr(ti)表示从所述预设内存中读取所述第一磁盘文件中的热点数据所需的时长,cpuw表示将一条数据写入所述预设内存所需的时长,cpur表示从所述预设内存中读取一条数据所需的时长。

在一种可选的实现方式中,所述磁盘上存储有n个第一空间占用量小于所述预设内存的当前可用空间大小的磁盘文件;

所述根据所述每个磁盘文件的第一空间占用量和访问代价,在所述多个磁盘文件中确定出待缓存磁盘文件,包括:

将所述n个磁盘文件中的k个磁盘文件确定为所述待缓存磁盘文件;

其中,所述k个磁盘文件的第一空间占用量总和小于所述预设内存的当前可用空间大小,所述k个磁盘文件中的任一磁盘文件的访问代价大于所述n个磁盘文件中除所述k个磁盘文件以外的任一磁盘文件的访问代价。

在一种可选的实现方式中,所述根据所述每个磁盘文件的第一空间占用量和访问代价,在所述多个磁盘文件中确定出待缓存磁盘文件,包括:

根据所述多个磁盘文件中每个磁盘文件的第一空间占用量和访问代价,确定最优磁盘文件集,所述最优磁盘文件集为多个磁盘文件集中访问代价总和最大的磁盘文件集,所述多个磁盘文件集中的每个磁盘文件集由所述多个磁盘文件中的至少一个磁盘文件构成,所述最优磁盘文件集包括的磁盘文件的第一空间占用量总和小于等于所述预设内存的当前可用空间大小;

将所述最优磁盘文件集中包含的磁盘文件确定为所述待缓存磁盘文件。

第二方面,本发明实施例提供一种数据缓存装置,包括:

获取模块,用于获取用于指示从磁盘中读取一条数据所需的时长的第一读取成本,以及用于指示从预设内存中读取一条数据所需的时长的第二读取成本;获取所述磁盘上存储的多个磁盘文件中每个磁盘文件的第一空间占用量和访问次数;所述第一空间占用量用于表征磁盘文件中热点数据所占用的存储空间大小,所述热点数据为磁盘文件中被读取次数大于或等于第一预设阈值的数据;

确定模块,用于根据所述第一读取成本、所述第二读取成本、所述每个磁盘文件的第一空间占用量和访问次数,确定所述每个磁盘文件的访问代价;

缓存模块,用于根据所述每个磁盘文件的第一空间占用量和访问代价,在所述多个磁盘文件中确定出待缓存磁盘文件,并将所述待缓存磁盘文件中的热点数据缓存至所述预设内存。

在一种可选的实现方式中,所述确定模块,具体用于:

根据所述第一读取成本、第一磁盘文件的第一空间占用量和访问次数,确定所述第一磁盘文件的第一访问成本;其中,所述第一磁盘文件为所述多个磁盘文件中的任意一个,所述第一访问成本用于表征从所述磁盘中多次读取所述第一磁盘文件中的热点数据所需的时长;

根据所述第一读取成本、第一写入成本、所述第二读取成本、所述第一磁盘文件的第一空间占用量和访问次数,确定所述第一磁盘文件的第二访问成本;其中,所述第一写入成本用于指示将一条数据写入所述预设内存中所需的时长,所述第二访问成本用于表征从所述预设内存中多次读取所述第一磁盘文件中的热点数据所需的时长;

将所述第一访问成本和所述第二访问成本之间的差值,确定为所述第一磁盘文件的访问代价。

在一种可选的实现方式中,所述确定模块,具体用于通过如下方式确定所述第一访问成本:

cuc(ti)=hr×rsize(ti)×m(ti);

rsize(ti)=count(ti)×size(ti);

其中,cuc(ti)表示所述第一访问成本,ti表示所述第一磁盘文件,hr表示从所述磁盘中读取一条数据所需的时长,rsize(ti)为所述第一磁盘文件的第一空间占用量,m(ti)为所述第一磁盘文件的访问次数,count(ti)为所述第一磁盘文件中热点数据的数量,size(ti)为所述第一磁盘文件中每条数据平均占用的空间大小;

所述确定模块,具体用于通过如下方式确定所述第二访问成本:

cc(ti)=cw(ti)+m(ti)×cr(ti);

cw(ti)=hr×rsize(ti)+cpuw×rsize(ti);

cr(ti)=cpur×rsize(ti);

其中,cc(ti)表示所述第二访问成本,cw(ti)表示从所述磁盘中读取出所述第一磁盘文件中的热点数据,并将所述第一磁盘文件中的热点数据写入所述预设内存所需的时长,cr(ti)表示从所述预设内存中读取所述第一磁盘文件中的热点数据所需的时长,cpuw表示将一条数据写入所述预设内存所需的时长,cpur表示从所述预设内存中读取一条数据所需的时长。

在一种可选的实现方式中,所述磁盘上存储有n个第一空间占用量小于所述预设内存的当前可用空间大小的磁盘文件;

所述缓存模块,具体用于:

将所述n个磁盘文件中的k个磁盘文件确定为所述待缓存磁盘文件;

其中,所述k个磁盘文件的第一空间占用量总和小于所述预设内存的当前可用空间大小,所述k个磁盘文件中的任一磁盘文件的访问代价大于所述n个磁盘文件中除所述k个磁盘文件以外的任一磁盘文件的访问代价。

在一种可选的实现方式中,所述缓存模块,具体用于:

根据所述多个磁盘文件中每个磁盘文件的第一空间占用量和访问代价,确定最优磁盘文件集,所述最优磁盘文件集为多个磁盘文件集中访问代价总和最大的磁盘文件集,所述多个磁盘文件集中的每个磁盘文件集由所述多个磁盘文件中的至少一个磁盘文件构成,所述最优磁盘文件集包括的磁盘文件的第一空间占用量总和小于等于所述预设内存的当前可用空间大小;

将所述最优磁盘文件集中包含的磁盘文件确定为所述待缓存磁盘文件。

第三方面,本发明实施例提供一种数据缓存装置,包括:

存储器以及处理器;

存储器,用于存储程序指令;

处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行第一方面的任一实现方式所述的方法。

第四方面,本发明实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行上述方法。

本发明实施例中,首先获取用于指示从磁盘中读取一条数据所需的时长的第一读取成本,以及用于指示从预设内存中读取一条数据所需的时长的第二读取成本,并获取磁盘上存储的多个磁盘文件中每个磁盘文件的访问次数和每个磁盘文件的热点数据所对应的第一空间占用量;然后根据第一读取成本、第二读取成本、每个磁盘文件的第一空间占用量和访问次数,确定每个磁盘文件的访问代价;进而根据每个磁盘文件的第一空间占用量和访问代价,在多个磁盘文件中确定出待缓存磁盘文件,并将待缓存磁盘文件中的热点数据缓存至所述预设内存。以便在读取待缓存磁盘文件中的热点数据时,无需访问磁盘而可直接从内存中获取,能够有效提高读取数据的效率,从而提升数据处理的速度。

附图说明

图1为本发明实施例提供的一种数据缓存方法的流程示意图;

图2为本发明实施例提供的一种确定待缓存磁盘文件的流程示意图;

图3为本发明实施例提供的一种数据缓存装置的结构框图;

图4为本发明实施例提供的另一种数据缓存装置的结构示意图。

具体实施方式

为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部份实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

需要说明的是,本发明中涉及的多个,是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。另外,应当理解,尽管在本发明实施例中可能采用术语第一、第二等来描述各数据、但这些数据不应限于这些术语。这些术语仅用来将各数据彼此区分开。

下面在描述本发明的具体实施例之前,对本发明涉及的技术概念进行描述。

(1)hadoop分布式文件系统(hadoopdistributedfilesystem,hdfs),为一种适合运行在通用硬件上的分布式文件系统,将文件数据分布式存储到hadoop的磁盘中。hdfs多应用于大数据处理平台,主要负责存储大规模数据,支持流式读写数据和处理超大规模文件。

(2)分布式计算框架spark,是一种可同时进行批处理、流式计算、交互式计算的高效分布式计算框架。具备与hadoop相似的开源集群计算环境,作为对hadoop的补充,可以在hdfs中并行运行,主要负责包括运用结构化查询语言(structuredquerylanguage,sql)查询数据、处理数据等运算。spark框架采用弹性分布式数据集(resilientdistributeddatasets,rdd)基于内存进行迭代计算,能够提高计算效率。

(3)hive是一种用类sql语句来协助读写、管理那些存储在分布式存储系统诸如hdfs上的大数据集的数据仓库软件。

在大数据时代背景下,大数据处理平台生态圈不断扩大。大量的系统或设备都将数据都存储到hdfs(磁盘)上,人们可以通过hive以传统的sql语句去查询读取hdfs的数据,但从hdfs上读取数据相当于在磁盘上读取数据,其处理速度远小于cpu处理数据的速度。随着数据量的暴增,尤其对于要求速度和注重用户体验的系统中,传统的查询方式已无法满足人们的需求。例如,当前越来越多人的关注网络安全问题,很多基于防护安全的产品也如雨后春笋般出现。当发现攻击事件时,都想通过溯源也即用已知的数据获取未知的更多数据以增强网络安全的防护成效,而要想达到当前事后溯源的目的,就需要将网络中的原始数据源(flow)存储下来,无疑加大了存储成本,数据的激增给防护安全技术带来了巨大的挑战。

为保证数据完整,同时满足后期快速查询数据的用户需求,spark被广泛的应用于hdfs中查询和处理数据。由于spark基于内存计算的效率较高,spark团队开发设计了sparksql项目,摆脱传统查询hdfs数据时对于hive的依赖。sparksql提供针对hdfs数据的缓存机制,该机制预先将hdfs数据转化为内存列式存储缓存在内存中,例如,在hdfs上数据源为非列式存储的场景中,sparksql会按行从数据源读取数据,将其中为csv,json等格式的数据转化为orc/parquet等高效的列式存储数据后缓存在内存中。然后基于sparksql查询时可直接采用内存列式读取方式,只用读取所需的列,能够有效提高读取的效率。

具体的,spark处理hdfs数据时,首先对hdfs数据执行读取操作,例如采用sql语句从hdfs的数据表中读取所需数据;然后返回对应的rdd,并对rdd执行mappartition操作,将读取到hdfs数据对应的结果集转化为数组形式;进而执行cache()方法,从而实现将读取到的hdfs数据缓存至内存的目的。当接收到用户的查询请求时,spark根据该查询请求在内存中确定出查询请求对应的列数据,并使用columnaccessor模块对列数据中的字段进行解析,封装成行记录的格式返回给用户,诸如将数据以行记录格式展示在与用户交互的可视化界面上。

利用sparksql中内存列式读取访问效率高的特性,在sql执行前通过预读取方式将数据缓存在内存中,能够降低网络传输开销与磁盘i/o开销,降低交互式查询的处理时延;且通过列式存储和压缩编码,能够减少内存开销与提高访问速度。为实现基于sparksql读取数据所能达到访问效率高的效果,关键问题在于如何选取值得缓存在有限的内存空间中的数据。

目前,sparksql的默认缓存策略中,需要开发者自己决定需要缓存哪些数据,并以手动声明的方式,拉取到数据后手动选择缓存的数据,由开发者决定缓存哪些数据,可能会由于对数据价值分析有误而导致缓存利用率低,或导致计算过程中出现异常。同时也要求开发者在熟悉数据库中每个数据表的容量的同时,熟悉sql查询包含的业务逻辑,以避免缓存无效或低效的数据。由开发者手动从磁盘中提取一些数据缓存到内存,对于开发员的要求较高,容易出错,不利于提升数据缓存及数据读取的效率。

基于此,本发明实施例提供一种数据缓存方法及装置,用以解决现有技术中存在的数据缓存效率较低的问题。其中,方法和装置是基于同一发明构思的,由于方法和装置解决问题的原理相似,因此装置与方法的实施可以相互参见,重复之处不再赘述。

参见图1所示,为本发明实施例提供一种数据缓存方法的流程示意图。该方法包括:

步骤s101,获取用于指示从磁盘中读取一条数据所需的时长的第一读取成本,以及用于指示从预设内存中读取一条数据所需的时长的第二读取成本。

其中,第一读取成本可以是依据磁盘中存储的数据大小预先设定的参数,第二读取成本包括内存读取数据所用的时间成本以及将读取到的列数据封装成行记录的cpu时间成本。

具体实施时,可预先按照数据大小对于磁盘中存储的数据划分类型。基于此,第一读取成本可以是针对不同类型的数据分别配置的时间权重,以表示读取不同类型数据所需的时长不同。例如hdfs上存储有溯源系统的原始flow和告警流量数据,原始flow信息较大,存储原始flow的文件很大;而告警信息及告警相关流量信息相对较少,存储告警流量数据的文件很小。故可预先配置读取存储告警流量数据的文件对应的第一时间权重小于读取存储告警流量数据的文件对应的第二时间权重,诸如配置第一时间权重为1,第二时间权重为1000。

步骤s102,获取磁盘上存储的多个磁盘文件中每个磁盘文件的第一空间占用量和访问次数;第一空间占用量用于表征磁盘文件中热点数据所占用的存储空间大小,热点数据为磁盘文件中被读取次数大于或等于第一预设阈值的数据。

其中,每个磁盘文件的访问次数可以统一由其中热点数据对应的最小或最大的被读取次数所确定。例如,设定第一预设阈值为3,磁盘中某一磁盘文件中包含3条热点数据,分别对应的被读取次数为4、5、6。若该磁盘文件的访问次数取6,磁盘中的其他磁盘文件的访问次数也统一取其热点数据对应的最大被读取次数。

步骤s103,根据第一读取成本、第二读取成本、每个磁盘文件的第一空间占用量和访问次数,确定每个磁盘文件的访问代价。

步骤s104,根据每个磁盘文件的第一空间占用量和访问代价,在多个磁盘文件中确定出待缓存磁盘文件,并将待缓存磁盘文件中的热点数据缓存至预设内存。

本发明实施例中,根据在磁盘上存储的多个磁盘文件中每个磁盘文件的第一空间占用量和访问代价,从多个磁盘中选出放入内存读取时更快的待缓存磁盘文件,将待缓存磁盘文件中的热点数据缓存在内存,以便在读取待缓存磁盘文件中的热点数据时,无需访问磁盘而可直接从内存中获取,能够有效提高读取数据的效率,从而提升数据处理的速度。

在一种可选的实施方式中,上述步骤s103,具体可参照如下方式实施:

a1,根据第一读取成本、第一磁盘文件的第一空间占用量和访问次数,确定第一磁盘文件的第一访问成本;其中,第一磁盘文件为多个磁盘文件中的任意一个,第一访问成本用于表征从磁盘中多次读取第一磁盘文件中的热点数据所需的时长。

在一种可选的实施方式中,第一访问成本可通过如下方式确定:

cuc(ti)=hr×rsize(ti)×m(ti);

rsize(ti)=count(ti)×size(ti);

其中,cuc(ti)表示第一访问成本,ti表示第一磁盘文件,hr表示从磁盘中读取一条数据所需的时长,也即前述预先根据磁盘中数据的类型所预先配置的时间权重,rsize(ti)为第一磁盘文件的第一空间占用量,m(ti)为第一磁盘文件的访问次数,count(ti)为第一磁盘文件中热点数据的数量,size(ti)为第一磁盘文件中每条数据平均占用的空间大小。

a2,根据第一读取成本、第一写入成本、第二读取成本、第一磁盘文件的第一空间占用量和访问次数,确定第一磁盘文件的第二访问成本;

其中,第一写入成本用于指示将一条数据写入预设内存中所需的时长,也即写缓存的cpu时间成本;第二访问成本用于表征从预设内存中多次读取第一磁盘文件中的热点数据所需的时长。

考虑到实际应用时,内存读取速度非常快,计算第二读取成本可以忽略不计内存读取的时间成本,仅考虑将从内存中读取到的列数据封装成记录的cpu时间成本。在一种可选的实施方式中,第二访问成本通过如下方式确定:

cc(ti)=cw(ti)+m(ti)×cr(ti);

cw(ti)=hr×rsize(ti)+cpuw×rsize(ti);

cr(ti)=cpur×rsize(ti);

其中,cc(ti)表示第二访问成本,cw(ti)表示从磁盘中读取出第一磁盘文件中的热点数据,并将第一磁盘文件中的热点数据写入预设内存所需的时长,cr(ti)表示从预设内存中读取第一磁盘文件中的热点数据所需的时长,cpuw表示将一条数据写入预设内存所需的时长,cpur表示从预设内存中读取一条数据所需的时长,也即从内存中读取到一条列数据封装成记录的cpu时间成本。

a3,将第一访问成本和第二访问成本之间的差值,确定为第一磁盘文件的访问代价。

具体的,第一磁盘文件的访问代价(diffi)可通过如下公式计算得到:

diffi=cuc(ti)-cc(ti)

=((m(ti)-1)×hr-cpuw-m(ti)×cr(ti))×count(ti)×size(ti)。

在本发明实施例中,基于磁盘和内存对应的读写操作来分析访问成本,具体的通过计算从磁盘中读取第一磁盘文件中热点数据对应的第一访问成本,以及计算假设将磁盘上第一磁盘文件中的热点数据缓存内存,再从内存中读取第一磁盘文件中的热点数据所对应的第二访问成本。然后计算第一访问成本和第二访问成本之间的差值得到访问代价,用以后续作为是否将第一磁盘文件的热点数据缓存至内存的依据,便于识别出值得缓存入内存的数据。

在一种可选的实施方式中,磁盘上存储有n个第一空间占用量小于或者等于预设内存的当前可用空间大小的磁盘文件;基于此,上述根据每个磁盘文件的第一空间占用量和访问代价,在多个磁盘文件中确定出待缓存磁盘文件,可参照如下方式实施:

将n个磁盘文件中的k个磁盘文件确定为待缓存磁盘文件;其中,k个磁盘文件的第一空间占用量总和小于或者等于预设内存的当前可用空间大小,k个磁盘文件中的任一磁盘文件的访问代价大于n个磁盘文件中除k个磁盘文件以外的任一磁盘文件的访问代价。

在本发明实施例中,首先在磁盘中确定出第一空间占用量小于或者等于预设内存的当前可用空间大小,也即能够放入内存的n个磁盘文件。进而按照访问代价的大小顺序,优先将n个磁盘文件中访问代价大的磁盘文件的热点数据缓存至内存,直至内存可用空间不足。从而实现在有限的内存空间中缓存访问代价较大的磁盘文件的热点数据,减少访问磁盘i/0开销,提升读取数据的效率。

在另一种可选的实施方式中,参见图2所示的一种确定待缓存磁盘文件的流程示意图,上述根据每个磁盘文件的第一空间占用量和访问代价,在多个磁盘文件中确定出待缓存磁盘文件,还可通过如下方式实施:

步骤s201,根据多个磁盘文件中每个磁盘文件的第一空间占用量和访问代价,确定最优磁盘文件集。

其中,最优磁盘文件集为多个磁盘文件集中访问代价总和最大的磁盘文件集,多个磁盘文件集中的每个磁盘文件集由多个磁盘文件中的至少一个磁盘文件构成,最优磁盘文件集包括的磁盘文件的第一空间占用量总和小于等于预设内存的当前可用空间大小。具体实施时,可采用背包算法,根据每个磁盘文件的第一空间占用量和访问代价,从多个磁盘文件中确定出最优磁盘文件集。

步骤s202,将最优磁盘文件集中包含的磁盘文件确定为待缓存磁盘文件。

为便于理解,本发明实施例以磁盘文件具体是以数据表结构存储数据为例,对于结合背包算法,从hdfs上的多个数据表中确定出待缓存至内存的最优表集合进行详细说明,如下:

假设hdfs上共有n个数据表,其中,第i(1≤i≤n)个数据表中热点数据的第一空间占用量为si,第i个数据表的访问代价为diffi。

基于sparksql配置文件中的spark.executor.memory、spark.memory.fraction、spark.memory.storagefraction相乘得到的预设内存的总可用空间记为m,另记预设内存的当前可用空间大小为j(0≤j≤m)。

将数据表的访问代价作为原有0-1背包算法中物品的价值参数,数据表的第一空间占用量作为原有0-1背包算法中物品的体积参数,对0-1背包算法进行变形,基于i个数据表的第一空间占用量为si与预设内存的当前可用空间大小j之间的大小关系,划分情况得到用于确定最优表集合的公式:

其中,f(i,j)表示基于前i个数据表所确定的可缓存至当前可用空间大小为j的内存中最优表集合所对应的访问代价总和;f(i-1,j)表示最优集合中不包含第i个数据表,基于前i个数据表所确定的可缓存至当前可用空间大小为j的内存中最优表集合所对应的访问代价总和;diffi+f(i-1,j-si)表示最优集合中包含第i个数据表,基于前i个数据表所确定的可缓存至当前可用空间大小为j的内存中最优表集合所对应的访问代价总和。

本发明实施例中,采用背包算法,按照磁盘文件的第一空间占用量和访问代价进行动态规划,从磁盘存储的多个磁盘文件中确定出可放入内存的最优磁盘文件集,保证在当前有限的内存空间中缓存数据所对应的访问代价和最大,实现有价值的缓存数据,能够有效提升内存空间的利用率,进而提高读取数据的效率,及提升数据处理的速度。

进一步,具体实施时,针对基于spark将hdfs上数据表中的热点数据缓存至预设内存的方案,可通过在sparksql中基于scala函数式编程的catalyst查询优化器中增加如下模块来实现:

解析模块:对用户提交的sql解析,统计数据记录及相关表列,以获取hdfs上各数据表的访问次数,以及数据表中热点数据的被读取次数。

代价评估模块:基于上述确定访问代价的方式建立代价评估模型,以计算每个数据表有关缓存热点数据与不缓存热点数据所对应的访问代价。

自动缓存模块:根据动态规划算法如背包算法确定待缓存数据表,然后调用sparkapi中cache()方法将待缓存数据表中的热点数据缓存至预设内存中。

本发明实施例中,提供了基于代价评估的自动缓存策略来对当前hdfs上数据表进行实时监控,并根据实际状况动态调整策略,使用动态规划选择出有价值的数据表,尽可能在有限的内存空间中缓存一个或多个有价值的数据表的热点数据,充分利用内存空间,在保障业务可用性的同时最大程度地保障了用户体验。

对应上述方法,参见图3,本发明实施例提供一种数据缓存装置300,包括:

获取模块301,用于获取用于指示从磁盘中读取一条数据所需的时长的第一读取成本,以及用于指示从预设内存中读取一条数据所需的时长的第二读取成本;获取磁盘上存储的多个磁盘文件中每个磁盘文件的第一空间占用量和访问次数;第一空间占用量用于表征磁盘文件中热点数据所占用的存储空间大小,热点数据为磁盘文件中被读取次数大于或等于第一预设阈值的数据。

确定模块302,用于根据第一读取成本、第二读取成本、每个磁盘文件的第一空间占用量和访问次数,确定每个磁盘文件的访问代价。

缓存模块303,用于根据每个磁盘文件的第一空间占用量和访问代价,在多个磁盘文件中确定出待缓存磁盘文件,并将待缓存磁盘文件中的热点数据缓存至预设内存。

本发明实施例中,根据在磁盘上存储的多个磁盘文件中每个磁盘文件的第一空间占用量和访问代价,从多个磁盘中选出放入内存读取时更快的待缓存磁盘文件,将待缓存磁盘文件中的热点数据缓存在内存,以便在读取待缓存磁盘文件中的热点数据时,无需访问磁盘而可直接从内存中获取,能够有效提高读取数据的效率,从而提升数据处理的速度。

在一种可选的实施方式中,确定模块302,具体用于:

根据第一读取成本、第一磁盘文件的第一空间占用量和访问次数,确定第一磁盘文件的第一访问成本;其中,第一磁盘文件为多个磁盘文件中的任意一个,第一访问成本用于表征从磁盘中多次读取第一磁盘文件中的热点数据所需的时长;

根据第一读取成本、第一写入成本、第二读取成本、第一磁盘文件的第一空间占用量和访问次数,确定第一磁盘文件的第二访问成本;其中,第一写入成本用于指示将一条数据写入预设内存中所需的时长,第二访问成本用于表征从预设内存中多次读取第一磁盘文件中的热点数据所需的时长;

将第一访问成本和第二访问成本之间的差值,确定为第一磁盘文件的访问代价。

在本发明实施例中,基于磁盘和内存对应的读写操作来分析访问成本,具体的通过计算从磁盘中读取第一磁盘文件中热点数据对应的第一访问成本,以及计算假设将磁盘上第一磁盘文件中的热点数据缓存内存,再从内存中读取第一磁盘文件中的热点数据所对应的第二访问成本。然后计算第一访问成本和第二访问成本之间的差值得到访问代价,用以后续作为是否将第一磁盘文件的热点数据缓存至内存的依据,便于识别出值得缓存入内存的数据。

在一种可选的实施方式中,确定模块302,具体用于通过如下方式确定第一访问成本:

cuc(ti)=hr×rsize(ti)×m(ti);

rsize(ti)=count(ti)×size(ti);

其中,cuc(ti)表示第一访问成本,ti表示第一磁盘文件,hr表示从磁盘中读取一条数据所需的时长,rsize(ti)为第一磁盘文件的第一空间占用量,m(ti)为第一磁盘文件的访问次数,count(ti)为第一磁盘文件中热点数据的数量,size(ti)为第一磁盘文件中每条数据平均占用的空间大小;

确定模块302,具体用于通过如下方式确定第二访问成本:

cc(ti)=cw(ti)+m(ti)×cr(ti);

cw(ti)=hr×rsize(ti)+cpuw×rsize(ti);

cr(ti)=cpur×rsize(ti);

其中,cc(ti)表示第二访问成本,cw(ti)表示从磁盘中读取出第一磁盘文件中的热点数据,并将第一磁盘文件中的热点数据写入预设内存所需的时长,cr(ti)表示从预设内存中读取第一磁盘文件中的热点数据所需的时长,cpuw表示将一条数据写入预设内存所需的时长,cpur表示从预设内存中读取一条数据所需的时长。

在一种可选的实施方式中,磁盘上存储有n个第一空间占用量小于预设内存的当前可用空间大小的磁盘文件;

缓存模块303,具体用于:

将n个磁盘文件中的k个磁盘文件确定为待缓存磁盘文件;

其中,k个磁盘文件的第一空间占用量总和小于预设内存的当前可用空间大小,k个磁盘文件中的任一磁盘文件的访问代价大于n个磁盘文件中除k个磁盘文件以外的任一磁盘文件的访问代价。

在本发明实施例中,首先在磁盘中确定出第一空间占用量小于或者等于预设内存的当前可用空间大小,也即能够放入内存的n个磁盘文件。进而按照访问代价的大小顺序,优先将n个磁盘文件中访问代价大的磁盘文件的热点数据缓存至内存,直至内存可用空间不足。从而实现在有限的内存空间中缓存访问代价较大的磁盘文件的热点数据,减少访问磁盘i/o开销,提升读取数据的效率。

在一种可选的实施方式中,缓存模块303,具体用于:

根据多个磁盘文件中每个磁盘文件的第一空间占用量和访问代价,确定最优磁盘文件集,最优磁盘文件集为多个磁盘文件集中访问代价总和最大的磁盘文件集,多个磁盘文件集中的每个磁盘文件集由多个磁盘文件中的至少一个磁盘文件构成,最优磁盘文件集包括的磁盘文件的第一空间占用量总和小于等于预设内存的当前可用空间大小;

将最优磁盘文件集中包含的磁盘文件确定为待缓存磁盘文件。

本发明实施例中,可按照磁盘文件的第一空间占用量和访问代价进行动态规划,从磁盘存储的多个磁盘文件中确定出可放入内存的最优磁盘文件集,保证在有限的内存空间中缓存数据所对应的访问代价和最大,实现有价值的缓存数据,能够有效提升内存空间的利用率,进而提高读取数据的效率,及提升数据处理的速度。

对应上述方法,参见图4,本发明实施例提供了另一种数据缓存装置400,包括:

存储器402以及处理器403;

存储器402,用于存储程序指令;处理器403,用于调用所述存储器402中存储的程序指令,按照获得的程序执行上述实施例中的方法。

在本发明实施例中,处理器可以是通用处理器、数字信号处理器、专用集成电路、现场可编程门阵列或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件,可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。

在本发明实施例中,存储器,用于存储程序指令,存储器可以是非易失性存储器,比如硬盘(harddiskdrive,hdd)或固态硬盘(solid-statedrive,ssd)等,还可以是易失性存储器(volatilememory),例如随机存取存储器(random-accessmemory,ram)。存储器还可以是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。本发明实施例中的存储器还可以是电路或者其它任意能够实现存储功能的装置,用于存储程序指令和/或数据。本发明实施例中不限定上述存储器以及处理器之间的具体连接介质,比如总线,总线可以分为地址总线、数据总线、控制总线等。

进一步,本发明实施例提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机指令,当计算机指令在计算机上运行时,使得计算机执行上述方法。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1