一种数据块的管理方法、系统及存储介质

文档序号:748839 发布日期:2021-04-23 浏览:10次 >En<

阅读说明:本技术 一种数据块的管理方法、系统及存储介质 (Data block management method, system and storage medium ) 是由 徐佳宏 李银 李威青 刘彬 于 2019-10-23 设计创作,主要内容包括:本申请公开了一种数据块的管理方法、系统及存储介质,其中,所述数据块的管理方法通过数据块ID查询队列、LRU管理队列以及管理节点的配合使用,有效提高了数据块的查找效率;并且通过跳表的方式遍历或使用所述LRU管理队列和/或所述数据块ID查询队列,避免了使用数组的方式导致的数据移动的性能问题,提高了数据处理效率。(The application discloses a management method, a system and a storage medium of a data block, wherein the management method of the data block effectively improves the searching efficiency of the data block by the matching use of a data block ID query queue, an LRU management queue and a management node; and traversing or using the LRU management queue and/or the data block ID query queue in a table-skipping manner, thereby avoiding the performance problem of data movement caused by using an array manner and improving the data processing efficiency.)

一种数据块的管理方法、系统及存储介质

技术领域

本申请涉及计算机应用技术领域,更具体地说,涉及一种数据块的管理方法、系统及存储介质。

背景技术

在一台服务器上,所有的磁盘需要使用一个大的共享缓冲区,这个共享缓冲区用来缓存数据,在用户读取数据的时候,减少用户的复制数据的次数,提升服务器的数据处理效率。

而每一个磁盘对应的服务都提供了一个进程进行管理。那么我们需要管理缓存的时候就需要使用共享内存来管理。且共享内存中的内存分配需要根据磁盘的热度来动态分配共享内存的资源,磁盘越热,分配的共享内存作为数据缓存的内存就越多。

在使用共享内存的时候,需要将共享内存分为管理区和数据区,数据区划分为多个数据块,而管理区针对每一个磁盘使用的是LRU(Least Recently Used,最近最少使用)队列,LRU管理队列中记载着数据区中数据块的优先级,当需要淘汰一个数据块时,选择LRU管理队列中优先级最低的数据块予以淘汰。

但在实际使用过程中发现,现有的共享内存的数据块的管理方法中存在数据节点的查找效率低下,且数据处理效率低下的问题。

发明内容

为解决上述技术问题,本申请提供了一种数据块的管理方法、系统及存储介质,以实现提升共享内存的数据块的管理方法的查找效率和数据处理效率的目的。

为实现上述技术目的,本申请实施例提供了如下技术方案:

一种数据块的管理方法,应用于共享内存,所述共享内存包括管理区和数据区,所述数据块的管理方法包括:

将所述数据区划分为多个数据块,每个所述数据块的大小为预设大小;

获取所述共享内存映射到当前进程后,在所述当前进程中所述共享内存的首地址,并将所述数据块的首地址与所述共享内存的首地址的差值作为所述数据块的偏移地址;

为每个物理磁盘建立一个对应的LRU管理队列和一个数据块ID查询队列,所述数据块ID查询队列包括有序排列的数据块的ID,所述LRU管理队列使用优先级淘汰算法;

为所述数据块建立管理节点,所述管理节点包括多个第一指针,所述第一指针指向所述LRU管理队列中相邻节点或指向所述数据块ID查询队列中相邻节点或为所述数据区中数据块的地址指针或表征所述物理磁盘中的数据块的ID或表征所述LRU管理队列中的优先级;所述第一指针的地址为基于所述共享内存的首地址的偏移地址,所述数据块的地址指针用于表征所述数据块的偏移地址;

为每个所述物理磁盘建立管理器,所述管理器中存储有多个第二指针,所述第二指针指向所述LRU管理队列的第一个节点或最后一个节点或指向所述数据块ID查询队列中的第一个节点或最后一个节点或表征所述LRU管理队列中的节点个数或表征所述数据块ID查询队列中的节点个数或表征所述物理磁盘的ID;

根据所述管理节点和所述管理器,以跳表的方式遍历或使用所述数据块ID查询队列。

