一种OSDMap缓存容器的更新方法、装置及终端与流程

文档序号:16428378发布日期:2018-12-28 19:57阅读:246来源:国知局
一种OSDMap缓存容器的更新方法、装置及终端与流程

本发明涉及分布式文件系统领域,特别涉及一种osdmap缓存容器的更新方法、装置、终端及计算机可读存储介质。

背景技术

分布式文件系统中的osd模块简称osd,其中,osd(object-basedstoragedevice,对象存储设备)。osd在处理pg(placementgroup,归置组可以理解为数据分布的一种逻辑单元)相关业务以及其他osd的请求时需要获取osdmap。osdmap可以理解为一个数据结构,其包括pool集合(可以理解为对象池),副本数,pg数量,osd集合和osd状态等信息。

现有技术中osd获取osdmap的方式是从存储osdmap的一个作为缓存的容器(map_cache可以称之为osdmap缓存容器)中得到的。该数据结构是一个指定大小的、特殊的map结构,该map的key为版本号,value为对应版本的osdmap。目前,该map配置大小为200,即最多存储200个版本的osdmap。当osd想获取某个版本的osdmap,当该版本osdmap并不存在于osdmap缓存容器中时,就会从本地数据库中查询该版本osdmap,在从数据库中查询到该版本osdmap以后就会构造一个osdmap结构,并根据数据库中的数据对新构造的osdmap结构进行反序列化,这样就得到一个osd所需要版本的osdmap了,该osdmap最终会被插入到osdmap缓存容器中。

由于本地数据库是存储在物理磁盘中,因此查询数据库得到对应版本osdmap的过程会比较慢,并且反序列化过程也比较慢。所以当osd需要获取某个不在osdmap缓存容器中的osdmap时就会影响执行效率。



技术实现要素:

本发明的目的是提供一种osdmap缓存容器的更新方法、装置、终端及计算机可读存储介质,能够省掉了查询数据库、构造以及反序列化消耗的时间,提高系统运行效率。

为解决上述技术问题,本发明提供一种osdmap缓存容器的更新方法,包括:

当检测到触发更新操作的预设事件时,获取历史访问osdmap的版本号;

利用机器学习算法对所述历史访问osdmap的版本号进行分析,得到预判版本号;

查询所述osdmap缓存容器中是否存在所述预判版本号;

若否,则生成所述预判版本号对应的osdmap并将所述osdmap插入到所述osdmap缓存容器中。

可选的,所述更新方法还包括:

通过确定启动定时器中的数值为预设值来检测所述预设事件。

可选的,所述历史访问osdmap的版本号的生成方式,包括:

对每次用户访问的osdmap的版本号进行统计,形成所述历史访问osdmap的版本号。

可选的,所述利用机器学习算法对所述版本号进行分析,得到预判版本号,包括:

利用机器学习的线性回归算法对所述版本号进行分析,得到预判版本号。

可选的,生成所述预判版本号对应的osdmap,包括:

利用本地数据库构造所述预判版本号对应的osdmap结构;

对所述osdmap结构进行反序列化生成osdmap所述预判版本号对应的osdmap。

本发明还提供一种osdmap缓存容器的更新装置,包括:

数据获取模块,用于当检测到触发更新操作的预设事件时,获取历史访问osdmap的版本号;

预判断模块,用于利用机器学习算法对所述历史访问osdmap的版本号进行分析,得到预判版本号;

查询模块,用于查询所述osdmap缓存容器中是否存在所述预判版本号;

更新模块,用于若所述osdmap缓存容器中不存在所述预判版本号,则生成所述预判版本号对应的osdmap并将所述osdmap插入到所述osdmap缓存容器中。

可选的,所述更新装置还包括:

预设事件检测模块,用于通过确定启动定时器中的数值为预设值来检测所述预设事件。

可选的,所述预判断模块具体为利用机器学习的线性回归算法对所述版本号进行分析,得到预判版本号的模块。

本发明还提供一种终端,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现如上述任一项所述的osdmap缓存容器的更新方法的步骤。

本发明还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述任一项所述的osdmap缓存容器的更新方法的步骤。

本发明所提供的一种osdmap缓存容器的更新方法,包括:当检测到触发更新操作的预设事件时,获取历史访问osdmap的版本号;利用机器学习算法对历史访问osdmap的版本号进行分析,得到预判版本号;查询osdmap缓存容器中是否存在预判版本号;若否,则生成预判版本号对应的osdmap并将osdmap插入到osdmap缓存容器中。

可见,该方法通过机器学习算法能够主动预测用户所需版本的osdmap,并在osdmap缓存容器中不存在该预判版本号时,提前将对应的osdmap插入到osdmap缓存容器中,进而避免用户在需要使用该预判版本对应的osdmap时才进行查询、构造、反序列化等操作,大幅度提高运行效率。本发明还提供了一种osdmap缓存容器的更新装置、终端及计算机可读存储介质,同样具有上述有益效果。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本发明实施例所提供的osdmap缓存容器的更新方法的流程图;

