一种基于Flash的事务处理方法

文档序号:6481203阅读:241来源:国知局
专利名称:一种基于Flash的事务处理方法
技术领域
本发明涉及一种基于Flash的事务处理方法,具体地说,是涉及一种动态Flash的事务处理方法,属于存储器技术领域。
背景技术
Flash作为一种存储介质,在存储领域得到广泛的应用。Flash在物理结构上分成若干个物理区块(Block),区块之间相互独立,其自身具有以下特性(1)由于Flash的写操作只能将数据位从1写成0,不能从0写成1,所以在对flash存储器进行写入之前必须先执行擦操作,将预写入的数据位初始化为1,且擦除操作的最小单位是一个区块,而不是单个字节;(2)Flash的擦写寿命有次数限制;(3)块擦除的时间比较长;(4) Flash在使用过程中,可能导致某些区块的损坏,而区块一旦损坏,将无法进行修复。因此,在使用传统方法对Flash进行数据存储时,存储速度较慢,且擦写频繁,降低了 Flash的使用寿命。
为解决传统Flash存储方法存在的上述问题,本申请人曾提出了 一种Flash的动态存储方法,通过将Flash存储空间划分为若干个逻辑分区,将逻辑分区中的每条数据记录占据的空间作为虚拟扇区,并对每个虚拟扇区设置一个虚拟扇区分配表,且Flash存储器以数椐记录作为基本单元进行数据的读写操作。在写入数据时釆用两头并进的方式,数据记录从逻辑分区的一端依次写入,而与其对应的虚拟扇区分配表从逻辑分区的另 一端依次写入,从而能够充分利用Flash的存储空间,相当于减少了 Flash中Block的擦除次数,提高了凄史据的读写速度,提高了 Flash的使用寿命。
4但现有Flash存储技术均没有考虑数据的一致性问题。因为在将一组相互关联的数据写入Flash过程中,很可能会出现突然断电等异常情况,造成相互关联的数据只有一部分写入,从而造成数据的不一致性,进而因数据不一致导致非常严重的后果。

发明内容
本发明的目的在于提供一种基于Flash的事务处理方法,通过在虚拟扇区分配表中增加与事务处理有关的信息,同一事务的数据的有效性保持一致,从而解决了数据不一致的问题。
为解决上述技术问题,本发明采用以下技术方案予以实现一种基于F1 a sh的事务处理方法,所述F1 ash存々者空间划分为若干个逻辑分区,每个逻辑分区包括一个或多个连续的物理区块,所述逻辑分区存^fi者至少一种类型的数据记录;所述每条婆:据记录所占据的存储空间作为一个虚拟扇区,每个虚拟扇区设置有一个虚拟扇区分配表;其特征在于,
至所述逻辑分区的物理区块中;
所述每个虚拟扇区分配表中包括有标记事务类型的事务ID,以及标记数据记录是否属于事务中的数据的事务标志;
在将数据记录写入至所述逻辑分区的物理区块中时,首先判断所述教:据记录是独立数据还是事务中的数据,并根据判断结果设置所述事务ID及事务标志的值。
根据本发明,考虑到数据的备份,所述每个虚拟扇区分配表中还包括有标记事务新旧程度的事务版本号。在当前写入至所述逻辑分区的数据记录为事务中的数据,且所述当前数据记录对应的事务ID与已写入的数据记录的事务ID相同时,将所述当前数据记录对应的事务版本号加1。
根据本发明,为充分利用Flash存储空间,提高数据备除效率,在所述逻辑分区剩余一块空的物理区块时,对所述逻辑分区中最早写入的物理区块进行 数据清理。
在对所述物理区块进行数据清理时,若读取到的数据记录为事务中的数据, 判断所述数据记录对应的事务版本号与已写入的相同事务ID的数据记录的最
大版本号之差;若所述差大于设定值,则丢弃所读取到的数据记录,若所述差 不大于设定值,则将所读取到的数据记录写入至所述空的物理区块中。
根据本发明,所述设定值优选为1。这样,同一事务能够保留至少两个版 本号,既尽可能地减少对Flash存储器空间的占用,又能兼顾数据错误时对历 史数据进行追溯。
根据本发明,考虑到数据记录的备份,所述每个虚拟扇区分配表中还包括 有用来标记与所述虛拟扇区分配表相对应的数据记录的新旧程度的记录版本 号,以及标记所述数据记录的类型的数据类型。在当前写入的数据记录的数据 类型与已写入的数据记录的数据类型相同时,将所述当前凄t据记录对应的记录 版本号加1。
根据本发明,为充分利用Flash存储空间,提高数据务f分效率,在所述逻 辑分区剩余一块空的物理区块时,对所述逻辑分区中最早写入的物理区块进4亍 数据清理。
在对所述物理区块进行数据清理时,判断所述数据记录对应的记录版本号 与已写入的相同数据类型的数据记录的最大记录版本号之差;若所述差不大于 设定值,在所述数据记录为独立数据时将所述读取到的数据记录写入至所述空 的物理区块中,在所述数据记录为事务中的数据时将所述数据记录所在的事务 中的全部数据均写入至所述空的物理区块中。
根据本发明,所述设定值优选为1。这样,同样类型的数据能够保留至少 两个版本号,既尽可能地减少对Flash存储器空间的占用,又能兼顾数据4昔误 时对历史数据进行追溯。
根据本发明,所述每个虚拟扇区分配表中还包括有用来描述与所述虚拟扇
6区分配表相对应的数据记录的属性的数据记录长度、数据记录ID及数据记录校 验码。
根据本发明,在所述逻辑分区中的每一个物理区块的头部均设置有区块标 所述物理区块当前工作状态的状态标志。
与现有技术相比,本发明的优点和积极效果是
1、 通过在虚拟扇区分配表中设置事务ID及事务标志等与事务处理有关的 信息,将相互关联的数据作为一个事务写入至Flash中,这样,作为事务中的 所有数据要么全部有效、要么全部无效,保持数据有效性的一致性,从而避免 了因突然断电等异常情况造成数据写入过程中产生的数据不一致的问题。
2、 通过保存事务版本号及记录版本号实现Flash存储器中数据记录的备 份,有效减少了重复备份不需要备份的数据而占用大量存储器空间的问题,同 时提高了数据存储的效率。
附困说明