可选的,所述第一指针为指向LRU管理队列的前一个节点的lru_prev指针,或为指向LRU管理队列的后一个节点的lru_next指针,或为指向数据块ID查询队列的前一个节点的bid_prev指针,或为指向数据块ID查询队列的后一个节点的bid_next指针,或为表征共享内存中数据区的数据块的偏移地址的地址指针,或为表征所述物理磁盘中的数据块的ID的blockid字段,或为表征所述LRU管理队列中的优先级的priv字段;

所述地址指针指向除所述共享内存的首地址之外的地址。

可选的,所述第二指针为指向LRU管理队列的第一个节点的lru_head指针,或为指向LRU管理队列的最后一个节点的lru_tail指针,或为指向数据块ID查询队列的第一个节点的bid_head指针,或为指向数据块ID查询队列的最后一个节点的bid_tail指针,或为表征所述LRU管理队列中的节点个数的lru_size字段,或为表征所述数据块ID管理队列中的节点个数的bid_size字段,或为表征所述物理磁盘的ID的did字段。

可选的,所述根据所述管理节点和所述管理器,以跳表的方式遍历所述数据块ID查询队列包括:

通过所述管理器,获取bid_head指针,并通过所述bid_head指针获取数据块ID查询队列的第一个节点的偏移地址;

计算所述共享内存的首地址与所述数据块ID查询队列的第一个节点的偏移地址的和,以获取所述数据块ID查询队列的第一个节点基于当前进程的地址空间的地址;

根据所述管理节点,依序获取所述数据块ID查询队列的节点的bid_next指针和bid_prev指针;

根据获取的节点的bid_next指针和bid_prev指针获取所述节点相邻节点的偏移地址,计算获取的所述偏移地址和所述共享内存的首地址的和,以获得所述数据块ID查询队列的第一个节点相邻节点基于当前进程的地址空间的地址。

可选的,所述LRU管理队列使用优先级淘汰算法包括:

通过所述管理器,获取lru_head指针,并通过所述lru_head指针获取LRU管理队列的第一个节点的偏移地址;

计算所述共享内存的首地址与所述LRU管理队列的第一个节点的偏移地址的和,以获取所述LRU管理队列的第一个节点基于当前进程的地址空间的地址;

根据所述管理节点,依序获取所述LRU管理队列的节点的lru_next指针和lru_prev指针;

根据获取的节点的lru_next指针和lru_prev指针获取所述节点相邻节点的偏移地址,计算获取的所述偏移地址和所述共享内存的首地址的和,以获得所述LRU管理队列的第一个节点相邻节点基于当前进程的地址空间的地址。

可选的,当需要调整所述LRU管理队列中节点的顺序时,所述根据所述管理节点和所述管理器,以跳表的方式遍历所述数据块ID查询队列包括:

通过数据块ID,以跳表的方式查询所述数据块ID所在的数据块ID查询队列;

通过所述数据块ID查询队列确定目标节点;

获取所述目标节点的lru_next指针和lru_prev指针;

将lru_next指针指向的节点和lru_prev指针指向的节点连接起来后,将所述目标节点放到所述LRU管理队列的第一个节点的位置,以实现LRU管理队列中节点的顺序的调整。

可选的,当需要访问目标节点对应的数据块时,所述根据所述管理节点和所述管理器,以跳表的方式使用所述数据块ID查询队列包括:

在所述数据块ID查询队列中,获取所述目标节点对应的数据地址指针;

计算所述数据地址指针表征的偏移地址与所述共享内存的首地址的和,并根据计算结果访问所述目标节点对应的数据块。

可选的,当需要将所述物理磁盘中的数据存放在所述共享内存中时,所述根据所述管理节点和所述管理器,以跳表的方式遍历或使用所述LRU管理队列和所述数据块ID查询队列包括:

在所述LRU管理队列的末尾选择一个priv字段的值为0的节点作为存储节点,若所述LRU管理队列的末尾不存在priv字段的值为0的节点,则判断LRU管理队列末尾的节点的priv字段的值-1后的值是否为0,如果否,则将所述LRU管理队列末尾的节点放到所述LRU管理队列的第一个节点的位置,重新进行新的一轮淘汰流程,直至找到一个priv字段的值为0的节点;

