由ladventure 更新于 2017-01-03 16:05
说 明 书
基于流水线的高效可靠数据迁移方案
技术领域
本发明涉及一种高效可靠的数据迁移方案,特别针对大数据迁移,能够保证迁移前后数据的一致性,并且具有较高效率。
背景技术
近年来,随着计算机和信息技术的迅猛发展和普及应用,行业应用系统的规模迅速扩大,行业应用所产生的数据呈爆炸性增长。例如美国的纽约证券交易所每天大约会产生1TB的交易数据,互联网档案馆存储着约2PB数据,并以每月至少20TB的速度增长,视频分享网站Youyube上每天会上传的视频数据等。然而,不同时期的数据有不同意义,如对于大多数应用而言,刚生成的数据访问频率最高,而某些数据基本不会被访问。传统的单一数据存储和管理方式显然已经不能够满足海量存储以及性能需求;同时,对于某些海量数据存储中心,数据的访问具有很强的时间性和可预测性,对于某一时间阶段,需要访问同一部分数据多次,并且需要较高的数据访问速度。鉴于不同数据之间存在着显著的访问频率差异,采用不同访问速度和单位价格的多级设备构造分级存储系统显得非常合适,满足了存储容量和硬件成本约束的前提下,提供较高的访问性能。
对于这类应用,考虑将不同访问速率的磁盘结合,构造多层的数据存储方式具有非常重要的意义。如,将高速存储磁盘固态硬盘构成高速访问存储集群存储在线访问的数据,将低速存储磁盘机械硬盘构成低速廉价,大容量存储集群存储非在线访问的离线数据。目前许多数据中心就是采用这种方式存储数据。在这种分级存储系统中,数据的访问频率是动态变化的,为了使系统能够提供更好的性能,需要在不同的存储设备之间频繁的做数据迁移,然而统计显示,对于大数据的迁移会发生各类问题导致迁移失败或者迁移后的数据不可用。如,迁移过程中意外宕机;不同程度的数据丢失,数据的不一致等。所以,要保证大数据迁移前后的一致性,必须在数据迁移中和数据迁移后做一定的措施以保证迁移成功以及迁移后数据与迁移之前的数据一致。所以,一种高效的可靠数据迁移方案变的非常重要。
发明内容
本发明要解决的技术问题是:针对大数据分级存储中数据的迁移,迁移过程中由于许多的不可预知问题造成数据迁移的失败,或者迁移后的数据不一致,并且,数据迁移失败和不一致问题不容易检测出,检测数据迁移的失败或者数据的丢失非常困难,本发明提供一种可靠高效的数据迁移方案,通过在迁移中使用数据库记录数据状态和迁移完成后使用流水线进行MD5校验,避免数据迁移过程中意外导致的迁移失败或者丢失而造成的数据不完整,以及迁移完成后数据的不可用。
本发明的技术方案包括以下步骤:
步骤1、搭建大数据存储系统,以及数据访问接口,存储数据;同时初始化数据库,新建数据库和迁移任务管理表,初始化流水线数据单位缓存大小和数据缓存队列的大小;启动服务,扫描数据库中所有未完成任务状态,对每个未完成任务,从未完成状态重启任务,保证服务意外终止后数据的一致性;
步骤2、创建数据迁移任务;选择一个数据文件夹和目的路径,更新数据库,增加一条任务信息记录迁移任务需要记录的信息,准备将数据包含的所有文件迁移到对应目的路径;
步骤3、更新数据库,更改迁移任务状态信息为计算源文件MD5状态,并开始使用流水线方式计算源数据文件的MD5值;由于计算源文件MD5值需要将源文件每个位读取出来并做计算,主要的时间消耗是读取文件内容的I/O时间消耗和计算MD5值的CPU时间消耗,显然读取文件内容和计算MD5使用的计算机资源并不相同,则使用多线程流水线的处理能够很大的提升性能,具体步骤与4中相似;
步骤4、计算源文件MD5值结束后,更新数据库,记录源文件MD5值信息,更改任务状态信息为开始迁移状态,开始流水线迁移数据文件并计算目的文件MD5值;由于迁移文件需要将源文件所有内容全部读出到缓存中,然后将缓存写入目的文件,则目的文件的内容都是通过缓存文件写入的,所以,可以通过缓存中的内容直接计算出目的文件的MD5值,而不需要迁移完成后再次读取目的文件,再计算MD5值,可以很大的提升性能,同时,和计算源文件MD5相似,读取源文件到缓存,将缓存写入目的文件,累计缓存中的MD5值,三个步骤采用流水线并行化操作,可以很大的提升性能;具体步骤参见步骤41到步骤44;
步骤5、迁移结束后,对比源文件的MD5值和目的文件的MD5值,如果相同,则更新数据库,更改数据迁移状态为迁移成功,结束,否则进行步骤6。
步骤6、迁移失败,数据回滚,即如果目的文件存在,则删除目的文件,避免脏数据的产生,更新数据库,更改数据迁移状态为迁移失败。
步骤4中所述的具体执行以下步骤:
步骤41、更新数据库中,记录下步骤3中计算的源文件MD5值,更改任务的状态信息为正在迁移状态,初始化未使用,写入,计算MD5三个缓存队列,并将读取缓存中装满已经申请好的缓存对象(这样可以增加流水线的灵活性,避免频繁申请缓存以及单缓存造成的进程频繁切换造成的时间损失),启动读取,写入,计算MD5 三个进程;
步骤42、从未使用缓存队列中取一个缓存对象,如果队列为空,则阻塞读取文件进程,等待申请到未使用缓存对象,将缓存对象传递给读取进程,读取源文件一部分内容到缓存中,如果源文件已经读取结束,结束读取进程,否则,将缓存对象放入写入缓存队列中,如果写入缓存队列已满,则阻塞等待;
步骤43、从写入缓存队列中取一个缓存对象,如果队列为空,并且读取进程已经结束,则结束写入进程,否则阻塞直到取到一个缓存对象;将缓存中的内容写入目的文件,并将缓存对象放入计算MD5缓存队列,如果计算MD5缓存队列已满,则阻塞等待;
步骤44、从计算MD5缓存队列中取一个缓存对象,如果写入缓存队列和读取缓存队列都为空,并且写入进程和读取进程都已经结束,则结束计算MD5进程,返回MD5值,该步骤执行完毕;否则阻塞直到取到一个缓存对象;计算并更新缓存中的内容的MD5值,然后清空缓存并将缓存对象放入计算读取队列,如果未使用缓存队列已满,则阻塞等待;
采用本发明可以达到以下技术效果:
本发明适用于大数据文件的可靠性快速迁移,提供一种有状态的迁移方式保证大数据文件迁移过程中的数据一致性,避免迁移过程中的机器宕机,服务意外终止等情况产生的不完整数据文件,同时提供一种基于流水线方式高效的数据文件校验方法,避免数据文件迁移中数据的丢失导致的数据不一致性。
附图说明
图1为本发明数据文件迁移校验流程图;
具体实施方式
步骤101、初始化数据库Database以及任务管理表TaskInfo,设定服务最优参数,单位缓存的大小BufferSize和缓存队列的大小QueueSize;
步骤102、扫描TaskInfo中状态未在终止状态的任务即k等于1或者2,从该状态重启任务,防止服务意外终止等导致的数据不一致;
步骤103、选择相应的数据文件S和目的路径文件D,更新数据库,增加一条任务记录,记录S到D的数据迁移必要信息;
步骤104、更改任务状态k=1,表示正在计算源文件S的MD5值;用QueueSize初始化两个缓存队列读取缓存Q1和计算MD5缓存Q2,用BufferSize大小的缓存填满Q1,启动两个进程读取进程P1和计算MD5进程P2,开始计算源文件MD5值,即同时进行步骤1041和步骤1043;
步骤1041、P1-1:从Q1读取缓存队列中取出一个缓存对象B1,如果Q1为空则阻塞等待直到取到B1;
步骤1042、P1-2:将源文件S中读取BufferSize大小的内容M,如果S读取完成,则P1结束;否则将读取到的内容M放入缓存B1中,将B1加入Q2队列,如果Q2已满,则阻塞等待直到加入成功,重复步骤1041;
步骤1043、P2-1:从Q2计算MD5缓存队列中取出一个缓存对象B2,如果Q2为空则阻塞等待直到取到B2;
步骤1044、P2-2:计算B2内容的MD5值,并更新,将B2清空加入Q1,如Q1满则等待;如果Q2为空且P1结束则返回源文件S的MD5值ms,P2结束,否则重复步骤1043;
步骤105、更新数据库,记录步骤104计算出的源文件S的MD5值ms,用QueueSize初始化三个缓存队列读取缓存q1,写入缓存q2和计算MD5缓存q3,用BufferSize大小的缓存填满q1,启动三个进程读取进程p1,写入进程p2和计算MD5进程p3,开始迁移文件并获取目的文件MD5值,即同时进行步骤1051,步骤1051和步骤1053;更改任务状态k=2,表示正在进行数据迁移;
步骤1051、p1-1:从q1读取缓存队列中取出一个缓存对象b1,如果q1为空则阻塞等待直到取到b1;
步骤1052、p1-2:将源文件S中读取BufferSize大小的内容M,如果S读取完成,则p1结束;否则将读取到的内容M放入缓存b1中,将b1加入q2队列,如果q2已满,则阻塞等待直到加入成功,重复步骤1051;
步骤1053、p2-1:从q2写入缓存队列中取出一个缓存对象b2,如果b2为空则阻塞等待直到取到b2;
步骤1054、p2-2:将b2中的内容写入目的文件D中,将b2加入q3,如q3已满则等待;如果q2为空且p1结束则返回写入完成,p2结束;否则重复步骤1053;
步骤1055、p3-1:从q3计算MD5缓存队列中取出一个缓存对象b3,如果q3为空则阻塞等待直到取到b3;;
步骤1056、p3-2:计算b3内容的MD5值,并更新,将b3清空加入q1,如q1满则等待;如果q2,q3为空且p1,p2结束则返回目的文件D的MD5值md,p3结束;否则重复步骤1055;
步骤106、更新数据库,记录步骤105中计算的目的文件MD5值md,比较目的文件MD5值md和源文件MD5值ms是否相同,如果相同,则进行步骤108;否则进行步骤107;
步骤107、数据校验失败,迁移前后数据不一致,删除目的文件D,更改任务状态k等于-1,表示迁移失败;
步骤108、数据校验成功,更改任务状态k等于3,表示迁移成功。
最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围。
说 明 书
基于流水线的高效可靠数据迁移方案
技术领域
本发明涉及一种高效可靠的数据迁移方案,特别针对大数据迁移,能够保证迁移前后数据的一致性,并且具有较高效率。
背景技术
近年来,随着计算机和信息技术的迅猛发展和普及应用,行业应用系统的规模迅速扩大,行业应用所产生的数据呈爆炸性增长。例如美国的纽约证券交易所每天大约会产生1TB的交易数据,互联网档案馆存储着约2PB数据,并以每月至少20TB的速度增长,视频分享网站Youyube上每天会上传的视频数据等。然而,不同时期的数据有不同意义,如对于大多数应用而言,刚生成的数据访问频率最高,而某些数据基本不会被访问。传统的单一数据存储和管理方式显然已经不能够满足海量存储以及性能需求;同时,对于某些海量数据存储中心,数据的访问具有很强的时间性和可预测性,对于某一时间阶段,需要访问同一部分数据多次,并且需要较高的数据访问速度。鉴于不同数据之间存在着显著的访问频率差异,采用不同访问速度和单位价格的多级设备构造分级存储系统显得非常合适,满足了存储容量和硬件成本约束的前提下,提供较高的访问性能。
对于这类应用,考虑将不同访问速率的磁盘结合,构造多层的数据存储方式具有非常重要的意义。如,将高速存储磁盘固态硬盘构成高速访问存储集群存储在线访问的数据,将低速存储磁盘机械硬盘构成低速廉价,大容量存储集群存储非在线访问的离线数据。目前许多数据中心就是采用这种方式存储数据。在这种分级存储系统中,数据的访问频率是动态变化的,为了使系统能够提供更好的性能,需要在不同的存储设备之间频繁的做数据迁移,然而统计显示,对于大数据的迁移会发生各类问题导致迁移失败或者迁移后的数据不可用。如,迁移过程中意外宕机;不同程度的数据丢失,数据的不一致等。所以,要保证大数据迁移前后的一致性,必须在数据迁移中和数据迁移后做一定的措施以保证迁移成功以及迁移后数据与迁移之前的数据一致。所以,一种高效的可靠数据迁移方案变的非常重要。
发明内容
本发明要解决的技术问题是:针对大数据分级存储中数据的迁移,迁移过程中由于许多的不可预知问题造成数据迁移的失败,或者迁移后的数据不一致,并且,数据迁移失败和不一致问题不容易检测出,检测数据迁移的失败或者数据的丢失非常困难,本发明提供一种可靠高效的数据迁移方案,通过在迁移中使用数据库记录数据状态和迁移完成后使用流水线进行MD5校验,避免数据迁移过程中意外导致的迁移失败或者丢失而造成的数据不完整,以及迁移完成后数据的不可用。
本发明的技术方案包括以下步骤:
步骤1、搭建大数据存储系统,以及数据访问接口,存储数据;同时初始化数据库,新建数据库和迁移任务管理表,初始化流水线数据单位缓存大小和数据缓存队列的大小;启动服务,扫描数据库中所有未完成任务状态,对每个未完成任务,从未完成状态重启任务,保证服务意外终止后数据的一致性;
步骤2、创建数据迁移任务;选择一个数据文件夹和目的路径,更新数据库,增加一条任务信息记录迁移任务需要记录的信息,准备将数据包含的所有文件迁移到对应目的路径;
步骤3、更新数据库,更改迁移任务状态信息为计算源文件MD5状态,并开始使用流水线方式计算源数据文件的MD5值;由于计算源文件MD5值需要将源文件每个位读取出来并做计算,主要的时间消耗是读取文件内容的I/O时间消耗和计算MD5值的CPU时间消耗,显然读取文件内容和计算MD5使用的计算机资源并不相同,则使用多线程流水线的处理能够很大的提升性能,具体步骤与4中相似;
步骤4、计算源文件MD5值结束后,更新数据库,记录源文件MD5值信息,更改任务状态信息为开始迁移状态,开始流水线迁移数据文件并计算目的文件MD5值;由于迁移文件需要将源文件所有内容全部读出到缓存中,然后将缓存写入目的文件,则目的文件的内容都是通过缓存文件写入的,所以,可以通过缓存中的内容直接计算出目的文件的MD5值,而不需要迁移完成后再次读取目的文件,再计算MD5值,可以很大的提升性能,同时,和计算源文件MD5相似,读取源文件到缓存,将缓存写入目的文件,累计缓存中的MD5值,三个步骤采用流水线并行化操作,可以很大的提升性能;具体步骤参见步骤41到步骤44;
步骤5、迁移结束后,对比源文件的MD5值和目的文件的MD5值,如果相同,则更新数据库,更改数据迁移状态为迁移成功,结束,否则进行步骤6。
步骤6、迁移失败,数据回滚,即如果目的文件存在,则删除目的文件,避免脏数据的产生,更新数据库,更改数据迁移状态为迁移失败。
步骤4中所述的具体执行以下步骤:
步骤41、更新数据库中,记录下步骤3中计算的源文件MD5值,更改任务的状态信息为正在迁移状态,初始化未使用,写入,计算MD5三个缓存队列,并将读取缓存中装满已经申请好的缓存对象(这样可以增加流水线的灵活性,避免频繁申请缓存以及单缓存造成的进程频繁切换造成的时间损失),启动读取,写入,计算MD5 三个进程;
步骤42、从未使用缓存队列中取一个缓存对象,如果队列为空,则阻塞读取文件进程,等待申请到未使用缓存对象,将缓存对象传递给读取进程,读取源文件一部分内容到缓存中,如果源文件已经读取结束,结束读取进程,否则,将缓存对象放入写入缓存队列中,如果写入缓存队列已满,则阻塞等待;
步骤43、从写入缓存队列中取一个缓存对象,如果队列为空,并且读取进程已经结束,则结束写入进程,否则阻塞直到取到一个缓存对象;将缓存中的内容写入目的文件,并将缓存对象放入计算MD5缓存队列,如果计算MD5缓存队列已满,则阻塞等待;
步骤44、从计算MD5缓存队列中取一个缓存对象,如果写入缓存队列和读取缓存队列都为空,并且写入进程和读取进程都已经结束,则结束计算MD5进程,返回MD5值,该步骤执行完毕;否则阻塞直到取到一个缓存对象;计算并更新缓存中的内容的MD5值,然后清空缓存并将缓存对象放入计算读取队列,如果未使用缓存队列已满,则阻塞等待;
采用本发明可以达到以下技术效果:
本发明适用于大数据文件的可靠性快速迁移,提供一种有状态的迁移方式保证大数据文件迁移过程中的数据一致性,避免迁移过程中的机器宕机,服务意外终止等情况产生的不完整数据文件,同时提供一种基于流水线方式高效的数据文件校验方法,避免数据文件迁移中数据的丢失导致的数据不一致性。
附图说明
图1为本发明数据文件迁移校验流程图;
具体实施方式
步骤101、初始化数据库Database以及任务管理表TaskInfo,设定服务最优参数,单位缓存的大小BufferSize和缓存队列的大小QueueSize;
步骤102、扫描TaskInfo中状态未在终止状态的任务即k等于1或者2,从该状态重启任务,防止服务意外终止等导致的数据不一致;
步骤103、选择相应的数据文件S和目的路径文件D,更新数据库,增加一条任务记录,记录S到D的数据迁移必要信息;
步骤104、更改任务状态k=1,表示正在计算源文件S的MD5值;用QueueSize初始化两个缓存队列读取缓存Q1和计算MD5缓存Q2,用BufferSize大小的缓存填满Q1,启动两个进程读取进程P1和计算MD5进程P2,开始计算源文件MD5值,即同时进行步骤1041和步骤1043;
步骤1041、P1-1:从Q1读取缓存队列中取出一个缓存对象B1,如果Q1为空则阻塞等待直到取到B1;
步骤1042、P1-2:将源文件S中读取BufferSize大小的内容M,如果S读取完成,则P1结束;否则将读取到的内容M放入缓存B1中,将B1加入Q2队列,如果Q2已满,则阻塞等待直到加入成功,重复步骤1041;
步骤1043、P2-1:从Q2计算MD5缓存队列中取出一个缓存对象B2,如果Q2为空则阻塞等待直到取到B2;
步骤1044、P2-2:计算B2内容的MD5值,并更新,将B2清空加入Q1,如Q1满则等待;如果Q2为空且P1结束则返回源文件S的MD5值ms,P2结束,否则重复步骤1043;
步骤105、更新数据库,记录步骤104计算出的源文件S的MD5值ms,用QueueSize初始化三个缓存队列读取缓存q1,写入缓存q2和计算MD5缓存q3,用BufferSize大小的缓存填满q1,启动三个进程读取进程p1,写入进程p2和计算MD5进程p3,开始迁移文件并获取目的文件MD5值,即同时进行步骤1051,步骤1051和步骤1053;更改任务状态k=2,表示正在进行数据迁移;
步骤1051、p1-1:从q1读取缓存队列中取出一个缓存对象b1,如果q1为空则阻塞等待直到取到b1;
步骤1052、p1-2:将源文件S中读取BufferSize大小的内容M,如果S读取完成,则p1结束;否则将读取到的内容M放入缓存b1中,将b1加入q2队列,如果q2已满,则阻塞等待直到加入成功,重复步骤1051;
步骤1053、p2-1:从q2写入缓存队列中取出一个缓存对象b2,如果b2为空则阻塞等待直到取到b2;
步骤1054、p2-2:将b2中的内容写入目的文件D中,将b2加入q3,如q3已满则等待;如果q2为空且p1结束则返回写入完成,p2结束;否则重复步骤1053;
步骤1055、p3-1:从q3计算MD5缓存队列中取出一个缓存对象b3,如果q3为空则阻塞等待直到取到b3;;
步骤1056、p3-2:计算b3内容的MD5值,并更新,将b3清空加入q1,如q1满则等待;如果q2,q3为空且p1,p2结束则返回目的文件D的MD5值md,p3结束;否则重复步骤1055;
步骤106、更新数据库,记录步骤105中计算的目的文件MD5值md,比较目的文件MD5值md和源文件MD5值ms是否相同,如果相同,则进行步骤108;否则进行步骤107;
步骤107、数据校验失败,迁移前后数据不一致,删除目的文件D,更改任务状态k等于-1,表示迁移失败;
步骤108、数据校验成功,更改任务状态k等于3,表示迁移成功。
最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围。