一种数据存储方法及装置转让专利

申请号 : CN201010252868.2

文献号 : CN101968791B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 王璟琦

申请人 : 深圳市飘移网络技术有限公司

摘要 :

本发明涉及数据共享技术领域,尤其涉及一种数据存储方法及装置,该方法包括:文件系统确定用于缓存共享数据的目标存储区域;文件系统将接收的共享数据缓存到所述目标存储区域,并标记所述目标存储区域为可用状态,以指示文件系统能够根据用户指令在该目标存储区域写入用户数据;在缓存过程中独立于文件系统另外记录所缓存的共享数据在所述目标存储区域中的位置信息,以使根据所述位置信息能获取该共享数据。本发明提供数据存储方法及装置,使共享数据在单个网络终端存储时,不会影响用户硬盘存储空间且提高了共享数据在单个网络终端存储的稳定性。

权利要求 :

1.一种数据存储方法,其特征在于,包括:

文件系统确定用于缓存共享数据的目标存储区域,所述目标存储区域为未被写入用户数据且未被写入共享数据的存储空间;

文件系统将接收的共享数据缓存到所述目标存储区域,并标记所述目标存储区域为可用状态,以指示文件系统能够根据用户指令在该目标存储区域写入用户数据;

在缓存过程中独立于文件系统另外记录所缓存的共享数据在所述目标存储区域中的位置信息,以使根据所述位置信息能获取该共享数据。

2.如权利要求1所述的方法,其特征在于:所述文件系统确定用于缓存共享数据的目标存储区域之前,还包括:所述文件系统将硬盘空间在逻辑上划分为至少两个预设容量的存储块;

所述文件系统确定用于缓存共享数据的目标存储区域,具体包括:确定要接收的共享数据的总数据量;

获取硬盘空间中未写入数据的存储块;

将未写入数据的存储块中至少一个存储块作为目标存储区域,所述目标存储区域的总容量不小于所述总数据量;

所述文件系统将接收的共享数据缓存到所述目标存储区域,具体包括:将接收的共享数据分成与预设容量相匹配的共享数据块后,分别缓存到作为目标存储区域的存储块中。

3.如权利要求2所述的方法,其特征在于,所述文件系统将接收的共享数据分成与预设容量相匹配的共享数据块,具体包括:文件系统创建至少一个窗体文件,并按设定规则为每一窗体文件分配所述预设容量的存储区域,所述窗体文件总大小与所述总数据量相匹配;

通过将接收的共享数据写入到创建的窗体文件中,将接收的共享数据分成与预设容量相匹配的共享数据块;

所述将共享数据块分别缓存到作为目标存储区域的存储块中,具体包括:将写入共享数据的窗体文件按一一对应方式移至作为目标存储区域的存储块。

4.如权利要求3所述的方法,其特征在于,所述文件系统将所述目标存储区域标记为可用状态,具体包括:通过删除移动后的窗体文件在文件系统中的物理位置索引,将作为目标存储区域的存储块标记为可用状态;

所述在缓存过程中另外记录所缓存的共享数据在所述目标存储区域对应的位置信息,具体包括:在缓存过程中,独立于文件系统另外记录所缓存的共享数据在作为目标存储区域的存储块中的位置信息。

5.如权利要求3所述的方法,其特征在于,将写入共享数据的窗体文件按一一对应方式移至作为目标存储区域的存储块过程中,还包括:确定目标存储区域中有存储块已写入共享数据块之外的数据时,停止向该存储块移动窗体文件;

待另外确定未写入数据的存储块后,将停止移动的窗体文件重新移动至另外确定的存储块中。

6.如权利要求3所述的方法,其特征在于,所述创建至少一个窗体文件具体包括:利用操作系统提供的创建窗体文件函数,创建至少一个窗体文件;

所述将写入共享数据的窗体文件按一一对应方式移至作为目标存储区域的存储块,具体包括:利用操作系统提供的移动窗体文件函数,将写入共享数据的窗体文件按一一对应方式移至作为目标存储区域的存储块。

7.如权利要求2所述的方法,其特征在于,所述文件系统获取硬盘空间中未写入数据的存储块,具体包括:根据文件系统建立的用于维护划分得到的存储块使用信息的分块表,获取不同存储块对应的使用频率及当前使用情况;