图2为本发明实施例所提供的osdmap缓存容器的更新装置的结构框图。

具体实施方式

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

本实施例中为了避免现有技术中当osdmap缓存容器中不存在用户所需要版本的osdmap时,需要在osdmap缓存容器中插入对应版本的osdmap过程中存在的查询、构造以及反序列化过程,而这一过程速度较慢,因此会影响执行效率。本实施例中通过机器学习算法及时更新osdmap缓存容器中的osdmap,使得用户未来可能使用到的版本的osdmap提前插入到osdmap缓存容器中,进而避免在使用时才进行插入的过程,进而克服现有技术中的缺点。具体请参考图1,图1为本发明实施例所提供的osdmap缓存容器的更新方法的流程图;该更新方法可以包括:

s101:当检测到触发更新操作的预设事件时,获取历史访问osdmap的版本号。

具体的,本实施例中并不对预设事件的具体内容进行限定。例如可以是接收到触发更新操作的信号;也可以是通过计时器等设置预设周期的脚本来触发更新操作;也可以是在历史访问osdmap的版本号更新时触发更新操作;当然也可以是它们之间的结合,例如在历史访问osdmap的版本号更新时启动器,在预设周期后执行后续操作,实现对osdmap缓存容器的更新。对应的本实施例中也不对检测到触发更新操作的预设事件的方式进行限定,其需要与对应的预设事件的具体内容相对应。

例如当预设事件为接收到触发更新操作的信号时,对应的检测到触发更新操作的预设事件具体为确定接收到触发更新操作的信号来检测预设事件;当预设事件为设置预设周期的脚本来触发更新操作时,对应的检测到触发更新操作的预设事件具体为通过确定启动定时器中的数值为预设值来检测预设事件;当预设事件为历史访问osdmap的版本号更新时,对应的检测到触发更新操作的预设事件具体为通过确定存在历史访问osdmap的版本号更新来检测预设事件。

优选的,为了提高硬件资源利用率,避免重复多次进行预判,本实施例中通过确定启动定时器中的数值为预设值来检测预设事件。即设定定时器,按照预设周期进行osdmap缓存容器的更新,比保证了osdmap缓存容器中版本的可靠性,又避免了硬件资源的浪费。本实施例中并不限定定时器设置的预设周期的具体数值。

在检测到触发更新操作的预设事件时,需要执行后续步骤实现对osdmap缓存容器的更新,以满足用户对于osdmap的需求。为了更新准确,本实施例中需要首先获取历史访问osdmap的版本号,本实施例并不限定历史访问osdmap的版本号的获取方式,例如可以是每次用户获取osdmap时,记录用户所需的osdmap的版本号。具体的,对每次用户访问的osdmap的版本号进行统计,形成历史访问osdmap的版本号。即在osd获取osdmap时将该版本号插入机器学习采样的数据集中,在本实施例中即历史访问osdmap的版本号对应的数据集中。

进一步,本实施例中并不限定历史访问osdmap的版本号的存储形式,例如可以设置数据库存储osdmap的版本号。当然也可以是通过列表存储历史访问osdmap的版本号。用户可以根据实际硬件的存储情况进行选择。

s102:利用机器学习算法对历史访问osdmap的版本号进行分析,得到预判版本号。

本实施例中并不对机器学习算法进行限定,用户可以根据硬件实际的计算能力,以及用户对预判版本号的准确程度进行选择。进一步,为了提高预判版本号可靠性,优选的,本实施例中利用机器学习的线性回归算法对版本号进行分析,得到预判版本号。

本实施例时根据历史访问数据中版本号的规律来对未来用户所需要的版本号进行预测,因此历史访问osdmap的版本号数量越多,机器学习算法预测的准确性越高。即当osd需要获取osdmap时,该osdmap就基本已经存储在osdmap缓存容器中。此时机器学习算法越可靠,在osd需要获取osdmap时,预判版本号命中率就越高,进而需要在osd需要获取osdmap时进行重新查询、构造、反序列化等操作可能性就越小。因此本实施例可以大幅度提高运行效率。当然为了保证机器学习算法能够实现预测功能,需要一定量的初始数据,即需要一定量的历史访问osdmap的版本号(例如100个历史访问osdmap的版本号)才能够开始执行预测操作得到预判版本号。具体的,当机器学习算法的数据集(本实施例中即指历史访问osdmap的版本号)中的数据个数超过一定数值(100个)时,利用机器学习的线性回归算法对数据进行分析,得到预判版本号,即预判的osdmap版本。

本实施例中并不限定得到的预判版本号的数量,其可以是一个,当然也可以是多个。当预判版本号的数量为1时,执行后续步骤(如步骤s103以及步骤s104或步骤s105);当预判版本号的数量为多个时,针对每一个预判版本号均执行后续步骤(如步骤s103以及步骤s104或步骤s105)。

s103:查询osdmap缓存容器中是否存在预判版本号;若否,则进入s104。