在确定了存储节点后,将存储节点从LRU管理队列中取出来,同时将lru_size字段的值-1,如果存储节点同时存在于所述数据块ID查询队列中,则将存储节点从数据块ID查询队列中取出,并将所述数据块ID查询队列的bid_size字段的值-1;

通过存储节点的地址指针,确定存储节点指向的数据块的首地址;

根据确定的数据块的首地址将所述物理磁盘中的数据存储到确定的数据块中;

在数据存储完毕后,将该数据块的ID放入存储节点的blockid字段中;

按照该数据块的ID,将存储节点存放在所述数据块ID查询队列中,并将bid_size字段的值+1;

将所述存储节点放入到LRU管理队列的第一个节点所在位置,并将所述bid_size字段的值+1。

可选的,当需要读取共享内存中的目标数据时,所述根据所述管理节点和所述管理器,以跳表的方式遍历或使用所述LRU管理队列和所述数据块ID查询队列包括:

根据所述目标数据,确定目标数据对应的物理磁盘中的数据块ID,读取数据在数据块内部的偏移量以及目标数据的大小;

通过确定的数据块ID,在所述数据块ID查询队列中获取确定的数据块ID对应的目标节点;

通过所述目标节点的地址指针获取所述目标节点对应的数据块,数据块的首地址通过共享内存的首地址与所述地址指针表征的偏移地址的和得到;

通过所述数据块的首地址与所述数据块内部的偏移量的和,得到确定的所述数据块中目标数据的首地址;

根据所述目标数据的首地址,读取所述目标数据。

一种数据块的管理系统,应用于共享内存,所述共享内存包括管理区和数据区,所述数据块的管理系统包括:

数据块划分模块,用于将所述数据区划分为多个数据块,每个所述数据块的大小为预设大小;

地址确定模块,用于获取所述共享内存映射到当前进程后,在所述当前进程中所述共享内存的首地址,并将所述数据块的首地址与所述共享内存的首地址的差值作为所述数据块的偏移地址;

队列创建模块,用于为每个物理磁盘建立一个对应的LRU管理队列和一个数据块ID查询队列,所述数据块ID查询队列包括有序排列的数据块的ID,所述LRU管理队列使用优先级淘汰算法;

管理节点模块,用于为所述数据块建立管理节点,所述管理节点包括多个第一指针,所述第一指针指向所述LRU管理队列中相邻节点或指向所述数据块ID查询队列中相邻节点或为所述数据区中数据块的地址指针或表征所述物理磁盘中的数据块的ID或表征所述LRU管理队列中的优先级;所述第一指针的地址为基于所述共享内存的首地址的偏移地址,所述数据块的地址指针用于表征所述数据块的偏移地址;

管理器模块,用于为每个所述物理磁盘建立管理器,所述管理器中存储有多个第二指针,所述第二指针指向所述LRU管理队列的第一个节点或最后一个节点或指向所述数据块ID查询队列中的第一个节点或最后一个节点或表征所述LRU管理队列中的节点个数或表征所述数据块ID查询队列中的节点个数或表征所述物理磁盘的ID;

队列使用模块,用于根据所述管理节点和所述管理器,以跳表的方式遍历或使用所述数据块ID查询队列。

一种存储介质,所述存储介质中存储有程序,所述程序被触发时执行上述任一项所述的数据块的管理方法。

从上述技术方案可以看出,本申请实施例提供了一种数据块的管理方法、系统及存储介质,其中,所述数据块的管理方法通过数据块ID查询队列、LRU管理队列以及管理节点的配合使用,有效提高了数据块的查找效率;并且通过跳表的方式遍历或使用所述LRU管理队列和/或所述数据块ID查询队列,避免了使用数组的方式导致的数据移动的性能问题,提高了数据处理效率。

附图说明

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

图1为本申请的一个实施例提供的一种数据块的管理方法的流程示意图。

具体实施方式

正如背景技术所述,现有技术中的共享内存的数据块的管理方法存在数据节点的查找效率低下,且数据处理效率低下的问题。