根据不同存储块对应的使用频率及当前使用情况,确定硬盘空间中未写入数据的存储块;

所述文件系统将未写入数据的存储块中至少一个存储块作为目标存储区域,具体包括:按使用频率从低到高的顺序选取未写入数据的存储块作为目标存储区域。

8.如权利要求7所述的方法,其特征在于,所述划分得到每一存储块包括若干个连续的簇,所述分块表对每一存储块使用信息的维护,具体包括:存储块中有任一簇被写入用户数据时,将该存储块的当前使用情况标记为系统已用空间;

存储块中每一簇既未被写入用户数据且未被写入共享数据时,将该存储块标记为裸盘可用空间;

存储块中所有簇被写入共享数据时,将该存储块标记为裸盘已用空间;

按使用频率从低到高的顺序选取未写入数据的存储块作为目标存储区域,具体包括:从标记为裸盘可用空间的存储块中,按使用频率从低到高的顺序选取存储块作为目标存储区域。

9.如权利要求2所述的方法,其特征在于,在缓存过程中另外记录所缓存的共享数据在所述目标存储区域中的位置信息,具体包括:获取缓存有共享数据的存储块对应的位置信息,所述位置信息包括该存储块所缓存的共享数据文件名和该存储块的物理位置索引;

独立于文件系统,将获取的不同存储块对应的位置信息保存到能够被操作系统查找到的文件中。

10.如权利要求1~9任一所述的方法,其特征在于,还包括:文件系统根据用户指令确定要向硬盘空间写入用户数据时,从硬盘空间中的标记为可用状态的存储区域中,为要写入的用户数据分配存储空间;

所述文件系统将用户数据写入到为该用户数据所分配的存储空间中。

11.一种数据存储装置,其特征在于,包括:

目标区域确定单元,用于利用文件系统确定用于缓存共享数据的目标存储区域,所述目标存储区域为未被写入用户数据且未被写入共享数据的存储空间;

缓存单元,用于利用文件系统将接收的共享数据缓存到所述目标存储区域;

标记单元,用于利用文件系统将缓存有共享数据的目标存储区域标记为可用状态,以指示文件系统能够根据用户指令在该目标存储区域写入用户数据;

记录单元,用于缓存过程中独立于文件系统,另外记录所缓存的共享数据在所述目标存储区域中的位置信息,以使根据所述位置信息能获取共享数据。

12.如权利要求11所述的装置,其特征在于,该装置还包括:存储块划分单元,用于在确定用于缓存共享数据的目标存储区域之前,利用所述文件系统将硬盘空间在逻辑上划分为至少两个预设容量的存储块;

所述目标区域确定单元具体包括:

数据量确定单元,用于确定要接收的共享数据的总数据量;

空闲存储块获取单元,用于利用文件系统获取硬盘空间中未写入数据的存储块;

目标存储块确定单元,利用文件系统将未写入数据的存储块中至少一个存储块作为目标存储区域,所述目标存储区域的总容量不小于所述总数据量;

所述缓存单元,具体用于利用文件系统将接收的共享数据分成与预设容量相匹配的共享数据块后,分别缓存到作为目标存储区域的存储块中。

13.如权利要求12所述的装置,其特征在于,所述缓存单元,具体包括:窗体文件创建单元,用于利用文件系统创建至少一个窗体文件,并按设定规则为每一窗体文件分配所述预设容量的存储区域,所述窗体文件总大小与所述总数据量相匹配;

分块写入单元,用于利用文件系统通过将接收的共享数据写入到创建的窗体文件中,将接收的共享数据分成与预设容量相匹配的共享数据块;

窗体文件移动单元,用于利用文件系统将写入共享数据的窗体文件按一一对应方式移至作为目标存储区域的存储块。

14.如权利要求13所述的装置,其特征在于,所述标记单元,具体用于通过删除移动后的窗体文件在文件系统中的物理位置索引,将作为目标存储区域的存储块标记为可用状态;

所述记录单元,具体用于在缓存过程中,独立于文件系统另外记录所缓存的共享数据在作为目标存储区域的存储中的位置信息。

15.如权利要求13所述的装置,其特征在于,所述缓存单元还包括:停止移动单元,用于将写入共享数据的窗体文件按一一对应方式移至作为目标存储区域的存储块过程中,确定目标存储区域中有存储块已写入共享数据块之外的数据时,停止向该存储块移动窗体文件;