在步骤s102确定了后续用户可能会获取的osdmap的预判版本号,本步骤就是为了确定当前osdmap缓存容器是否存在预判版本号对应的osdmap。若已经存在,则证明用户在需要的时候可以直接从osdmap缓存容器中获取对应的osdmap。若不存在,则证明用户在需要的时候不能够直接从osdmap缓存容器中获取对应的osdmap,因此需要提前在osdmap缓存容器中准备好对应的osdmap,以避免用户需要在获取时执行查询、构造以及反序列化等一系列操作,大幅度提高运行效率。

本实施例并不限定查询的具体过程,例如可以是将每一个预判版本号与osdmap缓存容器中已存在的版本号进行对比,判断是否存在。

s104:生成预判版本号对应的osdmap并将osdmap插入到osdmap缓存容器中。

当osdmap缓存容器中存在没有预判版本号对应的osdmap时,需要获取对应的osdmap,并将其存储到osdmap缓存容器中。即在本地数据库中查询该预判版本osdmap并构造对应osdmap结构以及进行反序列化,最终插入osdmap缓存容器(即map_cache)中。具体的,利用本地数据库构造预判版本号对应的osdmap结构;对osdmap结构进行反序列化生成osdmap预判版本号对应的osdmap,并将该osdmap插入到osdmap缓存容器中。

为了不影响主流程或者理解为前台正在运行的程序,该步骤中生成预判版本号对应的osdmap并将osdmap插入到osdmap缓存容器中可以是在机器学习的定时器中进行,以实现不会影响主流程的目的。

s105:直接结束更新操作。

当osdmap缓存容器中存在预判版本号对应的osdmap时,则可以不进行更新操作,即可以直接结束本次更新操作。

下面简单说明上述实施例的具体过程:通过机器学习算法,对每次获取的osdmap的版本号进行统计,并在触发更新操作时,对历史访问osdmap的版本号进行分析,并在osd下一次获取osdmap前对要获取的osdmap的版本号进行预判,得到若干个可能的版本即预判版本号。并在osdmap缓存容器中不存在对应的预判版本号的osdmap时提前查询本地数据库、构造osdmap结构以及反序列化,最终插入到osdmap缓存容器中。这样当osd获取预判版本号对应的osdmap时该osdmap就已经存储在osdmap缓存容器中,进而不需要重新查询、构造、反序列化等操作,大幅度提高运行效率。

基于上述技术方案,本发明实施例提供的一种osdmap缓存容器的更新方法,可以大大减少不必要的时间消耗,并且在机器学习算法采样的数据(历史访问osdmap的版本号)越来越多时,预判的准确率会越来越高,这样能够提前将期望版本的osdmap准备好,省掉了查询数据库、构造osdmap结构以及反序列化等消耗的时间,提高系统运行效率。

下面对本发明实施例提供的osdmap缓存容器的更新装置、终端及计算机可读存储介质进行介绍,下文描述的osdmap缓存容器的更新装置、终端及计算机可读存储介质与上文描述的一种osdmap缓存容器的更新方法可相互对应参照。

请参考图2,图2为本发明实施例所提供的osdmap缓存容器的更新装置的结构框图;该更新装置可以包括:

数据获取模块100,用于当检测到触发更新操作的预设事件时,获取历史访问osdmap的版本号;

预判断模块200,用于利用机器学习算法对历史访问osdmap的版本号进行分析,得到预判版本号;

查询模块300,用于查询osdmap缓存容器中是否存在预判版本号;

更新模块400,用于若osdmap缓存容器中不存在预判版本号,则生成预判版本号对应的osdmap并将osdmap插入到osdmap缓存容器中。

基于上述实施例,该更新装置还可以包括:

预设事件检测模块,用于通过确定启动定时器中的数值为预设值来检测预设事件。

基于上述任意实施例,预判断模块200具体为利用机器学习的线性回归算法对版本号进行分析,得到预判版本号的模块。

需要说明的是,基于上述任意实施例,所述装置可以是基于可编程逻辑器件实现的,可编程逻辑器件包括fpga,cpld,单片机等。

本发明实施例还提供一种终端,包括:存储器,用于存储计算机程序;处理器,用于执行计算机程序时实现上述任意实施例所述的osdmap缓存容器的更新方法的步骤。如处理器用于执行计算机程序时实现当检测到触发更新操作的预设事件时,获取历史访问osdmap的版本号;利用机器学习算法对历史访问osdmap的版本号进行分析,得到预判版本号;查询osdmap缓存容器中是否存在预判版本号;若否,则生成预判版本号对应的osdmap并将osdmap插入到osdmap缓存容器中。

本发明还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述任意实施例所述的osdmap缓存容器的更新方法的步骤。如计算机程序被处理器执行时实现当检测到触发更新操作的预设事件时,获取历史访问osdmap的版本号;利用机器学习算法对历史访问osdmap的版本号进行分析,得到预判版本号;查询osdmap缓存容器中是否存在预判版本号;若否,则生成预判版本号对应的osdmap并将osdmap插入到osdmap缓存容器中。

该计算机可读存储介质可以包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。

以上对本发明所提供的一种osdmap缓存容器的更新方法、装置、终端及计算机可读存储介质进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

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