具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。
下面结合附图和具体实施例进一步说明本发明实施例的技术方案。
根据本发明的实施例,提供了一种数据写入方法,图1是本发明实施例的数据写入方法的流程图,如图1所示,根据本发明实施例的数据写入方法包括如下步骤:
步骤101,接收主机下发的小写请求,该小写请求中携带有修改数据(例如,修改数据为D3’)以及修改数据的位置信息;
也就是说,小写请求中携带有修改数据,并同时指示出磁盘中的磁盘条带下哪个磁盘条带单元中的哪些数据需要根据该修改数据进行修改,即上述位置信息。
步骤102,当判断设置的固态硬盘中不存在与该修改数据对应的磁盘条带单元数据时,根据小写请求中的位置信息从相应的磁盘条带单元中读取磁盘条带单元数据,并根据修改数据对读取的磁盘条带单元数据进行相应修改;
其中,上述磁盘条带单元数据是指该条带单元中的全部数据,例如,读取的磁盘条带单元数据为D1、D2、D3、D4,修改数据为D3’,则根据D3’对D1、D2、D3、D4进行修改;根据小写请求中的位置信息可知,修改数据D3’是对磁盘条带单元数据中的D3进行修改。
步骤103,将修改后的磁盘带单元数据以预定数据存储形式存储于固态硬盘,即,将修改后的磁盘条带单元数据D1、D2、D3’、D4存储于固态硬盘中,并向主机返回小写请求响应。
具体的,在步骤103中,预定数据存储形式可以包括:日志形式;也就是说,将修改后的磁盘条带单元数据D1、D2、D3’、D4以日志的形式保存在固态硬盘中;
此外,从固态硬盘自身结构的角度来说,可以将固态硬盘划分为固态硬盘条带单元,将数据存储于固态硬盘条带单元中,从而可以按照固态硬盘条带号定期进行统计;
为了能够使存储于固态硬盘的数据更加安全,还可以使用固态硬盘组成镜像结构的固态硬盘,将数据保存在镜像结构的固态硬盘中。
在实际应用中,为了节省成本,优选地,可以将两个固态硬盘组成RAID1。RAID 1即为镜象结构,当主硬盘损坏时,镜像硬盘就可以代替主硬盘工作,对于使用RAID1结构的存储设备来说,镜像硬盘相当于一个备份硬盘,从而,提高了数据存储的安全性。
步骤104,将固态硬盘中保存的修改后的磁盘条带单元数据写入磁盘。
在实际应用中,为了后续将固态硬盘上的数据及时、正确地搬移到磁盘上,可以建立一张用于保存固态硬盘条带单元与磁盘条带单元对应关系的条带单元映射表,该条带单元映射表以磁盘条带号为索引。图2是本发明实施例的条带单元映射表的示意图,如图2所示,条带单元映射表中的每一项由A、B、C三个域组成:其中,域A记录磁盘条带号对应的磁盘条带中有几个磁盘条带单元中的磁盘条带单元数据存储在固态硬盘中(即,该磁盘条带中有几个磁盘条带单元在固态硬盘中);B域记录磁盘条带号对应的磁盘条带最后的更新时间;C域记录磁盘条带号对应的磁盘条带中的磁盘条带单元信息的结构体的指针。
图3是本发明实施例的磁盘条带单元信息的结构体变量的示意图,如图3所示,磁盘条带单元信息的结构体变量包括C1、C2、C3三个变量,其中,C1记录磁盘条带单元在磁盘条带中的序号;C2记录磁盘条带单元在固态硬盘中的序号;C3记录指向下一个条带单元信息的结构体的指针。
此外,为了及时地将固态硬盘上的数据写入磁盘,释放固态硬盘上的空间,便于后续连续的小写操作,可以建立一个位图,该位图用于标识固态硬盘中可用的固态硬盘条带单元。根据该位图,就可以方便的查找空闲的固态硬盘条带单元。
通过建立了条带单元映射表以及位图,如果主机下发小写请求,就可以根据条带单元映射表以及位图的记录进行相应的小写操作,下面,结合附图,对主机下发小写请求时根据条带单元映射表以及位图的记录进行小写操作的过程进行详细说明,图4以向RAID5写数据为例对本发明实施例的数据写入方法进行详细描述,如图4所示,包括如下步骤:
步骤401,固态硬盘接收主机下发的小写请求,其中,小写请求中携带有修改数据以及修改数据对应的位置信息;
步骤402,根据小写请求中的位置信息,可以确定磁盘中相应的磁盘条带,在确定了磁盘条带后,根据该磁盘条带的磁盘条带号查询条带单元映射表;
步骤403,根据条带单元映射表的记录,判断修改数据对应的磁盘条带单元数据是否已经在固态硬盘中;如果判断为是,则执行步骤404,否则,则执行步骤405;
步骤404,根据条带单元映射表在固态硬盘中查找到该修改数据对应的磁盘条带单元数据,并对该磁盘条带单元数据进行修改,也就是说,当判断固态硬盘中存在与修改数据对应的磁盘条带单元数据时,可以直接根据修改数据对所述固态硬盘中的所述磁盘条带单元数据进行修改;进入步骤409;
步骤405,根据小写请求中的位置信息从磁盘相应的磁盘条带单元中读取修改数据对应的磁盘条带单元数据,进入步骤406;
步骤406,根据修改数据对相应的磁盘条带单元数据进行修改,进入步骤407;
步骤407,根据位图查找固态硬盘中空闲的固态硬盘条带单元,将修改后的磁盘条带单元数据保存在上述空闲的固态硬盘条带单元中;在数据结构上,可以使用日志结构形式保存数据,具体的,为了提高数据的安全性,还可以使用镜像结构的固态硬盘以日志形式保存修改后的磁盘条带单元数据。
步骤408,根据上述操作的结果对条带单元映射表以及位图进行修改;
由于在将修改后的磁盘条带单元数据存储于上述空闲的固态硬盘条带单元中后,固态硬盘条带单元的存储状态已经变化,因此,需要及时对条带单元映射表以及位图进行修改。
步骤409,固态硬盘向主机返回小写请求响应,进入步骤410;
通过上述处理,本发明实施例将固态硬盘引入磁盘阵列中,利用固态硬盘的高性能读写特性,将要写的数据以日志结构的形式保存到固态硬盘盘上,使小写请求得以及时响应,提高了RAID5的小写性能。
步骤410,将固态硬盘中保存的所述修改后的磁盘条带单元数据写入RAID5中的相应磁盘条带单元中。
具体的,在向主机及时地返回了小写请求响应后,还需要设置一个后台线程,该线程在满足启动条件时启动,为了保证在磁盘空闲时再向磁盘写入数据,以及保证固态硬盘中有足够的存储空间存储最新的数据,该线程具有一定的启动条件,即,在系统空闲、或固态硬盘上的空间已经达到一个预定值后启动该线程。
启动该后台线程后,可以在条带单元映射表中优先选择固态硬盘上符合满写条件的数据将其写入磁盘,具体地,如果有符合满写条件的数据,可以从固态硬盘中获取该磁盘条带的所有修改后的磁盘条带单元数据,根据修改后的磁盘条带单元数据确定校验数据,并将修改后的磁盘条带单元数据和校验数据写入磁盘;如果没有这样的数据,按最近最少使用(Least RecentlyUsed;以下简称LRU)算法在条带单元映射表中选择要写回磁盘的磁盘条带单元,根据该算法选择需要写回磁盘的可能是一个条带单元,也可能是属于同一个条带又不满足满写的几个条带单元,如果满足大写条件,就可以使用大写操作来计算新校验数据。
例如,RAID5中一个条带包括三个数据条带单元一个校验条带单元,如果已经有两个条带单元内容已经在固态硬盘中,此时在计算新的校验数据就可以将不在固态硬盘的另一个数据条带单元中的数据和在固态硬盘中的两个条带单元的新数据做个异或就可以得到新的校验数据了。如果也不满足大写条件,则从磁盘中读取该磁盘条带单元中相应的旧数据和旧校验数据,根据旧数据、旧校验数据、以及相应的修改后的磁盘条带单元数据确定新校验数据,并将相应的修改后的磁盘条带单元数据和新校验数据写入磁盘。也就是说,在不符合满写条件时,如果符合大写就按大写方式处理,即读取不需要修改的那个条带单元的内容和新的条带单元的内容做异或得到新的校验数据,否则就按小写方式处理,具体的,读取需要修改的磁盘条带单元上的旧数据和旧的校验数据,将其和新数据进行异或得到新的校验数据。最后,修改条带单元映射表和位图中相应的项,并回收固态硬盘上的空间。
此外,为了提高存储于固态硬盘中的数据的安全性,还可以使用固态硬盘组成镜像结构,将数据保存在镜像结构的固态硬盘例如RAID1中,既能保证的数据读写的性能,又能降低一个固态硬盘因非正常断电或出现故障时而导致数据丢失的风险。
本发明实施例利用固态硬盘的高性能读写特性,使得小写情况下系统可以尽快地响应主机,提高了RAID5的小写性能,并且,通过查询条带单元映射表能够方便的将固态硬盘中暂时存储的数据写入磁盘,在存在符合满写条件的数据时,能够在写入磁盘时执行满写操作,极大地提高了写入磁盘的速度。
图5是根据本发明实施例的数据写入方法的将数据写入磁盘的流程图,下面,结合图5,对将数据线写入磁盘的处理过程进行详细说明,如图5所示,根据本发明实施例的数据写入方法包括如下处理:
步骤501,在存储系统空闲时,根据条带单元映射表判断固态硬盘中是否存在符合满写条件的磁盘条带的数据,其中,满写条件是指磁盘中一个磁盘条带中的所有磁盘条带单元中的数据均存储于固态硬盘中,并需要将该数据从固态硬盘写入到磁盘。当存在符合满写条件的磁盘条带时,进入步骤502,否则进入步骤505;
步骤502,从固态硬盘中获取与该磁盘条带对应的所有修改后的磁盘条带单元数据;
步骤503,根据修改后的磁盘条带单元数据确定校验数据;
步骤504,将修改后的磁盘条带单元数据和校验数据写入该磁盘条带单元;
步骤505,根据条带单元映射表判断固态硬盘中是否存在符合大写条件的磁盘条带单元的数据;如果判断为是,则进入步骤506,否则,进入步骤509;
步骤506,从固态硬盘中获取修改后的符合大写条件的磁盘条带单元数据;
步骤507,根据修改后的符合大写条件的磁盘条带单元数据执行大写操作,以确定新校验数据;
步骤508,将修改后的符合大写条件的磁盘条带单元数据和该新校验数据写入磁盘,进入步骤513;
步骤509,根据LRU算法确定需要写回磁盘的磁盘条带单元;
具体的,可以将在固态硬盘中存储时间最长的磁盘条带确定为需要写回磁盘的磁盘条带单元。
步骤510,从磁盘中读取磁盘条带单元中相应的旧数据和旧校验数据;
步骤511,根据旧数据、旧校验数据、以及固态硬盘中相应的修改后的磁盘条带单元数据确定新校验数据;
步骤512,将相应的修改后的磁盘条带单元数据和新校验数据写入磁盘,进入步骤513;
步骤513,对条带单元映射表以及位图进行相应的修改。
优选地,还可以设置一个定时器,并在条带单元映射表以及位图进行修改后,需要判断该定时器是否到时;如果到时,则结束操作;否则重新执行判断固态硬盘中是否存在符合满写条件的磁盘条带的操作。
如上所述,通过查询条带单元映射表能够方便的将固态硬盘中暂时存储的数据写入磁盘,在存在符合满写条件的数据时,能够在写入磁盘时执行满写操作,极大地提高了写入磁盘的速度。
根据本发明的另一实施例,提供了一种数据写入装置,图6是本发明实施例的数据写入装置的结构示意图,如图6所示,根据本发明实施例的数据写入装置包括接收模块60、第一判断模块61,第一修改模块62、第二修改模块63,存储模块64、发送模块66、写入模块68。下面,对上述数据写入装置中的各个模块进行详细说明。
接收模块60,用于接收主机下发的小写请求,该小写请求中携带有修改数据以及修改数据对应的位置信息;
其中,位置信息是指磁盘中的磁盘条带下哪个磁盘条带单元中的哪些数据需要根据修改数据(例如D3’)进行修改。
第一判断模块61,用于根据条带单元映射表判断与所述修改数据对应的磁盘条带单元数据是否存在于所述固态硬盘中,其中,所述条带单元映射表中保存有所述固态硬盘条带单元与所述磁盘条带单元的对应关系;
具体的,在实际应用中,为了后续能够将固态硬盘上的数据及时、正确地搬移到磁盘上,建立有一张用于保存固态硬盘条带单元与磁盘条带单元对应关系的条带单元映射表,该条带单元映射表以磁盘条带号为索引。该条带单元映射表中的各个域以及变量可以参照图2和图3进行理解,在此不再赘述。
第一修改模块62,用于当判断设置的固态硬盘中不存在与所述修改数据对应的磁盘条带单元数据时,根据位置信息从相应的磁盘条带单元中读取磁盘条带单元数据;
其中,上述磁盘条带单元数据是指该条带单元中的全部数据,例如:D1、D2、D3、D4;并根据修改数据D3’对磁盘条带单元数据D1、D2、D3、D4进行修改;
第二修改模块63,用于当所述判断模块的判断结果为所述固态硬盘中存在与所述修改数据对应的磁盘条带单元数据时,根据所述修改数据对所述固态硬盘中的所述磁盘条带单元数据进行修改;
存储模块64,用将修改后的磁盘条带单元数据D1、D2、D3’、D4以预定的数据存储形式存储于固态硬盘中;
具体地,修改后的磁盘条带单元数据包括D1、D2、D3’、D4,将D1、D2、D3’、D4以预定数据存储形式将以日志的形式保存在固态硬盘中,具体的,该预定的数据存储形式可以包括日志形式。
此外,从固态硬盘自身结构的角度来说,可以将固态硬盘划分为固态硬盘条带单元,将数据存储于固态硬盘条带单元中,从而可以按照固态硬盘条带号定期进行统计;
为了能够使存储于固态硬盘的数据更加安全,还可以使用固态硬盘组成镜像结构的固态硬盘,将数据保存在镜像结构的固态硬盘中。
发送模块66,用于当存储模块64将修改后的磁盘条带单元数据存储于固态硬盘中后,向主机返回小写请求响应;
写入模块68,用于将固态硬盘中存储的修改后的磁盘条带单元数据写入磁盘。
具体的,为了及时地将固态硬盘上的数据写入磁盘,释放固态硬盘上的空间,便于后续的连续小写操作,还可以建立一个位图,该位图用于标识固态硬盘中可用的固态硬盘条带单元。根据该位图,就可以方便的查找空闲的固态硬盘条带单元。
通过上述的处理,由于利用固态硬盘的高性能读写特性,提高了RAID5的小写性能;此外,通过将固态硬盘做成磁盘镜像,既保证了数据读写的性能,又防止了非正常断电时或固态硬盘出现故障时数据产生不一致的可能。
图7是根据本发明实施例的写入模块的结构示意图,如图7所示,根据本发明实施例的写入模块包括:第二判断子模块70、第一写入子模块72、第三判断子模块74、第二写入子模块76、第三写入子模块78。下面结合附图,对本发明实施例的数据写入装置进行说明。其中:
第二判断子模块70,用于判断固态硬盘中是否存在符合满写条件的磁盘条带;
其中,满写条件为磁盘条带中所有磁盘条带单元中的数据均需要由固态硬盘重新写入到磁盘。
第一写入子模块72,用于在第二判断子模块70判断为是的情况下,从固态硬盘中获取磁盘条带的所有修改后的磁盘条带单元数据,根据修改后的磁盘条带单元数据确定校验数据,并将修改后的磁盘条带单元数据和校验数据写入磁盘;
第三判断子模块74,用于在第二判断子模块70判断为否的情况下,判断固态硬盘中是否存在符合大写条件的磁盘条带单元;
第二写入子模块76,用于在第三判断子模块74判断为是的情况下,从固态硬盘中获取修改后的符合大写条件的磁盘条带单元数据,根据修改后的符合大写条件的磁盘条带单元数据执行大写操作,以确定新校验数据,并将修改后的符合大写条件的磁盘条带单元数据和该新校验数据写入磁盘;
第三写入子模块78,用于在第三判断子模块74判断为否的情况下,确定需要写回磁盘的磁盘条带单元,从磁盘中读取磁盘条带单元中相应的旧数据和旧校验数据,根据旧数据、旧校验数据、以及固态硬盘中相应的修改后的磁盘条带单元数据确定新校验数据,并将相应的修改后的磁盘条带单元数据和新校验数据写入磁盘。
此外,根据本发明实施例的写入模块还包括:
维护子模块,用于在写入磁盘后,对条带单元映射表以及位图进行相应的修改,其中,条带单元映射表用于保存固态硬盘条带单元与磁盘条带单元的对应关系,位图用于标识固态硬盘中可用的固态硬盘条带单元;
控制子模块,用于设置定时器,在定时器到时的情况下,结束操作,在定时器未到时的情况下,通知第二判断模块执行判断固态硬盘中是否存在符合满写条件的磁盘条带的操作。
借助于上述数据写入装置,通过查询条带单元映射表能够方便的将固态硬盘中暂时存储的数据写入磁盘,在存在符合满写条件的数据时,能够在写入磁盘时执行满写操作,极大地提高了写入磁盘的速度。
需要说明的是,本发明实施例的数据写入装置中可以包括固态硬盘和RAID5的磁盘,也可以独立于固态硬盘或RAID5的磁盘单独存在。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。