重新移动单元,用于待另外确定未写入数据的存储块后,将停止移动的窗体文件重新移动至另外确定的存储块中。

16.如权利要求13所述的装置,其特征在于,所述窗体文件创建单元具体利用操作系统提供的创建窗体文件函数,创建至少一个窗体文件;

所述窗体文件移动单元,具体利用操作系统提供的移动窗体文件函数,将写入共享数据的窗体文件按一一对应方式移至作为目标存储区域的存储块。

17.如权利要求12所述的装置,其特征在于,所述空闲存储块获取单元,具体包括:存储块使用信息获取单元,用于根据文件系统建立的用于维护划分得到的存储块使用信息的分块表,获取不同存储块对应的使用频率及当前使用情况;

空闲存储块确定单元,用于根据不同存储块对应的使用频率及当前使用情况,确定硬盘空间中未写入数据的存储块;

所述目标存储块确定单元,具体用于按使用频率从低到高的顺序选取未写入数据的存储块作为目标存储区域。

18.如权利要求12所述的装置,其特征在于,所述记录单元,具体包括:位置信息获取单元,用于在缓存过程中获取缓存有共享数据的存储块对应的位置信息,所述位置信息包括该存储块所缓存的共享数据的文件名和该存储块的物理位置索引;

集中存储单元,用于独立于文件系统,将获取的不同存储块对应的位置信息保存到能够被操作系统查找到的文件中。

说明书 :

一种数据存储方法及装置

技术领域

[0001] 本发明涉及网络共享数据技术领域,尤其涉及一种数据存储方法及装置。

背景技术

[0002] 随着互联网发展,在线视频点播服务已成为互联网中一项广泛应用的服务。为了能够为用户提供更加清晰及流畅的在线视频,在线视频点播业务中普遍使用P2P(Peer-to-Peer,点对点)或P2SP(Peer to Server & Peer,点对服务器和点)技术来提高视频数据传输速度,保证视频内容播放流畅。
[0003] P2P就是网络中客户端可以直接连接到网络中其它客户端去获取数据,而不是像P2S(Peer to Server,点对服务器)那样只能连接到服务器去获取数据。即网络中客户端在接收数据的同时,还要向其它客户端上传本地接收的数据。
[0004] P2SP实际上是对P2P技术的进一步延伸,它不但支持P2P技术,同时还通过检索服务器数据库把服务器资源和P2P资源整合到了一起。
[0005] 视频点播服务商多采用P2SP技术,客户端在线视频点播过程中,将接收的视频数据进行缓存,当有其它客户端点播该客户端缓存的视频数据对应的视频内容时,除了可以从服务器获取该视频内容外,还可以从已缓存了该视频内容的一个或多个客户端同时获取该视频内容,因此可大大提高视频数据的传输速度。
[0006] 可见,提高数据传输速度一个最可行的办法是增加数据来源。P2P技术和P2SP技术基于该原理在客户端缓存其接收的数据,由于这些数据可以被其他客户端共享,本文将客户端缓存的这些数据称为共享数据,网络中客户端互相共享网络中其它客户端缓存的共享数据,从而增加了数据来源。
[0007] 客户端对接收的共享数据采用的缓存方式具体为:
[0008] 在客户端确定要在线使用共享数据时,由文件系统为要使用的共享数据分配硬盘空间,并将接收的共享数据缓存在所分配的硬盘空间中。
[0009] 文件系统是操作系统中负责管理和存储文件信息的软件机构。上述在线视频点播过程中缓存的共享数据并不是操作系统根据用户指令进行存储的,本文将操作系统根据用户指令存储的数据称为用户数据。
[0010] 采用该方式时,由于共享数据经文件系统按用户数据对待进行存储,在文件系统有用户数据写入硬盘时不会再占用这些共享数据占用的硬盘空间。
[0011] 因此采用该方式的缺点是共享数据的缓存占用了硬盘空间使用户硬盘空间变小,可能会导致用户数据无法正常存储,从而对用户的使用产生影响。
[0012] 另外,也可以通过增加服务器的方式来提高数据传输速度,但是增加服务器会增加成本,不适于广泛推广。
[0013] 可见现有通过增加数据源来提供数据传输速率的办法中,会导致增加成本或占用用户硬盘空间,都不是理想的提高数据传输速率的方案。

发明内容