图1和图2是本发明基于Flash的事务处理方法泰:据存储一个实施例的流 程图。
务体实施方式
下面结合附图对本发明作进一步详细的说明。
本发明所述的基于Flash的事务处理方法基于动态Flash,所述Flash存 储空间划分为若干个逻辑分区,每个逻辑分区包括一个或多个连续的物理区块, 所述逻辑分区存储至少一种类型的数据记录。将所述每条数据记录所占据的存 储空间作为一个虚拟扇区,每个虚拟扇区设置有一个虚拟扇区分配表,所述虚 拟扇区分配表及与所述虚拟扇区分配表相对应的数据记录依次写入至所述逻辑 分区的物理区块中。Flash存储器读写操作时,以数据记录作为基本单元进行数据的读写操作。
为保证一组相互关联的数据在写入Flash过程中不会因突然断电等异常情 况导致数据不一致,本发明在每个虚拟扇区分配表中设置了标记事务类型的事 务ID,以及标记数据记录是否属于事务中的数据的事务标志,将相互关联的数 据组通过一个事务进行写入。而写入数据的过程中,首先判断所述数据记录是 独立数据(非事务中的数据)还是事务中的数据,然后根据判断结果设置相应 的事务ID及事务标志的值。通过将相互关联的数据通过一个事务进行写入,这 组数据要么全部有效,要么全部无效,4呆证了数据组的一致性。
图1和图2按顺序构成了本发明基于Flash的事务处理方法存储数据的一 个实施例的流程图,其中,图2是图1所示流程的延续。所述实施例的逻辑分 区包含有n个Block,所述n个Block分别为BlockO、 Blockl、…Blockn-1。
在所述实施例中,为尽量减少对Flash存储空间的占用,而又保证数据的 一致性及备份效率,定义与数据记录对应的虚拟扇区分配表的数据结构如下
事务ID事务版本号记录版本号记录长度数据类型记录ID事务标志CRC校验码
(4bit)(12bit)(16bit)(24bit)(7bit)(16Mt )(lbit)(32bit )
所述虚拟扇区分配表包括有14个字节共112位,分别用来存储事务ID、 事务版本号、记录版本号、记录长度、lt据类型、记录ID、事务标志及CRC才史 —险码。其中
0-31bit共32bit用来存储CRC校验码,也即CRC32校验码。所述校验码 是对数据记录及与其对应的虚拟扇区分配表中除检验码之外的其他数据一并计 算后的校验值,用于校验数据记录的数据,确保数据的安全性。当然,也可以 选用其他类型的校验码来校验数据。
32bit用来存储事务标志。通过该位表示数据记录是否属于一个事务中的 数据。在该实施例中,若数据记录为事务中的数据,该位置O,否则置为l。
33-48bit共16bit用来存卡者数据记录ID,通过所述记录ID,能够区分不 同的数据记录。
849-55bit共7bit用来存储数据记录的数据类型。 56-79bit共24bit用来存储数据记录长度。
80-95bit共16bit用来存储标记数据记录新旧程度的记录版本号,每种数 据类型的数据记录的记录版本号从0开始计数。
96-107bit共12bU用来存储标记事务新旧程度的事务版本号,所述事务 版本号从O开始计数,每写入一次同事务的凝:据,相应的^t据记录的事务版本 号加1。
108-lllbit共4bit存储事务ID,所述事务ID的值从1到15共16个值, 用来区别不同的事务。
根据所述数据类型,可以知道所述数据记录的长度、逻辑分区的开始地址 等信息,方法如下根据Flash分区的配置信息,直接可以得到该分区的开始 地址、包含的Block个数等信息;根据这些配置信息还可以计算出某一种数据 类型对应的分区,检索该分区上存储的虚拟扇区分配表,每个虚拟扇区分配表 都对应了数据记录的数据长度,通过累加的方式就能够很容易计算出某个虛拟 扇区分配表对应数据记录的存储位置,方便用户读糾目应的数据记录。
此外,所述实施例在所述逻辑分区中的每一个物理区块的头部设置有区块 标志,即Block标志,用来标示对应Block是否已经才各式4匕以及当前Block的 状态。所述Block标志共有16bit,其中,高8bit为格式化标志,〗氐8位为Block 状态标志。本实施例定义了 Block的四种状态,分别为(l)格式化完成,尚 未写入任何数据;(2)、正在进行数据写入;(3)、数据已写满;(4)、正在进行 数据清理。
下面结合图l和图2详细描述该实施例将数据记录存储至逻辑分区的流程。 S101:流考呈开始。
S102:格式化逻辑分区,在所述逻辑分区中的每个Block头部写入相应的 区块标志,区块标志中的状态标志为"格式化完成,尚未写入任何数据"。
S103:选择逻辑分区中的一个Block为当前Block,改变所述Block的区块标志中的状态标志为"正在进行数据写入"。例如,选择第一个Block,即 Block(H乍为当前Block。
S104:判断当前写入的数据记录与已写入的数据记录类型是否相同。若相 同,执行步骤S105,否则转至步骤S106。
S105:在当前写入的数据记录与已写入的数据记录类型相同时,当前写入 的数据记录对应的记录版本号为同类型的数据记录的最大记录版本号加1。然 后执行步骤S106。
S106:判断当前写入的数据记录是否为一个事务中的数据记录。若为事务 中的数据记录,执行步骤S108;若为独立数据,执行步骤S107。
S107:当前写入的数据记录为独立数据,即为非事务中的教:据,则将泰:据 记录对应的虚拟扇区分配表中的事务标志置1,事务ID及事务版本号的每一位 也均置为l,即事务ID置15,事务版本号置4095。然后执行步骤S109。
S108:在当前写入的数据记录为一个事务中的数据记录时,将数据记录对 应的虚拟扇区分配表中的事务标志置0,而事务ID置为所属事务的设定值,事 务版本号为同事务ID的最大事务版本号加1。然后执行步骤S109。
S109:根据上述各步骤的判断结果及虚拟扇区分配表的数据结构组装当前 写入的数据记录对应的虚拟扇区分配表,计算写入的位置,依次写入虚拟扇区 分配表及数据记录。在组装所述虚拟扇区分配表时,先组装除CRC校验码之外 的其他所有数据位,然后再根据数据记录及组装好的虛拟扇区分配表中的数据 计算CRC校验码,最后再组装完整的虚拟扇区分配表。
S110:在写入数据的过程中,判定当前Block的剩余空间是否不足。若当 前Block剩余空间不足以写入新的虚拟扇区分配表及数据记录,则执4亍步-骤 Sill;如果当前Block剩余空间还足够存储数据,则转至步骤S104,继续将新 的虚拟扇区分配表及数据记录写入至当前Block中。
Sill:在当前Block剩余空间不足时,首先判断所述逻辑分区中是否只剩 余一块空Block。若只剩余一块空Block,需要进行Block的数据清理过程,执行步骤S114;若所述逻辑分区中剩余的空Block多于一块,则执行步骤S112, 将数据写入至下一个Block中。
S112:将当前剩余空间不足的Block区块标志中的状态标志设置为"数据 已写满",然后转入下一个Block。例如,若当前Block为BlockO,则转入至 Blockl。
S113:将所转入的下一个Block,如Blockl,作为当前Block,并改变其 区块标志中的状态标志为"正在进行数据写入",然后转至步骤S104,执行数 据写入过程。
S114:在所述逻辑分区只剩余一块空Block,例如,只剩余一块空的Block n-l时,对最先写入的Block,即BlockO,进4亍#:据清理。
S115:首先改变所述最先写入的Block的区块标志中的状态标志为"正在 进行数据清理"。
S116:从所述最先写入的Block中依次读取数据。
S117:将读取到的数据记录的记录版本号与已写入的同类型数据记录的最 大记录版本号进行比较,判断两者相差是否大于l。若两者之差大于l,扭^亍步 骤S118;否则执行步骤S121。
S118:在读取到的数据记录的记录版本号与已写入的同类型数据记录的最 大记录版本号之差大于1时,判断所述数据记录是否为一个事务中的数据记录。 若所述数据记录为一个事务中的数据,执行步骤S119;若所述数据记录为独立 数据,执行步骤S120。
S119:判断读取到的数据记录所属的事务中所有凄t据是否需要保留。若所 述事务中的所有数据均需保留,才丸行步骤S121;否则转至步骤S120。
S120:丢弃读取到的数据记录,然后转至步骤S122。
如果所读到的数据记录的版本号与已写入的同类型数据记录的最大版本号 相差大于1,在数据记录为独立数据时,说明所读到的数据已经比较旧,而在 存储空间中还存在两个版本比较新的数据记录,因此将较旧的数据记录丢弃掉,
ii以尽量节省存储器的存储空间。而在数据记录为一个事务中的数据时,由于同 一个事务中的所有数据要保持一致,如果事务的所有数据中有一个数据为版本 较高不能丟弃的数据,则所述事务中的所有数据均需保留。因此,在数据记录 为事务中数据时,只有其所属的事务中所有数据记录的记录版本都较低、均要丢弃时才丢弃所读取到的数据记录,确保数据的安全性。S121:在所读取到的数据记录版本号较高或数据记录所在的事务中的所有 数据均需保留时,将读取到的数据记录写入至空的Block中,然后转至步骤 S122。S122:判断最先写入的Block数据是否清理完毕。若已清理完毕,执行步 骤S123;否则转至步骤S116,继续进行数据的读取和清理。S123:在最先写入的Block数据清理完毕后,将其^f各式化,并改变其区块 标志中的状态标志为"格式化完成,尚未写入任何数据"。S124:流程结束。在上述流程中,在写入一个新块前、 一个块写满后、擦除一个块后及对一 个块清理前都需要重新写入相应块的区块标志中的状态标志,目的是在突然断 电等异常事件发生后,仍然能够知道每个块的工作状态。上述流程是描述了在一个完整逻辑分区中写入数据及清理一个Block的过 程。当然,在执行完步骤S123的清理并格式化Block之后,可以继续按照凄t据 写入的步骤向有足够存储空间的Block中写入数据,并且在只剩余一块空Block 时,再对最早写入的Block进行清理。例如,将BlockO中的有效数据写入至 Blockn-1中、格式化BlockO之后,继续向Blockn-1中写入凌t据,此时BlockO 为一块空的Block;在Blockn-1数据写满时,开始清理Blockl中的数据,并 将清理后的有效数据写入至空的BlockO中。如此往复,实现对Flash存〗诸器一 个逻辑分区持续的凝:据存储过程。图1及图2所述的实施例是以虚拟扇区分配表中同时包含有事务ID、事务 版本号、记录版本号及事务标志的情况下,Flash存储器存储数据的流程。需要说明的是,对于本发明所述的基于Flash的事务处理方法,也可以在不包括 记录版本号的情况实现事务数据的处理,本领域的技术人员参考图1和图2的 流程,能够在不付出创造性劳动的前提下得出在虚拟扇区分配表中不包括记录 版本号时Flash存储器存储数据的流程。当然,以上所述仅是本发明的一种优选实施方式而已,应当指出,对于本 技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若 干改进和润饰,这些改进和润饰也应^L为本发明的保护范围。
权利要求
1、一种基于Flash的事务处理方法,所述Flash存储空间划分为若干个逻辑分区,每个逻辑分区包括一个或多个连续的物理区块,所述逻辑分区存储至少一种类型的数据记录;所述每条数据记录所占据的存储空间作为一个虚拟扇区,每个虚拟扇区设置有一个虚拟扇区分配表;其特征在于,所述虚拟扇区分配表及与所述虚拟扇区分配表相对应的数据记录依次写入至所述逻辑分区的物理区块中;所述每个虚拟扇区分配表中包括有标记事务类型的事务ID,以及标记数据记录是否属于事务中的数据的事务标志;在将数据记录写入至所述逻辑分区的物理区块中时,首先判断所述数据记录是独立数据还是事务中的数据,并根据判断结果设置所述事务ID及事务标志的值。
2、 根据权利要求1所述的基于Flash的事务处理方法,其特征在于,所述每个虛拟扇区分配表中还包括有标记事务新旧程度的事务版本号。
3、 根据权利要求2所述的基于Flash的事务处理方法,其特征在于,在当前写入至所述逻辑分区的数据记录为事务中的数据,且所述当前数据记录对应的事务ID与已写入的数据记录的事务ID相同时,将所述当前数据记录对应的事务版本号加1。
4、 根据权利要求3所述的基于Flash的事务处理方法,其特征在于,在所述逻辑分区剩余一块空的物理区块时,对所述逻辑分区中最早写入的物理区块进行数据清理;在对所述物理区块进行数据清理时,若读取到的数据记录为事务中的数据,判断所述数据记录对应的事务版本号与已写入的相同事务ID的数据记录的最大版本号之差;若所述差大于设定值,则丟弃所读取到的数据记录,若所述差不大于设定值,则将所读取到的数据记录写入至所述空的物理区块中。
5、 根据权利要求4所述的基于Flash的事务处理方法,其特征在于,所述设定值为1。
6、 根据权利要求3所述的基于Flash的事务处理方法,其特征在于,所述每个虚拟扇区分配表中还包括有用来标记与所述虛拟扇区分配表相对应的数据记录的新旧程度的记录版本号,以及标记所述数据记录的类型的数据类型;在当前写入的数据记录的数据类型与已写入的数据记录的数据类型相同时,将所述当前数据记录对应的记录版本号加1。
7、 根据权利要求6所述的基于Flash的事务处理方法,其特征在于,在所述逻辑分区剩余一块空的物理区块时,对所述逻辑分区中最早写入的物理区块进行数据清理;在对所述物理区块进行数据清理时,判断所述数据记录对应的记录版本号与已写入的相同数据类型的数据记录的最大记录版本号之差;若所述差不大于设定值,在所述数据记录为独立数据时将所述读取到的数据记录写入至所述空的物理区块中,在所述数据记录为事务中的数据时将所述数据记录所在的事务中的全部数据均写入至所述空的物理区块中。
8、 根据权利要求7所述的基于Flash的事务处理方法,其特征在于,所述设定值为1。
9、 冲艮据权利要求1至8中任一项所述的基于Flash的事务处理方法,其特征在于,所述每个虚拟扇区分配表中还包括有用来描迷与所述虚拟扇区分配表相对应的数据记录的属性的数据记录长度、数据记录ID及数据记录校验码。
10、 根据权利要求l所述的基于Flash的事务处理方法,其特征在于,在所述逻辑分区中的每一个物理区块的头部均设置有区块标志;所述区块标志包括标记所述物理区块是否格式化的格式化标志,以及标记所述物理区块当前工作状态的状态标志。
全文摘要
本发明公开了一种基于Flash的事务处理方法,所述Flash存储空间划分为若干个逻辑分区,所述逻辑分区存储至少一种类型的数据记录;所述每条数据记录所占据的存储空间作为一个虚拟扇区,每个虚拟扇区设置有一个虚拟扇区分配表;所述每个虚拟扇区分配表中包括有标记事务类型的事务ID,以及标记数据记录是否属于事务中的数据的事务标志;在将数据记录写入至所述逻辑分区的物理区块中时,首先判断所述数据记录是独立数据还是事务中的数据,并根据判断结果设置所述事务ID及事务标志的值。通过在虚拟扇区分配表中增加与事务处理有关的信息,同一事务的数据的有效性保持一致,从而解决了数据不一致的问题。
文档编号G06F12/06GK101661433SQ200910018428
公开日2010年3月3日 申请日期2009年9月24日 优先权日2009年9月24日
发明者田友强 申请人:青岛海信宽带多媒体技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1