管理对存储数据单元的操作的制作方法_4

文档序号:9291628阅读:来源:国知局

[0097] 所述gzip压缩格式还具有8-字节数据尾,该8-字节数据尾包括一 4-字节CRC 码以及一 4-字节值,该4-字节值提供所述原始数据的解压缩后的大小,所述解压缩后的大 小为232压缩模。两个或多个压缩数据块(每个压缩数据块具有自己的gzip数据头和数据 尾,且彼此相邻存储(即,下一数据头紧接上一数据尾之后开始))可被识别为单一有效的 gzip文件。
[0098] 当所述存储接口模块104执行删除操作时(在该删除操作中,一个或多个待删除 记录(例如,记录C和记录E)被指示为包含在所述数据块202B中(例如,通过索引)),所 述模块104对所述压缩数据208进行解压缩,以恢复所述记录集合210,生成省略了被删除 的记录的新记录集合212,并将该新记录集合212压缩成修改过的压缩数据208'。由于所 述新记录集合212包含的信息内容少于所述原始的记录集合210,所以所述修改过的压缩 数据208'的大小会小于所述原始压缩数据208的大小(假设任一可被删除的给定记录中 有一定的最低信息含量)。存储所述压缩数据208的所述数据块202B的所述部分然后被 替换为所述修改过的压缩数据208',且所述原始数据头204和数据尾206被替换为修改过 的数据头204'和数据尾206',所述数据头204'和数据尾206'共同对应于修改过的数据 块202B'。由于所述修改过的数据208'占据的存储空间少于所述原始数据208,具有可供 所述修改过的数据头204'占据的存储空间,且所述修改过的数据头204'占据的存储空间 要超过所述原始数据头204。该额外的存储空间用于将历史信息214存储在一可用的可变 长度字段(例如,所述gzip压缩格式的额外字段)。
[0099] 对于多数记录格式,需要将所述历史信息214容纳在所述修改过的数据头204'范 围内的存储空间可能要小于在删除单一记录后所述修改过的数据208'预期的缩减大小。如 果所述大小没有缩减到能充分容纳所述历史信息214,则可能取消相关联的删除操作,并返 回错误消息。为确保所述修改过的数据块202B'具有和所述原始数据块202B相同的总大 小,可以根据需要通过写入补白(padding)218来延长所述数据头,例如通过重复的字节模 式(如,包含Oxff的许多字节)或其他附加信息,在同一或另一可变长度字段(例如,所述 gzip压缩格式的注解字段)。可选地,对于记录的删除可能不会为所述历史信息(例如,为 特别紧凑的记录结构)提供足够空间的实施而言,当首先生成一压缩数据块时,补白也可 包括在所述数据头中。可以根据需要减少所述初始补白,以在所述数据头中为所述历史信 息提供额外空间。
[0100] 如上所述,所述历史信息214汇总了已从所述记录集合210删除的记录,所述记录 集合在相对于一共同参考存储位置(例如,相继将记录存储在所述新的恢复记录集合212 中地址空间的起始地址)针对必要时要进行更正的所述新的较小集合212中剩余记录的直 接地址偏移值具有足够信息。可用于编码所述历史信息214的数据结构215的一个示例是 一列元素216,每一元素包括已删记录相对于所述原始记录集合中第一记录开始的偏移量 (无论所述第一记录当前是否存在),以及该记录的对应长度。在图2阐明的示例中,针对 已删记录C和E中的每一记录都具有两个元素216。记录长度的编码以可变长度和/或未 指定的长度来支持记录。可选地,在其他示例中,如果所有记录具有相同指定的固定长度, 则所述长度不需存储在元素216中。所述元素216存在于按其偏移值次序排列的列表中。 由于执行额外的删除操作以删除额外记录,额外元素216被添加到或插入到该列表中。
[0101] 各种编码技术可用来以有效方式存储该数据结构215。例如,两个或多个相邻已 删记录的任一序列可收缩为一单一元素216,该单一元素216包括该序列中第一记录的偏 移量以及等于该序列中记录长度总和的长度。因此,每一元素216可表示一先前已删除区, 该先前已删除区存储有许多先前已删除的记录。在某些情况下,相邻的已删记录可能已在 不同删除操作中删除了。每一元素216可存储在所述数据头204'的可变长度字段中位元 的相邻位置,采用预定数目的位元来存储所述偏移量并采用预定数目的位元来存储所述长 度。用于存储所述偏移值的存储空间的数量限制在足够存储预期最大的可能偏移量的相对 较少数量的位元。用于存储所述长度值的存储空间的数量也可加以限制(例如,限制在和 用于存储所述偏移量的位元相同的数量,以把收缩的元素考虑进去)。也可基于什么值才 是可能的值的假设来对所述偏移值和长度值进行压缩。例如,如果已知一条记录总会占据 偶数个位元,则所述偏移值和长度值可被理解为对特定数目的位元对进行编码。因此,8位 元能够编码的值高达255X2 = 510位元。类似地,如果已知一条记录总会占据的存储空间 是一定数量位元的存储空间的倍数,则所述偏移值和长度值可被理解为对一个数字乘以该 倍数的位元进行编码,这与位元的实际数目完全不同。可选地,还能进一步压缩该数据结构 215 (例如,采用行程(run-length)编码)。
[0102] 图3A所示的是为删除一个或多个记录而执行的删除操作的一个示例的流程图 300,每一记录具有对应于三个一组(BLOCK (块)、OFFSET (偏移)、LENGTH (长度))的直接 地址。(在该示例中,单一块中的一个或多个记录正被删除,但在其他示例中,来自许多块的 记录可能是在删除操作中予以删除的。)所述存储接口模块104对所述压缩数据存储部112 中的数据块进行解压缩(302),将标识符BLOCK(块)存储在一地址空间,该地址空间在地址 START (开始)处开始。所述模块104在地址START (开始)+OFFSET (偏移)处删除(304) 记录(具有LENGTH (长度)的长度)。所述模块104对历史信息进行计算(306),该历史信 息可编码OFFSET (偏移)值和LENGTH (长度)值。所述模块104确定(308)是否有多个记 录要从该块中删除,如果是,则重复所述删除(304)步骤和计算(306)步骤。删除记录之后, 所述模块104将一新记录集合写入到一部分所述存储空间,剩余记录在该部分存储空间中 相邻,没有任何过去曾经是省略了的记录(多条)的间隙(例如,写入到一临时文件中),并 且所述模块104对所述新记录集合进行压缩(310)。所述模块104将经过计算的历史信息 数据结构和任何必要的补白写入(312)进块BLOCK(块)的数据头中。所述模块104将产 生的所述压缩数据写入(314)进所述已压缩数据存储部112中的块BLOCK(块),这样该压 缩数据会在和块BLOCK(块)中的原始压缩数据相同的位置处结束。所述模块104用检错 码来为所述新压缩数据写入(316) -新的数据尾(来代替之前的数据尾)。
[0103] 除这样一种实际删除正被删除的记录中信息的"擦除(expunging) "删除操作之 外,所述存储接口模块104还能被配置为提供简单地隐藏或标记将要被删除的记录(实际 上并不删除该记录中的信息)的其他删除操作。这些删除操作可能不需要写入历史信息, 甚至不需要解压缩块,这对于提供更快但较不安全的删除形式是很有帮助的。然而,还有能 充分擦除的删除操作可供使用,以满足在清除信息上有更严格的要求,例如,按照某些隐私 法的规定,删除后的信息不能被恢复。
[0104] 图3B所示的是为读取一个或多个记录而执行的第一(直接寻址)读取操作的 一个示例的流程图320,每一记录具有对应于三个一组(BLOCK(块)、OFFSET(偏移)、 LENGTH(长度))的直接地址。(在该示例中,单一块中的一个或多个记录正被读取,但在其 他示例中,可能是来自许多块的记录在读取操作中被读取。)所述存储接口模块104对所 述压缩数据存储部112中的数据块进行解压缩(322),将标识符BLOCK (块)存储在一地址 空间,该地址空间在地址START(开始)处开始。所述模块104将待读取记录的地址计算 (324)为 START (开始)+OFFSET (偏移)-CORRECTION (校正),其中 CORRECTION (校正)基 于针对块BLOCK(块)的任何现有历史信息予以计算。例如,所述模块104确定有多少先前 已删除区具有少于OFFSET (偏移)的偏移值的值并在OFFSET (偏移)之前结束。如果没有, 则无需进行校正且CORRECTION(校正)=0。否则,CORRECTION(校正)等于偏移值少于 OFFSET(偏移)的每一先前已删除区的长度之和。因此,由先前已删除区导致的校正取决于 最初有多少先前已删记录存在于特定的待读取记录和所述记录集合起点之间。计算所述地 址之后,所述模块104在所述计算地址处读取(326)所述记录。如果先前已删除区具有的 偏移值小于或等于OFFSET (偏移)但不在OFFSET (偏移)之前结束,则所述计算地址落入 所述先前已删除区,并且所述模块104跳过所述读取步骤326并报告所述待读取记录已经 被删除。所述模块104确定(328)是否有额外待读取记录,如果有,则重复所述计算(324) 步骤和读取(326)步骤。当所述块中没有额外待读取记录,则返回操作(330)。
[0105] 所述第一(直接寻址)读取操作的其他实施也是可能的。例如,不用针对每一 待读取记录计算校正过的地址,在对所述压缩数据块进行解压缩之后恢复的记录可被写 入到带有已删记录曾经所在的适当间隙的地址空间。为确定所述间隙所在位置所需的信 息可从上述相同的历史信息中获得。所述读取操作然后在其未经校正的地址START(开 始)+OFFSET (偏移)处继续读取每一记录。
[0106] 图3C显示的是第二(扫描)读取操作的示例的流程图340,该第二(扫描)读取 操作对压缩记录文件中的一个或多个块进行扫描,记录将要从该压缩记录文件中读取。所 述存储接口模块104将所述压缩数据存储部112中的所述第一数据块解压缩(342)至一地 址空间中。所述模块104扫描(344)该地址空间以读取每一单独记录(例如,通过识别每 一记录的开始和/或每一记录的结尾)。所述模块104确定(346)所述文件中是否有另一 数据块(例如,通过检测另一 gzip神奇数据头),如果有,则解压缩(342)下一数据块以读 取额外的记录。如果在所述文件中没有额外的待读取数据块(例如,通过检测所述文件的 结尾),则操作返回(348)。
[0107] 尽管可能以完全擦除记录而无需存储历史信息的方式来实施擦除操作(例如,通 过以例如全是1位元或〇位元的预定模式填写的间隙来将所述已删记录覆盖在适当位置), 这样一种删除操作需要扫描模式读取操作来识别并忽略这些已删记录。通过删除所述已删 记录曾经所在的间隙,并将信息保存在所述历史信息之
当前第4页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1