CN103425435B - 磁盘存储方法及磁盘存储*** - Google Patents

磁盘存储方法及磁盘存储*** Download PDF

Info

Publication number
CN103425435B
CN103425435B CN201210150002.XA CN201210150002A CN103425435B CN 103425435 B CN103425435 B CN 103425435B CN 201210150002 A CN201210150002 A CN 201210150002A CN 103425435 B CN103425435 B CN 103425435B
Authority
CN
China
Prior art keywords
data blocks
freed
data block
block
node
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
Application number
CN201210150002.XA
Other languages
English (en)
Other versions
CN103425435A (zh
Inventor
黄明生
田诗源
陈忠湘
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhen Tencent Computer Systems Co Ltd
Original Assignee
Shenzhen Tencent Computer Systems Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shenzhen Tencent Computer Systems Co Ltd filed Critical Shenzhen Tencent Computer Systems Co Ltd
Priority to CN201210150002.XA priority Critical patent/CN103425435B/zh
Publication of CN103425435A publication Critical patent/CN103425435A/zh
Application granted granted Critical
Publication of CN103425435B publication Critical patent/CN103425435B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

一种磁盘存储方法及磁盘存储***,该方法包括步骤:接收数据块分配指令;根据需分配数据块的大小,选择相应的空闲数据块节点;在该空闲数据块节点对应的空闲数据块满足预设***条件时,对该空闲数据块节点对应的空闲数据块进行***后分配数据块节点。本发明方案在根据数据块分配指令选择了相应的空闲数据块节点后,还在该空闲数据块节点满足预设***条件时,对该选择的空闲数据块进行***后再分配数据块节点,从而使得***后进行分配的空闲数据块能够刚好满足需分配数据块的大小,不会额外占用不必要的数据块空间,提高了磁盘空间存储的利用率,在进行读记录操作、写记录操作时,也只需要执行一次读/写操作,提高了磁盘存储性能。

Description

磁盘存储方法及磁盘存储***
技术领域
本发明涉及一种磁盘存储方法以及一种磁盘存储***,特别地涉及一种块***与合并的磁盘存储方法及***。
背景技术
磁盘存储(缓存)***是指以磁盘或者磁盘上的文件为载体,实现大量业务记录数据的新增、查询、修改、删除等操作的***。磁盘存储***的应用主要是如何把记录存储到磁盘上,并对记录进行读、写、删除等操作,而执行这些操作的核心则是数据在磁盘上的存储结构及其分配算法。其中,这里的记录是指描述业务中有价值的一段信息数据,一般都是包含记录关键字(称为key)和记录内容(成为value),例如一张图片、一个小文件、一条用户描述信息等等。
目前已有的磁盘存储方案主要有两种,其中一种是Squid的COSS磁盘存储方案,其原理是直接采用一个大文件(或者直接采用块设备文件),文件末尾不断增长直到文件超过预设置的大小则回到文件头部,如此循环使用整个文件。其是基于定长的数据块大小存储记录,每个记录会跨连续若干个数据块。当读记录时,通过内存索引定位到文件中的某个偏移量,并读出所有数据块内容;当写记录时,则直接在文件末尾进行追加。由于删除记录会导致文件存在空洞使得空间利用率下降,COSS经常在适当的时候(一般是读操作发生的时候,进行判断)进行数据重整,造成对磁盘额外的读写,导致磁盘性能出现下降。
另外一种方案则是类Linux的Ext2/3文件***的磁盘存储方案,其是把磁盘文件(或者块设备文件)的线性空间按照定长划分为许多个数据块,每个存储的记录会占用多个数据块。当读记录的时候,需要分别读取该记录对应的各个数据块,并把数据合并起来返回给上层;当写记录的时候,需要把记录数据划分到各个数据块,并逐个数据块写入文件中。当记录删除的时候,仅仅需要对内存索引进行标志即可,并把空闲数据块采用LRU链表方式组织起来。这种方式,由于所有数据块定长,一方面由于记录长度的多样性,会导致某些数据块浪费了空间,内碎片现象显著,影响空间利用率;另一方面,由于记录数据被打散到多个数据块,且数据块不一定连续,可能需要调用多次磁盘读写操作(即多次pread/pwrite***调用),严重影响了***的性能。
发明内容
针对上述现有技术中存在的问题,本发明的一个目的在于提供一种磁盘存储方法,另一个目的在于提供一种磁盘存储***,其可以提高磁盘存储的空间利用率,提升磁盘存储的性能。
为达到上述目的,本发明采用以下技术方案:
一种磁盘存储方法,包括步骤:
接收数据块分配指令;
根据需分配数据块的大小,选择相应的空闲数据块节点;
在该空闲数据块节点对应的空闲数据块满足预设***条件时,对该空闲数据块节点对应的空闲数据块进行***后分配数据块节点。
一种磁盘存储***,包括:
指令接收模块,用于接收数据块分配指令;
选择模块,用于在指令接收模块接收到数据块分配指令时,根据需分配数据块的大小,选择相应的空闲数据块节点;
***判定模块,用于判断选择模块选择的空闲数据块节点对应的空闲数据块是否满足预设***条件;
数据块***模块,用于在***模块的判定结果为满足预设***条件时,对该空闲数据块节点对应的空闲数据块进行***后分配数据块节点。
根据上述本发明方案,其是在接收到数据块分配指令时,根据该数据块分配指令选择了相应的空闲数据块节点后,还对该空闲数据块节点是否满足预设***条件进行判断,并在满足预设***条件时,对该选择的空闲数据块进行***后再分配数据块节点,从而使得***后进行分配的空闲数据块能够刚好满足需分配数据块的大小,该分配的数据块不会额外占用不必要的数据块空间,提高了磁盘空间存储的利用率,在进行读记录操作、写记录操作时,也只需要执行一次读/写操作,提升了磁盘存储性能。
附图说明
图1是本发明方法在一个具体实施例中进行数据块分配时的流程示意图;
图2是本发明方法在一个具体实施例中进行数据块释放时的流程示意图;
图3是本发明的磁盘存储方法所应用的核心索引结构的示例图;
图4是本发明的磁盘存储***实施例的结构示意图。
具体实施方式
以下结合其中的较佳实施方式对本发明方案进行详细阐述。
本发明方案所采用的基本思想,是使用变长的数据块对记录数据进行组织管理,即一个记录只存储在一个数据块中。在需要进行读记录、写记录的时候,都可以只需要执行一次磁盘IO操作,据此提高磁盘存储空间的利用率,提升磁盘存储的性能。
基于该思想,本发明实施例中所采用的方案是:
接收到数据块分配指令;
根据需分配数据块的大小,选择相应的空闲数据块节点;
在该空闲数据块节点对应的空闲数据块满足预设***条件时,对该空闲数据块节点对应的空闲数据块进行***后分配数据块节点。
根据如上所述的本实施例中的方案,其是在接收到数据块分配指令时,根据该数据块分配指令选择了相应的空闲数据块节点后,还对该空闲数据块节点是否满足预设***条件进行判断,并在满足预设***条件时,对该选择的空闲数据块进行***后再分配数据块节点,以使得***后进行分配的空闲数据块能够刚好满足需分配数据块的大小,该分配的数据块不会额外占用不必要的数据块空间,提高了磁盘空间存储的利用率,在进行读记录操作、写记录操作时,也只需要执行一次读/写操作,提升了磁盘存储性能。
其中,在上述对所选择的空闲数据块节点是否满足预设***条件进行判断时,可以是基于需分配数据块的大小、以及预先设定的数据块大小阈值进行判定,若所选择的空闲数据块节点对应的空闲数据块的大小减去需分配数据块大小的差值大于设定数据块大小阈值,则说明该将该选择的空闲数据块进行***后,剩余的空闲数据块还可以实现相应大小记录的存储,从而可以判定所选择的空闲数据块是满足预设***条件的,可以对所选择的空闲数据块进行***。
在对所选择的空闲数据块节点对应的空闲数据块进行***时,可以是基于所需分配数据块的大小将该所选择的空闲数据块***为两个空闲数据块,一个空闲数据块的大小与上述需分配数据块的大小相适应,作为即将使用的待使用空闲数据块,***后的另一空闲数据块可以作为一个独立的空闲数据块存在以对后续操作过程中其他相适应大小的记录进行存储。
在其中一个实施例中,考虑到为避免空闲数据块的个数无限制的增多,在上述***过程之后,还可以进一步判断与上述***后未使用的空闲数据块相邻的数据块是否为空闲数据块,并在该相邻的数据块是空闲数据块的情况下,将该***后未使用的空闲数据块与该相邻空闲数据块合并为新的空闲数据块。
其中,在上述对所选择的空闲数据块进行***时,可以是以***后磁盘逻辑上在前的空闲数据块作为分配的数据块,也可以是以***后磁盘逻辑上在后的空闲数据块作为分配的数据块。在以***后磁盘逻辑上在前的空闲数据块作为分配的数据块的情况下,***后的另一空闲数据块则与磁盘逻辑上相邻的后相邻的空闲数据块合并为新的空闲数据块。在以***后磁盘逻辑上在后的空闲数据块作为分配的数据块的情况下,***后的另一空闲数据块则与磁盘逻辑上相邻的前相邻的空闲数据块合并为新的空闲数据块。具体的实现方式可以根据选择及应用需要的不同选择不同的方式。
另外,由于可能是与待***的空闲数据块逻辑上前相邻的数据块是空闲数据块,也可能是与待***的空闲数据块逻辑上后相邻的数据块是空闲数据块,因此,在进行***之前,还可以对空闲数据块节点的两个相邻数据块节点中哪一个所对应的数据块是空闲的进行判断,或者说是对空闲数据块节点的两个相邻数据块节点对应的数据块是否存在空闲数据块进行判断,若存在,则在***时,通过使***后空闲数据块与该两个相邻数据块节点中对应的数据块为空闲数据块的那个相邻数据块节点相邻的方式进行***,使得***后得到的***后空闲数据块与该两个数据块节点中对应的数据块为空闲的那个相邻,以保证***之后得到的***后空闲数据块能够与相邻的空闲数据块顺利合并。
结合上述各实现方式,图1中示出了本发明的磁盘存储方法在进行数据块分配时的一个具体实施例的流程示意图,在下述具体实施例的说明中,是以***后再对相邻数据块是否为空闲数据块进行判断为例进行说明。如图1所示,在进行数据块分配时,本实施例中的方法包括步骤:
步骤S101:接收到数据块分配指令,根据需分配数据块的大小,选择相应的空闲数据块节点,进入步骤S102;
步骤S102:判断该所选择的空闲数据块节点对应的空闲数据块是否可***,若是,进入步骤S103;
步骤S103:将该空闲数据块节点对应的空闲数据块***为待使用的空闲数据块和空闲的第二空闲数据块,并将第一空闲数据块确定为分配的数据块,进入步骤S104;
步骤S104:判断与第二空闲数据块相邻的另一数据块是否为空闲数据块,若是,进入步骤S105;
步骤S105:将该第二空闲数据块与该相邻的另一数据块合并为新的空闲数据块。
在上述说明中,是以接收到数据块分配指令时的处理操作为例进行了说明,类似的,在需要对数据块进行释放时,可以执行类似的相关操作,以提高磁盘数据块的利用率。具体可以是:
在接收到数据块释放指令时,判断待释放数据块的相邻数据块是否为空闲数据块,并在相邻数据块为空闲数据块时,将该待释放数据块与该相邻的空闲数据块进行合并,从而使得空闲数据块能够以适当的大小进行分配和存储,节省了磁盘存储空间,
其中,对于任何一个不是处于磁盘逻辑上最前或者最后的数据块来说,与其相邻的数据块都有两个。基于此,在对与该待释放数据块相邻的数据块是否为空闲数据块进行判断时,对于与该待释放数据块逻辑上相邻的前相邻数据块、后相邻数据块来说,可以是同时进行判断,也可以是先后进行判断。在进行合并时,可以是先与空闲的前相邻数据块进行合并,合并后的空闲数据块再与空闲的后相邻数据块进行合并,也可以是先与空闲的后相邻数据块进行合并,合并后的空闲数据块再与空闲的前相邻数据块进行合并。具体的实施方式根据选择及应用需要的不同可以有所不同。
基于此,图2中示出了本发明方法在一个具体示例中对磁盘数据块进行释放的实施例的示意图。在图2所示示例中,是以先将待释放数据块与磁盘逻辑上相邻的前相邻数据块进行合并、再与磁盘逻辑上后相邻的后相邻数据块进行合并为例进行说明。
如图2所示,在对磁盘数据块进行释放时,具体可包括步骤:
步骤S201:接收到释放数据块指令,进入步骤S202;
步骤S202:判断与待释放数据块相邻的前相邻数据块是否为空闲数据块,若是,进入步骤S203,若否,进入步骤S204;
步骤S203:将该待释放数据块与空闲的该前相邻数据块合并为新的空闲数据块,进入步骤S204;
步骤S204:判断与待释放数据块相邻的后相邻数据块是否为空闲数据块,若是,进入步骤S205;
步骤S205:将该待释放数据块或者上述步骤S203中合并后的新的空闲数据块与该后相邻数据块合并为新的空闲数据块。
在基于本发明方案的一个具体实现方式中,可以基于指针的方式来实现对空闲数据块节点的选择以及空闲数据块的***与合并。为提高效率,还可以通过采用空闲块节点哈希表来实现对空闲数据块节点的存储。
如上所述的本发明方案,在与现有技术中其他磁盘存储方案相比较时,其中一个不同之处主要表现在记录与数据块的内存索引组织,由于内存索引的组织和分配的算法的不同,从而表现出对线性存储区域使用上的不同,从而也表现出了不同的磁盘空间利用率和性能表现。
图3中示出了基于本发明方案的一个具体示例中的关键的内存索引结构。
图3所示的内存索引结构中,一个记录节点只指向一个数据块节点,每个数据块节点指向的数据块都是变长的,而且是磁盘上连续的一段存储区域。对于被使用(或者说是处于使用中状态)的数据块节点而言,其相应的数据块的长度等于或稍微大于所储存的记录的长度。
图3所示中,数据块节点的内部主要包含指针cprev、cnext、fprev、fnext。其中,指针cprev表示指向的数据块在磁盘逻辑上相邻的前一个数据块节点,指针cnext表示指向的数据块在磁盘逻辑上相邻的后一个块节点,指针fprev表示指向的数据块节点在空闲块节点哈希表中相邻的前一个数据块节点,指针fnext表示指向的数据块节点在空闲块节点哈希表中相邻的后一个数据块节点。此外,如图3所示,还增加了指针flag,指针flag主要用来表示所指向的数据块的状态,即该数据块是使用中还是空闲中。
指针cprev和指针cnext的存在是为了对数据块进行***和合并,以尽量减少外碎片。另外,在其中一个具体实施例中,还可以引入空闲块节点哈希表,以对空闲的数据块进行精细化管理,加速分配过程。基于上述本发明方案,每次数据块的分配都有可能导致原有数据块的***,每次数据块的释放(回收)都有可能导致该数据块与磁盘逻辑上前后相邻空闲数据块的合并。
其中,在空闲块节点哈希表中,可以针对每一列存放对应的数据块大小在相应范围内的数据块节点,例如某一列存放数据块大小在设定数据块大小阈值的k倍与k+n倍之间的数据块对应的空闲数据块节点。另外,可以选用空闲块节点哈希表中的某一设定列来存放比较大的数据块,例如最左边一列,以应付常规块大小不足或者为大数据块分配做准备。基于空闲块节点哈希表的这种存储方式,还可以通过引入快速索引跳表来实现对空闲数据块节点的快速查找。在该快速索引跳表中,可存储空闲块节点哈希表中的各列的空闲数据块节点的数据块大小的范围,在基于快速索引跳表查找时,可以基于需分配的数据块大小快速找到空闲块节点哈希表的相应列,并从该列中选择出合适的空闲数据块节点。
基于上述本发明方案,在其中一个具体示例中,对数据块进行***的过程可以是如下所述:
在接收到数据块分配指令时,根据要分配的数据块大小,在空闲块节点哈希表中,结合快速索引跳表查找到最适合的空闲数据块节点,如果找不到合适的空闲数据块节点则返回空指针,分配失败,即没有合适的空闲数据块进行分配;
根据找到的空闲数据块节点,判断该空闲数据块节点对应的空闲数据块的大小减去要分配的数据块大小的值是否大于设定数据块大小阈值:
若不大于,则说明不需要对该空闲数据块进行***,对该空闲数据块进行相关的初始化操作后返回该空闲数据块的指针,即成功分配相应的空闲数据块;
若大于,则说明还可以对该空闲数据块节点进行***,将该选择的空闲数据块***为两个数据块,假设将***后即将使用的空闲数据块记为块A、将***后的另一未进行使用的空闲数据块记为块B,做适当的初始化后,判断磁盘逻辑上与块B后相邻的数据块(记为块C)是否为空闲数据块,如果块C已经是使用中,即不是空闲数据块,则将块B***空闲节点哈希表的相应位置,且修改块C的指针cprev到块B,即将块C在磁盘逻辑上前相邻的数据块指向块B,返回块A的指针,即成功分配相应的空闲数据块A;
如果块C是空闲数据块,则可以将块B和块C合并为一个更大的空闲数据块(记为块B′),记磁盘逻辑上与原块C后相邻的数据块为块D,无论块D处于哪种状态(即无论是使用中状态还是空闲状态),只修改块D的指针cprev到块B′,即将块D在磁盘逻辑上前相邻的数据块指向块B′,释放掉块C节点,并把块B′***到空闲块节点哈希表的相应位置中,返回块A指针,即成功分配相应的空闲数据块A。
类似地,基于上述本发明方案,在其中一个具体示例中,对数据块进行释放的过程可以是如下所述:
假设将要释放的数据块记为块A,首先获取与块A磁盘逻辑上前相邻的数据块(记为块B)和磁盘逻辑上后相邻的数据块(记为块C),需要注意的是,当块A是磁盘逻辑上首块数据块的时候,没有与块A逻辑上前相邻的块B;当块A是磁盘逻辑上末块数据块的时候,没有与块A逻辑上后相邻的块C;
如果块B是处于使用状态中,那么忽略块B,无需对块A与块B进行合并;
如果块B是处于空闲状态,则对块A和块B进行合并操作,设合并之后的块记为块A′,做适当初始化后,释放掉块A节点,需要注意的是,当块B不可合并时,这里的块A′实质上就是块A,不需要释放块A节点;
如果块C是处于使用状态中,那么忽略块C,释放过程结束;否则对块A′和块C进行合并,设合并后的块为块A″,做适当初始化后,获取与原块C后相邻的数据块(记为块D),修改块D的指针cprev为块A″,即将磁盘逻辑上与块D前相邻的数据块修改为块A″,释放掉块C节点,并把块A″***到空闲节点哈希表中的相应位置,释放过程结束。
根据如上所述的本发明的方法,本发明还提供一种磁盘存储***,图4中示出了本发明的磁盘存储***实施例的结构示意图。
如图4所示,本实施例中的磁盘存储***包括:
指令接收模块401,用于接收数据块分配指令;
选择模块402,用于在指令接收模块401接收到数据块分配指令时,根据需分配数据块的大小,选择相应的空闲数据块节点;
***判定模块403,用于判断选择模块402选择的空闲数据块节点对应的空闲数据块是否满足预设***条件;
数据块***模块404,用于在***判定模块403的判定结果为满足预设***条件时,对该空闲数据块节点对应的空闲数据块进行***;
数据块分配模块405,用于为指令接收模块401接收的数据块分配指令分配选择模块402选择的空闲数据块节点对应的空闲数据块或者数据块***模块404***后的空闲数据块。其中,在选择模块402选择的空闲数据块节点对应的空闲数据块经数据块***模块404进行了***的情况下,数据块分配模块405是将数据块***模块404***后的空闲数据块进行分配,在没有进行***的情况下,数据块分配模块405是将选择模块402选择的空闲数据块节点对应的空闲数据块进行分配。
其中,***判定模块403在对所选择的空闲数据块节点是否满足预设***条件进行判断时,可以是基于需分配数据块的大小、以及预先设定的数据块大小阈值进行判定,若所选择的空闲数据块节点对应的空闲数据块的大小减去需分配数据块大小的差值大于设定数据块大小阈值,则说明该将该选择的空闲数据块进行***后,剩余的空闲数据块还可以实现相应大小记录的存储,从而可以判定所选择的空闲数据块是满足预设***条件的,可以对所选择的空闲数据块进行***。
数据块***模块404在对所选择的空闲数据块节点对应的空闲数据块进行***时,可以是基于所需分配数据块的大小将该所选择的空闲数据块***为两个空闲数据块,一个空闲数据块的大小与上述需分配数据块的大小相适应,作为即将使用的待使用空闲数据块,***后的另一空闲数据块可以作为一个独立的空闲数据块存在以对后续操作过程中其他相适应大小的记录进行存储。
在其中一个实施例中,上述本发明***还可以包括:数据块合并模块406,用于在与上述***后空闲数据块相邻的数据块为空闲数据块时,将该述***后空闲数据块与该相邻空闲数据块合并为新的空闲数据块。从而可以据此避免空闲数据块的个数无限制的增多,提高磁盘存储***的空间利用率及使用效率。
在另外一个实施例中,上述本发明***还可以包括:相邻数据块判断模块407,用于判断上述空闲数据块节点的两个相邻数据块节点对应的数据块是否存在空闲数据块;
此时,上述数据模***模块404,用于在相邻数据块判断模块407的判定结果为是时,通过使***后空闲数据块与该两个相邻数据块节点中对应的数据块为空闲数据块的那个相邻数据块节点相邻的方式进行***。
这是因为,可能是与待***的空闲数据块逻辑上前相邻的数据块是空闲数据块,也可能是与待***的空闲数据块逻辑上后相邻的数据块是空闲数据块,因此,通过这种方式,能够使***后空闲数据块与该两个相邻数据块节点中对应的数据块为空闲数据块的那个相邻数据块节点相邻的方式进行***,使得***后得到的***后空闲数据块与该两个数据块节点中对应的数据块为空闲的那个相邻,可以保证或者便于数据块合并模块406对***之后得到的***后空闲数据块与相邻的空闲数据块顺利合并。
在另外一个实施例中,上述本发明的磁盘存储***,还可以包括有数据块释放模块408,用于根据指令接收模块401接收的数据块释放指令释放待释放数据块;
此时,上述指令接收模块401,还用于接收数据块释放指令;
上述数据块合并模块406,还用于在与待释放数据块相邻的数据块为空闲数据块时,将该待释放数据块与该相邻的空闲数据块进行合并。
此外,上述本发明的磁盘存储***,还可以包括有存储模块409,用于储存空闲块节点哈希表,在该空闲块节点哈希表中储存空闲数据块节点,上述选择模块402从空闲块节点哈希表中选择相应的空闲数据块节点。其中,在其中一个具体实施例中,可以在该空闲块节点哈希表中的设定列储存大于设定最大数据块阈值的各数据块节点。
在本发明的磁盘存储***中,具体的数据块分配、释放、合并、***等等的具体实现方式,可与上述本发明方法中的相同,在此不予多加赘述。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

Claims (8)

1.一种磁盘存储方法,其特征在于,包括步骤:
接收数据块分配指令;
根据需分配数据块的大小,选择相应的空闲数据块节点;
在该空闲数据块节点对应的空闲数据块满足预设***条件时,判断所述空闲数据块节点的两个相邻数据块节点对应的数据块是否存在空闲数据块;
若存在,根据所述需分配数据块的大小将所述空闲数据块***为与所述需分配数据块的大小相适应的待使用数据块与***后空闲数据块,其中,所述***后空闲数据块与所述两个相邻数据块节点中对应的数据块为空闲数据块的那个相邻数据块节点相邻,并将所述待使用数据块确定为分配的数据块;
将所述***后空闲数据块与该相邻的空闲数据块合并为新的空闲数据块。
2.根据权利要求1所述的磁盘存储方法,其特征在于,在所选择的空闲数据块节点对应的空闲数据块的大小减去需分配数据块大小的差值大于设定数据块大小阈值时,判定所述所选择的空闲数据块满足预设***条件。
3.根据权利要求1或2所述的磁盘存储方法,其特征在于:
还包括步骤:在接收到数据块释放指令时,判断与待释放数据块相邻的数据块是否为空闲数据块,若是,将该待释放数据块与该相邻的空闲数据块进行合并。
4.根据权利要求1或2所述的磁盘存储方法,其特征在于:
在储存空闲数据块节点的空闲块节点哈希表中选择相应的空闲数据块节点;
或者
在储存空闲数据块节点的空闲块节点哈希表中选择相应的空闲数据块节点,在空闲块节点哈希表中的设定列储存大于设定最大数据块阈值的各空闲数据块节点。
5.一种磁盘存储***,其特征在于,包括:
指令接收模块,用于接收数据块分配指令;
选择模块,用于在指令接收模块接收到数据块分配指令时,根据需分配数据块的大小,选择相应的空闲数据块节点;
***判定模块,用于判断选择模块选择的空闲数据块节点对应的空闲数据块是否满足预设***条件;
相邻数据块判断模块,用于判断所述空闲数据块节点的两个相邻数据块节点对应的数据块是否存在空闲数据块;
数据块***模块,用于在***模块的判定结果为满足预设***条件、所述相邻数据块判断模块的判定结果为是时,根据所述需分配数据块的大小将所选择的空闲数据块***为与所述需分配数据块的大小相适应的待使用数据块与***后空闲数据块,其中,所述***后空闲数据块与所述两个相邻数据块节点中对应的数据块为空闲数据块的那个相邻数据块节点相邻,并将所述待使用数据块确定为分配的数据块;
数据块分配模块,用于为所述数据块分配指令分配数据块***模块***后的待使用数据块;
数据块合并模块,用于将所述***后空闲数据块与该相邻的空闲数据块合并为新的空闲数据块。
6.根据权利要求5所述的磁盘存储***,其特征在于,所述***判定模块在所选择的空闲数据块节点对应的空闲数据块的大小减去需分配数据块大小的差值大于设定数据块大小阈值时,判定所选择的空闲数据块满足预设***条件。
7.根据权利要求5或6所述的磁盘存储***,其特征在于,还包括数据块释放模块,用于根据指令接收模块接收的数据块释放指令释放待释放数据块;
所述指令接收模块,还用于接收数据块释放指令;
所述数据块合并模块,还用于在与待释放数据块相邻的数据块为空闲数据块时,将该待释放数据块与该相邻的空闲数据块进行合并。
8.根据权利要求5或6所述的磁盘存储***,其特征在于:
还包括存储模块,用于储存空闲块节点哈希表,该空闲块节点哈希表中储存空闲数据块节点,所述选择模块从空闲块节点哈希表中选择相应的空闲数据块节点;
或者
还包括存储模块,用于储存空闲块节点哈希表,该空闲块节点哈希表中储存空闲数据块节点,在空闲块节点哈希表中的设定列储存大于设定最大数据块阈值的各数据块节点,所述选择模块从空闲块节点哈希表中选择相应的空闲数据块节点。
CN201210150002.XA 2012-05-15 2012-05-15 磁盘存储方法及磁盘存储*** Active CN103425435B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210150002.XA CN103425435B (zh) 2012-05-15 2012-05-15 磁盘存储方法及磁盘存储***

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210150002.XA CN103425435B (zh) 2012-05-15 2012-05-15 磁盘存储方法及磁盘存储***

Publications (2)

Publication Number Publication Date
CN103425435A CN103425435A (zh) 2013-12-04
CN103425435B true CN103425435B (zh) 2016-01-20

Family

ID=49650250

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210150002.XA Active CN103425435B (zh) 2012-05-15 2012-05-15 磁盘存储方法及磁盘存储***

Country Status (1)

Country Link
CN (1) CN103425435B (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104850507B (zh) * 2014-02-18 2019-03-15 腾讯科技(深圳)有限公司 一种数据缓存方法和数据缓存装置
CN104239234B (zh) * 2014-10-13 2016-03-30 合一网络技术(北京)有限公司 一种高效的本地缓存管理及读写方法
CN104731886B (zh) * 2015-03-12 2018-11-20 深圳市连用科技有限公司 一种海量小文件的处理方法及***
CN108064377B (zh) * 2017-08-08 2023-01-24 深圳前海达闼云端智能科技有限公司 一种多***共享内存的管理方法及装置
CN107665098B (zh) * 2017-09-05 2020-12-18 联想(北京)有限公司 信息处理方法、存储设备及计算机存储介质
CN110399545B (zh) * 2018-04-20 2023-06-02 伊姆西Ip控股有限责任公司 管理文档索引的方法和设备
CN111221776B (zh) * 2019-12-30 2023-06-23 上海交通大学 面向非易失性内存的文件***的实现方法、***及介质
CN111506269B (zh) * 2020-04-22 2021-09-07 腾讯科技(深圳)有限公司 一种磁盘存储空间分配方法、装置、设备及存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101630992A (zh) * 2008-07-14 2010-01-20 中兴通讯股份有限公司 共享内存管理方法
CN101676855A (zh) * 2008-09-11 2010-03-24 美国日本电气实验室公司 可变动的辅助存储***和方法
CN102004769A (zh) * 2010-11-12 2011-04-06 成都市华为赛门铁克科技有限公司 文件管理方法、设备及存储***

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101630992A (zh) * 2008-07-14 2010-01-20 中兴通讯股份有限公司 共享内存管理方法
CN101676855A (zh) * 2008-09-11 2010-03-24 美国日本电气实验室公司 可变动的辅助存储***和方法
CN102004769A (zh) * 2010-11-12 2011-04-06 成都市华为赛门铁克科技有限公司 文件管理方法、设备及存储***

Also Published As

Publication number Publication date
CN103425435A (zh) 2013-12-04

Similar Documents

Publication Publication Date Title
CN103425435B (zh) 磁盘存储方法及磁盘存储***
CN108038002B (zh) 一种嵌入式软件内存管理方法
CN108132842B (zh) 一种嵌入式软件内存管理***
CN106708427B (zh) 一种适用于键值对数据的存储方法
CN110347336A (zh) 一种基于nvm与ssd混合存储结构的键值存储***
CN105117417A (zh) 一种读优化的内存数据库Trie树索引方法
CN107315533A (zh) 一种数据存储方法及装置
CN106201355A (zh) 数据处理方法和装置以及存储***
CN107015763A (zh) 混合存储***中ssd管理方法及装置
CN107256196A (zh) 基于闪存阵列的支持零拷贝的缓存***及方法
CN108153487B (zh) 一种基于nand flash的星载固存多源数据文件***
CN103838853A (zh) 一种基于不同存储介质的混合文件***
CN104246723B (zh) 片内共享缓存的管理方法及装置
CN105718319B (zh) 一种内存池版图解析方法和内存池装置
CN101763415B (zh) 一种数据库的b树索引的生成方法及装置
CN109240607B (zh) 一种文件读取方法和装置
CN104750432B (zh) 一种数据存储方法及装置
US8296270B2 (en) Adaptive logging apparatus and method
CN103218305B (zh) 存储空间的分配方法
CN103714013A (zh) 一种文件***的存储空间的配置方法及装置
CN101673246A (zh) 一种高效的先进先出数据池读写方法
CN103793332B (zh) 基于内存的数据存储方法、装置、处理器和电子设备
CN102253985A (zh) 一种文件***数据的管理方法及***
CN1622094A (zh) 一种合并文件的方法
CN112612419B (zh) Nvm的数据存储结构、存储方法、读取方法、设备及介质

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant