CN103425435A - 磁盘存储方法及磁盘存储系统 - Google Patents

磁盘存储方法及磁盘存储系统 Download PDF

Info

Publication number
CN103425435A
CN103425435A CN201210150002XA CN201210150002A CN103425435A CN 103425435 A CN103425435 A CN 103425435A CN 201210150002X A CN201210150002X A CN 201210150002XA CN 201210150002 A CN201210150002 A CN 201210150002A CN 103425435 A CN103425435 A CN 103425435A
Authority
CN
China
Prior art keywords
data blocks
freed
node
data block
block
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
Application number
CN201210150002XA
Other languages
English (en)
Other versions
CN103425435B (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

Images

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 (14)

1.一种磁盘存储方法,其特征在于,包括步骤:
接收数据块分配指令;
根据需分配数据块的大小,选择相应的空闲数据块节点;
在该空闲数据块节点对应的空闲数据块满足预设分裂条件时,对该空闲数据块节点对应的空闲数据块进行分裂后分配数据块节点。
2.根据权利要求1所述的磁盘存储方法,其特征在于,在所选择的空闲数据块节点对应的空闲数据块的大小减去需分配数据块大小的差值大于设定数据块大小阈值时,判定所述所选择的空闲数据块满足预设分裂条件。
3.根据权利要求1或2所述的磁盘存储方法,其特征在于,对该空闲数据块节点对应的空闲数据块进行分裂的过程包括:
根据所述需分配数据块的大小将所选择的空闲数据块分裂为与所述需分配数据块的大小相适应的待使用数据块与分裂后空闲数据块。
4.根据权利要求3所述的磁盘存储方法,其特征在于,还包括步骤:判断与所述分裂后空闲数据块相邻的数据块是否为空闲数据块,若是,将所述分裂后空闲数据块与该相邻空闲数据块合并为新的空闲数据块。
5.根据权利要求3所述的磁盘存储方法,其特征在于:
在对该空闲数据块节点对应的空闲数据块进行分裂之前,还包括步骤:判断所述空闲数据块节点的两个相邻数据块节点对应的数据块是否存在空闲数据块;
若存在,在对该空闲数据块节点对应的空闲数据块进行分裂时,通过使分裂后空闲数据块与该两个相邻数据块节点中对应的数据块为空闲数据块的那个相邻数据块节点相邻的方式进行分裂。
6.根据权利要求1至5任意一项所述的磁盘存储方法,其特征在于:
还包括步骤:在接收到数据块释放指令时,判断与待释放数据块相邻的数据块是否为空闲数据块,若是,将该待释放数据块与该相邻的空闲数据块进行合并。
7.根据权利要求1至5任意一项所述的磁盘存储方法,其特征在于:
在储存空闲数据块节点的空闲块节点哈希表中选择相应的空闲数据块节点;
或者
在储存空闲数据块节点的空闲块节点哈希表中选择相应的空闲数据块节点,在空闲块节点哈希表中的设定列储存大于设定最大数据块阈值的各空闲数据块节点。
8.一种磁盘存储系统,其特征在于,包括:
指令接收模块,用于接收数据块分配指令;
选择模块,用于在指令接收模块接收到数据块分配指令时,根据需分配数据块的大小,选择相应的空闲数据块节点;
分裂判定模块,用于判断选择模块选择的空闲数据块节点对应的空闲数据块是否满足预设分裂条件;
数据块分裂模块,用于在分裂模块的判定结果为满足预设分裂条件时,对该空闲数据块节点对应的空闲数据块进行分裂;
数据块分配模块,用于为所述数据块分配指令分配选择模块选择的空闲数据块节点对应的空闲数据块或者数据块分裂模块分裂后的空闲数据块。
9.根据权利要求8所述的磁盘存储系统,其特征在于,所述分裂判定模块在所选择的空闲数据块节点对应的空闲数据块的大小减去需分配数据块大小的差值大于设定数据块大小阈值时,判定所选择的空闲数据块满足预设分裂条件。
10.根据权利要求8或9所述的磁盘存储系统,其特征在于,所述数据块分裂模块根据所述需分配数据块的大小将所选择的空闲数据块分裂为与所述需分配数据块的大小相适应的待使用数据块与分裂后空闲数据块。
11.根据权利要求10所述的磁盘存储系统,其特征在于,还包括:
数据块合并模块,用于在与所述分裂后空闲数据块相邻的数据块为空闲数据块时,将所述分裂后空闲数据块与该相邻的空闲数据块合并为新的空闲数据块。
12.根据权利要求10所述的磁盘存储系统,其特征在于:
还包括相邻数据块判断模块,用于判断所述空闲数据块节点的两个相邻数据块节点对应的数据块是否存在空闲数据块;
所述数据模分裂模块,用于在所述相邻数据块判断模块的判定结果为是时,通过使分裂后空闲数据块与该两个相邻数据块节点中对应的数据块为空闲数据块的那个相邻数据块节点相邻的方式进行分裂。
13.根据权利要求8-12任意一项所述的磁盘存储系统,其特征在于,还包括数据块释放模块,用于根据指令接收模块接收的数据块释放指令释放待释放数据块;
所述指令接收模块,还用于接收数据块释放指令;
所述数据块合并模块,还用于在与待释放数据块相邻的数据块为空闲数据块时,将该待释放数据块与该相邻的空闲数据块进行合并。
14.根据权利要求8至12任意一项所述的磁盘存储系统,其特征在于:
还包括存储模块,用于储存空闲块节点哈希表,该空闲块节点哈希表中储存空闲数据块节点,所述选择模块从空闲块节点哈希表中选择相应的空闲数据块节点;
或者
还包括存储模块,用于储存空闲块节点哈希表,该空闲块节点哈希表中储存空闲数据块节点,在空闲块节点哈希表中的设定列储存大于设定最大数据块阈值的各数据块节点,所述选择模块从空闲块节点哈希表中选择相应的空闲数据块节点。
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 true CN103425435A (zh) 2013-12-04
CN103425435B 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)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104239234A (zh) * 2014-10-13 2014-12-24 合一网络技术(北京)有限公司 一种高效的本地缓存管理及读写方法
CN104731886A (zh) * 2015-03-12 2015-06-24 深圳市连用科技有限公司 一种海量小文件的处理方法及系统
CN104850507A (zh) * 2014-02-18 2015-08-19 腾讯科技(深圳)有限公司 一种数据缓存方法和数据缓存装置
CN107665098A (zh) * 2017-09-05 2018-02-06 联想(北京)有限公司 信息处理方法、存储设备及计算机存储介质
CN108064377A (zh) * 2017-08-08 2018-05-22 深圳前海达闼云端智能科技有限公司 一种多系统共享内存的管理方法及装置
CN110399545A (zh) * 2018-04-20 2019-11-01 伊姆西Ip控股有限责任公司 管理文档索引的方法和设备
CN111221776A (zh) * 2019-12-30 2020-06-02 上海交通大学 面向非易失性内存的文件系统的实现方法、系统及介质
CN111506269A (zh) * 2020-04-22 2020-08-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 成都市华为赛门铁克科技有限公司 文件管理方法、设备及存储系统