[0014] 本发明实施例提供一种数据存储方法及装置,用于优化用户在线使用共享数据时的共享存储方法。
[0015] 本发明提供一种数据存储方法,包括:
[0016] 文件系统确定用于缓存共享数据的目标存储区域,所述目标存储区域为未被写入用户数据且未被写入共享数据的存储空间;
[0017] 文件系统将接收的共享数据缓存到所述目标存储区域,并标记所述目标存储区域为可用状态,以指示文件系统能够根据用户指令在该目标存储区域写入用户数据;
[0018] 在缓存过程中独立于文件系统另外记录所缓存的共享数据在所述目标存储区域中的位置信息,以使根据所述位置信息能获取共享数据。
[0019] 本发明还提供一种数据存储装置,包括:
[0020] 目标区域确定单元,用于利用文件系统确定用于缓存共享数据的目标存储区域,所述目标存储区域为未被写入用户数据且未被写入共享数据的存储空间;
[0021] 缓存单元,用于利用文件系统将接收的共享数据缓存到所述目标存储区域;
[0022] 标记单元,用于利用文件系统将缓存有共享数据的目标存储区域标记为可用状态,以指示文件系统能够根据用户指令在该目标存储区域写入用户数据;
[0023] 记录单元,用于缓存过程中独立于文件系统,另外记录所缓存的共享数据在所述目标存储区域中的位置信息,以使根据所述位置信息能获取共享数据。
[0024] 利用本发明提供的数据存储方法及装置,具有以下有益效果:可在数据共享网络中的各终端节点上存放共享数据,而不会因占用终端节点用户存储空间而影响终端节点的性能;提高了共享数据在终端节点存储的稳定性;通过将共享数据存放在各终端节点,增加了共享数据源,因此在不影响用户使用及提供终端节点存储稳定性的情况下,大大提高了用户在线使用共享数据的数据传输速率。

附图说明

[0025] 图1为本发明数据存储方法流程图;
[0026] 图2为依照本发明实施例中数据存储方法流程图;
[0027] 图3为依照本发明实施例将共享数据块缓存到作为目标存储区域的存储块的流程图;
[0028] 图4依照本发明实施例中示例的数据存储方法流程图;
[0029] 图5为依照本发明实施例中示例的数据存储方法对应的硬盘使用情况示意图;
[0030] 图6依照本发明实施例中数据存储装置结构图。

具体实施方式

