CN112860684A - 数据访问方法、装置、设备及存储介质 - Google Patents
数据访问方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN112860684A CN112860684A CN201911101097.4A CN201911101097A CN112860684A CN 112860684 A CN112860684 A CN 112860684A CN 201911101097 A CN201911101097 A CN 201911101097A CN 112860684 A CN112860684 A CN 112860684A
- Authority
- CN
- China
- Prior art keywords
- node
- linked list
- pointer
- access
- data
- 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
- 238000000034 method Methods 0.000 title claims abstract description 62
- 238000013507 mapping Methods 0.000 claims abstract description 10
- 238000004590 computer program Methods 0.000 claims description 12
- 238000010586 diagram Methods 0.000 description 22
- 230000008569 process Effects 0.000 description 10
- 238000009826 distribution Methods 0.000 description 8
- 238000004891 communication Methods 0.000 description 6
- 238000009827 uniform distribution Methods 0.000 description 6
- 230000009471 action Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000000694 effects Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 238000007792 addition Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000004883 computer application Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种数据访问方法、装置、设备及存储介质,所述的方法包括:在哈希映射的环状链表中,确定所述环状链表的头指针指向的结点;根据所述头指针指向的结点,访问所述环状链表。根据本发明实施例,头指针的指向可以灵活切换,头指针可以指向环状链表中的任意一个结点,满足数据访问的需求,提高数据访问效率。
Description
技术领域
本发明属于计算机领域,尤其涉及一种数据访问方法、装置、设备及存储介质。
背景技术
内存管理是计算机应用中的重要问题。现有技术中采用单向链表的方式进行内存管理,单向链表包括一系列结点。单向链表的操作包括插入结点、访问结点数据,删除结点、修改结点数据、查找数据等等。
目前,每次访问单向链表时,是从链表的第一个结点开始访问,其中链表的第一个结点是固定的。但是这种访问效率较低。
发明内容
本发明实施例提供一种数据访问方法、装置、设备及存储介质,能够提高访问效率。
第一方面,本发明实施例提供一种数据访问方法,所述的方法包括:
在哈希映射的环状链表中,确定所述环状链表的头指针指向的结点;
根据所述头指针指向的结点,访问所述环状链表。
第二方面,本发明实施例提供了一种数据访问方法,包括:
在哈希映射的链表中,确定所述链表的第一指针指向的结点,其中,所述第一指针是除头指针之外的指针;
在所述第一指针指向的结点是目标访问结点的情况下,若访问完所述第一指针指向的结点,则结束本次对所述链表的访问。
第三方面,本发明实施例提供了一种数据访问装置,包括:
结点确定模块,用于在哈希映射的环状链表中,确定所述环状链表的头指针指向的结点;
链表访问模块,用于根据所述头指针指向的结点,访问所述环状链表。
第四方面,本发明实施例提供了一种数据访问装置,包括:
结点确定模块,用于在哈希映射的链表中,确定所述链表的第一指针指向的结点,其中,所述第一指针是除头指针之外的指针;
访问模块,用于在所述第一指针指向的结点是目标访问结点的情况下,若访问完所述第一指针指向的结点,则结束本次对所述链表的访问。
第五方面,本发明实施例提供了一种计算设备,所述设备包括:处理器以及存储有计算机程序指令的存储器;
所述处理器执行所述计算机程序指令时实现所述的数据访问方法。
第六方面,本发明实施例提供了一种计算机存储介质,所述计算机存储介质上存储有计算机程序指令,所述计算机程序指令被处理器执行时实现所述的数据访问方法。
本发明实施例的数据访问方法、装置、设备及存储介质,哈希映射的链表是环状链表,即使改变头指针指向的结点,也可以遍历整个链表的结点。头指针的指向可以灵活切换,头指针可以指向环状链表中的任意一个结点,满足数据访问的需求,提高数据访问效率。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单的介绍,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明提供的一个实施例的数据访问方法的流程示意图;
图2为本发明提供的一个实施例的环状链表与单向链表的示意图;
图3为在θ是0.99的情况下齐普夫分布性能的示意图;
图4为在θ是1.22的情况下齐普夫分布性能的示意图;
图5为均匀分布性能的示意图;
图6为本发明提供的一个实施例的数据访问原理的示意图;
图7为本发明提供的另一个实施例的数据访问方法的流程示意图;
图8为本发明提供的一个实施例的基于单向链表的数据访问的示意图;
图9为本发明提供的一个实施例的一种数据访问装置的框图;
图10为本发明提供的另一个实施例的数据访问装置的框图;
图11为本发明提供的一个实施例的计算设备的硬件结构示意图。
具体实施方式
下面将详细描述本发明的各个方面的特征和示例性实施例,为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及具体实施例,对本发明进行进一步详细描述。应理解,此处所描述的具体实施例仅被配置为解释本发明,并不被配置为限定本发明。对于本领域技术人员来说,本发明可以在不需要这些具体细节中的一些细节的情况下实施。下面对实施例的描述仅仅是为了通过示出本发明的示例来提供对本发明更好的理解。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
为了解决现有技术问题,本发明实施例提供了一种数据访问方法、装置、设备及存储介质。下面首先对本发明实施例所提供的数据访问方法进行介绍。
图1为本发明提供的一个实施例的数据访问方法的流程示意图。如图1所示,该数据访问方法包括:
S101,在哈希映射的环状链表中,确定环状链表的头指针指向的结点。
S102,根据头指针指向的结点,访问环状链表。
图2为本发明提供的一个实施例的环状链表与单向链表的示意图。
单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要顺序读取,并从头部开始;链表是使用指针进行构造的列表;又称为结点列表,因为链表是由一个个结点组装起来的;其中每个结点有指针成员变量指向列表中的下一个结点。链表包括结点,头(head)指针指向第一个结点,第一个结点的指针指向第二个结点,以此类推,直到最后一个结点的指针指向空(NULL)。
环状链表的多个结点中的每个结点的指针指向下一个结点,使得多个结点顺序排列,并且最后一个结点的指针指向第一个结点,以形成环状链表。与单向链表不同的是,环状链表的最后一个结点的指针指向第一个结点,而单向链表的最后一个结点的指针指向NULL。
对于环状链表,从头指针指向的结点开始,依次访问环状链表上的结点,直到访问到目标访问结点为止,访问环状链表的目的是访问目标访问结点的数据。
比如,在对图2中的环状链表进行访问的过程中,访问结点1后确定结点1不是目标访问结点,继续访问结点2;访问结点2后确定结点2也不是目标访问结点,继续访问结点3;访问结点3后确定结点3是目标访问结点,结束本次对环状链表的访问。这里,在本领域中“结点”有时可以称为“节点”。
图2中是逆时针访问环状链表上的结点,这仅仅是一种实施方式,当然也可以顺时针访问访问环状链表的结点。
在本发明实施例中,哈希映射的链表是环状链表,在不修改链表的情况下,即使改变头指针指向的结点,也可以遍历整个链表的结点。但是,对于单向链表而言,单向链表的头指针如果指向链表中间的结点,则无法实现遍历链表的各个结点。
本发明实施例的环状链表的头指针可以灵活切换,头指针指向环状链表中的任意一个结点,满足数据访问的需求,提高数据访问效率。如果头指针指向热数据所在的结点,那么在多数情况下访问头指针指向的结点即可得到需要访问的数据,有效地提高了访问效率。
在本发明的一个实施例中,数据访问方法还包括:将头指针指向环状链表中的热数据所在的结点。
其中,若热数据所在的结点发生变化,则将头指针的指向从环状链表的一个结点切换到环状链表的另一个结点。
在本发明的一个实施例中,该数据访问方法应用在高速缓冲存储器(cache)中,在cache服务中缓存结点(item),结点链表的长度平均会到8~12左右。
由于热数据所在结点的访问次数占结点总访问次数的百分比大于或等于一个阈值,比如,该阈值是80%,即热数据所在结点的访问频率很高。如果头指针指向热数据所在的结点,那么在多数情况下,头指针指向的结点即是目标访问结点,对头指针指向的结点进行访问即可得到需要的数据,有效地提高了访问效率,减少热数据的访问开销,显著的提高cache的性能。
cache专门提供缓存的服务,或者集成到数据库中,例如图数据库GDB。如果cache服务中存在20%的数据的访问频率占总访问的80%,那么这20%的数据为热数据。本发明实施例优化了cache热点访问的性能,热数据的访问延迟比冷数据高50%以上,单线程性能达到4Mqps,并且不影响冷数据的访问延迟,没有额外的统计开销和内存开销。
在本发明的一个实施例中,至少有三种方式可以得到热数据所在结点。
方式一
若上次访问环状链表的目标访问结点与本次访问环状链表的目标访问结点相同,则热数据所在的结点为本次访问环状链表的目标访问结点。
需要说明的是,若上次访问环状链表的目标访问结点与本次访问环状链表的目标访问结点相同,即连续两次访问环状链表的目的是为了访问环状链表的同一个结点,说明该结点是热数据所在的结点。
作为一个示例,通过结点的哈希值判断两次访问的目标访问结点是否相同。其中,若上次访问环状链表的目标访问结点的哈希值与本次访问环状链表的目标访问结点的哈希值相同,则上次访问环状链表的目标访问结点与本次访问环状链表的目标访问结点相同。
另外,上次访问环状链表的目标访问结点的哈希值与头指针存放在至少一个字节里,即上次访问环状链表的目标访问结点的哈希值与头指针存放在一起。
比如,在物理上,上次访问环状链表的目标访问结点的哈希值与头指针存放在一个8字节里,这样一次读取就可以获取到头指针以及上次访问环状链表的目标访问结点的哈希值,不会增加内存的访问开销。
在获取到上次访问环状链表的目标访问结点的哈希值之后,判断本次访问环状链表的目标访问结点的哈希值与上次访问环状链表的目标访问结点的哈希值是否相同。
若相同,则移动头指针到本次访问环状链表的目标访问结点,即移动头指针到上次访问环状链表的目标访问结点。若不相同,则记录本次访问环状链表的目标访问结点的哈希值。
方式二
环状链表中的最近一次访问的结点是热数据所在的结点。
比如,对于图2示出的环状链表,访问到环状链表中的结点3,结点3是目标访问结点,结束本次对环状链表的访问。在这种情况下,环状链表中的最近一次访问的结点是结点3,将结点3作为热数据所在的结点。
方式三
环状链表中的访问次数最多的目标访问结点是热数据所在的结点。
比如,对于图2示出的环状链表,统计最近5次对环状链表的访问情况,前3次都是访问到环状链表的结点2就停止本次对环状链表的访问,即前3次访问的目标访问结点是结点2;第4次访问到环状链表的结点5就停止本次对环状链表的访问,即第4次访问的目标访问结点是结点5;第5次访问到环状链表的结点2就停止本次对环状链表的访问,即第5次访问的目标访问结点是结点2。
由此可见,在最近5次对环状链表的访问中,访问次数最多的目标访问结点是结点2,结点2是热数据所在的结点,将头指针指向结点2。
下面对本发明实施例的效果进行详细说明。
假设链表的周长是5,即链表中有5个结点,数据均匀放置在各个结点中,访问模型服从二八分布,具体如表1所示:
表1
热数据 | 冷数据 | |
数据比例 | 0.2 | 0.8 |
访问比例 | 0.8 | 0.2 |
在表1中,对于在整个链表中存放的数据,有20%的数据属于热数据,有80%的数据属于冷数据,对热数据的访问次数占总访问次数的80%,对冷数据的访问次数占总访问次数的20%。
1、在链表是单向链表的情况下
(1)对单向链表的头指针进行一次访问。
(2)对单向链表的结点进行访问的过程中,由于单向链表的链长是5,因此访问单向链表的结点的平均访问次数是2.5次。
比如,第一次对单向链表访问时,单向链表的第2个结点是目标访问结点,那么第一次对单向链表的结点的访问次数是2次;第二次对单向链表访问时,单向链表的第5个结点是目标访问结点,那么第二次对单向链表的结点的访问次数是5次;以此类推,经过大量的访问,可以得出对单向链表的结点的平均访问次数是2.5次。
结合以上(1)和(2)两点可知,在对单向链表进行访问的过程中,单向链表的平均访问次数是1+2.5=3.5次。
2、在链表是环状链表的情况下
(1)对于热数据的访问,数据访问包括:对环状链表的头指针进行一次访问;对头指针指向的结点进行访问,由于头指针指向的结点是热数据所在的结点,因此,对环状链表的结点进行一次访问。
从以上可以看出,访问热数据的访问次数是1+1=2次。
(2)对于冷数据的访问,数据访问包括:对环状链表的头指针进行一次访问;从头指针指向的结点开始访问环状链表,由于环状链表的链长是5,因此访问到环状链表中的目标访问结点的平均次数是2.5次。
从以上可以看出,访问冷数据的平均访问次数是1+2.5=3.5次。
结合以上(1)和(2),由于表1中80%的访问是访问热数据,20%的访问是访问冷数据,因此在对环状链表进行访问的过程中,环状链表的平均访问次数是0.8×2+0.2×3.5=2.3次。
相比于单向链表的平均访问次数而言,环状链表的平均访问次数比单向链表的平均访问次数减少了34%。
与表1场景不同的另一个场景:80%的访问是访问热数据,15%的访问是访问冷数据,5%的访问是没有访问到需要的数据。
(1)对于热数据的访问,访问热数据的访问次数是1+1=2次。
(2)对于冷数据的访问,访问冷数据的平均访问次数是1+2.5=3.5次。
上面已经对访问热数据的访问次数和访问冷数据的访问次数进行详细说明,在此不再重复赘述。
(3)对于没有访问到需要的数据,数据访问包括:对环状链表的头指针进行一次访问;从头指针指向的结点开始访问环状链表,并访问到环状链表的最后一个结点,因此本次访问环状链表的结点的访问次数是5次。
从以上可以看出,在环状链表中没有访问到需要的数据的情况下,访问次数是1+5=6次。
结合以上(1)-(3),在5%的访问是没有访问到需要的数据的场景下,环状链表的平均访问次数是0.8×2+0.15×3.5+0.05×6=2.425次。
相比于单向链表的平均访问次数而言,环状链表的平均访问次数比单向链表的平均访问次数减少了31%。
从以上分析可以看出,相比于单向链表的平均访问次数而言,环状链表的平均访问次数比较少,可以有效提高链表访问效率。
下面通过实验结果进一步地说明环状链表所具有的优势。
图3为在θ=0.99的情况下齐普夫分布性能(Zipfian distributionperformance)的示意图。其中,θ表征热数据的访问频率,θ越大,热数据的访问频率越大。
图3的(a)是在只读、且θ=0.99的情况下齐普夫分布性能的示意图,图3的(b)是在有50%读和50%写、且θ=0.99的情况下齐普夫分布性能的示意图。三种链表分别是环状链表、单向链表和基于哈希映射(HashMap)的链表。
图4为在θ=1.22的情况下齐普夫分布性能的示意图。
图4的(a)是在只读、且θ=1.22的情况下齐普夫分布性能的示意图,图4的(b)是在有50%读和50%写、且θ=1.22的情况下齐普夫分布性能的示意图。
从图3和图4可以看出,基于Zipfian分布下的访问,环状链表对应的吞吐量比其他链表的吞吐量要大,特别是在θ=1.22时,环状链表的优势更加明显,因为不需要偏离内存,使得中央处理器(Central Processing Unit,CPU)能cache住热数据。
图5为均匀分布(Uniform Distribution)性能的示意图。
图5的(a)是在只读的情况下均匀分布性能的示意图,图5的(b)是在有50%读和50%写的情况下均匀分布性能的示意图。
从图5可以看出,数据在均匀分布下的三种链表的性能比较,数据均匀分布是没有冷数据和热数据之分,环状链表与单向链表的性能基本一致,这样就说明了环状链表的设计并不会对数据访问造成不好的影响。
在图3至图5中,横坐标表示链表周长,链表周长为键(key)与桶(bucket)的比值,纵坐标表示吞吐量,吞吐量的单位是M ops/sec。
图6为本发明提供的一个实施例的数据访问原理的示意图。
在图6中,hashmap每个桶(bucket)里是一个6字节的头指针和2个字节的hash值,这个hash值是上次访问环状链表的目标访问结点的哈希值。
内存分配器(Memory Allocator)是内存管理部分,每个slab管理器(manager)负责分配一种大小的内存,比如slab0分配32字节大小的内存)。Slab manager先从系统申请一个1MB的连续内存页(整页,Full Page),然后按照固定大小切割,比如slab0按照32字节切割,得到部分页面。当hashmap需要内存时就从合适大小的slab里取出内存。
还可以实现垃圾回收(Garbage Collection)和内存碎片整理(MemoryDefragmentation)。
内存预分配(Pre-allocation)是给每个线程(thread)预分配一部分内存,减少Memory Allocator的内存分配竞争压力,提升性能。
图7为本发明提供的另一个实施例的数据访问方法的流程示意图。如图7所示,该数据访问方法包括:
S201,在哈希映射的链表中,确定链表的第一指针指向的结点,其中,第一指针是除头指针之外的指针。
其中,该链表可以包括单向链表,该链表还可以包括双向链表。
S202,在第一指针指向的结点是目标访问结点的情况下,若访问完第一指针指向的结点,则结束本次对链表的访问。
在本发明实施例中,链表除了有头指针,还有额外的一个指针,即第一指针,该第一指针指向链表中的一个结点。第一指针的指向可以灵活切换,即第一指针指向的结点可以发生变化,第一指针可以指向链表中的任意一个结点,满足数据访问的需求,提高数据访问效率。
如果第一指针指向链表中的热数据所在的结点,在访问链表时,先访问第一指针指向的结点,即先访问热数据所在的结点。如果该热数据所在的结点是目标访问结点,那么访问一个结点就获取到需要的数据,结束本次对链表的访问,有效地提高了访问效率。
在本发明的一个实施例中,还包括:若第一指针指向的结点不是目标访问结点,则根据链表的头指针指向的结点,访问单向链表。
比如,在图8中,单向链表的头指针指向结点1,单向链表的第一指针指向结点3。在对单向链表的结点访问时,先访问结点3,判断结点3是否为目标访问结点;若结点是目标访问结点,则访问完结点3之后,结束对该单向链表的访问;若结点3不是目标访问结点,则从头指针指向的结点1开始,依次访问单向链表的结点,直到访问到目标访问结点时为止。
在一个示例中,若第一指针指向的结点不是目标访问结点,第一指针指向的结点和头指针指向的结点相同,则在访问完第一指针指向的结点之后,从头指针指向的结点开始,访问链表。即链表的第一个结点被访问两次。
在另一个示例中,若第一指针指向的结点不是目标访问结点,第一指针指向的结点和头指针指向的结点相同,则在访问完第一指针指向的结点之后,访问该结点之后的结点,不连续两次访问同一个结点,节省一次访问。
在本发明的一个实施例中,第一指针指向的结点是可以改变的,即该数据访问方法还包括:将第一指针的指向从链表中的一个结点切换到链表中的另一个结点。
其中,第一指针指向的结点是热数据所在的结点,至少有三种方式得到热数据所在的结点。
方式一
若上次访问链表的目标访问结点与本次访问链表的目标访问结点相同,则热数据所在的结点是本次访问链表的目标访问结点(或者上次访问链表的目标访问结点),即将第一指针指向本次访问链表的目标访问结点。
需要说明的是,若上次访问环状链表的目标访问结点与本次访问环状链表的目标访问结点相同,即连续两次访问环状链表的目的是为了访问环状链表的同一个结点,说明该结点是热数据所在的结点。
其中,通过结点的哈希值判断两次访问的目标访问结点是否相同。若上次访问链表的目标访问结点的哈希值与本次访问链表的目标访问结点的哈希值相同,则上次访问链表的目标访问结点与本次访问链表的目标访问结点相同。
另外,上次访问链表的目标访问结点的哈希值与头指针存放在至少一个字节里,即上次访问链表的目标访问结点的哈希值与头指针存放在一起。
比如,在物理上,上次访问链表的目标访问结点的哈希值与头指针存放在一个8字节里,这样一次读取就可以获取到头指针以及上次访问链表的目标访问结点的哈希值,不会增加内存的访问开销。
在获取到上次访问链表的目标访问结点的哈希值之后,判断本次访问链表的目标访问结点的哈希值与上次访问链表的目标访问结点的哈希值是否相同。若相同,则移动头指针到本次访问链表的目标访问结点,即移动头指针到上次访问链表的目标访问结点。若不相同,则记录本次访问链表的目标访问结点的哈希值。
方式二
热数据所在的结点是链表中的最近一次访问的结点。第一指针指向链表中的最近一次访问的结点。
比如,对于图8中的单向链表,如果访问到单向链表中的结点4停止本次访问单向链表,则结点4是最近一次访问的结点,而且结点4还是本次访问单向链表的目标访问结点,那么第一指针指向结点4。如果下一次访问单向链表,访问到结点5停止该次访问单向链表,则将第一指针的指向从结点4切换到结点5。
方式三
热数据所在的结点是链表中的访问次数最多的目标访问结点。第一指针指向链表中的访问次数最多的目标访问结点。
比如,对于图8中的单向链表,统计最近5次对单向链表的访问情况,前3次都是访问到单向链表的结点2就停止本次对单向链表的访问,即前3次访问的目标访问结点是结点2;第4次访问到单向链表的结点5停止本次对单向链表的访问,即第4次访问的目标访问结点是结点5;第5次访问到单向链表的结点2就停止本次对单向链表的访问,即第5次访问的目标访问结点是结点2。
由此可见,在最近5次对单向链表的访问中,访问次数最多的目标访问结点是结点2,结点2是热数据所在的结点,将第一指针指向结点2。
下面以单向链表为例,对本发明实施例的效果进行详细说明。
假设单向链表的周长是5,即单向链表中有5个结点,数据均匀放置在各个结点中,访问模型服从二八分布,具体如表2所示:
表2
热数据 | 冷数据 | |
数据比例 | 0.2 | 0.8 |
访问比例 | 0.8 | 0.2 |
在表2中,对于在整个单向链表中存放的数据,有20%的数据属于热数据,有80%的数据属于冷数据,对热数据的访问次数占总访问次数的80%,对冷数据的访问次数占总访问次数的20%。
(1)对于热数据的访问,数据访问包括:对单向链表的头指针进行一次访问;对单向链表的第一指针指向的结点进行一次访问,由于第一指针指向的结点是热数据所在的结点,即第一指针指向的结点是目标访问结点,因此,对单向链表的结点进行一次访问。
从以上可以看出,访问热数据的访问次数是1+1=2次。
(2)对于冷数据的访问,数据访问包括:对单向链表的头指针进行一次访问;对单向链表的第一指针指向的结点进行一次访问;由于第一指针指向的结点不是目标访问结点,因此从头指针指向的结点开始,对单向链表进行访问,由于单向链表的链长是5,因此访问到单向链表中的目标访问结点的平均次数是2.5次。
从以上可以看出,访问冷数据的平均访问次数是1+1+2.5=4.5次。
结合以上(1)和(2),由于表1中80%的访问是访问热数据,20%的访问是访问冷数据,因此在对单向链表进行访问的过程中,单向链表的平均访问次数是0.8×2+0.2×4.5=2.3次。
上述已经计算出对没有第一指针的单向链表的平均访问次数是1+2.5=3.5次。
相比较而言,具有第一指针的单向链表的平均访问次数比没有第一指针的单向链表的平均访问次数减少了34%。
图9为本发明提供的一个实施例的数据访问装置的框图。如图9所示,该数据访问装置300包括结点确定模块301和链表访问模块302。
结点确定模块301用于在哈希映射的环状链表中,确定环状链表的头指针指向的结点。
链表访问模块302用于根据头指针指向的结点,访问环状链表。
在本发明的一个实施例中,数据访问装置300还包括指针指向模块。
指针指向模块用于将头指针指向环状链表中的热数据所在的结点。
在本发明的一个实施例中,若上次访问环状链表的目标访问结点与本次访问环状链表的目标访问结点相同,则热数据所在的结点为本次访问环状链表的目标访问结点。
在本发明的一个实施例中,若上次访问环状链表的目标访问结点的哈希值与本次访问环状链表的目标访问结点的哈希值相同,则上次访问环状链表的目标结点与本次访问环状链表的目标访问结点相同。
在本发明的一个实施例中,上次访问环状链表的目标访问结点的哈希值与头指针存放在至少一个字节里。
在本发明的一个实施例中,热数据所在的结点为环状链表中的最近一次访问的结点。
在本发明的一个实施例中,热数据所在的结点为环状链表中的访问次数最多的目标访问结点。
在本发明的一个实施例中,环状链表的多个结点中的每个结点的指针指向下一个结点,使得多个结点顺序排列,并且最后一个结点的指针指向第一个结点,以形成环状链表。
图10为本发明提供的另一个实施例的数据访问装置的框图。如图10所示,该数据访问装置400包括结点确定模块401和第一访问模块402。
结点确定模块401用于在哈希映射的链表中,确定链表的第一指针指向的结点,其中,第一指针是除头指针之外的指针。
第一访问模块402用于在第一指针指向的结点是目标访问结点的情况下,若访问完第一指针指向的结点,则结束本次对链表的访问。
在本发明的一个实施例中,数据访问装置400还包括第二访问模块。
第二访问模块用于在第一指针指向的结点不是目标访问结点的情况下,根据链表的头指针指向的结点,访问链表。
在本发明的一个实施例中,第一指针指向链表中的最近一次访问的结点。
在本发明的一个实施例中,若上次访问链表的目标访问结点与本次访问链表的目标访问结点相同,则第一指针指向本次访问链表的目标访问结点。
在本发明的一个实施例中,第一指针指向链表中的访问次数最多的目标访问结点。
在本发明的一个实施例中,数据访问装置400还包括指针指向切换模块。
指针指向切换模块用于将第一指针的指向从链表的一个结点切换到链表的另一个结点。
图11为本发明提供的一个实施例的计算设备的硬件结构示意图。
计算设备可以包括处理器501以及存储有计算机程序指令的存储器502。
具体地,上述处理器501可以包括中央处理器(CPU),或者特定集成电路(Application Specific Integrated Circuit,ASIC),或者可以被配置成实施本发明实施例的一个或多个集成电路。
存储器502可以包括用于数据或指令的大容量存储器。举例来说而非限制,存储器502可包括硬盘驱动器(Hard Disk Drive,HDD)、软盘驱动器、闪存、光盘、磁光盘、磁带或通用串行总线(Universal Serial Bus,USB)驱动器或者两个或更多个以上这些的组合。在合适的情况下,存储器502可包括可移除或不可移除(或固定)的介质。在合适的情况下,存储器502可在综合网关容灾设备的内部或外部。在特定实施例中,存储器502是非易失性固态存储器。在特定实施例中,存储器502包括只读存储器(ROM)。在合适的情况下,该ROM可以是掩模编程的ROM、可编程ROM(PROM)、可擦除PROM(EPROM)、电可擦除PROM(EEPROM)、电可改写ROM(EAROM)或闪存或者两个或更多个以上这些的组合。
处理器501通过读取并执行存储器502中存储的计算机程序指令,以实现上述实施例中的任意一种数据访问方法。
在一个示例中,计算设备还可包括通信接口503和总线510。其中,如图11所示,处理器501、存储器502、通信接口503通过总线510连接并完成相互间的通信。
通信接口503,主要用于实现本发明实施例中各模块、装置、单元和/或设备之间的通信。
总线510包括硬件、软件或两者,将计算设备的部件彼此耦接在一起。举例来说而非限制,总线可包括加速图形端口(AGP)或其他图形总线、增强工业标准架构(EISA)总线、前端总线(FSB)、超传输(HT)互连、工业标准架构(ISA)总线、无限带宽互连、低引脚数(LPC)总线、存储器总线、微信道架构(MCA)总线、外围组件互连(PCI)总线、PCI-Express(PCI-X)总线、串行高级技术附件(SATA)总线、视频电子标准协会局部(VLB)总线或其他合适的总线或者两个或更多个以上这些的组合。在合适的情况下,总线510可包括一个或多个总线。尽管本发明实施例描述和示出了特定的总线,但本发明考虑任何合适的总线或互连。
该计算设备可以执行本发明实施例中的数据访问方法,从而实现结合图1、图7、图9、图10描述的数据访问方法和装置。
另外,结合上述实施例中的数据访问方法,本发明实施例可提供一种计算机存储介质来实现。该计算机存储介质上存储有计算机程序指令;该计算机程序指令被处理器执行时实现上述实施例中的任意一种数据访问方法。
需要明确的是,本发明并不局限于上文所描述并在图中示出的特定配置和处理。为了简明起见,这里省略了对已知方法的详细描述。在上述实施例中,描述和示出了若干具体的步骤作为示例。但是,本发明的方法过程并不限于所描述和示出的具体步骤,本领域的技术人员可以在领会本发明的精神后,作出各种改变、修改和添加,或者改变步骤之间的顺序。
以上所述的结构框图中所示的功能块可以实现为硬件、软件、固件或者它们的组合。当以硬件方式实现时,其可以例如是电子电路、专用集成电路(ASIC)、适当的固件、插件、功能卡等等。当以软件方式实现时,本发明的元素是被用于执行所需任务的程序或者代码段。程序或者代码段可以存储在机器可读介质中,或者通过载波中携带的数据信号在传输介质或者通信链路上传送。“机器可读介质”可以包括能够存储或传输信息的任何介质。机器可读介质的例子包括电子电路、半导体存储器设备、ROM、闪存、可擦除ROM(EROM)、软盘、CD-ROM、光盘、硬盘、光纤介质、射频(RF)链路,等等。代码段可以经由诸如因特网、内联网等的计算机网络被下载。
还需要说明的是,本发明中提及的示例性实施例,基于一系列的步骤或者装置描述一些方法或系统。但是,本发明不局限于上述步骤的顺序,也就是说,可以按照实施例中提及的顺序执行步骤,也可以不同于实施例中的顺序,或者若干步骤同时执行。
以上所述,仅为本发明的具体实施方式,所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的系统、模块和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。应理解,本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。
Claims (17)
1.一种数据访问方法,所述的方法包括:
在哈希映射的环状链表中,确定所述环状链表的头指针指向的结点;
根据所述头指针指向的结点,访问所述环状链表。
2.根据权利要求1所述的方法,其中,所述头指针指向所述环状链表中的热数据所在的结点。
3.根据权利要求2所述的方法,其中,
若上次访问所述环状链表的目标访问结点与本次访问所述环状链表的目标访问结点相同,则热数据所在的结点为本次访问所述环状链表的目标访问结点。
4.根据权利要求3所述的方法,其中,
若上次访问所述环状链表的目标访问结点的哈希值与本次访问所述环状链表的目标访问结点的哈希值相同,则上次访问所述环状链表的目标结点与本次访问所述环状链表的目标访问结点相同;
其中,上次访问所述环状链表的目标访问结点的哈希值与所述头指针存放在至少一个字节里。
5.根据权利要求2所述的方法,其中,热数据所在的结点为所述环状链表中的最近一次访问的结点。
6.根据权利要求2所述的方法,其中,热数据所在的结点为所述环状链表中的访问次数最多的目标访问结点。
7.根据权利要求1所述的方法,其中,所述环状链表的多个结点中的每个结点的指针指向下一个结点,使得所述多个结点顺序排列,并且最后一个结点的指针指向第一个结点,以形成所述环状链表。
8.一种数据访问方法,所述的方法包括:
在哈希映射的链表中,确定所述链表的第一指针指向的结点,其中,所述第一指针是除头指针之外的指针;
在所述第一指针指向的结点是目标访问结点的情况下,若访问完所述第一指针指向的结点,则结束本次对所述链表的访问。
9.根据权利要求8所述的方法,其中,还包括:
若所述第一指针指向的结点不是目标访问结点,则根据所述链表的头指针指向的结点,访问所述链表。
10.根据权利要求8所述的方法,其中,所述第一指针指向所述链表中的热数据所在的结点。
11.根据权利要求10所述的方法,其中,所述热数据所在的结点为所述链表中的最近一次访问的结点。
12.根据权利要求10所述的方法,其中,若上次访问所述链表的目标访问结点与本次访问所述链表的目标访问结点相同,则热数据所在的结点为本次访问所述链表的目标访问结点。
13.根据权利要求10所述的方法,其中,热数据所在的结点为所述链表中的访问次数最多的目标访问结点。
14.一种数据访问装置,所述的装置包括:
结点确定模块,用于在哈希映射的环状链表中,确定所述环状链表的头指针指向的结点;
链表访问模块,用于根据所述头指针指向的结点,访问所述环状链表。
15.一种数据访问装置,所述的装置包括:
结点确定模块,用于在哈希映射的链表中,确定所述链表的第一指针指向的结点,其中,所述第一指针是除头指针之外的指针;
访问模块,用于在所述第一指针指向的结点是目标访问结点的情况下,若访问完所述第一指针指向的结点,则结束本次对所述链表的访问。
16.一种计算设备,所述设备包括:处理器以及存储有计算机程序指令的存储器;
所述处理器执行所述计算机程序指令时实现如权利要求1-13任意一项所述的数据访问方法。
17.一种计算机存储介质,所述计算机存储介质上存储有计算机程序指令,所述计算机程序指令被处理器执行时实现如权利要求1-13任意一项所述的数据访问方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911101097.4A CN112860684B (zh) | 2019-11-12 | 2019-11-12 | 数据访问方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911101097.4A CN112860684B (zh) | 2019-11-12 | 2019-11-12 | 数据访问方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112860684A true CN112860684A (zh) | 2021-05-28 |
CN112860684B CN112860684B (zh) | 2024-10-01 |
Family
ID=75984320
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911101097.4A Active CN112860684B (zh) | 2019-11-12 | 2019-11-12 | 数据访问方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112860684B (zh) |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103514261A (zh) * | 2013-08-13 | 2014-01-15 | 江苏华大天益电力科技有限公司 | 一种应用于工业控制系统的数据异步存储及访问机制 |
CN103678172A (zh) * | 2013-12-25 | 2014-03-26 | Tcl集团股份有限公司 | 一种本地数据缓存管理方法及装置 |
CN104462328A (zh) * | 2014-12-02 | 2015-03-25 | 深圳中科讯联科技有限公司 | 一种基于哈希表与双循环链表的混合数据管理方法及装置 |
CN104991743A (zh) * | 2015-07-02 | 2015-10-21 | 西安交通大学 | 应用于固态硬盘阻变存储器缓存的损耗均衡方法 |
CN105095261A (zh) * | 2014-05-08 | 2015-11-25 | 北京奇虎科技有限公司 | 数据插入方法和装置 |
CN105653609A (zh) * | 2015-12-24 | 2016-06-08 | 中国建设银行股份有限公司 | 基于内存的数据处理方法及装置 |
CN108255419A (zh) * | 2017-12-19 | 2018-07-06 | 深圳忆联信息系统有限公司 | 一种用于tlc类型ssd的磨损均衡方法及ssd |
US20180246820A1 (en) * | 2017-02-24 | 2018-08-30 | Ati Technologies Ulc | Multiple linked list data structure |
CN108491335A (zh) * | 2018-03-30 | 2018-09-04 | 北京联想核芯科技有限公司 | 处理映射表项的方法、装置、设备及介质 |
CN109144958A (zh) * | 2018-07-02 | 2019-01-04 | 广东睿江云计算股份有限公司 | 一种联合文件系统文件访问频率元数据采集方法及装置 |
CN109542615A (zh) * | 2018-10-18 | 2019-03-29 | 深圳市景阳科技股份有限公司 | 一种可变节点通用队列的实现方法、装置及终端设备 |
CN110287160A (zh) * | 2019-05-31 | 2019-09-27 | 广东睿江云计算股份有限公司 | 一种缓存空间清理方法及装置 |
-
2019
- 2019-11-12 CN CN201911101097.4A patent/CN112860684B/zh active Active
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103514261A (zh) * | 2013-08-13 | 2014-01-15 | 江苏华大天益电力科技有限公司 | 一种应用于工业控制系统的数据异步存储及访问机制 |
CN103678172A (zh) * | 2013-12-25 | 2014-03-26 | Tcl集团股份有限公司 | 一种本地数据缓存管理方法及装置 |
CN105095261A (zh) * | 2014-05-08 | 2015-11-25 | 北京奇虎科技有限公司 | 数据插入方法和装置 |
CN104462328A (zh) * | 2014-12-02 | 2015-03-25 | 深圳中科讯联科技有限公司 | 一种基于哈希表与双循环链表的混合数据管理方法及装置 |
CN104991743A (zh) * | 2015-07-02 | 2015-10-21 | 西安交通大学 | 应用于固态硬盘阻变存储器缓存的损耗均衡方法 |
CN105653609A (zh) * | 2015-12-24 | 2016-06-08 | 中国建设银行股份有限公司 | 基于内存的数据处理方法及装置 |
US20180246820A1 (en) * | 2017-02-24 | 2018-08-30 | Ati Technologies Ulc | Multiple linked list data structure |
CN108255419A (zh) * | 2017-12-19 | 2018-07-06 | 深圳忆联信息系统有限公司 | 一种用于tlc类型ssd的磨损均衡方法及ssd |
CN108491335A (zh) * | 2018-03-30 | 2018-09-04 | 北京联想核芯科技有限公司 | 处理映射表项的方法、装置、设备及介质 |
CN109144958A (zh) * | 2018-07-02 | 2019-01-04 | 广东睿江云计算股份有限公司 | 一种联合文件系统文件访问频率元数据采集方法及装置 |
CN109542615A (zh) * | 2018-10-18 | 2019-03-29 | 深圳市景阳科技股份有限公司 | 一种可变节点通用队列的实现方法、装置及终端设备 |
CN110287160A (zh) * | 2019-05-31 | 2019-09-27 | 广东睿江云计算股份有限公司 | 一种缓存空间清理方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN112860684B (zh) | 2024-10-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111858520B (zh) | 一种区块链节点数据分离存储的方法和装置 | |
US10229129B2 (en) | Method and apparatus for managing time series database | |
CN110502452B (zh) | 访问电子设备中的混合缓存的方法及装置 | |
CN109213694B (zh) | 用于缓存管理的方法和设备 | |
JP4542509B2 (ja) | 識別子認識方法、識別子送信方法及び識別子認識システム | |
CN108776614B (zh) | 存储块的回收方法和装置 | |
CN104092670A (zh) | 网络缓存服务器处理文件的方法及处理缓存文件的设备 | |
WO2021114025A1 (zh) | 增量数据确定方法、确定装置、服务器及终端设备 | |
WO2017020735A1 (zh) | 一种数据处理方法、备份服务器及存储系统 | |
CN114817651B (zh) | 数据存储方法、数据查询方法、装置和设备 | |
KR102582369B1 (ko) | 파티셔닝 방법 및 그 장치 | |
CN111597259A (zh) | 数据存储系统、方法、装置、电子设备及存储介质 | |
US10628305B2 (en) | Determining a data layout in a log structured storage system | |
CN110955639A (zh) | 一种数据处理方法及装置 | |
CN110750498B (zh) | 对象访问方法、装置及存储介质 | |
CN112597231A (zh) | 一种数据处理方法和装置 | |
CN112860684B (zh) | 数据访问方法、装置、设备及存储介质 | |
CN109976896B (zh) | 业务排重处理方法和装置 | |
CN110399451B (zh) | 一种基于非易失性内存的全文检索引擎缓存方法,系统,设备及可读存储介质 | |
CN112711564B (zh) | 合并处理方法以及相关设备 | |
CN116938848A (zh) | 报文上送方法、装置、电子设备及存储介质 | |
CN104216872A (zh) | 一种识别网络小说中垃圾章节的方法及装置 | |
CN111931797B (zh) | 业务所属网络的识别方法、装置及设备 | |
US20240086095A1 (en) | Data layout optimization for object-oriented storage engine | |
CN111782588A (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 |