CN116069267A - 一种raid卡的写缓存方法、系统、设备及存储介质 - Google Patents
一种raid卡的写缓存方法、系统、设备及存储介质 Download PDFInfo
- Publication number
- CN116069267A CN116069267A CN202310356860.8A CN202310356860A CN116069267A CN 116069267 A CN116069267 A CN 116069267A CN 202310356860 A CN202310356860 A CN 202310356860A CN 116069267 A CN116069267 A CN 116069267A
- Authority
- CN
- China
- Prior art keywords
- node
- layer
- data
- nodes
- write
- 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 79
- 238000004590 computer program Methods 0.000 claims description 10
- 238000004904 shortening Methods 0.000 claims description 8
- 230000001351 cycling effect Effects 0.000 claims description 4
- 238000010586 diagram Methods 0.000 description 11
- 238000003780 insertion Methods 0.000 description 9
- 230000037431 insertion Effects 0.000 description 9
- 230000009286 beneficial effect Effects 0.000 description 8
- 238000012217 deletion Methods 0.000 description 8
- 230000037430 deletion Effects 0.000 description 8
- KJLPSBMDOIVXSN-UHFFFAOYSA-N 4-[4-[2-[4-(3,4-dicarboxyphenoxy)phenyl]propan-2-yl]phenoxy]phthalic acid Chemical compound C=1C=C(OC=2C=C(C(C(O)=O)=CC=2)C(O)=O)C=CC=1C(C)(C)C(C=C1)=CC=C1OC1=CC=C(C(O)=O)C(C(O)=O)=C1 KJLPSBMDOIVXSN-UHFFFAOYSA-N 0.000 description 6
- 230000003139 buffering effect Effects 0.000 description 5
- 230000005856 abnormality Effects 0.000 description 2
- 238000003491 array Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 230000001680 brushing effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000011835 investigation Methods 0.000 description 1
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
- 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
-
- 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/23—Updating
-
- 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/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- 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/0638—Organizing or formatting or addressing of data
- G06F3/0644—Management of space entities, e.g. partitions, extents, pools
-
- 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/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/0652—Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket
-
- 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/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
- G06F3/0689—Disk arrays, e.g. RAID, JBOD
-
- 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)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种RAID卡的写缓存方法、系统、设备及存储介质,应用于存储技术领域,包括:接收写指令;根据写指令的地址信息,按照跳跃表的结构进行索引,并在索引过程中,在当前进行索引的层中设置加锁区域;在索引完成之后,在跳跃表的数据层中对应于地址信息的位置写入地址信息和写数据内容,作为写入的节点的节点数据;其中,RAID卡中的跳跃表为用于进行写缓存的跳跃表,包括多层索引层和1层数据层,数据层中包括多个节点,表示的是当前待落盘的各个写缓存数据;在数据层中,基于节点数据中的地址信息进行各个节点的顺序排列、应用本申请的方案,有利于提高读写效率,便于并发操作。
Description
技术领域
本发明涉及存储技术领域,特别是涉及一种RAID卡的写缓存方法、系统、设备及存储介质。
背景技术
目前,在发展中出现了通过RAID(Redundant Arrays of Independent Disks,独立磁盘冗余阵列)管理硬盘的方法,可以提高数据的访问性能,同时RAID阵列也能够提供一定程度的数据冗余。最早的RAID阵列由软件实现,随着发展产生了专门用来提供RAID功能的硬件设备,即RAID卡,可以更为高效地进行IO(Input/Output,读写)处理操作。RAID卡中同样设计了一些特定的功能用来加速硬盘的数据读取,其中写缓存就是一个重要的功能。目前实现RAID卡写缓存的方式为红黑树,因为红黑树不仅能够保证数据读取序列的顺序性,也能够保持树的平衡,并且可以提供对数级的读写访问速度。图1a是一个用来进行数据缓存的红黑树结构,红黑树整体遍历上可以保证有序性,和磁盘写缓存的需求相适应。图1a中进行中序遍历后数据下盘在磁道结构上是顺序的,可以减少寻道时间,图1a的下盘次序为2、5、9、12、13、15、18、20、26、30。但是,使用红黑树实现数据插入和删除时,为了不破坏红黑树的性质需要进行节点的左旋/右旋操作,这些旋转操作不仅次数多,并且实现方式包括后续的问题排查复杂。例如图1b为一种场合中的旋转操作,通过右旋操作修正子树深度,类似的操作基本在每次插入或者删除节点数据的时候都需要进行。此外当存在并发插入和删除时,需要给正在调整的节点的兄弟节点、父节点、叔叔节点、爷爷节点等节点加锁,因为调整过程中可能改变这些结点的节点信息,这会导致缓存的并发写入能力差。
综上所述,如何实现高效的写缓存,是目前本领域技术人员急需解决的技术问题。
发明内容
本发明的目的是提供一种RAID卡的写缓存方法、系统、设备及存储介质,以实现高效的写缓存。
为解决上述技术问题,本发明提供如下技术方案:
一种RAID卡的写缓存方法,包括:
接收携带有地址信息和写数据内容的写指令;
根据所述地址信息,按照跳跃表的结构进行索引,并且在索引过程中,在当前进行索引的层中设置加锁区域;
在索引完成之后,在所述跳跃表的数据层中对应于所述地址信息的位置写入所述地址信息和所述写数据内容,作为写入的节点的节点数据;
其中,RAID卡中的所述跳跃表为用于进行写缓存的跳跃表,包括多层索引层和1层数据层,所述数据层中包括多个节点,表示的是当前待落盘的各个写缓存数据;在所述数据层中,基于节点数据中的地址信息进行各个节点的顺序排列。
优选的,在所述数据层中,基于节点数据中的逻辑地址从小到大的顺序,进行各个节点的顺序排列。
优选的,在所述跳跃表的每一层索引层中,该层索引层的各个节点按照节点键值从小到大的顺序进行排列,并且该层索引层的各个节点指向下一层索引层中具有相同节点键值的节点;
所述跳跃表最下层的索引层中的各个节点指向所述数据层中具有相同节点键值的节点;
在所述数据层中,各个节点的节点数据中的逻辑地址,作为该节点的键值。
优选的,从所述跳跃表中最上层的索引层至最下层的索引层,节点的数量递增。
优选的,从所述跳跃表中最上层的索引层至最下层的索引层,节点的数量按照翻倍的原则递增。
优选的,在索引过程中,在当前进行索引的层中设置加锁区域,包括:
在对所述跳跃表中最上层的索引层进行索引时,基于最上层的索引层中的最小节点和最大节点确定出加锁边界,并设定最上层的索引层的整层均为加锁区域;
在对所述跳跃表中最上层的索引层之外的其它层进行索引时,基于上一层的索引结果对当前的所述加锁边界进行缩短,并基于缩短之后的加锁边界设定加锁区域。
优选的,在任意一层索引层设定的加锁区域均为写锁,在所述数据层设定的加锁区域为读写锁。
优选的,还包括:
在任意一层的两个相邻的指向性节点之间,如果非指向性节点的数量超过第一阈值,则从这两个相邻的指向性节点之间中的非指向性节点中,选取一个非指向性节点;
将选取的该非指向性节点添加至上一层,以使得该非指向性节点变为指向性节点;
其中,对于任意一层中的任意一个节点,当该节点被上一层节点索引时,该节点为指向性节点,否则节点为非指向性节点。
优选的,在任意一层的两个相邻的指向性节点之间,如果非指向性节点的数量超过第一阈值,则从这两个相邻的指向性节点之间中的非指向性节点中,选取一个非指向性节点,包括:
在任意一层的两个相邻的指向性节点之间,如果非指向性节点的数量超过第一阈值,则从这两个相邻的指向性节点之间中的非指向性节点中,随机选取一个非指向性节点。
优选的,在任意一层的两个相邻的指向性节点之间,如果非指向性节点的数量超过第一阈值,则从这两个相邻的指向性节点之间中的非指向性节点中,选取一个非指向性节点,包括:
在任意一层的两个相邻的指向性节点之间,如果非指向性节点的数量超过第一阈值,则从这两个相邻的指向性节点之间中的非指向性节点中,选取居中位置的一个非指向性节点。
优选的,还包括:
接收携带有地址信息的读指令;
根据所述读指令的地址信息,按照跳跃表的结构进行索引,判断所述跳跃表的数据层中是否存在对应于所述读指令的地址信息的节点;
如果存在,则将对应于所述读指令的地址信息的节点的节点数据中的写数据内容,作为所述读指令的读取数据进行反馈。
优选的,还包括:
在判断出所述跳跃表的数据层中不存在对应于所述读指令的地址信息的节点之后,根据所述读指令的地址信息,从硬盘中读取数据并进行反馈。
优选的,还包括:
当从硬盘中读取数据出错时,输出读取数据失败的反馈信息。
优选的,还包括:
从硬盘读取热数据并保存在缓存中,并对缓存中的热数据进行周期性更新。
优选的,还包括:
基于所述跳跃表的数据层向硬盘写数据。
优选的,所述基于所述跳跃表的数据层向硬盘写数据,包括:
基于电梯算法循环遍历所述数据层;
在遍历到所述数据层中的任意1个节点时,基于该节点的节点数据中的写地址,将该的节点数据中的写数据内容写入硬盘中,并进行所述跳跃表的更新。
优选的,所述进行所述跳跃表的更新,包括:
在将任意一个节点的节点数据中的写数据内容写入硬盘之后,将该节点从所述数据层中删除,并且按照自下向上的顺序,将所述跳跃表中指向该节点的各个节点进行删除。
优选的,所述基于电梯算法循环遍历所述数据层,包括:
基于电梯算法,以每次遍历a个节点的方式,循环遍历所述数据层;
其中,a为正整数。
一种RAID卡的写缓存系统,包括:
写指令接收模块,用于接收携带有地址信息和写数据内容的写指令;
索引模块,用于根据所述地址信息,按照跳跃表的结构进行索引,并且在索引过程中,在当前进行索引的层中设置加锁区域;
写入模块,用于在索引完成之后,在所述跳跃表的数据层中对应于所述地址信息的位置写入所述地址信息和所述写数据内容,作为写入的节点的节点数据;
其中,RAID卡中的所述跳跃表为用于进行写缓存的跳跃表,包括多层索引层和1层数据层,所述数据层中包括多个节点,表示的是当前待落盘的各个写缓存数据;在所述数据层中,基于节点数据中的地址信息进行各个节点的顺序排列。
一种RAID卡的写缓存设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序以实现如上述所述的RAID卡的写缓存方法的步骤。
一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述所述的RAID卡的写缓存方法的步骤。
应用本发明实施例所提供的技术方案,采用跳跃表的方式实现写缓存,避免了需要频繁修改节点和加锁的情况。具体的,接收携带有地址信息和写数据内容的写指令之后,可以根据地址信息,按照跳跃表的结构进行索引。本申请的RAID卡中的跳跃表为用于进行写缓存的跳跃表,包括多层索引层和1层数据层,即通过跳跃表的索引,可以在跳跃表的数据层中对应于地址信息的位置写入地址信息和写数据内容,作为写入的节点的节点数据。跳跃表的数据层中包括多个节点,表示的是当前待落盘的各个写缓存数据,并且在数据层中,基于节点数据中的地址信息进行各个节点的顺序排列,因此,在进行写缓存数据的落盘时,即基于跳跃表的数据层向硬盘写数据时,只需要对数据层进行遍历,顺序下刷即可,操作非常简单,也符合依磁道顺序进行写入从而减少磁头在磁道上移动距离的逻辑,有利于提高写速度。由于本申请采用的是跳跃表的方式实现写缓存,不涉及节点旋转,因此本申请的方案并不会出现传统红黑树的方案中在每次插入或者删除节点数据的时候需要进行节点旋转的情况,使得数据的插入和删除更加明朗、易维护。此外,由于是分层索引,因此在索引过程中只需要在当前进行索引的层中设置加锁区域即可,使得锁范围清晰明朗、易识别,对于并发操作比较友好,也就有利于提高读写效率。
综上所述,本申请的方案采用跳跃表的方式实现了写缓存,有利于提高写速度。不需要进行节点旋转的情况,使得数据的插入和删除更加明朗、易维护。分层索引时设置的加锁区域清晰明朗、易识别,对于并发操作比较友好,也就有利于提高读写效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1a为目前用来进行数据缓存的红黑树的结构示意图;
图1b为一种场合中的红黑树的旋转操作示意图;
图2为本发明中一种RAID卡的写缓存方法的实施流程图;
图3a为本发明一种具体实施方式中的跳跃表第一索引层的加锁区域示意图;
图3b为本发明一种具体实施方式中的跳跃表第二索引层的加锁区域示意图;
图3c为本发明一种具体实施方式中的跳跃表第三索引层的加锁区域示意图;
图3d为本发明一种具体实施方式中的跳跃表数据层的加锁区域示意图;
图4为本发明中一种RAID卡的写缓存系统的结构示意图;
图5为本发明中一种RAID卡的写缓存设备的结构示意图;
图6为本发明中一种计算机可读存储介质的结构示意图。
具体实施方式
本发明的核心是提供一种RAID卡的写缓存方法,采用跳跃表的方式实现了写缓存,有利于提高写速度。不需要进行节点旋转的情况,使得数据的插入和删除更加明朗、易维护。分层索引时设置的加锁区域清晰明朗、易识别,对于并发操作比较友好,也就有利于提高读写效率。
为了使本技术领域的人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参考图2,图2为本发明中一种RAID卡的写缓存方法的实施流程图,该RAID卡的写缓存方法可以包括以下步骤:
步骤S201:接收携带有地址信息和写数据内容的写指令。
具体的,本申请的方案中,RAID卡接收到写缓存的指令之后,需要先将数据写入缓存中,后续再进行落盘,即RAID卡可以接收携带有地址信息和写数据内容的写指令,然后将按照地址信息和写数据内容进行写缓存,后续再进行缓存中数据的落盘。
步骤S202:根据地址信息,按照跳跃表的结构进行索引,并且在索引过程中,在当前进行索引的层中设置加锁区域。
步骤S203:在索引完成之后,在跳跃表的数据层中对应于地址信息的位置写入地址信息和写数据内容,作为写入的节点的节点数据。
本申请的方案中,RAID卡中的跳跃表为用于进行写缓存的跳跃表,即本申请的方案可以使用跳跃表来实现写缓存,因此,接收到写指令之后,便可以根据写指令中的地址信息,按照跳跃表的结构进行索引。
跳跃表中包括多层索引层和1层数据层,多层索引层中的最后一层指向数据层,也即数据层位于跳跃表的最底部,例如图3a便是一种具体实施方式中的跳跃表结构。
在进行跳跃表的索引时,是从最上层的索引层开始索引,然后基于每层的索引结果逐层往下索引,最终在数据层中对应于写指令中携带的地址信息的位置,进行节点数据的写入,即写入写指令中携带的地址信息和写数据内容。
跳跃表的索引层的具体结构可以根据实际情况进行设计,只要能够有效地实现索引,最终可以在数据层的正确位置处进行节点数据的写入即可。
跳跃表的数据层中包括多个节点,表示的是当前待落盘的各个写缓存数据,也可以称为脏数据。
在数据层中,基于节点数据中的地址信息进行各个节点的顺序排列,这是考虑到在进行写缓存数据的落盘时,即基于跳跃表的数据层向硬盘写数据时,只需要对数据层进行遍历,顺序下刷即可,操作非常简单。由于数据层的节点是按照地址信息顺序排列的,因此,在进行节点数据的顺序下刷时,能够符合依磁道顺序进行写入从而减少磁头在磁道上移动距离的逻辑,有利于提高写速度。
在索引过程中,当前在进行某一层的索引时,需要在当前进行索引的层中设置加锁区域,以避免出错。并且可以理解的是,由于是分层索引,因此在索引过程中只需要在当前进行索引的层中设置加锁区域,不需要进行整个跳跃表的加锁,使得锁范围清晰明朗、易识别,对于并发操作也比较友好,也就有利于提高读写效率。
如上文的描述,RAID卡中的跳跃表为用于进行写缓存的跳跃表,写缓存数据后续需要落盘,因此,在本发明的一种具体实施方式中,还可以包括:基于跳跃表的数据层向硬盘写数据。
对于数据层的各个节点,需要写入硬盘中,即需要基于跳跃表的数据层向硬盘写数据,例如可以轮询跳跃表的数据层,进而按照节点的地址信息,将节点的写数据内容写入硬盘中。
如上文的描述,在数据层中,需要基于节点数据中的地址信息进行各个节点的顺序排列。在本发明的一种具体实施方式中,考虑到在实际应用中,数据的逻辑地址与物理地址之间的对应关系通常是确定的,所接收到的写指令中携带的地址信息也就是逻辑地址,因此,在数据层中,便可以基于节点数据中的逻辑地址从小到大的顺序,进行各个节点的顺序排列。例如图3a的实施方式中的各个数字,便可以视为是不同的逻辑地址。
在本发明的一种具体实施方式中,在跳跃表的每一层索引层中,该层索引层的各个节点按照节点键值从小到大的顺序进行排列,并且该层索引层的各个节点指向下一层索引层中具有相同节点键值的节点;
跳跃表最下层的索引层中的各个节点指向数据层中具有相同节点键值的节点;
在数据层中,各个节点的节点数据中的逻辑地址,作为该节点的键值。
该种实施方式描述的键值也就是key值,该种实施方式考虑到,由于数据层中是按照节点数据中的逻辑地址从小到大的顺序进行排序,也即在数据层中,各个节点的节点数据中的逻辑地址作为该节点的键值,按照键值从小到大的顺序进行排列,因此,在跳跃表的每一层索引层中,也是基于该层节点的键值进行排序,并且具体是按照节点键值从小到大的顺序进行排列,并且该层索引层的各个节点指向下一层索引层中具有相同节点键值的节点。而对于跳跃表最下层的索引层而言,该层索引层的各个节点便指向的是数据层中具有相同节点键值的节点。
例如图3a的实施方式中,最上层的索引层包括三个节点,这三个节点的逻辑地址,即键值,或者称为key值分别为2,18,30,按照key值从小到大的顺序进行排列,并且这三个节点指向下一层索引层中具有相同节点key值的节点,即这三个节点分别指向图3a中第二索引层中的2,18,30这三个节点。
图3a中示出了3层索引层,为了便于描述,最上层的索引层称为第一索引层,第二层的索引层称为第二索引层,最下层的索引层则称为第三索引层。在实际应用中,跳跃表通常会有更多索引层,图3a仅是举例说明。
在图3a的实施方式中,第三索引层包括五个节点,这五个节点的逻辑地址,即key值分别为2,9,13,18,30,按照key值从小到大的顺序进行排列,并且这五个节点指向数据层中具有相同节点key值的节点,即这五个节点分别指向图3a中数据层中的2,9,13,18,30这五个节点。
此外需要强调的是,如上文的描述,数据层的节点中,节点数据不仅有地址信息,即不仅有节点的key,还有具体的写数据内容,而对于索引层的各个节点,则只需要节点的key来实现索引即可,无需携带任何写数据内容。
在本发明的一种具体实施方式中,从跳跃表中最上层的索引层至最下层的索引层,节点的数量递增。
本申请的方案中,对于跳跃表中各层索引层的节点数量不做限定,但可以理解的是,在任意一层索引层中,各个节点均需要指向下一层索引层中具有相同节点key值的节点,因此通常而言,跳跃表中最上层的索引层至最下层的索引层,节点的数量是递增的。
进一步的,在本发明的一种具体实施方式中,从跳跃表中最上层的索引层至最下层的索引层,节点的数量按照翻倍的原则递增。这样的设计,有利于保障二分查找的速率。
当然,该种实施方式描述的节点的数量按照翻倍的原则递增,指的是在创建跳跃表时,以及进行跳跃表索引层节点的插入时,应当使得从跳跃表中最上层的索引层至最下层的索引层,节点的数量基本符合翻倍的原则,即尽量使得每一层索引层的节点数量是上一层的节点数量的2倍,当然,数值上略微的偏差并不影响方案的实施。在实际应用中,每一层索引层的节点数量可能并不是正好为上一层节点数量的2倍,而是会随着节点的插入、删除而发生波动,即在理想数量值附近变化,基本符合从上至下翻倍递增的原则即可。
在本发明的一种具体实施方式中,在索引过程中,在当前进行索引的层中设置加锁区域,包括:
在对跳跃表中最上层的索引层进行索引时,基于最上层的索引层中的最小节点和最大节点确定出加锁边界,并设定最上层的索引层的整层均为加锁区域;
在对跳跃表中最上层的索引层之外的其它层进行索引时,基于上一层的索引结果对当前的加锁边界进行缩短,并基于缩短之后的加锁边界设定加锁区域。
如上文的描述,本申请的方案中,在索引过程中,需要在当前进行索引的层中设置加锁区域,以避免出错。该种实施方式中,让加锁区域的范围逐步变小,有利于进一步地提高读写效率,降低加锁操作的影响,进一步保障并发效果。
具体的,以图3a中插入15为例,即写指令中携带的逻辑地址为15。则首先需要索引图3a的第一索引层,此时,需要基于第一索引层的最小节点和最大节点确定出加锁边界,并设定第一索引层的整层均为加锁区域,也就是说,该例子中,需要以第一索引层的节点2作为左边界,以第一索引层的节点30作为右边界,将第一索引层的整层均设定为加锁区域。
在进行第一索引层的索引时,可以按照从左到右的顺序遍历第一索引层的各个节点,也即按照节点key值从小到大的顺序遍历第一索引层的各个节点,当遇到比15大的索引节点时便可以停止,并退回到上一个索引节点。该例子中遇到第一索引层的节点18便可以停止,退回至第一索引层的节点2,并从第一索引层的节点2进入第二索引层的节点2。
此时,由于在进行第一索引层的索引时,确定出右边界为18,因此,在进行第二索引层的索引时,便可以对加锁边界进行缩短,该例子中,此时是对右边界进行缩短,设定的加锁区域变成了第二索引层的节点2至第二索引层的节点18。
在进行第二索引层的索引时,同样可以按照从左到右的顺序,在第二索引层的加锁区域内遍历第二索引层的各个节点,可参阅图3b,从第二索引层的节点2开始遍历,当遇到比15大的索引节点时便可以停止,并退回到上一个索引节点,即遇到第二索引层的节点18之后,退回至第二索引层的节点9,并从第二索引层的节点9进入第三索引层的节点9。
由于在进行第二索引层的索引时,确定出左边界为9,右边界为18,因此,在进行第三索引层的索引时,便可以进一步地对加锁边界进行缩短,该例子中此时是对左边界进行了缩短,设定的加锁区域变为了第三索引层的节点9至第三索引层的节点18。
在进行第三索引层的索引时,同样可以按照从左到右的顺序,在第三索引层的加锁区域内遍历第三索引层的各个节点,可参阅图3c,从第二索引层的节点9进入第三索引层之后,从第三索引层的节点9开始遍历,当遇到比15大的索引节点时便可以停止,退回到上一个索引节点,即遇到第三索引层的节点18之后,退回至第三索引层的节点13,并从第三索引层的节点13进入数据层。
可参阅图3d,从第三索引层的节点13进入数据层之后,确定出左边界为13,右边界为18,因此,在进行数据层的索引时,便可以进一步地对加锁边界进行缩短,该例子中此时是对左边界进行缩短,设定的加锁区域变为了数据层的节点13至数据层的节点18。
从第三索引层的节点13进入数据层之后,在进行数据层的索引时,从数据层的节点13开始遍历,当遇到比15大的索引节点时便可以停止,即该例子中,遇到数据层的节点17之后,便可以在节点17之前插入节点15,具体是插入逻辑地址15以及写指令中携带的具体的写数据内容。
进一步的,在本发明的一种具体实施方式中,在任意一层索引层设定的加锁区域均为写锁,在数据层设定的加锁区域为读写锁。
该种实施方式考虑到,在进行索引层的索引时,只要求在该过程中加锁区域不被改写即可,因此,该种实施方式中,在任意一层索引层设定的加锁区域均为写锁,使得不影响索引层的读操作。而在数据层,由于需要写入节点数据,因此,在数据层设定的加锁区域为读写锁,避免出错。
如上文的描述,从跳跃表中最上层的索引层至最下层的索引层,节点的数量可以按照翻倍的原则递增,有利于保障二分查找的速率。
而在本发明的一种具体实施方式中,考虑到随着节点的插入,可能导致数据层的节点增多,不利于保障良好的查找速率,因此可以在最下层的索引层增加节点,使得最下层的索引层的节点数量与数据层的节点数量基本符合翻倍的原则。同样的,任意1层索引层的节点数量较多,该索引层上一层的节点数量较少时,也可以向上增加相应节点。
即在本发明的一种具体实施方式中,还可以包括:
在任意一层的两个相邻的指向性节点之间,如果非指向性节点的数量超过第一阈值,则从这两个相邻的指向性节点之间中的非指向性节点中,选取一个非指向性节点;
将选取的该非指向性节点添加至上一层,以使得该非指向性节点变为指向性节点;
其中,对于任意一层中的任意一个节点,当该节点被上一层节点索引时,该节点为指向性节点,否则节点为非指向性节点。
以图3a为例,数据层的节点13被第三索引层的节点13索引,即第三索引层的节点13指向数据层的节点13,因此数据层的节点13为指向性节点。数据层的节点17没有被第三索引层的任何节点索引,因此数据层的节点17为非指向性节点。同理,第三索引层的节点9被第二索引层的节点9索引,即第二索引层的节点9指向第三索引层的节点9,因此第三索引层的节点9为指向性节点。第三索引层的节点13没有被第二索引层的任何节点索引,因此第三索引层的节点13为非指向性节点。
在任意一层的两个相邻的指向性节点之间,如果非指向性节点的数量超过第一阈值,说明这两个相邻的指向性节点之间,非指向性节点的数量过多,例如一种具体场合中,图3a中数据层的指向性节点13与图3a中数据层的指向性节点18之间,具有节点14,节点15,节点16以及节点17,超过了第一阈值,则可以从中选取一个非指向性节点添加至上一层,即添加至第三索引层,以使得选取的该非指向性节点变为指向性节点。
第一阈值的具体取值可以根据实际需要进行设定和调整。
当然,选取非指向性节点添加至上一层时,具体的选取方式可以有多种,例如一种场合中,在任意一层的两个相邻的指向性节点之间,如果非指向性节点的数量超过第一阈值,则从这两个相邻的指向性节点之间中的非指向性节点中,随机选取一个非指向性节点。
又如,一种场合中,在任意一层的两个相邻的指向性节点之间,如果非指向性节点的数量超过第一阈值,则从这两个相邻的指向性节点之间中的非指向性节点中,选取居中位置的一个非指向性节点。
随机选取的方式较为简单方便,容易实现,例如上述例子中,从数据层的节点14,节点15,节点16以及节点17中,随机选取的是节点16,便可以将数据层的节点16添加至第三索引层,也即,在第三索引层增加1个节点,key值为16,并且第三索引层的节点16指向数据层的节点16,此时数据层的节点16便成为了指向性节点。
而采用选取居中位置的一个非指向性节点的实施方式时,有利于实现节点数量的均分,有利于避免需要频繁向上层增加节点的情况,是实际应用中更为合理的实施方式。此外可以理解的是,如果两个相邻的指向性节点之间,有2个非指向性节点处于居中位置,则随机选取1个即可,例如上文例子中,在数据层的节点13与节点18之间,节点15和节点16均是处于居中位置,则随机选取1个添加至上一层即可。
此外,向上增加节点的过程中,通常需要对相应层进行加锁操作,例如上文例子中将数据层的节点16添加至第三索引层时,便需要在数据层的节点13与节点18之间以及第三索引层的节点13与节点18之间加锁。
在本发明的一种具体实施方式中,还可以包括:
接收携带有地址信息的读指令;
根据读指令的地址信息,按照跳跃表的结构进行索引,判断跳跃表的数据层中是否存在对应于读指令的地址信息的节点;
如果存在,则将对应于读指令的地址信息的节点的节点数据中的写数据内容,作为读指令的读取数据进行反馈。
在前文实施方式中,对于接收写指令进行了说明,该种实施方式,则是考虑到如果接收了携带有地址信息的读指令,缓存中可能存在所需要读取的数据内容,此时则不需要从硬盘中进行数据读取,直接从缓存中反馈需要读取的数据即可,可以提高读取效率。
具体的,进行索引之后,如果发现跳跃表的数据层中,有某个节点的地址信息与读指令中携带的地址信息相同,说明跳跃表的数据层中存在对应于该读指令的地址信息的节点。该节点的节点数据包括地址信息和写数据内容,此时,直接将该节点数据中的写数据内容作为读指令的读取数据进行反馈即可,无需从硬盘中进行数据读取。
进一步的,还可以包括:
在判断出跳跃表的数据层中不存在对应于读指令的地址信息的节点之后,根据读指令的地址信息,从硬盘中读取数据并进行反馈。
该种实施方式中,如果判断出跳跃表的数据层中不存在对应于读指令的地址信息的节点,说明缓存中没有该读指令所需要的数据,因此,可以根据读指令中携带的地址信息,从硬盘中读取所需要的数据并进行反馈。
进一步的,在本发明的一种具体实施方式中,还可以包括:
当从硬盘中读取数据出错时,输出读取数据失败的反馈信息。
该种实施方式考虑到,如果从硬盘中读取数据出错时,说明本次读取异常,可能是各种原因导致的,因此可以输出读取数据失败的反馈信息,以便工作人员及时进行原因分析、异常处理。
在本发明的一种具体实施方式中,还可以包括:
从硬盘读取热数据并保存在缓存中,并对缓存中的热数据进行周期性更新。
该种实施方式考虑到,可以对硬盘中的数据的访问频率进行统计,对于访问频率高的数据,即热数据,可以从硬盘中读取热数据并保存在缓存中,以便提高热数据的读取效率,此外,还可以对缓存中的热数据进行周期性更新。
在本发明的一种具体实施方式中,基于跳跃表的数据层向硬盘写数据,可以具体包括:
基于电梯算法循环遍历数据层;
在遍历到数据层中的任意1个节点时,基于该节点的节点数据中的写地址,将该的节点数据中的写数据内容写入硬盘中,并进行跳跃表的更新。
如上文的描述,需要基于跳跃表的数据层向硬盘写数据,例如可以轮询跳跃表的数据层,进而按照节点的地址信息,将节点的写数据内容写入硬盘中。
该种实施方式考虑到,为了有效地实现轮询,可以基于电梯算法循环遍历数据层,采用电梯算法循环遍历数据层,可以很好地实现顺序遍历数据层的效果。
进一步的,在本发明的一种具体实施方式中,基于电梯算法循环遍历数据层,可以具体包括:基于电梯算法,以每次遍历a个节点的方式,循环遍历数据层;a为正整数。
该种实施方式考虑到,部分场合中,对于某个地址,用户可能会有连续多次的写操作,此时如果在缓存中实现了写合并,便有效地减小了硬盘的写次数。而为了有利于发生写合并,在基于电梯算法循环遍历数据层时,便不是每次遍历整层数据层,而是遍历其中的一部分,即每次遍历a个节点。例如图3a的例子中,上一轮遍历到了数据层的节点18,本轮则是从数据层的节点20开始遍历a个节点,例如此时接收了连续两次的写指令,且携带的逻辑地址均为15,则接收第一次写指令时,会将节点15插入至写缓存中,即插入至数据层的相应位置,接收第二次写指令时,则是再次将节点15插入至写缓存中,即对于数据层的节点15,将第一次的写数据内容进行了覆盖,等待后续轮询到数据层的节点15时,写入硬盘的便是第二次写指令中携带的写数据内容。第一次写指令中携带的写数据内容在该例子中并不会落盘。
此外,每次遍历a个节点,也有利于让数据层能够积攒一部分节点,进而将这些节点进行数据层的排序,也就使得后续进行数据落盘时,写地址能够顺序变化,不容易出现写地址频繁跳变的情况。
在遍历到数据层中的任意1个节点时,除了需要基于该节点的节点数据中的地址信息,将该节点数据中的写数据内容写入硬盘之外,还需要进行跳跃表的更新。
在本发明的一种具体实施方式中,进行跳跃表的更新可以具体包括:在将任意一个节点的节点数据中的写数据内容写入硬盘之后,将该节点从数据层中删除,并且按照自下向上的顺序,将跳跃表中指向该节点的各个节点进行删除。
该种实施方式考虑到,在将任意一个节点的节点数据中的写数据内容写入硬盘之后,不仅需要将该节点从数据层中删除,还需要将各层索引层中,指向该节点的各个节点进行删除,也就是将跳跃表中与该节点的节点key值相同的各个节点进行删除,例如图3a中,将数据层的节点9的写数据内容写入硬盘之后,需要将数据层的节点9,第三索引层的节点9以及第二索引层的节点9进行删除,实现跳跃表的更新。
应用本发明实施例所提供的技术方案,采用跳跃表的方式实现写缓存,避免了需要频繁修改节点和加锁的情况。具体的,接收携带有地址信息和写数据内容的写指令之后,可以根据地址信息,按照跳跃表的结构进行索引。本申请的RAID卡中的跳跃表为用于进行写缓存的跳跃表,包括多层索引层和1层数据层,即通过跳跃表的索引,可以在跳跃表的数据层中对应于地址信息的位置写入地址信息和写数据内容,作为写入的节点的节点数据。跳跃表的数据层中包括多个节点,表示的是当前待落盘的各个写缓存数据,并且在数据层中,基于节点数据中的地址信息进行各个节点的顺序排列,因此,在进行写缓存数据的落盘时,即基于跳跃表的数据层向硬盘写数据时,只需要对数据层进行遍历,顺序下刷即可,操作非常简单,也符合依磁道顺序进行写入从而减少磁头在磁道上移动距离的逻辑,有利于提高写速度。由于本申请采用的是跳跃表的方式实现写缓存,不涉及节点旋转,因此本申请的方案并不会出现传统红黑树的方案中在每次插入或者删除节点数据的时候需要进行节点旋转的情况,使得数据的插入和删除更加明朗、易维护。此外,由于是分层索引,因此在索引过程中只需要在当前进行索引的层中设置加锁区域即可,使得锁范围清晰明朗、易识别,对于并发操作比较友好,也就有利于提高读写效率。
综上所述,本申请的方案采用跳跃表的方式实现了写缓存,有利于提高写速度。不需要进行节点旋转的情况,使得数据的插入和删除更加明朗、易维护。分层索引时设置的加锁区域清晰明朗、易识别,对于并发操作比较友好,也就有利于提高读写效率。
相应于上面的方法实施例,本发明实施例还提供了一种RAID卡的写缓存系统,可与上文相互对应参照。
参见图4所示,为本发明中一种RAID卡的写缓存系统的结构示意图,包括:
写指令接收模块401,用于接收携带有地址信息和写数据内容的写指令;
索引模块402,用于根据地址信息,按照跳跃表的结构进行索引,并且在索引过程中,在当前进行索引的层中设置加锁区域;
写入模块403,用于在索引完成之后,在跳跃表的数据层中对应于地址信息的位置写入地址信息和写数据内容,作为写入的节点的节点数据;
其中,RAID卡中的跳跃表为用于进行写缓存的跳跃表,包括多层索引层和1层数据层,数据层中包括多个节点,表示的是当前待落盘的各个写缓存数据;在数据层中,基于节点数据中的地址信息进行各个节点的顺序排列。
在本发明的一种具体实施方式中,在数据层中,基于节点数据中的逻辑地址从小到大的顺序,进行各个节点的顺序排列。
在本发明的一种具体实施方式中,在跳跃表的每一层索引层中,该层索引层的各个节点按照节点键值从小到大的顺序进行排列,并且该层索引层的各个节点指向下一层索引层中具有相同节点键值的节点;
跳跃表最下层的索引层中的各个节点指向数据层中具有相同节点键值的节点;
在数据层中,各个节点的节点数据中的逻辑地址,作为该节点的键值。
在本发明的一种具体实施方式中,从跳跃表中最上层的索引层至最下层的索引层,节点的数量递增。
在本发明的一种具体实施方式中,从跳跃表中最上层的索引层至最下层的索引层,节点的数量按照翻倍的原则递增。
在本发明的一种具体实施方式中,索引模块402在索引过程中,在当前进行索引的层中设置加锁区域,包括:
在对跳跃表中最上层的索引层进行索引时,基于最上层的索引层中的最小节点和最大节点确定出加锁边界,并设定最上层的索引层的整层均为加锁区域;
在对跳跃表中最上层的索引层之外的其它层进行索引时,基于上一层的索引结果对当前的加锁边界进行缩短,并基于缩短之后的加锁边界设定加锁区域。
在本发明的一种具体实施方式中,在任意一层索引层设定的加锁区域均为写锁,在数据层设定的加锁区域为读写锁。
在本发明的一种具体实施方式中,还包括节点增加模块,用于:
在任意一层的两个相邻的指向性节点之间,如果非指向性节点的数量超过第一阈值,则从这两个相邻的指向性节点之间中的非指向性节点中,选取一个非指向性节点;
将选取的该非指向性节点添加至上一层,以使得该非指向性节点变为指向性节点;
其中,对于任意一层中的任意一个节点,当该节点被上一层节点索引时,该节点为指向性节点,否则节点为非指向性节点。
在本发明的一种具体实施方式中,在任意一层的两个相邻的指向性节点之间,如果非指向性节点的数量超过第一阈值,则从这两个相邻的指向性节点之间中的非指向性节点中,选取一个非指向性节点,包括:
在任意一层的两个相邻的指向性节点之间,如果非指向性节点的数量超过第一阈值,则从这两个相邻的指向性节点之间中的非指向性节点中,随机选取一个非指向性节点。
在本发明的一种具体实施方式中,在任意一层的两个相邻的指向性节点之间,如果非指向性节点的数量超过第一阈值,则从这两个相邻的指向性节点之间中的非指向性节点中,选取一个非指向性节点,包括:
在任意一层的两个相邻的指向性节点之间,如果非指向性节点的数量超过第一阈值,则从这两个相邻的指向性节点之间中的非指向性节点中,选取居中位置的一个非指向性节点。
在本发明的一种具体实施方式中,还包括读模块,用于:
接收携带有地址信息的读指令;
根据读指令的地址信息,按照跳跃表的结构进行索引,判断跳跃表的数据层中是否存在对应于读指令的地址信息的节点;
如果存在,则将对应于读指令的地址信息的节点的节点数据中的写数据内容,作为读指令的读取数据进行反馈。
在本发明的一种具体实施方式中,读模块还用于:
在判断出跳跃表的数据层中不存在对应于读指令的地址信息的节点之后,根据读指令的地址信息,从硬盘中读取数据并进行反馈。
在本发明的一种具体实施方式中,读模块还用于:
当从硬盘中读取数据出错时,输出读取数据失败的反馈信息。
在本发明的一种具体实施方式中,还包括热数据更新模块,用于:
从硬盘读取热数据并保存在缓存中,并对缓存中的热数据进行周期性更新。
在本发明的一种具体实施方式中,还包括下刷模块,用于基于跳跃表的数据层向硬盘写数据。
在本发明的一种具体实施方式中,下刷模块具体用于:
基于电梯算法循环遍历数据层;
在遍历到数据层中的任意1个节点时,基于该节点的节点数据中的写地址,将该的节点数据中的写数据内容写入硬盘中,并进行跳跃表的更新。
在本发明的一种具体实施方式中,进行跳跃表的更新,包括:
在将任意一个节点的节点数据中的写数据内容写入硬盘之后,将该节点从数据层中删除,并且按照自下向上的顺序,将跳跃表中指向该节点的各个节点进行删除。
在本发明的一种具体实施方式中,基于电梯算法循环遍历数据层,包括:
基于电梯算法,以每次遍历a个节点的方式,循环遍历数据层;
其中,a为正整数。
相应于上面的方法和系统实施例,本发明实施例还提供了一种RAID卡的写缓存设备以及一种计算机可读存储介质,可与上文相互对应参照。
可参阅图5,该RAID卡的写缓存设备可以包括:
存储器501,用于存储计算机程序;
处理器502,用于执行计算机程序以实现如上述任一实施例中的RAID卡的写缓存方法的步骤。
可参阅图6,该计算机可读存储介质60上存储有计算机程序61,计算机程序61被处理器执行时实现如上述任一实施例中的RAID卡的写缓存方法的步骤。这里所说的计算机可读存储介质包括随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质。
还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的技术方案及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明的保护范围内。
Claims (21)
1.一种RAID卡的写缓存方法,其特征在于,包括:
接收携带有地址信息和写数据内容的写指令;
根据所述地址信息,按照跳跃表的结构进行索引,并且在索引过程中,在当前进行索引的层中设置加锁区域;
在索引完成之后,在所述跳跃表的数据层中对应于所述地址信息的位置写入所述地址信息和所述写数据内容,作为写入的节点的节点数据;
其中,RAID卡中的所述跳跃表为用于进行写缓存的跳跃表,包括多层索引层和1层数据层,所述数据层中包括多个节点,表示的是当前待落盘的各个写缓存数据;在所述数据层中,基于节点数据中的地址信息进行各个节点的顺序排列。
2.根据权利要求1所述的RAID卡的写缓存方法,其特征在于,在所述数据层中,基于节点数据中的逻辑地址从小到大的顺序,进行各个节点的顺序排列。
3.根据权利要求2所述的RAID卡的写缓存方法,其特征在于,在所述跳跃表的每一层索引层中,该层索引层的各个节点按照节点键值从小到大的顺序进行排列,并且该层索引层的各个节点指向下一层索引层中具有相同节点键值的节点;
所述跳跃表最下层的索引层中的各个节点指向所述数据层中具有相同节点键值的节点;
在所述数据层中,各个节点的节点数据中的逻辑地址,作为该节点的键值。
4.根据权利要求2所述的RAID卡的写缓存方法,其特征在于,从所述跳跃表中最上层的索引层至最下层的索引层,节点的数量递增。
5.根据权利要求4所述的RAID卡的写缓存方法,其特征在于,从所述跳跃表中最上层的索引层至最下层的索引层,节点的数量按照翻倍的原则递增。
6.根据权利要求1所述的RAID卡的写缓存方法,其特征在于,在索引过程中,在当前进行索引的层中设置加锁区域,包括:
在对所述跳跃表中最上层的索引层进行索引时,基于最上层的索引层中的最小节点和最大节点确定出加锁边界,并设定最上层的索引层的整层均为加锁区域;
在对所述跳跃表中最上层的索引层之外的其它层进行索引时,基于上一层的索引结果对当前的所述加锁边界进行缩短,并基于缩短之后的加锁边界设定加锁区域。
7.根据权利要求6所述的RAID卡的写缓存方法,其特征在于,在任意一层索引层设定的加锁区域均为写锁,在所述数据层设定的加锁区域为读写锁。
8.根据权利要求1所述的RAID卡的写缓存方法,其特征在于,还包括:
在任意一层的两个相邻的指向性节点之间,如果非指向性节点的数量超过第一阈值,则从这两个相邻的指向性节点之间中的非指向性节点中,选取一个非指向性节点;
将选取的该非指向性节点添加至上一层,以使得该非指向性节点变为指向性节点;
其中,对于任意一层中的任意一个节点,当该节点被上一层节点索引时,该节点为指向性节点,否则节点为非指向性节点。
9.根据权利要求8所述的RAID卡的写缓存方法,其特征在于,在任意一层的两个相邻的指向性节点之间,如果非指向性节点的数量超过第一阈值,则从这两个相邻的指向性节点之间中的非指向性节点中,选取一个非指向性节点,包括:
在任意一层的两个相邻的指向性节点之间,如果非指向性节点的数量超过第一阈值,则从这两个相邻的指向性节点之间中的非指向性节点中,随机选取一个非指向性节点。
10.根据权利要求8所述的RAID卡的写缓存方法,其特征在于,在任意一层的两个相邻的指向性节点之间,如果非指向性节点的数量超过第一阈值,则从这两个相邻的指向性节点之间中的非指向性节点中,选取一个非指向性节点,包括:
在任意一层的两个相邻的指向性节点之间,如果非指向性节点的数量超过第一阈值,则从这两个相邻的指向性节点之间中的非指向性节点中,选取居中位置的一个非指向性节点。
11.根据权利要求1所述的RAID卡的写缓存方法,其特征在于,还包括:
接收携带有地址信息的读指令;
根据所述读指令的地址信息,按照跳跃表的结构进行索引,判断所述跳跃表的数据层中是否存在对应于所述读指令的地址信息的节点;
如果存在,则将对应于所述读指令的地址信息的节点的节点数据中的写数据内容,作为所述读指令的读取数据进行反馈。
12.根据权利要求11所述的RAID卡的写缓存方法,其特征在于,还包括:
在判断出所述跳跃表的数据层中不存在对应于所述读指令的地址信息的节点之后,根据所述读指令的地址信息,从硬盘中读取数据并进行反馈。
13.根据权利要求12所述的RAID卡的写缓存方法,其特征在于,还包括:
当从硬盘中读取数据出错时,输出读取数据失败的反馈信息。
14.根据权利要求11所述的RAID卡的写缓存方法,其特征在于,还包括:
从硬盘读取热数据并保存在缓存中,并对缓存中的热数据进行周期性更新。
15.根据权利要求1至14任一项所述的RAID卡的写缓存方法,其特征在于,还包括:
基于所述跳跃表的数据层向硬盘写数据。
16.根据权利要求15所述的RAID卡的写缓存方法,其特征在于,所述基于所述跳跃表的数据层向硬盘写数据,包括:
基于电梯算法循环遍历所述数据层;
在遍历到所述数据层中的任意1个节点时,基于该节点的节点数据中的写地址,将该的节点数据中的写数据内容写入硬盘中,并进行所述跳跃表的更新。
17.根据权利要求16所述的RAID卡的写缓存方法,其特征在于,所述进行所述跳跃表的更新,包括:
在将任意一个节点的节点数据中的写数据内容写入硬盘之后,将该节点从所述数据层中删除,并且按照自下向上的顺序,将所述跳跃表中指向该节点的各个节点进行删除。
18.根据权利要求16所述的RAID卡的写缓存方法,其特征在于,所述基于电梯算法循环遍历所述数据层,包括:
基于电梯算法,以每次遍历a个节点的方式,循环遍历所述数据层;
其中,a为正整数。
19.一种RAID卡的写缓存系统,其特征在于,包括:
写指令接收模块,用于接收携带有地址信息和写数据内容的写指令;
索引模块,用于根据所述地址信息,按照跳跃表的结构进行索引,并且在索引过程中,在当前进行索引的层中设置加锁区域;
写入模块,用于在索引完成之后,在所述跳跃表的数据层中对应于所述地址信息的位置写入所述地址信息和所述写数据内容,作为写入的节点的节点数据;
其中,RAID卡中的所述跳跃表为用于进行写缓存的跳跃表,包括多层索引层和1层数据层,所述数据层中包括多个节点,表示的是当前待落盘的各个写缓存数据;在所述数据层中,基于节点数据中的地址信息进行各个节点的顺序排列。
20.一种RAID卡的写缓存设备,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序以实现如权利要求1至18任一项所述的RAID卡的写缓存方法的步骤。
21.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至18任一项所述的RAID卡的写缓存方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310356860.8A CN116069267B (zh) | 2023-04-06 | 2023-04-06 | 一种raid卡的写缓存方法、系统、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310356860.8A CN116069267B (zh) | 2023-04-06 | 2023-04-06 | 一种raid卡的写缓存方法、系统、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116069267A true CN116069267A (zh) | 2023-05-05 |
CN116069267B CN116069267B (zh) | 2023-07-14 |
Family
ID=86180546
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310356860.8A Active CN116069267B (zh) | 2023-04-06 | 2023-04-06 | 一种raid卡的写缓存方法、系统、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116069267B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116383098A (zh) * | 2023-06-05 | 2023-07-04 | 成都佰维存储科技有限公司 | 地址索引方法、装置、可读存储介质及电子设备 |
CN116431080A (zh) * | 2023-06-09 | 2023-07-14 | 苏州浪潮智能科技有限公司 | 一种数据落盘方法、系统、设备及计算机可读存储介质 |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090132563A1 (en) * | 2007-11-19 | 2009-05-21 | Sun Microsystems, Inc. | Simple optimistic skiplist |
WO2018046085A1 (en) * | 2016-09-08 | 2018-03-15 | Huawei Technologies Co., Ltd. | Systems and methods for performing a range query on a skiplist data structure |
CN108228801A (zh) * | 2017-12-29 | 2018-06-29 | 安徽慧视金瞳科技有限公司 | 一种基于多核处理器的跳跃表多线程优化方法及设备 |
CN110147204A (zh) * | 2019-05-22 | 2019-08-20 | 苏州浪潮智能科技有限公司 | 一种元数据落盘方法、装置、系统及计算机可读存储介质 |
CN110377436A (zh) * | 2019-07-12 | 2019-10-25 | 清华大学 | 持久性内存的数据存储访问方法、设备及装置 |
CN111339078A (zh) * | 2018-12-19 | 2020-06-26 | 北京京东尚科信息技术有限公司 | 数据实时存储方法、数据查询方法、装置、设备、介质 |
CN113065964A (zh) * | 2021-04-13 | 2021-07-02 | 上证所信息网络有限公司 | 一种采用可变步长跳表的数据存储系统及方法 |
CN113468080A (zh) * | 2021-06-10 | 2021-10-01 | 山东英信计算机技术有限公司 | 一种全闪元数据的缓存方法、系统及相关装置 |
CN113485635A (zh) * | 2020-11-23 | 2021-10-08 | 中兴通讯股份有限公司 | 数据存储方法、装置、设备及存储介质 |
CN113626431A (zh) * | 2021-07-28 | 2021-11-09 | 浪潮云信息技术股份公司 | 一种基于lsm树的延迟垃圾回收的键值分离存储方法及系统 |
WO2022063059A1 (zh) * | 2020-09-23 | 2022-03-31 | 华为云计算技术有限公司 | 键值存储系统的数据管理方法及其装置 |
CN114461635A (zh) * | 2021-12-22 | 2022-05-10 | 天翼云科技有限公司 | 一种MySQL数据库数据存储方法、装置和电子设备 |
-
2023
- 2023-04-06 CN CN202310356860.8A patent/CN116069267B/zh active Active
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090132563A1 (en) * | 2007-11-19 | 2009-05-21 | Sun Microsystems, Inc. | Simple optimistic skiplist |
WO2018046085A1 (en) * | 2016-09-08 | 2018-03-15 | Huawei Technologies Co., Ltd. | Systems and methods for performing a range query on a skiplist data structure |
CN108228801A (zh) * | 2017-12-29 | 2018-06-29 | 安徽慧视金瞳科技有限公司 | 一种基于多核处理器的跳跃表多线程优化方法及设备 |
CN111339078A (zh) * | 2018-12-19 | 2020-06-26 | 北京京东尚科信息技术有限公司 | 数据实时存储方法、数据查询方法、装置、设备、介质 |
CN110147204A (zh) * | 2019-05-22 | 2019-08-20 | 苏州浪潮智能科技有限公司 | 一种元数据落盘方法、装置、系统及计算机可读存储介质 |
CN110377436A (zh) * | 2019-07-12 | 2019-10-25 | 清华大学 | 持久性内存的数据存储访问方法、设备及装置 |
WO2022063059A1 (zh) * | 2020-09-23 | 2022-03-31 | 华为云计算技术有限公司 | 键值存储系统的数据管理方法及其装置 |
CN113485635A (zh) * | 2020-11-23 | 2021-10-08 | 中兴通讯股份有限公司 | 数据存储方法、装置、设备及存储介质 |
CN113065964A (zh) * | 2021-04-13 | 2021-07-02 | 上证所信息网络有限公司 | 一种采用可变步长跳表的数据存储系统及方法 |
CN113468080A (zh) * | 2021-06-10 | 2021-10-01 | 山东英信计算机技术有限公司 | 一种全闪元数据的缓存方法、系统及相关装置 |
CN113626431A (zh) * | 2021-07-28 | 2021-11-09 | 浪潮云信息技术股份公司 | 一种基于lsm树的延迟垃圾回收的键值分离存储方法及系统 |
CN114461635A (zh) * | 2021-12-22 | 2022-05-10 | 天翼云科技有限公司 | 一种MySQL数据库数据存储方法、装置和电子设备 |
Non-Patent Citations (3)
Title |
---|
俞加平: "Level DB架构与相关改进分析", 《无线通信技术》, no. 2, pages 12 - 17 * |
李梁 等: "面向数据特征的内存跳表优化技术", 《软件学报》, vol. 31, no. 3, pages 663 - 679 * |
潘恬 等: "基于局部性原理跳表的内容路由器缓存快速查找机制", 《计算机学报》, vol. 41, no. 9, pages 2029 - 2043 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116383098A (zh) * | 2023-06-05 | 2023-07-04 | 成都佰维存储科技有限公司 | 地址索引方法、装置、可读存储介质及电子设备 |
CN116383098B (zh) * | 2023-06-05 | 2023-09-12 | 成都佰维存储科技有限公司 | 地址索引方法、装置、可读存储介质及电子设备 |
CN116431080A (zh) * | 2023-06-09 | 2023-07-14 | 苏州浪潮智能科技有限公司 | 一种数据落盘方法、系统、设备及计算机可读存储介质 |
CN116431080B (zh) * | 2023-06-09 | 2023-08-29 | 苏州浪潮智能科技有限公司 | 一种数据落盘方法、系统、设备及计算机可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN116069267B (zh) | 2023-07-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN116069267B (zh) | 一种raid卡的写缓存方法、系统、设备及存储介质 | |
US11853549B2 (en) | Index storage in shingled magnetic recording (SMR) storage system with non-shingled region | |
US8868926B2 (en) | Cryptographic hash database | |
CN107153707B (zh) | 一种针对非易失内存的哈希表构建方法及系统 | |
KR930002331B1 (ko) | 키 레코드를 페치, 삽입 및 삭제하는 방법 | |
US9208258B2 (en) | Locking and traversal methods for ordered tree data structures | |
CN113196259B (zh) | 使用以选择性数据存储格式进行日志记录的键值存储 | |
US20210157852A1 (en) | Data tree with order-based node traversal | |
JP2007012056A (ja) | データ保全の先送りされた認証を有するファイルシステム | |
JP2007012054A (ja) | ファイルシステム保全の最適化されたスタートアップ認証 | |
US11210228B2 (en) | Method, device and computer program product for cache management | |
US20160266805A1 (en) | Sliding-window multi-class striping | |
CN111316255A (zh) | 数据存储系统以及用于提供数据存储系统的方法 | |
US20070094313A1 (en) | Architecture and method for efficient bulk loading of a PATRICIA trie | |
US7210019B2 (en) | Exclusive access for logical blocks | |
CN114416646A (zh) | 一种层级存储系统的数据处理方法及装置 | |
CN116893786B (zh) | 一种数据处理方法、装置、电子设备及存储介质 | |
CN111198660A (zh) | 一种b+树遍历的方法及装置 | |
CN104133970A (zh) | 一种数据空间管理方法及装置 | |
CN111241090A (zh) | 存储系统中管理数据索引的方法和装置 | |
US20230161666A1 (en) | Ecc parity biasing for key-value data storage devices | |
CN115878625A (zh) | 数据处理方法和装置及电子设备 | |
KR102354343B1 (ko) | 블록체인 기반의 지리공간 데이터를 위한 공간 데이터 인덱싱 방법 및 장치 | |
CN113127211A (zh) | 与键-值式数据库系统相关联的锁管理 | |
CN111274456A (zh) | 基于nvm主存的数据索引方法及数据处理系统 |
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 |