具体地,现有技术中将共享内存分为管理区和数据区。而管理区针对每一个磁盘使用的是LRU管理队列,而在LRU管理队列使用数组的方式实现,数组的方式是在数据的中间插入数据的方式,这插入数据的过程中首先将当前需要插入的数据之后的数据首先向后移动,移动完毕后,再将新的数据插入到当前位置,这样操作效率低下的原因是,数组中的节点数据一直在移动。同时若节点比较多,那么操作的数组的数据就越多。过多的数据移动的操作,影响操作性能。举例来说,如果查找的ID在数据在队列尾部,则整个数组都参与了移动,同时将该节点放到数组的前面。如数组比较大,同时操作频繁,则会降低数据处理效率。

有鉴于此,本申请实施例提供了一种数据块的管理方法,应用于共享内存,所述共享内存包括管理区和数据区,所述数据块的管理方法包括:

将所述数据区划分为多个数据块,每个所述数据块的大小为预设大小;

获取所述共享内存映射到当前进程后,在所述当前进程中所述共享内存的首地址,并将所述数据块的首地址与所述共享内存的首地址的差值作为所述数据块的偏移地址;

为每个物理磁盘建立一个对应的LRU管理队列和一个数据块ID查询队列,所述数据块ID查询队列包括有序排列的数据块的ID,所述LRU管理队列使用优先级淘汰算法;

为所述数据块建立管理节点,所述管理节点包括多个第一指针,所述第一指针指向所述LRU管理队列中相邻节点或指向所述数据块ID查询队列中相邻节点或为所述数据区中数据块的地址指针或表征所述物理磁盘中的数据块的ID或表征所述LRU管理队列中的优先级;所述第一指针的地址为基于所述共享内存的首地址的偏移地址,所述数据块的地址指针用于表征所述数据块的偏移地址;

为每个所述物理磁盘建立管理器,所述管理器中存储有多个第二指针,所述第二指针指向所述LRU管理队列的第一个节点或最后一个节点或指向所述数据块ID查询队列中的第一个节点或最后一个节点或表征所述LRU管理队列中的节点个数或表征所述数据块ID查询队列中的节点个数或表征所述物理磁盘的ID;

根据所述管理节点和所述管理器,以跳表的方式遍历或使用所述数据块ID查询队列。

所述数据块的管理方法通过数据块ID查询队列、LRU管理队列以及管理节点的配合使用,有效提高了数据块的查找效率;并且通过跳表的方式遍历或使用所述LRU管理队列和/或所述数据块ID查询队列,避免了使用数组的方式导致的数据移动的性能问题,提高了数据处理效率。

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

本申请实施例提供了一种数据块的管理方法,如图1所示,应用于共享内存,所述共享内存包括管理区和数据区,所述数据块的管理方法包括:

S101:将所述数据区划分为多个数据块,每个所述数据块的大小为预设大小;

举例来说,假设预设大小为4M(Mbyte,兆字节),那么数据区会被划分为多个4M大小的数据块。

S102:获取所述共享内存映射到当前进程后,在所述当前进程中所述共享内存的首地址,并将所述数据块的首地址与所述共享内存的首地址的差值作为所述数据块的偏移地址;

在本实施例中,每一个数据块的首地址-共享内存的首地址=该数据块在共享内存中的偏移地址。我们把这个偏移地址作为该数据块在共享内存中访问的地址。假如某一个数据块偏移共享内存的10000的位置,那么在所有映射后的共享内存的首地址而言,都是偏移10000的位置开始,在[10000,10000+4×1024×1024)的地址空间范围内都是该数据块的空间。基于此,我们可以通过该方法在共享内存中建立相关的数据结构。下一个数据块的地址空间紧挨做上一个地址空间计算,即上一个地址空间为10000,那么下一个地址空间开始的位置为10000+4×1024×1024的位置。

S103:为每个物理磁盘建立一个对应的LRU管理队列和一个数据块ID查询队列,所述数据块ID查询队列包括有序排列的数据块的ID,所述LRU管理队列使用优先级淘汰算法;

S104:为所述数据块建立管理节点,所述管理节点包括多个第一指针,所述第一指针指向所述LRU管理队列中相邻节点或指向所述数据块ID查询队列中相邻节点或为所述数据区中数据块的地址指针或表征所述物理磁盘中的数据块的ID或表征所述LRU管理队列中的优先级;所述第一指针的地址为基于所述共享内存的首地址的偏移地址,所述数据块的地址指针用于表征所述数据块的偏移地址;

