发明内容
有鉴于此,本发明提供一种快速实现业务存储切换的装置和方法。
该快速实现业务存储切换的装置应用于具有缓存补录功能的设备,该装置在后端存储故障时开启使用,该设备包括本地存储资源,该装置包括:剩余缓存计算模块,用于计算当前剩余缓存空间的长度;所述当前剩余缓存空间为已完成后端存储的业务数据所占的空间或者无业务数据写入的空间;缓存补录判断模块,用于根据计算的当前剩余缓存空间长度以及当前待写入的业务数据长度判断是否进行缓存补录,如果当前剩余缓存空间小于当前待写入的业务数据长度,通知业务数据写入模块执行缓存补录;如果当前剩余缓存空间大于当前待写入的业务数据,通知业务写入模块执行缓存写入;业务数据写入模块,用于在执行缓存补录时,将缓存中的未完成后端存储的业务数据以及当前待写入的业务数据写入本地存储资源;在执行缓存写入时,将当前待写入的业务数据写入缓存中。
优选地,剩余缓存计算模块利用以下公式进行剩余缓存计算:FreeLen=CacheLen-((WritePos+(CacheLen+1)-ReadPos)%(CacheLen+1));FreeLen为剩余缓存空间长度;CacheLen为缓存的总长度;WritePos为当前业务数据写入缓存的地址;ReadPos为后端存储故障时对应的缓存中的读地址。
优选地,装置还包括:缓存补录开启确认模块,用于确认缓存补录是否开启,如果缓存补录开启,通知业务数据写入模块执行缓存补录;如果缓存补录未开启,则由缓存补录判断模块执行缓存补录的判断;缓存补录初始设置为关闭;故障恢复判断模块,用于在业务数据写入模块执行完业务数据写入本地存储资源的操作后,判断后端存储故障是否恢复,如果恢复,通知缓存补录设置模块关闭缓存补录;缓存补录设置模块,用于在缓存补录判断模块判断执行缓存补录时,开启缓存补录。
本发明还提供一种快速实现业务存储切换的方法,该方法应用于具有缓存补录功能的设备,该方法在后端存储故障时开启使用,该设备包括本地存储资源,该方法包括:计算当前剩余缓存空间的长度;根据计算的当前剩余缓存空间长度以及当前待写入的业务数据长度判断是否进行缓存补录,如果当前剩余缓存空间小于当前待写入的业务数据长度,执行缓存补录:将缓存中的未完成后端存储的业务数据以及当前待写入的业务数据写入本地存储资源;如果当前剩余缓存空间大于当前待写入的业务数据,则不执行缓存补录:将当前待写入的业务数据写入缓存中。
优选地,该剩余缓存空间长度的计算具体为:FreeLen=CacheLen-((WritePos+(CacheLen+1)-ReadPos)%(CacheLen+1));FreeLen为剩余缓存空间长度;CacheLen为缓存的总长度;WritePos为当前业务数据写入缓存的地址;ReadPos为后端存储故障时对应的缓存中的读地址。
本发明还提供一种快速实现业务存储切换的方法,该方法应用于具有缓存补录功能的设备,该方法在后端存储故障时开启使用,该设备包括本地存储资源,其特征在于,该方法包括如下步骤:
A、在将执行业务数据写操作时,判断缓存补录是否开启,如果是,执行步骤B;如果否,执行步骤C;
B、将缓存中的未完成后端存储的业务数据以及当前待写入的业务数据写入本地存储资源;转步骤F;
C、判断缓存剩余空间长度是否大于待写数据长度,如果是,执行步骤D;如果否,执行步骤E;
D、将当前待写入的业务数据写入缓存,转步骤A;
E、将缓存中的未完成后端存储的业务数据以及当前待写入的业务数据写入本地存储资源,并开启缓存补录;转步骤F;
F、判断后端存储故障是否恢复;如果是,执行步骤G;如果否,返回步骤A;
G、关闭缓存补录。
优选地,剩余缓存空间长度的计算具体为:FreeLen=CacheLen-((WritePos+(CacheLen+1)-ReadPos)%(CacheLen+1));FreeLen为剩余缓存空间长度;CacheLen为缓存的总长度;WritePos为当前业务数据写入缓存的地址;ReadPos为后端存储故障时对应的缓存中的读地址。
相较于现有技术,本发明技术在后端存储故障时,及时的启动了本地缓存补录的功能,保证切换及时以防止数据丢失。
具体实施方式
为解决现有技术的问题,本发明提出一种快速实现业务存储切换的装置,该装置应用于具有本地存储资源的设备。该具有本地存储资源的设备与网络中的一存储设备进行通信,将业务数据存储在网络中的该存储设备上。该网络中的存储设备作为一种后端存储资源存在,接收待存储的业务数据并进行存储。参图2,该快速实现业务存储切换的装置从逻辑上可以划分为:剩余缓存计算模块、缓存补录判断模块以及业务数据写入模块。这些模块在设备上执行如下功能:
剩余缓存计算模块,用于计算当前剩余缓存空间的长度;所述当前剩余缓存空间为已完成后端存储的业务数据所占的空间或者无业务数据写入的空间;
缓存补录判断模块,用于根据计算的当前剩余缓存空间长度以及当前待写入的业务数据长度判断是否进行缓存补录,如果当前剩余缓存空间小于当前待写入的业务数据长度,执行缓存补录;如果当前剩余缓存空间大于当前待写入的业务数据,则不执行缓存补录;
业务数据写入模块,用于在执行缓存补录时,将缓存中的未完成后端存储的业务数据以及当前待写入的业务数据写入本地存储资源;在不执行缓存补录时,将当前待写入的业务数据写入缓存中。
下面结合一具体的示例来进行说明。请参图3,网络摄像机IPC编码后的视频数据先存入本地缓存,而后从缓存中读出数据再通过监控网络存入后端存储资源。在将缓存位置r开始的一段数据读出写入后端存储资源时,出现了故障,当前的业务数据写位置为w。剩余缓存计算模块计算当前剩余缓存空间长度。剩余缓存计算模块可以使用如下公式进行剩余缓存的计算:FreeLen=CacheLen-((WritePos+(CacheLen+1)-ReadPos)%(CacheLen+1));FreeLen为剩余缓存空间长度;CacheLen为缓存的总长度;WritePos为当前业务数据写入缓存的地址;ReadPos为后端存储故障时对应的缓存中的读地址。当然,除了该公式之外,不排除其他可以实现剩余缓存计算的公式。图3中位置w对应WritePos,位置r对应ReadPos。剩余缓存空间为图3中划斜杠的区域。该斜杠区域中的数据为已完成后端存储的业务数据。当然,如果后端存储在缓存未进行覆盖写时就发生故障的话,那该斜杠区域中的部分区域(从w位置开始到缓存末端)就无业务数据存在。未划斜杠的缓存区域中的数据为未写入后端存储资源的业务数据。
缓存补录判断模块判断当前待写入缓存中的新的视频数据长度IPCLen和剩余缓存空间长度FreeLen的大小,如果FreeLen>IPCLen,则通知业务数据写入模块将当前待写入缓存中的新的视频数据写入缓存中;如果FreeLen<IPCLen,则通知业务数据写入模块将当前待写入缓存中的新的视频数据写入IPC的本地存储资源,即进行缓存补录功能。如果FreeLen=IPCLen,则待写入缓存中的新的视频数据可以写入缓存中,也可以写入本地存储资源。对于图3,即比较斜杠区域和待写的新视频数据长度,并按照上述规则判断是否执行缓存补录功能。
在后端存储故障的情况下,每次在新的视频数据执行缓存写入之前由剩余缓存计算模块和缓存补录判断模块执行上述的计算和判断,以确定新的视频数据是否要执行缓存补录操作。
剩余缓存计算模块和缓存补录判断模块所执行的计算和判断动作并不一定在后端存储故障的情况下执行。在后端存储未出现故障时,这两个功能模块也可以执行对应的操作。
下面结合图4说明本发明一种快速实现业务存储切换的方法实施例流程图。在后端存储故障时,该方法执行如下步骤:
S41、业务数据写操作时,计算当前剩余缓存空间的长度;
前端监控设备采集到视频业务数据进行编码,对编码后的该业务数据执行写操作。
S42、根据计算的当前剩余缓存空间长度以及当前待写入的业务数据长度判断是否进行缓存补录,如果当前剩余缓存空间小于当前待写入的业务数据长度,执行缓存补录:将缓存中的未完成后端存储的业务数据以及当前待写入的业务数据写入本地存储资源;如果当前剩余缓存空间大于当前待写入的业务数据,则不执行缓存补录:将当前待写入的业务数据写入缓存中。
上述方法,在后端存储出现故障时,对于后续的每一个业务数据写操作都需要执行图4的流程,即每次进行业务数据写操作时,都要执行步骤S42的判断。图5给出了另一个优化的实施例。在该实施例中,一旦执行缓存补录,若未后端存储故障未恢复的话,后续的每一次写数据操作将都执行缓存补录。以下结合图5进行详细说明。
在后端存储故障时,本实施例方法执行如图5的步骤:
步骤51、在将执行业务数据写操作时,判断缓存补录是否开启。如果是,执行步骤52;如果否,执行步骤53。
缓存补录开启与否可以通过一标志位表示,比如,该标志为为1,表示缓存补录开启;该标志位为0表示缓存补录未开启。缓存补录开启是指:前一次的业务数据写操作执行了缓存补录功能。初始时,该标志位置0。
步骤52、将缓存中的未完成后端存储的业务数据以及当前待写入的业务数据写入本地存储资源。转步骤56。
步骤53、判断缓存剩余空间是否大于待写数据长度。如果是,执行步骤54。如果否,执行步骤55。
步骤54、将当前待写入的业务数据写入缓存。返回步骤51。
步骤55、将缓存中的未完成后端存储的业务数据以及当前待写入的业务数据写入本地存储资源,并开启缓存补录。转步骤56.
步骤56、判断后端存储故障是否恢复。如果是,执行步骤57;如果否,返回步骤51。
步骤57、关闭缓存补录。
关闭缓存补录,将表示缓存补录的标志位置0。
基于图5的构思,本发明的又一快速实现业务存储切换的装置,在图2所描述的装置的基础上,还包括:缓存补录开启确认模块、故障恢复判断模块和缓存补录设置模块,请参图6。缓存补录开启确认模块,用于确认缓存补录是否开启,如果缓存补录开启,通知业务数据写入模块执行缓存补录;如果缓存补录未开启,则由缓存补录判断模块执行缓存补录的判断;缓存补录初始设置为关闭;故障恢复判断模块,用于在业务数据写入模块执行完业务数据写入本地存储资源的操作后,判断后端存储故障是否恢复,如果恢复,通知缓存补录设置模块关闭缓存补录;缓存补录设置模块,用于在缓存补录判断模块判断执行缓存补录时,开启缓存补录。
通过本发明技术,在后端存储故障时,及时的启动了本地缓存补录的功能,保证切换及时以防止数据丢失。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。