[0031] 下面结合附图和实施例对本发明提出的数据存储方法及装置进行更详细地说明。
[0032] 为了克服现有完全通过文件系统为共享数据分配存储空间而占有用户硬盘存储空间,本发明提供一种数据存储方法,在不减少用户硬盘存储空间且不容易被覆盖的情况提高了在线共享数据传输速率,如图1所示,该方法包括:
[0033] 步骤S101,文件系统确定用于缓存共享数据的目标存储区域A;
[0034] 本发明实施例中缓存共享数据的目标存储区域A由文件系统确定。文件系统是操作系统中负责管理和存储文件信息的软件机构。例如FAT(File Allocation Table)文件系统、NTFS(New Technology File System)文件系统等。
[0035] 具体的应用场景可以是用户在线使用共享数据x如用户进行在线视频点播,对于该应用场景,用户点击了某个视频文件的点播按钮时,则说明用户要在线使用共享数据。在线使用共享数据的特点是,用户仅需要读取共享数据,对共享数据的存储不是必要的。用户要在线使用共享数据时,会对用户接收的共享数据进行缓存,具体缓存的数据在存储单元(比如硬盘)中的存储位置是由文件系统确定的。
[0036] 步骤S102,文件系统将接收的共享数据x缓存到目标存储区域A,并标记目标存储区域A为可用状态,以指示文件系统能够根据用户指令在该目标存储区域A写入用户数据;
[0037] 这样,文件系统根据用户指令确定要向硬盘空间写入用户数据时,从硬盘空间中的标记为可用状态的存储区域中,为要写入的用户数据分配存储空间;并将用户数据写入到为该用户数据所分配的存储空间中。
[0038] 对于文件系统接收共享数据x的应用场景,可以是用户在线使用共享数据x过程接收共享数据x,也可以是预先由服务器部署的。文件系统确定了共享数据x的目标存储区域A,并在用户接收共享数据过程中将接收的共享数据x缓存到目标存储区域A。不同的是文件系统将缓存了共享数据x的目标存储区域A标记为可用状态。标记为可用状态意味着如果文件系统接收用户指令要写入新的用户数据时,该目标存储区域A对于文件系统来说是用户存储可用空间,且在有新的用户数据写入目标存储区域A之前,目标存储区域A仍存储的是共享数据x。
[0039] 注意本发明中标记为可用状态,用于指示文件系统可在目标存储区域A写入用户数据,但并不指示能够写入共享数据,所以缓存有共享数据的目标存储区域A对于文件系统来说为用户存储可用空间,因此共享数据x的缓存对于文件系统是不可见,因此缓存共享数据x的目标存储区域A被文件系统视为裸盘。
[0040] 步骤S103,在缓存过程中,独立于文件系统另外记录所缓存的共享数据在目标存储区域A中的位置信息,以使网络中需要使用该共享数据的终端能够根据所述位置信息获取共享数据。
[0041] 既然共享数据x的缓存对文件系统是不可见的,所以本发明要独立于文件系统另外记录所缓存的共享数据在目标存储区域A中的位置信息,具体地,如记录A的物理位置索引及A缓存的共享数据文件名等。这样在接收到网络中任一用户包括该用户本身的共享数据请求时,可以根据另外记录的上述位置信息检索到请求的共享数据,从而实现向网络中需要使用该共享数据的终端能够获取该共享数据。
[0042] 可见,本发明对共享数据的缓存并不是完全独立于文件系统盲目存储,其存储位置是由文件系统确定,本发明对共享数据的存储也并不是完全由文件系统进行管理,文件系统在完成确定缓存位置及将共享数据缓存到其确定的缓存位置后,会将这些缓存位置标记为可用状态,相当于释放了共享数据占用的存储空间,而本发明通过独立于文件系统另外记录所缓存共享数据的存储位置信息,可以实现向网络中任一用户终端传输共享数据。
[0043] 因此,本发明在不影响用户体验的前提下,使用闲置的硬盘空间和带宽,可在数据共享网络中的各终端节点上存放共享数据,而不会因占用终端节点用户存储空间而影响终端节点的性能;提高了共享数据在终端节点存储的稳定性;通过将共享数据存放在各终端节点,增加了共享数据源,因此在不影响用户使用及提供终端节点存储稳定性的情况下提高了用户在线使用共享数据的数据传输速率。
[0044] 依照本发明的较佳实施例中,为了进一步降低共享数据被覆盖的风险,大的共享数据文件应该被分散成“块”,写在硬盘的不同位置。目前文件系统最小空间分配单位是“簇”,但对于裸盘应用来说,以“簇”为单位分散数据,读写效率过低,且空间管理代价较大。因此,本发明较佳实施例中,文件系统将若干连续的“簇”组合在一起,在逻辑上构成预设容量的存储块,这样裸盘空间分配和管理将以存储块为基本单位,进一步降低共享数据被覆盖风险且方便了裸盘管理。
[0045] 本实施例中的数据存储方法,如图2所示,包括:
[0046] 步骤S201,确定用户要接收的的共享数据x的总数据量X1;
[0047] 如用户在线视频点播时,如果点击了某个视频文件,可与获取到该视频文件的总大小。
[0048] 步骤S202,文件系统获取硬盘空间中未写入数据的存储块;
[0049] 文件系统作为对文件存储和管理的系统,能够获取硬盘空间的数据占用请情况,具体地,可用DeviceIOControl函数的FSCTL_GET_VOLUME_BITMAP选项获知磁盘的bitmap的使用情况,以便从硬盘中未被写入任何数据的存储空间作为目标存储区域。
[0050] 本实施例中对存储空间进行了存储块划分,因此以存储块为单位获取未写入任何数据的存储块。
[0051] 步骤S203,将未写入数据的存储块中至少一个存储块作为目标存储区域A,目标存储区域A的总容量不小于总数据量X1;
[0052] 优选地,选取存储块时,选取使用频率比较低即不经常被使用的存储块作为目标存储区域A。这样可以降低共享数据被覆盖的风险。
[0053] 本实施例中文件系统通过建立分块表维护划分得到的存储块使用信息,优选地,根据文件系统建立的用于维护划分得到的存储块使用信息的分块表,获取不同存储块对应的使用频率及当前使用情况;根据不同存储块对应的使用频率及当前使用情况,确定硬盘空间中未写入数据的存储块;按使用频率从低到高的顺序选取未写入数据的存储块作为目标存储区域。
[0054] 上述划分得到每一存储块包括若干个连续的簇,分块表维护的每一存储块使用信息,具体包括:
[0055] 1)存储块中有任一簇被写入用户数据时,将该存储块的当前使用情况标记为系统已用空间;
[0056] 有此标记的存储,既不能写入用户数据也不能写入共享数据;
[0057] 2)存储块中每一簇既未被写入用户数据且未被写入共享数据时,将该存储块标记为裸盘可用空间;
[0058] 有此标记的存储块,既可以写入用户据也可以写入共享数据。
[0059] 3)存储块中有所有簇被写入共享数据时,将存储块标记为裸盘已用空间;
[0060] 由于共享数据块是以窗体文件方式移动的,所以如果存储块缓存共享数据时所有簇被写入共享数据。
[0061] 本实施例从标记为裸盘可用空间的存储块中,按使用频率从低到高的顺序选取存储块作为目标存储区域。
[0062] 标记为裸盘已用空间的存储块对于文件系统来说为可用状态,可以被写入用户数据。从而实现以块为单位标记。对于标记为系统已用空间,但有部分簇被写入用户数据部分簇被写入共享数据的存储,可以进一步细化该存储的标记。以实现向该存储块中写入共享数据的位置能够写入用户数据。
[0063] 步骤S204,将接收的共享数据分成与预设容量相匹配的共享数据块后,分别缓存到作为目标存储区域的存储块中;
[0064] 这样,实现了一个的共享数据文件被拆分成多个数据块的分块存储,一方面方便裸盘管理,一方面降低共享数据被覆盖的风险。
[0065] 步骤S205,标记缓存有共享数据的作为目标存储区域A的存储块为可用状态,以指示文件系统能够根据用户指令在这存储块写入用户数据;
[0066] 通过该步骤,作为目标存储区域A的存储块对于文件系统来说被视为用户存储可用空间。
[0067] 文件系统将作为目标存储区域A的存储块标记为可用状态,此时如果文件系统有新的用户数据写入请求,则此部分存储块可接受新的用户数据写入从而覆盖原数据块,但在有新的用户数据写入之前,此存储块仍存储的是之前写入的共享数据块。
[0068] 步骤S206,在缓存过程中独立于文件系统,另外记录所缓存的共享数据在作为目标存储区域A的存储块中位置信息,以使网络中需要使用该共享数据的终端能够获取共享数据。
[0069] 本发明实施例中在缓存过程中记录所缓存的共享数据在所述目标存储区域中位置信息,具体包括:获取缓存有共享数据的存储块对应的位置信息,位置信息包括:该存储块所缓存的共享数据文件名和该存储块的物理位置索引;将获取的不同存储块对应的位置信息保存到能够被操作系统查找到的文件中。
[0070] 优选地,如图3所示,步骤S204具体包括以下步骤:
[0071] 步骤S2041,文件系统创建至少一个窗体文件,并按设定规则为每一窗体文件分配预设容量的存储区域,窗体文件总大小与总数据量X1相匹配;
[0072] 在需要向存储空间写入共享数据x时,文件系统创建窗体文件并为每一个创建的窗体文件分配预设容量的存储空间,这样窗体文件大小与存储块大小相等,总的窗体文件大小与总数据量X1相匹配,因此可以先将共享数据文件放在窗体文件中。
[0073] 具体地,可以利用Windows操作系统提供的创建窗体文件函数CreateFile创建窗体文件。
[0074] 步骤S2042,通过将接收的共享数据写入到创建的窗体文件中,将接收的共享数据分成与预设容量相匹配的共享数据块;
[0075] 步骤S2043,将写入共享数据的窗体文件按一一对应方式移至作为目标存储区域的存储块。
[0076] 利用创建窗体文件函数CreateFile创建窗体文件时,窗体文件的位置是由确定算法按设定规则决定的,而不是任意指定的,因此文件系统创建的窗体文件几乎不会刚好与存储块的位置重合,所以要经过一次移动的过程使共享数据块存储于存储块中,将共享数据块移动到预先指定的存储块,这样将便于对存储块进行管理。
[0077] 具体地,可以利用操作系统提供的移动窗体文件函数NtFsControlFile,将写入共享数据的窗体文件按一一对应方式移至作为目标存储区域的存储块。
[0078] Windows提供的移动窗体文件函数NtFsControlFile可将数据块从磁盘中的一个存储位置移至另一个存储位置,Windows中的磁盘整理程序即是通过该函数实现,磁盘整理程序是将在磁盘中不连续存储的数据转至连续的物理存储位置,并可指定目标存储位置。
[0079] 优选地,将写入共享数据的窗体文件按一一对应方式移至作为目标存储区域的存储块过程中,还包括:
[0080] 步骤S2044,确定目标存储区域中有存储块已写入共享数据块之外的数据时,停止向该存储块移动窗体文件;
[0081] 有可能在移动过程,某个存储块被文件系统写入用户数据而更新为系统已用空间,此时要停止向该存储块移动窗体文件。
[0082] 步骤S2045,待另外确定未写入数据的存储块后,将停止移动的窗体文件重新移动至另外确定的存储块中。
[0083] 文件系统实现文件的存储管理时,对于一个文件的存储通常会记录该文件的物理位置索引,且文件系统依据物理位置索引确定用户存储可用空间。文件系统删除一个文件时,存在一个特点:仅删除记录的该文件在硬盘中物理位置的索引,而不覆盖数据本身,这样该文件占用的硬盘空间被文件系统视为用户存储可用空间。因此,只要另外记录文件的物理位置索引,仍然可以读取被文件系统删除的文件。
[0084] 优选地,文件系统将目标存储区域标记为可用状态,具体包括:通过删除移动后的窗体文件在文件系统中的物理位置索引,将作为目标存储区域的存储块标记为可用状态。
[0085] 下面结合一个具体示例说明本发明实施例提供的数据存储过程,如图4所示,包括:
[0086] 步骤S401,确定用户要接收的共享数据x的总数据量X1;
[0087] 假设共享数据x的总数据量不大于划分的存储块的容量。
[0088] 步骤S402,文件系统获取硬盘空间中未写入数据的存储块;
[0089] 如图5所示,扫描整体硬盘,获取到以存储块为单位的硬盘基本信息及使用状态,包括各存储块的编号及使用状态,从而获取到未写入数据的存储块;
[0090] 步骤S403,从未写入数据的存储块选取编号为4的存储块作为目标存储区域A,作为写入共享数据x的目标位置,如图5中step1对应部分;
[0091] 步骤S404,创建一个窗体文件,并按设定规则为该窗体文件分配预设容量的编号为m的存储块;
[0092] 步骤S405,将接收的共享数据x写入到创建的窗体文件中,即将共享数据写入到存储块m,如图5所示中step2对应部分;
[0093] 窗体文件占用的硬盘空间由操作系统决定,通常不会与目标位置重合。
[0094] 步骤S406,调用操作系统API,将写入共享数据的窗体文件移至编号为4的存储块中,如图5中step3对应部分。
[0095] 步骤S407,删除移动后的窗体文件在文件系统中的物理位置索引,释放窗体文件占用的硬盘空间,并在分块表将存储块4标记为裸盘已用空间,如图5中step4对应部分。本文将存储块4中存储的共享数据称为裸盘文件。
[0096] 该步骤中,编号为4的存储块中,写入了有效的共享数据。由于最后删除了窗体文件在文件系统中的物理位置索引,对文件系统来说,存储块4区域未被使用,仍然属于可用空间。这样,文件系统仍然可以向存储块4区域写入用户数据,而在被覆盖之前,存储块4区域中的保存的裸盘文件一直有效。
[0097] 步骤S408,对于已经写入共享数据的存储块,记录该存储块对应的位置信息,包括存储块物理位置索引、存储的共享数据文件名、在文件中的偏移量、写入时间、状态(正常、损坏、破损但可恢复)等。将全部写入共享数据的存储块即标记为裸盘已用空间的存储块的位置信息保存到一个操作系统可见的正常文件中,作为全部共享数据的索引。
[0098] 该步骤的记录过程是在向步骤S406中缓存共享数据块过程中完成的。
[0099] 本发明提供的上述数据存储方法,可在网络节点的存储设备中存储共享数据以备用,且不会占用节点的存储空间的方法,将共享数据存放于网络节点中,可大大节省共享数据提供者的存储成本。
[0100] 具体应用时,本发明提供的数据存储方法,可在P2P网络中的各P节点存放共享数据,例如可将广告等不是很重要的数据内容以该方法存放在P中,需要时可及时从P获取,而在各P节点需要使用存储空间存放非P2P网络共享数据时,可即时释放出该部分存放共享数据的存储空间,以便P进行使用,而不会消耗P过多资源。
[0101] 依照本发明另一实施例中,还提供一种数据存储装置,如图6所示,包括:目标区域确定单元601,用于利用文件系统确定用于缓存共享数据的目标存储区域;缓存单元602,用于利用文件系统将接收的共享数据缓存到所述目标存储区域;标记单元603,用于利用文件系统将缓存有共享数据的目标存储区域标记为可用状态,以指示文件系统能够根据用户指令在该目标存储区域写入用户数据;记录单元604,用于缓存过程中独立于文件系统,另外记录所缓存的共享数据在所述目标存储区域中位置信息,以使根据所述位置信息能获取该共享数据。
[0102] 较佳地,该装置还包括:存储块划分单元605,用于在确定用于缓存共享数据的目标存储区域之前,利用文件系统将硬盘空间在逻辑上划分为至少两个预设容量的存储块;所述目标区域确定单元601具体包括:数据量确定单元601a,用于确定要接收的共享数据的总数据量;空闲存储块获取单元601b,用于利用文件系统获取硬盘空间中未写入数据的存储块;目标存储块确定单元601c,利用文件系统将未写入数据的存储块中至少一个存储块作为目标存储区域,所述目标存储区域的总容量不小于所述总数据量;所述缓存单元
602,具体用于利用文件系统将接收的共享数据分成与预设容量相匹配的共享数据块后,分别缓存到作为目标存储区域的存储块中。
[0103] 较佳地,所述缓存单元602,具体包括:窗体文件创建单元602a,用于利用文件系统创建至少一个窗体文件,并按设定规则为每一窗体文件分配所述预设容量的存储区域,所述窗体文件总大小与所述总数据量相匹配;分块写入单元602b,用于利用文件系统通过将接收的共享数据写入到创建的窗体文件中,将接收的共享数据分成与预设容量相匹配的共享数据块;窗体文件移动单元602c,用于利用文件系统将写入共享数据的窗体文件按一一对应方式移至作为目标存储区域的存储块。
[0104] 较佳地,该所述缓存单元还包括:停止移动单元602d,用于将写入共享数据的窗体文件按一一对应方式移至作为目标存储区域的存储块过程中,确定目标存储区域中有存储块已写入共享数据块之外的数据时,停止向该存储块移动窗体文件;重新移动单元602e,用于待另外确定未写入数据的存储块后,将停止移动的窗体文件重新移动至另外确定的存储块中。
[0105] 所述窗体文件创建单元602a具体利用操作系统提供的创建窗体文件函数,创建至少一个窗体文件;所述窗体文件移动单元602c,具体利用操作系统提供的移动窗体文件函数,将写入共享数据的窗体文件按一一对应方式移至作为目标存储区域的存储块。
[0106] 本实施例中所述标记单元603,具体用于通过删除移动后的窗体文件在文件系统中的物理位置索引,将作为目标存储区域的存储块标记为可用状态;所述记录单元604,具体用于在缓存过程中,独立于文件系统另外记录所缓存的共享数据在作为目标存储区域的存储块中的位置信息。
[0107] 较佳地,所述空闲存储块获取单元601b,具体包括:存储块使用信息获取单元,用于根据文件系统建立的用于维护划分得到的存储块使用信息的分块表,获取不同存储块对应的使用频率及当前使用情况;空闲存储块确定单元,用于根据不同存储块对应的使用频率及当前使用情况,确定硬盘空间中未写入数据的存储块;所述目标存储块确定单元601c,具体用于按使用频率从低到高的顺序选取未写入数据的存储块作为目标存储区域。
[0108] 所述记录单元604,具体包括:位置信息获取单元604a,用于在缓存过程中获取缓存有共享数据的存储块对应的位置信息,所述位置信息包括该存储块所缓存的共享数据文件名和该存储块的物理位置索引;集中存储单元604b,用于独立于文件系统,将获取的不同存储块对应的位置信息保存到能够被操作系统查找到的文件中。
[0109] 显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。