S105:为每个所述物理磁盘建立管理器,所述管理器中存储有多个第二指针,所述第二指针指向所述LRU管理队列的第一个节点或最后一个节点或指向所述数据块ID查询队列中的第一个节点或最后一个节点或表征所述LRU管理队列中的节点个数或表征所述数据块ID查询队列中的节点个数或表征所述物理磁盘的ID;

S106:根据所述管理节点和所述管理器,以跳表的方式遍历或使用所述数据块ID查询队列。

跳表(Skip list)是指增加了向前指针的链表。跳表是链表的一种,不过在有序集合中查询数据的速度比链表块。跳表兼容了数组和链表的功能。使用效率比较高。跳表全称叫做跳跃表,是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表。跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。跳表不仅能提高搜索性能,同时也可以提高插入和删除操作的性能。

我们知道链表中每一个节点都包括next和prev的指针。我们这里的next和prev指针不是指向的实际的当前进程环境的虚拟地址的指针,而是指向的共享内存基于当前进程的起始地址(即共享内存的首地址)的一个偏移量(偏移地址)。

在实际的链表操作过程中,在各自进程通过起始地址+这个偏移量,就是当前进程实际节点的地址指针,可以通过这个实际地址指针就可以访问这个节点的数据了。

基于此,本实施例提供的数据块的管理方法通过数据块ID查询队列、LRU管理队列以及管理节点的配合使用,有效提高了数据块的查找效率;并且通过跳表的方式遍历或使用所述LRU管理队列和/或所述数据块ID查询队列,避免了使用数组的方式导致的数据移动的性能问题,提高了数据处理效率。

可选的,所述第一指针为指向LRU管理队列的前一个节点的lru_prev指针,或为指向LRU管理队列的后一个节点的lru_next指针,或为指向数据块ID查询队列的前一个节点的bid_prev指针,或为指向数据块ID查询队列的后一个节点的bid_next指针,或为表征共享内存中数据区的数据块的偏移地址的地址指针,或为表征所述物理磁盘中的数据块的ID的blockid字段,或为表征所述LRU管理队列中的优先级的priv字段;

所述地址指针指向除所述共享内存的首地址之外的地址。

可选的,所述第二指针为指向LRU管理队列的第一个节点的lru_head指针,或为指向LRU管理队列的最后一个节点的lru_tail指针,或为指向数据块ID查询队列的第一个节点的bid_head指针,或为指向数据块ID查询队列的最后一个节点的bid_tail指针,或为表征所述LRU管理队列中的节点个数的lru_size字段,或为表征所述数据块ID管理队列中的节点个数的bid_size字段,或为表征所述物理磁盘的ID的did字段。

即参考下表1和下表2,表1示出了数据结构字段,及第一指针的名称及相应说明;表2示出了管理器字段信息及其说明。

表1

数据结构字段 说明
lru_prev 指向LRU管理队列的前一个节点
lru_next 指向LRU管理队列的后面一个节点
bid_prev 磁盘的数据块ID查询队列的前面一个节点
bid_next 磁盘的数据块ID查询队列的下一个节点
block_ptr 共享内存中数据区域的数据块的地址指针
blockid 对应硬盘上的数据块id
priv LRU管理队列的优先级

对于lru_prev指针来说,其指向LRU管理队列的前一个节点,第一个节点该值为0,lru_prev指针的地址基于共享内存首地址的偏移地址;

对于lru_next指针来说,指向LRU管理队列的后面一个节点,最后一个节点该值为0,lru_next指针的地址基于共享内存首地址的偏移地址;

对于bid_prev指针来说,其指向磁盘的数据块ID查询队列的前面一个节点,第一个节点该值为0,bid_prev指针的地址基于共享内存首地址的偏移地址;

对于bid_next指针来说,其指向磁盘的数据块ID查询队列的下一个节点,最后一个节点该值为0,bid_next指针的地址基于共享内存首地址的偏移地址。

对于地址指针(block_ptr)来说,其表征共享内存中数据区域的数据块的地址指针,地址指针的地址基于共享内存首地址的偏移地址;