Cited By (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104850507A (zh) * 2014-02-18 2015-08-19 腾讯科技(深圳)有限公司 一种数据缓存方法和数据缓存装置
CN104850507B (zh) * 2014-02-18 2019-03-15 腾讯科技(深圳)有限公司 一种数据缓存方法和数据缓存装置
CN104239234B (zh) * 2014-10-13 2016-03-30 合一网络技术(北京)有限公司 一种高效的本地缓存管理及读写方法
CN104239234A (zh) * 2014-10-13 2014-12-24 合一网络技术(北京)有限公司 一种高效的本地缓存管理及读写方法
CN104731886A (zh) * 2015-03-12 2015-06-24 深圳市连用科技有限公司 一种海量小文件的处理方法及系统
CN104731886B (zh) * 2015-03-12 2018-11-20 深圳市连用科技有限公司 一种海量小文件的处理方法及系统
US11281388B2 (en) 2017-08-08 2022-03-22 Cloudminds (Shenzhen) Robotics Systems Co., Ltd. Method for managing a multi-system shared memory, electronic device and non-volatile computer-readable storage medium
CN108064377A (zh) * 2017-08-08 2018-05-22 深圳前海达闼云端智能科技有限公司 一种多系统共享内存的管理方法及装置
CN108064377B (zh) * 2017-08-08 2023-01-24 深圳前海达闼云端智能科技有限公司 一种多系统共享内存的管理方法及装置
CN107665098A (zh) * 2017-09-05 2018-02-06 联想(北京)有限公司 信息处理方法、存储设备及计算机存储介质
CN107665098B (zh) * 2017-09-05 2020-12-18 联想(北京)有限公司 信息处理方法、存储设备及计算机存储介质
CN110399545A (zh) * 2018-04-20 2019-11-01 伊姆西Ip控股有限责任公司 管理文档索引的方法和设备
CN110399545B (zh) * 2018-04-20 2023-06-02 伊姆西Ip控股有限责任公司 管理文档索引的方法和设备
CN111221776A (zh) * 2019-12-30 2020-06-02 上海交通大学 面向非易失性内存的文件系统的实现方法、系统及介质
CN111221776B (zh) * 2019-12-30 2023-06-23 上海交通大学 面向非易失性内存的文件系统的实现方法、系统及介质
CN111506269A (zh) * 2020-04-22 2020-08-07 腾讯科技(深圳)有限公司 一种磁盘存储空间分配方法、装置、设备及存储介质

Also Published As

Publication number Publication date
CN103425435B (zh) 2016-01-20

Similar Documents

Publication Publication Date Title
CN103425435B (zh) 磁盘存储方法及磁盘存储系统
CN108038002B (zh) 一种嵌入式软件内存管理方法
CN108132842B (zh) 一种嵌入式软件内存管理系统
KR101994021B1 (ko) 파일 조작 방법 및 장치
US7937522B2 (en) Method for flash memory data management
CN102446139B (zh) 一种数据存储方法及装置
CN101373445B (zh) 一种内存调度方法及装置
CN105117417A (zh) 一种读优化的内存数据库Trie树索引方法
CN109240607B (zh) 一种文件读取方法和装置
CN103064639A (zh) 数据存储方法及装置
CN107315533A (zh) 一种数据存储方法及装置
CN103838853A (zh) 一种基于不同存储介质的混合文件系统
CN104246723B (zh) 片内共享缓存的管理方法及装置
CN103164490A (zh) 一种不固定长度数据的高效存储实现方法和装置
CN104750432B (zh) 一种数据存储方法及装置
CN101344861A (zh) 一种智能卡内存管理方法
CN107203330A (zh) 一种面向读写数据流的闪存数据分布方法
CN102542041A (zh) 栅格数据处理方法及系统
CN102253985A (zh) 一种文件系统数据的管理方法及系统
CN1622094A (zh) 一种合并文件的方法
CN104199781A (zh) 一种基于共享内存的内存碎片分配方法和装置
WO2016187975A1 (zh) 内存碎片整理方法及装置
CN102331973A (zh) 一种内存数据存储系统和内存数据的插入、删除方法
US9361402B2 (en) Tiered index management
CN101034416A (zh) 一种利用文件分配表进行文件寻道的方法及系统架构

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