CN111045598B - 数据存储方法、装置 - Google Patents
数据存储方法、装置 Download PDFInfo
- Publication number
- CN111045598B CN111045598B CN201910958812.XA CN201910958812A CN111045598B CN 111045598 B CN111045598 B CN 111045598B CN 201910958812 A CN201910958812 A CN 201910958812A CN 111045598 B CN111045598 B CN 111045598B
- Authority
- CN
- China
- Prior art keywords
- data
- queue
- sub
- written
- ordering
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 49
- 238000013500 data storage Methods 0.000 title claims abstract description 28
- 238000012163 sequencing technique Methods 0.000 abstract description 6
- 238000010586 diagram Methods 0.000 description 12
- 239000007787 solid Substances 0.000 description 5
- 230000008901 benefit Effects 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 238000011084 recovery Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 2
- 230000002035 prolonged effect Effects 0.000 description 2
- 230000003139 buffering effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000004064 recycling Methods 0.000 description 1
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/0614—Improving the reliability of storage systems
- G06F3/0616—Improving the reliability of storage systems in relation to life time, e.g. increasing Mean Time Between Failures [MTBF]
-
- 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/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- 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)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请涉及一种数据存储方法、装置,该方法包括:分别根据每个待写入子数据的逻辑地址和第一队列、第二队列的当前负载状态、当前排序状态,获取每个待写入子数据和变化的已写入子数据的所在队列和在所在队列的排序;根据每个待写入子数据和变化的已写入子数据的所在队列和在所在队列的排序,获取每个待写入子数据的数据类型和队列改变的已写入子数据的数据类型;分别将每个待写入子数据写入到对应的存储区,将队列改变的已写入子数据写入到对应的存储区或更新队列改变的已写入子数据在所在存储区的数据类型。通过对待写入子数据排序获取所在队列以确定数据类型,进而写入到硬盘中对应的存储区,实现了热数据、冷数据、温数据的分类存储。
Description
技术领域
本申请涉及存储技术领域,尤其涉及一种数据存储方法、装置。
背景技术
随着信息技术的发展,数据处理量越来越大,固态硬盘(SSD)以其高性能的优点得到了广泛的应用。现有技术中,往往需要固态硬盘根据数据的访问频率来判断主机要写入的数据为热数据还是冷数据,然后根据待写入数据的数据类型,将数据写入固态硬盘中相应的存储区,但是这样会影响到固态硬盘垃圾回收的性能以及固态硬盘的寿命。
发明内容
为了解决上述技术问题或者至少部分地解决上述技术问题,本申请提供了一种数据存储方法、装置及存储介质。
第一方面,本申请提供了一种数据存储方法,该方法包括:
获取待写入数据的数据大小和逻辑地址;
将待写入数据按预设长度等长度划分为多个待写入子数据,其中,待写入数据的数据大小为预设长度的整数倍;
获取每个待写入子数据的逻辑地址;
分别根据每个待写入子数据的逻辑地址和第一队列、第二队列的当前负载状态、当前排序状态按预设规则调整、更新第一队列、第二队列的负载状态、排序状态,获取每个待写入子数据和变化的已写入子数据的所在队列和在所在队列的排序;
根据每个待写入子数据和变化的已写入子数据的所在队列和在所在队列的排序,获取每个待写入子数据的数据类型和队列改变的已写入子数据的数据类型,其中数据类型包括热数据、温数据、冷数据;
发送数据写指令,使硬盘根据数据写指令,分别将每个待写入子数据写入到对应的存储区,将队列改变的已写入子数据写入到对应的存储区或更新队列改变的已写入子数据在所在存储区的数据类型;
其中,第一队列用于指示硬盘中每个数据类型为热数据的已写入子数据和在第一队列获得排序的待写入子数据的逻辑地址、在第一队列的排序,第二队列用于指示硬盘中每个数据类型为温数据的已写入子数据和在第二队列获得排序的待写入子数据的逻辑地址、在第二队列的排序,每个热数据和温数据的数据大小均为预设长度,负载状态为已满或未满;
其中,变化的已写入子数据为队列和/或排序变化的已写入子数据;
其中,数据写指令包括每个待写入子数据和队列改变的已写入子数据的逻辑地址信息、数据大小信息、数据类型信息。
可选地,所述分别根据每个待写入子数据的逻辑地址和第一队列、第二队列的当前负载状态、当前排序状态按预设规则调整、更新第一队列、第二队列的负载状态、排序状态,获取每个待写入子数据和变化的已写入子数据的所在队列和在所在队列的排序,包括:
将多个待写入子数据中位于缓存中最前列的待写入子数据作为待排序子数据;
将待排序子数据的逻辑地址作为目标逻辑地址,判断在第一队列或第二队列中是否存在与目标逻辑地址相同的已写入子数据的逻辑地址;
若在第一队列或第二队列中存在与目标逻辑地址相同的已写入子数据的逻辑地址,则将逻辑地址为目标逻辑地址的已写入子数据作为目标子数据,根据目标子数据的所在队列、在所在队列的排序和第一队列、第二队列的当前负载状态、当前排序状态,对第一队列、第二队列的已写入子数据的所在队列和所在队列的排序进行调整并更新,将调整后的目标子数据的队列和排序作为待排序子数据的所在队列和所在队列的排序;
若在第一队列或第二队列中不存在与目标逻辑地址相同的已写入子数据的逻辑地址,则将第二队列作为待排序子数据的队列,并根据第二队列的当前负载状态,确定待排序子数据在第二队列的排序,对第二队列的负载状态及已写入子数据的所在队列和在所在队列的排序进行调整并更新。
在将调整后的目标子数据的队列和排序作为待排序子数据的所在队列和所在队列的排序之后,或,在对第二队列的负载状态及已写入子数据的所在队列和在所在队列的排序进行调整并更新之后,还包括:
分别获取调整并更新后的第一队列和第二队列的当前负载状态和当前排序状态;
将待排序子数据的下一待写入子数据作为待排序子数据,执行将待排序子数据的逻辑地址作为目标逻辑地址,判断在第一队列或第二队列中是否存在与目标逻辑地址相同的已写入子数据的逻辑地址,直至确定所有待写入子数据的所在队列和在所在队列的排序,获取每个待写入子数据和变化的已写入子数据的所在队列和在所在队列的排序。
可选地,所述若在第一队列或第二队列中存在与目标逻辑地址相同的已写入子数据的逻辑地址,则将逻辑地址为目标逻辑地址的已写入子数据作为目标子数据,根据目标子数据的所在队列、在所在队列的排序和第一队列、第二队列的当前负载状态、当前排序状态,对第一队列、第二队列的已写入子数据的所在队列和所在队列的排序进行调整并更新,将调整后的目标子数据的队列和排序作为待排序子数据的所在队列和所在队列的排序,包括:
若目标子数据的所在队列为第一队列,则判断第一队列是否已满,
若第一队列已满,则根据目标子数据在第一队列的当前排序,对第一队列、第二队列的已写入子数据的所在队列和所在队列的排序进行调整并更新,将调整后的目标子数据的队列和所在队列排序作为待排序子数据的所在队列和所在队列的排序,
若第一队列未满,则将目标子数据的排序与其前一位排序对应的已写入子数据的排序进行交换,将交换后的目标子数据的排序作为待排序子数据在第一队列的排序;
若目标子数据的所在队列为第二队列,则判断第二队列是否已满,
若第二队列已满,则根据目标子数据在第二队列的当前排序和第一队列的当前负载状态,对第一队列、第二队列的已写入子数据的所在队列和所在队列的排序进行调整并更新,将调整后的目标子数据的队列和排序作为待排序子数据的所在队列和所在队列的排序,
若第二队列未满,则将第二队列中排序位于目标子数据排序之前的已写入子数据的排序整体后移一位,将第二队列的第一位作为待排序子数据在第二队列的排序。
可选地,所述若在第一队列或第二队列中不存在与目标逻辑地址相同的已写入子数据的逻辑地址,则将第二队列作为待排序子数据的队列,并根据第二队列的当前负载状态,确定待排序子数据在第二队列的排序,对第二队列的负载状态及已写入子数据的所在队列和在所在队列的排序进行调整并更新,包括:
若第二队列已满,则将第二队列的所有已写入子数据对应的排序整体后移一位,将第二队列的最后一位从第二队列移出,将第二队列的第一位作为待排序子数据在第二队列的排序,
若第二队列未满,则将第二队列的所有已写入子数据对应的排序整体向后移一位,将第二队列的第一位作为待排序子数据在第二队列的排序。
可选地,所述若第一队列已满,则根据目标子数据在第一队列的当前排序,对第一队列、第二队列的已写入子数据的所在队列和所在队列的排序进行调整并更新,将调整后的目标子数据的队列和所在队列排序作为待排序子数据的所在队列和所在队列的排序,包括:
判断目标子数据在第一队列的当前排序是否为第一队列的第一预设范围内的任意位置,第一预设范围为第一队列的前部分排序;
若目标子数据在第一队列的当前排序为第一队列的第一预设范围内的任意位置,则将目标子数据的排序与其前一位排序对应的已写入子数据的排序进行交换,将交换后的目标子数据的排序作为待排序子数据在第一队列的排序,
若目标子数据在第一队列的当前排序不为第一队列的第一预设范围内的任意位置,则将目标子数据的排序与第一队列的第一预设范围后的第一位对应的已写入子数据的排序进行交换,将交换后的目标子数据的排序作为待排序子数据在第一队列的排序,
可选地,所述若第二队列已满,则根据目标子数据在第二队列的当前排序和第一队列的当前负载状态,对第一队列、第二队列的已写入子数据的所在队列和所在队列的排序进行调整并更新,将调整后的目标子数据的队列和排序作为待排序子数据的所在队列和所在队列的排序,包括:
判断目标子数据在第二队列的当前排序是否为第二队列的第二预设范围内的任意位置,第二预设范围为第二队列的前部分排序;
若目标子数据在第二队列的当前排序为第二队列的第二预设范围内的任意位置,则,
若第一队列已满,则将第一队列中排序在第一队列的第一预设范围后的已写入子数据的排序整体后移一位,将第一队列的第一预设范围后的第一位作为待排序子数据在第一队列的排序,同时,将第一队列的最后一位从第一队列移出,将第二队列的第一位作为从第一队列移出的已写入子数据的排序,将第二队列中排序位于目标子数据排序之前的已写入子数据的排序整体后移一位,
若第一队列未满,则将第一队列的已写入子数据的排序整体后移一位,将第一队列的第一位作为待排序子数据在第一队列的排序,
若目标子数据在第二队列的当前排序不为第二队列的第二预设范围内的任意位置,则将第二队列的第一位作为目标子数据的排序,同时将第二队列中排序位于目标子数据排序之前的已写入子数据的排序整体后移一位。
可选地,所述硬盘包括第一存储区、第二存储区,第一存储区用于存储热数据和温数据,第二存储区用于存储冷数据;
根据每个待写入子数据和变化的已写入子数据的所在队列和在所在队列的排序,获取每个待写入子数据的数据类型和队列改变的已写入子数据的数据类型,包括:
将排序在第一队列的待写入子数据和排序从第二队列移到第一队列的已写入子数据的数据类型判定为热数据,
将排序在第二队列的待写入子数据和排序从第一队列移到第二队列的已写入子数据的数据类型判定为温数据,
将排序从第二队列移出的已写入子数据的数据类型判定为冷数据;
分别将每个待写入子数据写入到对应的存储区,将队列改变的已写入子数据写入到对应的存储区或更新队列改变的已写入子数据在所在存储区的数据类型,包括:
将数据类型为热数据或温数据的待写入子数据写入到第一存储区,
将数据类型由温数据转变为热数据的已写入子数据在第一存储区的数据类型更新为热数据,
将数据类型由热数据转变为温数据的已写入子数据在第一存储区的数据类型更新为温数据,
将数据类型由温数据转变为冷数据的已写入子数据写入到第二存储区。
可选地,该方法还包括:
将数据类型变化的已写入子数据写入到新的对应的存储区后,对其之前所在的存储区的已写入子数据进行注销以进行垃圾回收;
将与已写入子数据的逻辑地址相同的待写入子数据写入到对应的存储区后,对逻辑地址相同的已写入子数据进行注销以进行垃圾回收。
可选地,第一存储区为SLC存储单元,第二存储区为MLC存储单元、TLC存储单元、QLC存储单元中的任意一种。
第二方面,本申请提供了一种数据存储装置,该装置包括:
数据信息获取单元,用于获取待写入数据的数据大小和逻辑地址;
划分单元,用于将待写入数据按预设长度等长度划分为多个待写入子数据,其中,待写入数据的数据大小为预设长度的整数倍;
子数据信息获取单元,还用于获取每个待写入子数据的逻辑地址;
排序单元,用于分别根据每个待写入子数据的逻辑地址和第一队列、第二队列的当前负载状态、当前排序状态按预设规则调整、更新第一队列、第二队列的负载状态、排序状态,获取每个待写入子数据和变化的已写入子数据的所在队列和在所在队列的排序;
数据类型获取单元,用于根据每个待写入子数据和变化的已写入子数据的所在队列和在所在队列的排序,获取每个待写入子数据的数据类型和队列改变的已写入子数据的数据类型;
控制单元,用于发送数据写指令,使硬盘根据数据写指令,分别将每个待写入子数据写入到对应的存储区,将队列改变的已写入子数据写入到对应的存储区或更新队列改变的已写入子数据在所在存储区的数据类型;
其中,第一队列用于指示硬盘中每个数据类型为热数据的已写入子数据和在第一队列获得排序的待写入子数据的逻辑地址、在第一队列的排序,第二队列用于指示硬盘中每个数据类型为温数据的已写入子数据和在第二队列获得排序的待写入子数据的逻辑地址、在第二队列的排序,每个热数据和温数据的数据大小均为预设长度,负载状态为已满或未满;
其中,变化的已写入子数据为队列和/或排序变化的已写入子数据;
其中,数据写指令包括每个待写入子数据和队列改变的已写入子数据的逻辑地址信息、数据大小信息、数据类型信息。
第三方面,本申请提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时,使得处理器执行前面任意一项的方法的步骤。
本申请实施例提供的上述技术方案与现有技术相比具有如下优点:
本申请实施例提供的数据存储方法,通过驱动程序对主机缓存中的待写入子数据和已写入到硬盘中的已写入子数据进行排序,动态的调整、更新第一队列和第二队列的排序状态和负载状态,以重新确定待写入子数据和队列改变的已写入子数据的队列和排序,根据子数据所在的队列确定子数据的数据类型,进而将子数据写入到硬盘中对应的存储区或更新队列改变的已写入子数据在所在存储区的数据类型;根据本方法,通过排序将热数据、温数据、冷数据分类存储,且通过排序动态调整改变数据类型进而调整子数据的存储区,保证对应存储区存储的子数据是真正的热数据、温数据或冷数据;另外,不需要硬盘来判断数据的数据类型,减轻了硬盘工作量,延长了硬盘的使用寿命,且利于硬盘的垃圾回收。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为一个实施例中数据存储方法的流程图;
图2为另一个实施例中数据存储方法的流程图;
图3为另一个实施例中数据存储方法的流程图;
图4为另一个实施例中数据存储方法的流程图;
图5为另一个实施例中数据存储方法的流程图;
图6为另一个实施例中数据存储方法的流程图;
图7为一个实施例中数据存储装置的结构框图;
图8为一个实施例中排序的示意图;
图9为另一个实施例中排序的示意图;
图10为另一个实施例中排序的示意图;
图11为另一个实施例中排序的示意图;
图12为另一个实施例中排序的示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
图1为一个实施例中数据存储方法的流程图;参考图1,该数据存储方法包括以下步骤:
S1000:获取待写入数据的数据大小和逻辑地址。
驱动程序获取在主机缓存中排队等候待写入的数据的数据大小和逻辑地址。
S2000:将待写入数据按预设长度等长度划分为多个待写入子数据。
待写入数据的数据大小为预设长度的整数倍,按预设长度划分可以划分为多个待写入子数据。
S3000:获取每个待写入子数据的逻辑地址。
根据待写入数据的逻辑地址即可获取待写入子数据的逻辑地址。
S4000:分别根据每个待写入子数据的逻辑地址和第一队列、第二队列的当前负载状态、当前排序状态按预设规则调整、更新第一队列、第二队列的负载状态、排序状态,获取每个待写入子数据和变化的已写入子数据的所在队列和在所在队列的排序。
其中,第一队列用于指示硬盘中每个数据类型为热数据的已写入子数据和在第一队列获得排序的待写入子数据的逻辑地址、在第一队列的排序,第二队列用于指示硬盘中每个数据类型为温数据的已写入子数据和在第二队列获得排序的待写入子数据的逻辑地址、在第二队列的排序,每个热数据和温数据的数据大小均为预设长度,负载状态为已满或未满;排序状态为第一队列和第二队列中对已写入子数据和在该队列中排序的待写入子数据的排序,排序状态根据有新的待写入子数据加入该队列而动态调整。
其中,变化的已写入子数据为队列和/或排序变化的已写入子数据。
S5000:根据每个待写入子数据和变化的已写入子数据的所在队列和在所在队列的排序,获取每个待写入子数据的数据类型和队列改变的已写入子数据的数据类型。
第一队列对应热数据,第二队列对应温数据,在第一队列和第二队列排序的子数据是有限的,当第一队列或第二队列已满,加入新的子数据后,会根据排序,将尾部的子数据的排序移出该队列,使移出的子数据的数据类型改变,从而使所在的存储区改变或在所在存储区的数据类型改变。
S6000:发送数据写指令,使硬盘根据数据写指令,分别将每个待写入子数据写入到对应的存储区,将队列改变的已写入子数据写入到对应的存储区或更新队列改变的已写入子数据在所在存储区的数据类型。
其中,数据写指令包括每个待写入子数据和队列改变的已写入子数据的逻辑地址信息、数据大小信息、数据类型信息。
图2为另一个实施例中数据存储方法的流程图;参考图1-图2,步骤S4000包括以下步骤:
S4100:将多个待写入子数据中位于缓存中最前列的待写入子数据作为待排序子数据。
对待写入数据划分的多个待写入子数据按照在主机缓存中排队等待的先后顺序进行确定待写入子数据所在队列和在所在队列的排序。待写入子数据所在队列决定了是热数据还是温数据。
S4200:将待排序子数据的逻辑地址作为目标逻辑地址。
S4300:判断在第一队列或第二队列中是否存在与目标逻辑地址相同的已写入子数据的逻辑地址,若是,则执行步骤S4400,若否,则执行步骤S4500。
存在与目标逻辑地址相同的已写入子数据的逻辑地址表征在目标逻辑地址写入数据是有历史记录且该目标逻辑地址已写入的子数据为热数据或温数据,当待写入子数据的逻辑地址相同,则这个逻辑地址读写操作频率高。
S4400:将逻辑地址为目标逻辑地址的已写入子数据作为目标子数据,根据目标子数据的所在队列、在所在队列的排序和第一队列、第二队列的当前负载状态、当前排序状态,对第一队列、第二队列的已写入子数据的所在队列和所在队列的排序进行调整并更新,将调整后的目标子数据的队列和排序作为待排序子数据的所在队列和所在队列的排序。
待写入子数据的逻辑地址是热数据或温数据中存在的逻辑地址,因此待写入子数据会改变相同目标逻辑地址对应的已写入子数据的队列和/或排序。
S4500:将第二队列作为待排序子数据的队列,并根据第二队列的当前负载状态,确定待排序子数据在第二队列的排序,对第二队列的负载状态及已写入子数据的所在队列和在所在队列的排序进行调整并更新。
第一队列和第二队列排序的规则是,优先将第二队列排满,第二队列已满后,将第二队列符合条件的子数据的排序调整到第一队列进行排序,直到将第一队列也排满。当第一队列或第二队列中不存在与待写入子数据的逻辑地址相同的已写入子数据的逻辑地址,表征待写入子数据最多只能算是温数据,他的热度需要慢慢的累积。
S4600:判断是否存在未确定所在队列和所在队列的排序的待写入子数据,若是,则执行步骤S4700,若否,则执行步骤S4900。
S4700:分别获取调整并更新后的第一队列和第二队列的当前负载状态和当前排序状态。
S4800:将待排序子数据的下一待写入子数据作为待排序子数据,执行步骤S4200。
S4900:获取每个待写入子数据和变化的已写入子数据的所在队列和在所在队列的排序。
当所有待写入子数据的排序都确定后,排序结束。
图3为另一个实施例中数据存储方法的流程图;参考图1-图3,步骤S4400包括以下步骤:
S4410:判断目标子数据的所在队列是否为第一队列,若是,则执行步骤S4420,若否,则执行步骤S4450。
S4420:判断第一队列是否已满,若是,则执行步骤S4430,若否,则执行步骤S4440。
S4430:根据目标子数据在第一队列的当前排序,对第一队列、第二队列的已写入子数据的所在队列和所在队列的排序进行调整并更新,将调整后的目标子数据的队列和所在队列排序作为待排序子数据的所在队列和所在队列的排序。
S4440:将目标子数据的排序与其前一位排序对应的已写入子数据的排序进行交换,将交换后的目标子数据的排序作为待排序子数据在第一队列的排序。
S4450:判断第二队列是否已满,若是,则执行步骤S4460,若否,则执行步骤S4470。
S4460:根据目标子数据在第二队列的当前排序和第一队列的当前负载状态,对第一队列、第二队列的已写入子数据的所在队列和所在队列的排序进行调整并更新,将调整后的所述目标子数据的队列和排序作为待排序子数据的所在队列和所在队列的排序。
S4470:将第二队列中排序位于目标子数据排序之前的已写入子数据的排序整体后移一位,将第二队列的第一位作为待排序子数据在第二队列的排序。
图4为另一个实施例中数据存储方法的流程图;参考图1、图2、图4,步骤S4500包括以下步骤:
S4510:判断第二队列是否已满,若是,则执行步骤S4520,若否,则执行步骤S4530。
S4520:将第二队列的所有已写入子数据对应的排序整体后移一位,将第二队列的最后一位从所述第二队列移出,将第二队列的第一位作为待排序子数据在第二队列的排序。
S4530:将第二队列的所有已写入子数据对应的排序整体向后移一位,将第二队列的第一位作为待排序子数据在第二队列的排序。
图5为另一个实施例中数据存储方法的流程图;参考图1-图3、图5,步骤S4430包括以下步骤:
S4431:判断目标子数据在第一队列的当前排序是否为第一队列的第一预设范围内的任意位置,若是,则执行步骤S4432,若否,则执行步骤S4433。
S4432:将目标子数据的排序与其前一位排序对应的已写入子数据的排序进行交换,将交换后的所述目标子数据的排序作为待排序子数据在第一队列的排序。
S4433:将目标子数据的排序与第一队列的第一预设范围后的第一位对应的已写入子数据的排序进行交换,将交换后的目标子数据的排序作为待排序子数据在第一队列的排序。
图6为另一个实施例中数据存储方法的流程图;参考图1-图3,图6,步骤S4460包括以下步骤:
S4461:判断目标子数据在第二队列的当前排序是否为第二队列的第二预设范围内的任意位置,若是,则执行步骤S4462,若否,则执行步骤S4465。
S4462:判断第一队列是否已满,若是,则执行步骤S4463,若否,则执行步骤S4464。
S4463:将第一队列中排序在第一队列的第一预设范围后的已写入子数据的排序整体后移一位,将第一队列的第一预设范围后的第一位作为待排序子数据在第一队列的排序,同时,将第一队列的最后一位从第一队列移出,将第二队列的第一位作为从第一队列移出的已写入子数据的排序,将第二队列中排序位于目标子数据排序之前的已写入子数据的排序整体后移一位。
S4464:将第一队列的已写入子数据的排序整体后移一位,将第一队列的第一位作为待排序子数据在第一队列的排序。
S4465:将第二队列的第一位作为目标子数据的排序,同时将第二队列中排序位于目标子数据排序之前的已写入子数据的排序整体后移一位。
硬盘包括第一存储区、第二存储区,第一存储区用于存储热数据和温数据,第二存储区用于存储冷数据;可选地,第一存储区为SLC存储单元,第二存储区为MLC存储单元、TLC存储单元、QLC存储单元中的任意一种。
其中,SLC(Single-Level Cell),为1bit/cell,速度快寿命长,价格贵(约MLC的3倍以上的价格),约10万次擦写寿命。
MLC(Multi-Level Cell),为2bit/cell,速度一般寿命一般,价格一般,约3000—10000次擦写寿命。
TLC(Trinary-Level Cell),为3bit/cell,也有Flash厂家叫8LC,速度慢寿命短,价格便宜,约500次擦写寿命。
QLC(Quad-Level Cell),为4bit/cell,可擦写寿命仅有100-150次。
将排序在第一队列的待写入子数据和排序从第二队列移到第一队列的已写入子数据的数据类型判定为热数据,将排序在第二队列的待写入子数据和排序从第一队列移到第二队列的已写入子数据的数据类型判定为温数据,将排序从第二队列移出的已写入子数据的数据类型判定为冷数据。
将数据类型为热数据或温数据的待写入子数据写入到第一存储区,将数据类型由温数据转变为热数据的已写入子数据在第一存储区的数据类型更新为热数据,将数据类型由热数据转变为温数据的已写入子数据在第一存储区的数据类型更新为温数据,将数据类型由温数据转变为冷数据的已写入子数据写入到第二存储区。
确定所有待写入子数据所在队列和所在队列的排序后,部分已写入子数据的队列和/排序也会相应改变。
根据待写入子数据所在队列可以确定待写入子数据的数据类型,当在第一队列,则为热数据,当在第二队列,则为温数据,当既不在第一队列也不在第二队列,则为冷数据。
根据数据类型,驱动程序会向主机缓存下发数据写指令,使待写入子数据写入到硬盘中对应的存储区;同时使队列改变的已写入子数据更换到对应的存储区或更新队列改变的已写入子数据在所在存储区的数据类型。
可选地,将数据类型变化的已写入子数据写入到新的对应的存储区后,对其之前所在的存储区的已写入子数据进行注销以进行垃圾回收;将与已写入子数据的逻辑地址相同的待写入子数据写入到对应的存储区后,对所述逻辑地址相同的已写入子数据进行注销以进行垃圾回收。可以采取垃圾回收的方式更换存储区;对存在相同目标逻辑地址的已写入子数据,当目标逻辑地址对应的待写入子数据写入到对应的存储区后,会将该已写入子数据注销。
图7为一个实施例中数据存储装置的结构框图;参考图7,该装置包括:
数据信息获取单元10,用于获取待写入数据的数据大小和逻辑地址。
划分单元20,用于将所述待写入数据按预设长度等长度划分为多个待写入子数据,其中,所述待写入数据的数据大小为所述预设长度的整数倍;
子数据信息获取单元30,还用于获取每个所述待写入子数据的逻辑地址。
排序单元40,用于分别根据每个所述待写入子数据的逻辑地址和第一队列、第二队列的当前负载状态、当前排序状态按预设规则调整、更新所述第一队列、第二队列的负载状态、排序状态,获取每个所述待写入子数据和变化的已写入子数据的所在队列和在所在队列的排序。
数据类型获取单元50,用于根据每个所述待写入子数据和变化的已写入子数据的所在队列和在所在队列的排序,获取每个所述待写入子数据的数据类型和队列改变的已写入子数据的数据类型。
控制单元60,用于发送数据写指令,使所述硬盘根据所述数据写指令,分别将每个所述待写入子数据写入到对应的存储区,将队列改变的已写入子数据写入到对应的存储区或更新队列改变的已写入子数据在所在存储区的数据类型。
图8为一个实施例中排序的示意图;参考图8,第二队列对应的是温数据的排序,即图8所示的warm queue link,在第二队列中有a1-aN个已写入子数据对应的排序,其中已写入子数据a1对应的排序排在第二队列的head头部,已写入子数据aN对应的排序排在第二队列的尾部tail,此时第二队列未满,当有一个新的待写入子数据New加入到第二队列排序时,将第二队列的head头部作为待写入子数据New在第二队列的排序,已写入子数据a1-aN在第二队列的排序会整体后移一位,其中这个新的待写入子数据New的逻辑地址与已写入子数据a1-aN的逻辑地址都不相同,待写入子数据New此时在第二队列中,因此为温数据。
图9为另一个实施例中排序的示意图;参考图9,相对于图8,此时第二队列已满,当一个新的待写入子数据New加入到第二队列排序时,将第二队列的head头部作为待写入子数据New在第二队列的排序,已写入子数据a1-aN在第二队列的排序会整体后移一位,且,尾部tail的已写入子数据aN的排序会从第二队列中移出,aN因为队列改变会从温数据变为冷数据,其中这个新的待写入子数据New的逻辑地址与已写入子数据a1-aN的逻辑地址都不相同,待写入子数据New此时在第二队列中,因此为温数据。
图10为另一个实施例中排序的示意图;参考图10,待写入子数据的逻辑地址与第二队列中的已写入子数据ax的逻辑地址相同,且第二队列未满,则将第二队列的head头部作为已写入子数据ax在第二队列的排序,同时将已写入数据a1-ax-1在第二队列的排序整体向后移动一位,此时待写入子数据的排序即为已写入数据ax的当前排序即第二队列的第一位,此时待写入子数据为温数据,当这个待写入子数据被写入到温数据对应的存储区后,同时会将硬盘中已写入数据ax注销。
图11为另一个实施例中排序的示意图;参考图11,待写入子数据的逻辑地址与第二队列中的已写入子数据ax的逻辑地址相同,第二队列已满,且已写入子数据ax在第二队列的排序位于第二队列的后半段(middle之后),将第二队列的head头部作为已写入子数据ax在第二队列的排序,同时将已写入数据a1-ax-1在第二队列的排序整体向后移动一位,此时待写入子数据的排序即为已写入数据ax的当前排序即第二队列的第一位,此时待写入子数据为温数据,当这个待写入子数据被写入到温数据对应的存储区后,同时会将硬盘中已写入数据ax注销。
图12为另一个实施例中排序的示意图;参考图12,待写入子数据的逻辑地址与第二队列中的已写入子数据ax的逻辑地址相同,第二队列已满,且已写入子数据ax在第二队列的排序位于第二队列的前半段(middle之前),此时会将已写入子数据ax的队列调整为第一队列,已写入子数据ax在第一队列的排序需要根据第一队列的负载状态进行排序。
当第一队列已满,则会将第一队列后半段排序的第一位作为已写入子数据ax在第一队列的排序,即第一队列后半段排序的第一位作为待写入子数据的排序,同时,将第一队列尾部的已写入子数据的排序从第一队列移到第二队列的头部head,第二队列排序位于已写入子数据ax之前的排序整体后移一位,此时待写入子数据的数据类型为热数据,当这个待写入子数据被写入到热数据对应的存储区后,同时会将硬盘中已写入数据ax注销,同时从第一队列移到第二队列的已写入子数据的数据类型从热数据转变为温数据。
当第一队列未满,则会将第一队列的头部head作为已写入子数据ax在第一队列的排序,即第一队列的头部head作为待写入子数据的排序,此时待写入子数据的数据类型为热数据,当这个待写入子数据被写入到热数据对应的存储区后,同时会将硬盘中已写入数据ax注销。
当待写入子数据的逻辑地址与第一队列中的已写入子数据ax的逻辑地址相同,且第一队列未满,则将已写入子数据ax在第一队列的排序与已写入子数据ax-1在第一队列的排序进行交换,将交换后的已写入子数据ax在第一队列的排序作为待写入子数据的排序,当这个待写入子数据被写入到热数据对应的存储区后,同时会将硬盘中已写入数据ax注销。
当待写入子数据的逻辑地址与第一队列中的已写入子数据ax的逻辑地址相同,且第一队列已满;则当已写入子数据ax的排序在第一队列的排序的前半段,则将已写入子数据ax在第一队列的排序与已写入子数据ax-1在第一队列的排序进行交换,将交换后的已写入子数据ax在第一队列的排序作为待写入子数据的排序;当已写入子数据ax的排序在第一队列的排序的后半段,则将第一队列的排序的前半段后的第一位作为已写入子数据ax在第一队列的排序,同时将排序位于已写入子数据ax之前且位于第一队列后半段的已写入子数据的排序整体后移一位,将调整后的已写入子数据ax在第一队列的排序作为待写入子数据在第一队列的排序。
本申请实施例提供的数据存储方法,通过驱动程序对主机缓存中的待写入子数据和已写入到硬盘中的已写入子数据进行排序,动态的调整、更新第一队列和第二队列的排序状态和负载状态,以重新确定待写入子数据和队列改变的已写入子数据的队列和排序,根据子数据所在的队列确定子数据的数据类型,进而将子数据写入到硬盘中对应的存储区或更新队列改变的已写入子数据在所在存储区的数据类型;根据本方法,通过排序将热数据、温数据、冷数据分类存储,且通过排序动态调整改变数据类型进而调整子数据的存储区,保证对应存储区存储的子数据是真正的热数据、温数据或冷数据;另外,不需要硬盘来判断数据的数据类型,减轻了硬盘工作量,延长了硬盘的使用寿命,且利于硬盘的垃圾回收。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本发明的具体实施方式,使本领域技术人员能够理解或实现本发明。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所申请的原理和新颖特点相一致的最宽的范围。
Claims (9)
1.一种数据存储方法,其特征在于,所述方法包括:
获取待写入数据的数据大小和逻辑地址;
将所述待写入数据按预设长度等长度划分为多个待写入子数据,其中,所述待写入数据的数据大小为所述预设长度的整数倍;
获取每个所述待写入子数据的逻辑地址;
分别根据每个所述待写入子数据的逻辑地址和第一队列、第二队列的当前负载状态、当前排序状态按预设规则调整、更新所述第一队列、第二队列的负载状态、排序状态,获取每个所述待写入子数据和变化的已写入子数据的所在队列和在所在队列的排序;
根据每个所述待写入子数据和变化的已写入子数据的所在队列和在所在队列的排序,获取每个所述待写入子数据的数据类型和队列改变的已写入子数据的数据类型,其中所述数据类型包括热数据、温数据、冷数据;
发送数据写指令,使硬盘根据所述数据写指令,分别将每个所述待写入子数据写入到对应的存储区,将队列改变的已写入子数据写入到对应的存储区或更新队列改变的已写入子数据在所在存储区的数据类型;
其中,所述第一队列用于指示硬盘中每个数据类型为热数据的已写入子数据和在第一队列获得排序的待写入子数据的逻辑地址、在第一队列的排序,所述第二队列用于指示所述硬盘中每个数据类型为温数据的已写入子数据和在第二队列获得排序的待写入子数据的逻辑地址、在第二队列的排序,每个所述热数据和温数据的数据大小均为预设长度,所述负载状态为已满或未满;
其中,所述变化的已写入子数据为队列和/或排序变化的已写入子数据;
其中,所述数据写指令包括每个所述待写入子数据和队列改变的已写入子数据的逻辑地址信息、数据大小信息、数据类型信息;
所述分别根据每个所述待写入子数据的逻辑地址和第一队列、第二队列的当前负载状态、当前排序状态按预设规则调整、更新所述第一队列、第二队列的负载状态、排序状态,获取每个所述待写入子数据和变化的已写入子数据的所在队列和在所在队列的排序,包括:
将所述多个待写入子数据中位于缓存中最前列的待写入子数据作为待排序子数据;
将所述待排序子数据的逻辑地址作为目标逻辑地址;
判断在所述第一队列或第二队列中是否存在与所述目标逻辑地址相同的已写入子数据的逻辑地址;
若在所述第一队列或第二队列中存在与所述目标逻辑地址相同的已写入子数据的逻辑地址,则将逻辑地址为所述目标逻辑地址的已写入子数据作为目标子数据,根据所述目标子数据的所在队列、在所在队列的排序和所述第一队列、第二队列的当前负载状态、当前排序状态,对所述第一队列、第二队列的已写入子数据的所在队列和所在队列的排序进行调整并更新,将调整后的所述目标子数据的队列和排序作为所述待排序子数据的所在队列和所在队列的排序;
若在所述第一队列或第二队列中不存在与所述目标逻辑地址相同的已写入子数据的逻辑地址,则将所述第二队列作为所述待排序子数据的队列,并根据所述第二队列的当前负载状态,确定所述待排序子数据在所述第二队列的排序,对所述第二队列的负载状态及已写入子数据的所在队列和在所在队列的排序进行调整并更新;
在所述将调整后的所述目标子数据的队列和排序作为所述待排序子数据的所在队列和所在队列的排序之后,或,在对所述第二队列的负载状态及已写入子数据的所在队列和在所在队列的排序进行调整并更新之后,还包括:
分别获取调整并更新后的所述第一队列和第二队列的当前负载状态和当前排序状态;
将所述待排序子数据的下一待写入子数据作为待排序子数据,执行所述将所述待排序子数据的逻辑地址作为目标逻辑地址,判断在所述第一队列或第二队列中是否存在与所述目标逻辑地址相同的已写入子数据的逻辑地址,直至确定所有待写入子数据的所在队列和在所在队列的排序,获取每个所述待写入子数据和变化的已写入子数据的所在队列和在所在队列的排序。
2.根据权利要求1所述的方法,其特征在于,所述若在所述第一队列或第二队列中存在与所述目标逻辑地址相同的已写入子数据的逻辑地址,则将逻辑地址为所述目标逻辑地址的已写入子数据作为目标子数据,根据所述目标子数据的所在队列、在所在队列的排序和所述第一队列、第二队列的当前负载状态、当前排序状态,对所述第一队列、第二队列的已写入子数据的所在队列和所在队列的排序进行调整并更新,将调整后的所述目标子数据的队列和排序作为所述待排序子数据的所在队列和所在队列的排序,包括:
若所述目标子数据的所在队列为第一队列,则判断所述第一队列是否已满,
若所述第一队列已满,则根据所述目标子数据在所述第一队列的当前排序,对所述第一队列、第二队列的已写入子数据的所在队列和所在队列的排序进行调整并更新,将调整后的所述目标子数据的队列和所在队列排序作为所述待排序子数据的所在队列和所在队列的排序,
若所述第一队列未满,则将所述目标子数据的排序与其前一位排序对应的已写入子数据的排序进行交换,将交换后的所述目标子数据的排序作为所述待排序子数据在所述第一队列的排序;
若所述目标子数据的所在队列为第二队列,则判断所述第二队列是否已满,
若所述第二队列已满,则根据所述目标子数据在所述第二队列的当前排序和所述第一队列的当前负载状态,对所述第一队列、第二队列的已写入子数据的所在队列和所在队列的排序进行调整并更新,将调整后的所述目标子数据的队列和排序作为所述待排序子数据的所在队列和所在队列的排序,
若所述第二队列未满,则将所述第二队列中排序位于所述目标子数据排序之前的已写入子数据的排序整体后移一位,将所述第二队列的第一位作为所述待排序子数据在所述第二队列的排序。
3.根据权利要求2所述的方法,其特征在于,所述若在所述第一队列或第二队列中不存在与所述目标逻辑地址相同的已写入子数据的逻辑地址,则将所述第二队列作为所述待排序子数据的队列,并根据所述第二队列的当前负载状态,确定所述待排序子数据在所述第二队列的排序,对所述第二队列的负载状态及已写入子数据的所在队列和在所在队列的排序进行调整并更新,包括:
若所述第二队列已满,则将所述第二队列的所有已写入子数据对应的排序整体后移一位,将所述第二队列的最后一位从所述第二队列移出,将所述第二队列的第一位作为所述待排序子数据在所述第二队列的排序,
若所述第二队列未满,则将所述第二队列的所有已写入子数据对应的排序整体向后移一位,将所述第二队列的第一位作为所述待排序子数据在所述第二队列的排序。
4.根据权利要求2所述的方法,其特征在于,所述若所述第一队列已满,则根据所述目标子数据在所述第一队列的当前排序,对所述第一队列、第二队列的已写入子数据的所在队列和所在队列的排序进行调整并更新,将调整后的所述目标子数据的队列和所在队列排序作为所述待排序子数据的所在队列和所在队列的排序,包括:
判断所述目标子数据在所述第一队列的当前排序是否为所述第一队列的第一预设范围内的任意位置,所述第一预设范围为所述第一队列的前部分排序;
若所述目标子数据在所述第一队列的当前排序为所述第一队列的第一预设范围内的任意位置,则将所述目标子数据的排序与其前一位排序对应的已写入子数据的排序进行交换,将交换后的所述目标子数据的排序作为所述待排序子数据在所述第一队列的排序,
若所述目标子数据在所述第一队列的当前排序不为所述第一队列的第一预设范围内的任意位置,则将所述目标子数据的排序与所述第一队列的第一预设范围后的第一位对应的已写入子数据的排序进行交换,将交换后的所述目标子数据的排序作为所述待排序子数据在所述第一队列的排序。
5.根据权利要求4所述的方法,其特征在于,所述若所述第二队列已满,则根据所述目标子数据在所述第二队列的当前排序和所述第一队列的当前负载状态,对所述第一队列、第二队列的已写入子数据的所在队列和所在队列的排序进行调整并更新,将调整后的所述目标子数据的队列和排序作为所述待排序子数据的所在队列和所在队列的排序,包括:
判断所述目标子数据在所述第二队列的当前排序是否为所述第二队列的第二预设范围内的任意位置,所述第二预设范围为所述第二队列的前部分排序;
若所述目标子数据在所述第二队列的当前排序为所述第二队列的第二预设范围内的任意位置,则,
若所述第一队列已满,则将所述第一队列中排序在所述第一队列的第一预设范围后的已写入子数据的排序整体后移一位,将所述第一队列的第一预设范围后的第一位作为所述待排序子数据在所述第一队列的排序,同时,将所述第一队列的最后一位从所述第一队列移出,将所述第二队列的第一位作为从所述第一队列移出的已写入子数据的排序,将第二队列中排序位于所述目标子数据排序之前的已写入子数据的排序整体后移一位,
若所述第一队列未满,则将所述第一队列的已写入子数据的排序整体后移一位,将所述第一队列的第一位作为所述待排序子数据在所述第一队列的排序,
若所述目标子数据在所述第二队列的当前排序不为所述第二队列的第二预设范围内的任意位置,则将所述第二队列的第一位作为所述目标子数据的排序,同时将第二队列中排序位于所述目标子数据排序之前的已写入子数据的排序整体后移一位。
6.根据权利要求5所述的方法,其特征在于,所述硬盘包括第一存储区、第二存储区,所述第一存储区用于存储热数据和温数据,所述第二存储区用于存储冷数据;
所述根据每个所述待写入子数据和变化的已写入子数据的所在队列和在所在队列的排序,获取每个所述待写入子数据的数据类型和队列改变的已写入子数据的数据类型,包括:
将排序在所述第一队列的待写入子数据和排序从所述第二队列移到所述第一队列的已写入子数据的数据类型判定为热数据,
将排序在所述第二队列的待写入子数据和排序从所述第一队列移到所述第二队列的已写入子数据的数据类型判定为温数据,
将排序从所述第二队列移出的已写入子数据的数据类型判定为冷数据;
所述分别将每个所述待写入子数据写入到对应的存储区,将队列改变的已写入子数据写入到对应的存储区或更新队列改变的已写入子数据在所在存储区的数据类型,包括:
将数据类型为热数据或温数据的待写入子数据写入到第一存储区,
将数据类型由温数据转变为热数据的已写入子数据在第一存储区的数据类型更新为热数据,
将数据类型由热数据转变为温数据的已写入子数据在第一存储区的数据类型更新为温数据,
将数据类型由温数据转变为冷数据的已写入子数据写入到第二存储区。
7.根据权利要求6所述的方法,其特征在于,所述方法还包括:
将数据类型变化的已写入子数据写入到新的对应的存储区后,对其之前所在的存储区的已写入子数据进行注销以进行垃圾回收;
将与已写入子数据的逻辑地址相同的待写入子数据写入到对应的存储区后,对所述逻辑地址相同的已写入子数据进行注销以进行垃圾回收。
8.根据权利要求6或7所述的方法,其特征在于,所述第一存储区为SLC存储单元,所述第二存储区为MLC存储单元、TLC存储单元、QLC存储单元中的任意一种。
9.一种数据存储装置,其特征在于,所述装置包括:
数据信息获取单元,用于获取待写入数据的数据大小和逻辑地址;
划分单元,用于将所述待写入数据按预设长度等长度划分为多个待写入子数据,其中,所述待写入数据的数据大小为所述预设长度的整数倍;
子数据信息获取单元,还用于获取每个所述待写入子数据的逻辑地址;
排序单元,用于分别根据每个所述待写入子数据的逻辑地址和第一队列、第二队列的当前负载状态、当前排序状态按预设规则调整、更新所述第一队列、第二队列的负载状态、排序状态,获取每个所述待写入子数据和变化的已写入子数据的所在队列和在所在队列的排序;
数据类型获取单元,用于根据每个所述待写入子数据和变化的已写入子数据的所在队列和在所在队列的排序,获取每个所述待写入子数据的数据类型和队列改变的已写入子数据的数据类型;
控制单元,用于发送数据写指令,使硬盘根据所述数据写指令,分别将每个所述待写入子数据写入到对应的存储区,将队列改变的已写入子数据写入到对应的存储区或更新队列改变的已写入子数据在所在存储区的数据类型;
其中,所述第一队列用于指示硬盘中每个数据类型为热数据的已写入子数据和在第一队列获得排序的待写入子数据的逻辑地址、在第一队列的排序,所述第二队列用于指示所述硬盘中每个数据类型为温数据的已写入子数据和在第二队列获得排序的待写入子数据的逻辑地址、在第二队列的排序,每个所述热数据和温数据的数据大小均为预设长度,所述负载状态为已满或未满;
其中,所述变化的已写入子数据为队列和/或排序变化的已写入子数据;
其中,所述数据写指令包括每个所述待写入子数据和队列改变的已写入子数据的逻辑地址信息、数据大小信息、数据类型信息;
所述分别根据每个所述待写入子数据的逻辑地址和第一队列、第二队列的当前负载状态、当前排序状态按预设规则调整、更新所述第一队列、第二队列的负载状态、排序状态,获取每个所述待写入子数据和变化的已写入子数据的所在队列和在所在队列的排序,包括:
将所述多个待写入子数据中位于缓存中最前列的待写入子数据作为待排序子数据;
将所述待排序子数据的逻辑地址作为目标逻辑地址;
判断在所述第一队列或第二队列中是否存在与所述目标逻辑地址相同的已写入子数据的逻辑地址;
若在所述第一队列或第二队列中存在与所述目标逻辑地址相同的已写入子数据的逻辑地址,则将逻辑地址为所述目标逻辑地址的已写入子数据作为目标子数据,根据所述目标子数据的所在队列、在所在队列的排序和所述第一队列、第二队列的当前负载状态、当前排序状态,对所述第一队列、第二队列的已写入子数据的所在队列和所在队列的排序进行调整并更新,将调整后的所述目标子数据的队列和排序作为所述待排序子数据的所在队列和所在队列的排序;
若在所述第一队列或第二队列中不存在与所述目标逻辑地址相同的已写入子数据的逻辑地址,则将所述第二队列作为所述待排序子数据的队列,并根据所述第二队列的当前负载状态,确定所述待排序子数据在所述第二队列的排序,对所述第二队列的负载状态及已写入子数据的所在队列和在所在队列的排序进行调整并更新;
在所述将调整后的所述目标子数据的队列和排序作为所述待排序子数据的所在队列和所在队列的排序之后,或,在对所述第二队列的负载状态及已写入子数据的所在队列和在所在队列的排序进行调整并更新之后,还包括:
分别获取调整并更新后的所述第一队列和第二队列的当前负载状态和当前排序状态;
将所述待排序子数据的下一待写入子数据作为待排序子数据,执行所述将所述待排序子数据的逻辑地址作为目标逻辑地址,判断在所述第一队列或第二队列中是否存在与所述目标逻辑地址相同的已写入子数据的逻辑地址,直至确定所有待写入子数据的所在队列和在所在队列的排序,获取每个所述待写入子数据和变化的已写入子数据的所在队列和在所在队列的排序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910958812.XA CN111045598B (zh) | 2019-10-10 | 2019-10-10 | 数据存储方法、装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910958812.XA CN111045598B (zh) | 2019-10-10 | 2019-10-10 | 数据存储方法、装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111045598A CN111045598A (zh) | 2020-04-21 |
CN111045598B true CN111045598B (zh) | 2023-08-15 |
Family
ID=70232240
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910958812.XA Active CN111045598B (zh) | 2019-10-10 | 2019-10-10 | 数据存储方法、装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111045598B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116009761A (zh) * | 2021-10-21 | 2023-04-25 | 华为技术有限公司 | 一种数据写入方法以及相关设备 |
CN116974952B (zh) * | 2023-09-25 | 2023-12-12 | 元执(江苏)智能科技有限公司 | 数字动态处理方法、装置、设备及系统 |
CN118170737A (zh) * | 2024-05-11 | 2024-06-11 | 中移(苏州)软件技术有限公司 | 数据处理方法、装置及相关设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102045258A (zh) * | 2010-12-22 | 2011-05-04 | 北京星网锐捷网络技术有限公司 | 数据缓存管理方法及装置 |
WO2017201977A1 (zh) * | 2016-05-25 | 2017-11-30 | 杭州海康威视数字技术股份有限公司 | 一种数据写、读方法、装置及分布式对象存储集群 |
CN109471875A (zh) * | 2018-09-25 | 2019-03-15 | 网宿科技股份有限公司 | 基于缓存数据的热度管理方法、服务器及存储介质 |
CN110096350A (zh) * | 2019-04-10 | 2019-08-06 | 山东科技大学 | 基于集群节点负载状态预测的冷热区域划分节能存储方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170315740A1 (en) * | 2016-04-29 | 2017-11-02 | Netapp, Inc. | Technique for pacing and balancing processing of internal and external i/o requests in a storage system |
-
2019
- 2019-10-10 CN CN201910958812.XA patent/CN111045598B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102045258A (zh) * | 2010-12-22 | 2011-05-04 | 北京星网锐捷网络技术有限公司 | 数据缓存管理方法及装置 |
WO2017201977A1 (zh) * | 2016-05-25 | 2017-11-30 | 杭州海康威视数字技术股份有限公司 | 一种数据写、读方法、装置及分布式对象存储集群 |
CN109471875A (zh) * | 2018-09-25 | 2019-03-15 | 网宿科技股份有限公司 | 基于缓存数据的热度管理方法、服务器及存储介质 |
CN110096350A (zh) * | 2019-04-10 | 2019-08-06 | 山东科技大学 | 基于集群节点负载状态预测的冷热区域划分节能存储方法 |
Non-Patent Citations (1)
Title |
---|
姚英彪 ; 王发宽 ; .具有磨损均衡意识的混合固态硬盘FTL算法.计算机学报.2017,(10),全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN111045598A (zh) | 2020-04-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111045598B (zh) | 数据存储方法、装置 | |
US10409526B2 (en) | Adaptive garbage collection | |
JP5418808B2 (ja) | 適応ハイブリッド密度メモリ記憶装置の制御方法、及び適応ハイブリッド密度メモリ記憶装置 | |
US5860124A (en) | Method for performing a continuous over-write of a file in nonvolatile memory | |
TWI384488B (zh) | Nonvolatile storage device and its data writing method | |
EP3588259B1 (en) | Garbage collection method for storage media, storage medium, and program product | |
US20100082883A1 (en) | Hybrid density memory system and control method thereof | |
US11216368B2 (en) | Memory system for garbage collection using page offsets, invalid offset ratio, sequential ratio, and logical address prediction | |
JP6139381B2 (ja) | メモリシステムおよび方法 | |
US9665481B2 (en) | Wear leveling method based on timestamps and erase counts, memory storage device and memory control circuit unit | |
JP6139807B2 (ja) | ストレージ装置、ストレージ装置の制御方法、及びプログラムを記憶するコンピュータ読み取り可能な不揮発性記憶媒体 | |
EP1280048A2 (en) | Buffer control method for hard disk drives | |
TW201810044A (zh) | 用於資料儲存裝置的損耗平均方法 | |
WO2011061724A1 (en) | Memory controller and methods for enhancing write performance of a flash device | |
KR101929584B1 (ko) | 데이터 저장 장치 및 그 동작 방법 | |
US8738876B2 (en) | Method for performing block management, and associated memory device and controller thereof | |
US11249903B2 (en) | Memory system for garbage collection operation and operating method thereof | |
KR20090093626A (ko) | 메모리 시스템 및 그것의 블록 병합 방법 | |
US11204697B2 (en) | Wear leveling in solid state devices | |
CN104424110A (zh) | 固态驱动器的主动回收 | |
US9870826B2 (en) | Memory apparatus and data access method thereof by using multiple memories for lifetime extension | |
US8271721B2 (en) | Data writing method and data storage device | |
US8762623B2 (en) | Method for managing a plurality of blocks of a flash memory, and associated memory device and controller thereof | |
CN116450036A (zh) | 一种面向nand闪存存储器的数据分离放置方法 | |
CN113535089A (zh) | 用于ssd的映射表的刷新方法 |
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 | ||
PE01 | Entry into force of the registration of the contract for pledge of patent right |
Denomination of invention: Data storage methods and devices Effective date of registration: 20231120 Granted publication date: 20230815 Pledgee: Bank of Shanghai Limited by Share Ltd. Shenzhen branch Pledgor: SHENZHEN TIGO SEMICONDUCTOR Co.,Ltd. Registration number: Y2023980066527 |
|
PE01 | Entry into force of the registration of the contract for pledge of patent right |