对于blockid字段来说,其对应硬盘上的数据块id,该值初始化为-1,当该值大于等于0,表示指向该磁盘对应的数据块id,在数据块ID查询队列中,也是基于该值作为有序集合。

对于priv字段来说,其表征LRU管理队列的优先级,该优先级作为淘汰的标准,当priv的值为0,表示可以从队列中进行淘汰,且一定在LRU管理队列的尾部。当用户每次使用的时候,该值会增加1,同时将该节点放到LRU管理队列的开头。若在尾部该值大于0,则首先-1,若该值还大于0,继续放到队列开头,作为新的一轮淘汰,若为0,表示该节点已经被淘汰,可以从LRU管理队列中删除,同时也将该节点从数据块ID查询队列中删除。

表2

下面对“根据所述管理节点和所述管理器,以跳表的方式遍历或使用所述数据块ID查询队列”的具体可能情况进行说明。

可选的,所述根据所述管理节点和所述管理器,以跳表的方式遍历所述数据块ID查询队列包括:

通过所述管理器,获取bid_head指针,并通过所述bid_head指针获取数据块ID查询队列的第一个节点的偏移地址;

计算所述共享内存的首地址与所述数据块ID查询队列的第一个节点的偏移地址的和,以获取所述数据块ID查询队列的第一个节点基于当前进程的地址空间的地址;

根据所述管理节点,依序获取所述数据块ID查询队列的节点的bid_next指针和bid_prev指针;

根据获取的节点的bid_next指针和bid_prev指针获取所述节点相邻节点的偏移地址,计算获取的所述偏移地址和所述共享内存的首地址的和,以获得所述数据块ID查询队列的第一个节点相邻节点基于当前进程的地址空间的地址。

可选的,所述LRU管理队列使用优先级淘汰算法包括:

通过所述管理器,获取lru_head指针,并通过所述lru_head指针获取LRU管理队列的第一个节点的偏移地址;

计算所述共享内存的首地址与所述LRU管理队列的第一个节点的偏移地址的和,以获取所述LRU管理队列的第一个节点基于当前进程的地址空间的地址,并基于所述数据块ID查询队列的第一个节点基于当前进程的地址空间的地址,对所述数据块ID查询队列的第一个节点进行访问;

根据所述管理节点,依序获取所述LRU管理队列的节点的lru_next指针和lru_prev指针;

根据获取的节点的lru_next指针和lru_prev指针获取所述节点相邻节点的偏移地址,计算获取的所述偏移地址和所述共享内存的首地址的和,以获得所述LRU管理队列的第一个节点相邻节点基于当前进程的地址空间的地址,并基于所述数据块ID查询队列的第一个节点相邻节点基于当前进程的地址空间的地址,对所述数据块ID查询队列的第一个节点相邻节点进行访问。

可选的,当需要调整所述LRU管理队列中节点的顺序时,所述根据所述管理节点和所述管理器,以跳表的方式遍历所述数据块ID查询队列包括:

通过数据块ID,以跳表的方式查询所述数据块ID所在的数据块ID查询队列;

通过所述数据块ID查询队列确定目标节点;

获取所述目标节点的lru_next指针和lru_prev指针;

将lru_next指针指向的节点和lru_prev指针指向的节点连接起来后,将所述目标节点放到所述LRU管理队列的第一个节点的位置,以实现LRU管理队列中节点的顺序的调整。

可选的,当需要访问目标节点对应的数据块时,所述根据所述管理节点和所述管理器,以跳表的方式使用所述数据块ID查询队列包括:

在所述数据块ID查询队列中,获取所述目标节点对应的数据地址指针;

计算所述数据地址指针表征的偏移地址与所述共享内存的首地址的和,并根据计算结果访问所述目标节点对应的数据块。

可选的,当需要将所述物理磁盘中的数据存放在所述共享内存中时,所述根据所述管理节点和所述管理器,以跳表的方式遍历或使用所述LRU管理队列和所述数据块ID查询队列包括:

在所述LRU管理队列的末尾选择一个priv字段的值为0的节点作为存储节点,若所述LRU管理队列的末尾不存在priv字段的值为0的节点,则判断LRU管理队列末尾的节点的priv字段的值-1后是否为0,如果否,则将所述LRU管理队列末尾的节点放到所述LRU管理队列的第一个节点的位置,重新进行新的一轮淘汰流程,直至找到一个priv字段的值为0的节点;

在确定了存储节点后,将存储节点从LRU管理队列中取出来,同时将lru_size字段的值-1,如果存储节点同时存在于所述数据块ID查询队列中,则将存储节点从数据块ID查询队列中取出,并将所述数据块ID查询队列的bid_size字段的值-1;

通过存储节点的地址指针,确定存储节点指向的数据块的首地址;

根据确定的数据块的首地址将所述物理磁盘中的数据存储到确定的数据块中;

在数据存储完毕后,将该数据块的ID放入存储节点的blockid字段中;

按照该数据块的ID,将存储节点存放在所述数据块ID查询队列中,并将bid_size字段的值+1;

将所述存储节点放入到LRU管理队列的第一个节点所在位置,并将所述bid_size字段的值+1。

可选的,当需要读取共享内存中的目标数据时,所述根据所述管理节点和所述管理器,以跳表的方式遍历或使用所述LRU管理队列和所述数据块ID查询队列包括:

根据所述目标数据,确定目标数据对应的物理磁盘中的数据块ID,读取数据在数据块内部的偏移量以及目标数据的大小;

通过确定的数据块ID,在所述数据块ID查询队列中获取确定的数据块ID对应的目标节点;

通过所述目标节点的地址指针获取所述目标节点对应的数据块,数据块的首地址通过共享内存的首地址与所述地址指针表征的偏移地址的和得到;

通过所述数据块的首地址与所述数据块内部的偏移量的和,得到确定的所述数据块中目标数据的首地址;

根据所述目标数据的首地址,读取所述目标数据。

下面对本申请实施例提供的数据块的管理系统进行描述,下文描述的数据块的管理系统可与上文描述的数据块的管理方法相互对应参照。

相应的,本申请实施例提供了一种数据块的管理系统,应用于共享内存,所述共享内存包括管理区和数据区,所述数据块的管理系统包括:

数据块划分模块,用于将所述数据区划分为多个数据块,每个所述数据块的大小为预设大小;

地址确定模块,用于获取所述共享内存映射到当前进程后,在所述当前进程中所述共享内存的首地址,并将所述数据块的首地址与所述共享内存的首地址的差值作为所述数据块的偏移地址;

队列创建模块,用于为每个物理磁盘建立一个对应的LRU管理队列和一个数据块ID查询队列,所述数据块ID查询队列包括有序排列的数据块的ID,所述LRU管理队列使用优先级淘汰算法;

管理节点模块,用于为所述数据块建立管理节点,所述管理节点包括多个第一指针,所述第一指针指向所述LRU管理队列中相邻节点或指向所述数据块ID查询队列中相邻节点或为所述数据区中数据块的地址指针或表征所述物理磁盘中的数据块的ID或表征所述LRU管理队列中的优先级;所述第一指针的地址为基于所述共享内存的首地址的偏移地址,所述数据块的地址指针用于表征所述数据块的偏移地址;

管理器模块,用于为每个所述物理磁盘建立管理器,所述管理器中存储有多个第二指针,所述第二指针指向所述LRU管理队列的第一个节点或最后一个节点或指向所述数据块ID查询队列中的第一个节点或最后一个节点或表征所述LRU管理队列中的节点个数或表征所述数据块ID查询队列中的节点个数或表征所述物理磁盘的ID;

队列使用模块,用于根据所述管理节点和所述管理器,以跳表的方式遍历或使用所述数据块ID查询队列。

相应的,本申请实施例还提供了一种存储介质,所述存储介质中存储有程序,所述程序被触发时执行上述任一实施例所述的数据块的管理方法。

综上所述,本申请实施例提供了一种数据块的管理方法、系统及存储介质,其中,所述数据块的管理方法通过数据块ID查询队列、LRU管理队列以及管理节点的配合使用,有效提高了数据块的查找效率;并且通过跳表的方式遍历或使用所述LRU管理队列和/或所述数据块ID查询队列,避免了使用数组的方式导致的数据移动的性能问题,提高了数据处理效率。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

17页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:实现PCIe设备的缓存一致性的系统、方法和介质

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类