一种面向医疗大数据处理的固态磁盘存储方法与流程

文档序号:12125237阅读:194来源:国知局
本发明属于数据存储
技术领域
:,尤其涉及一种面向医疗大数据处理的固态磁盘存储方法。
背景技术
::医疗大数据对海量的历史病例数据进行分析和处理,具有特定的访问模式,这种访问模式在不同介质构成的存储系统中有不同的表现。首先介绍医疗大数据的访问模式。每一个病例数据由文本数据和多媒体数据两部分组成,文本数据通常占据较小的存储空间,所有病例的的文本数据合成一个文本数据文件存放。多媒体数据如ct影像等占据较大的存储空间,每个病例的每一个多媒体数据都独立存放。病例数据的访问具有以下特征:1.由于多个病例的文本数据合成一个数据文件存放,因此这个存储空间会被频繁重复读写。2.不同病例的多媒体数据被更新的频率不同,正常病例的多媒体数据极少被读写,而一些重大病例的多媒体数据读写的频率相对较高。其次介绍不同介质的特点。现在主流的存储系统介质是机械磁盘,但是固态磁盘由于其随机访问性能优异,构成的存储系统越来越多。但是固态磁盘的缺点在于固态磁盘上的每一个存储单元,都有一定的寿命,也就是在对这个单元擦写一定的次数(10000-100000次不等)之后,这个单元就无法再继续正常工作。因此,在对医疗大数据进行处理的过程中大量对文本数据的读写集中在部分的存储单元,一旦到达存储单元的寿命上限,固态磁盘产生损坏。固态磁盘解决这一问题的主要思路就是将擦写次数分摊到不同的存储单元上。例如监控磁盘状态并定期整理迁移等方法。在医疗大数据处理的环境中,由于数据量巨大,如果采用定期整理迁移的方法,需要很长的迁移时间,以1PB容量的系统为例,如果其中10%的单元需要迁移,需要花费几个小时到几十个小时。在这段时间内存储系统对大数据处理提供的带宽会显著降低,难以被应用所接受。如何平衡固态磁盘中的存储单元读写次数,且不对大数据处理不产生严重影响,是固态磁盘介质应用到医疗大数据领域所需要解决的关键问题。技术实现要素:本发明的目的是针对现有技术的不足,提供一种面向医疗大数据处理的固态磁盘存储方法。本发明解决其技术问题所采用的技术方案如下:(1)将固态磁盘构成的存储系统均分为n个存储单元,记为0,1,2,...n-1,每个存储单元的大小均为b。且将所有病例数据的文本数据文件table和多媒体数据文件Media也分别均分成大小为b的数据块。同时在固态磁盘构成的存储系统中设置两个索引表:映射表Map[]和存储单元管理表Unit[];所述的文本数据文件table只有一个,而多媒体数据文件Media则是有多个;其中映射表Map[],包括文件名filename、文件内块号f_index、存储单元号unit_index、最后迁移时间move_time和迁移后的更新次数renew_count,具体参看表1;存储单元管理表Unit[],包括存储单元号Unit_index、所属文件filename、最后迁移时间Move_time和剩余可擦写次数Remain_count,具体参看表2;表1映射表Map[],假设当前长度为m项表2存储单元管理表Unit[],长度为n项(2)将数据访问描述为三元组<FN,BN,OP>,其中FN表示更新的数据所属文件filename,BN表示更新的数据在文件内块号f_index,OP表示访问操作,且访问操作包括读、写、排序三种。设置时间窗口大小为window_t,设置最大更新阈值th;则具体的操作如下:步骤1.判断数据访问的操作类型,如果访问操作OP为读操作,则直接结束本算法。步骤2.数据访问前期操作具体如下:2-1.获取当前时间t,初始化i=0;2-2.如果映射表的第i项的文件名map[i].filename与访问数据三元组中的FN相等,并且映射表的第i项的文件内块号map[i].f_index与访问数据三元组中的BN相等,直接执行步骤2-4;2-3.对参数i重新赋值并进行判断,即i=i+1,然后判断如果i大于等于m,则直接结束本算法;否则返回步骤2-2;2-4.对映射表的第i项迁移后的更新次数map[i].renew_count进行重新赋值,即:map[i].renew_count=map[i].renew_count+1;并初始化p=0;定义当前访问的数据块所在的存储单元号INDEX=map[i].unit_index;定义当前访问的数据块所在的最后迁移时间Time=map[i].move_time;定义当前访问的数据块所在的迁移后的更新次数Count=map[i].renew_count;2-5.如果在存储单元管理表中第p项的存储单元号unit[p].unit_index等于INDEX,则对当前访问的数据块所在的存储单元的剩余可擦写次数remain_count进行重新赋值,unit[p].remain_count=unit[p]..remain_count–1;否则对p重新赋值;2-6.p=p+1,然后判断p是否小于n,如果小于n,则重新执行步骤2-5,否则直接结束本算法。步骤3.对数据访问操作OP进行判断,如果访问操作OP为写操作,则进入步骤4;如果访问操作OP为排序操作,则进入步骤5;步骤4.如果当前时间与最后迁移时间Time的差值小于window_t或Count小于th,直接结束本算法;步骤5.对存储单元管理表Unit[]的所有项按照remain_count进行降序排序,并初始化j=0。步骤6.如果unit[j].filename不等于table,跳转到步骤8;否则对j进行重新赋值,j=j+1;步骤7.对变量j进行判断,如果j大于等于n,直接结束本算法;否则返回步骤6;步骤8.初始化k=0,并判断:如果map[k].unit_index等于unit[j].unit_index,则跳转到步骤10.步骤9.否则对k进行重新赋值;k=k+1,并判断:如果k大于等于m,直接结束本算法,否则跳转到步骤8,对map[k].unit_index等于unit[j].unit_index重新判断;步骤10.交换map表第i项和第k项的存储单元号,即交换map[i].unit_index和map[k].unit_index;并重新初始化操作如下:map[i].move_time赋值为当前时间t,map[k].move_time赋值为当前时间t;map[i].renew_count赋值为0,map[k].renew_count赋值为0;步骤11.交换存储单元管理表中第j项和p项的文件名,即交换unit[j].filename和unit[p].filename;并重新初始化操作如下:unti[j].move_time赋值为当前时间t,unit[p].move_time赋值为当前时间t。步骤12.互相交换交换编号为map[i].unit_index和map[k].unit_index的存储单元中的数据块。本发明有益效果如下:本发明方法针对医疗大数据处理中的数据访问模式,提出一种动态平衡存储单元擦写次数的存储方法,使医疗大数据可以较好地在固态磁盘上存储。该方法通过对医疗数据更新状况和固态磁盘的存储单元状态进行分析,使被频繁访问的数据总被动态放置到具有较低擦写次数的存储单元,从而提高整个固态磁盘的寿命,并且避免了长时间的批量迁移过程。具体实施方式下面结合实施例对本发明做进一步说明。本发明的核心思想:将医疗数据分块分别映射到固态磁盘的不同存储单元,每次更新某一数据块时,检查该数据块所在的存储单元其最新一次迁移后的更新次数是否超过设定的更新阈值;如果超过,则跟固态磁盘上相对更新次数较少的存储单元,进行数据对换;同时为了防止数据对换产生的抖动,本发明设定了最小时间窗口;并限制相对更新次数较少的存储单元从文本数据文件交换给媒体文件;文本数据文件在排序操作时根据存储单元的剩余更新次数进行强制更新。本发明解决其技术问题所采用的技术方案如下:(1)将固态磁盘构成的存储系统均分为n个存储单元,记为0,1,2,...n-1,每个存储单元的大小均为b。且将所有病例数据的文本数据文件table和多媒体数据文件Media也分别均分成大小为b的数据块。同时在固态磁盘构成的存储系统中设置两个索引表:映射表Map[]和存储单元管理表Unit[];所述的文本数据文件table只有一个,而多媒体数据文件Media则是有多个;其中映射表Map[],包括文件名filename、文件内块号f_index、存储单元号unit_index、最后迁移时间move_time和迁移后的更新次数renew_count,具体参看表1;存储单元管理表Unit[],包括存储单元号Unit_index、所属文件filename、最后迁移时间Move_time和剩余可擦写次数Remain_count,具体参看表2;表1映射表Map[],假设当前长度为m项表2存储单元管理表Unit[],长度为n项(2)将数据访问描述为三元组<FN,BN,OP>,其中FN表示更新的数据所属文件filename,BN表示更新的数据在文件内块号f_index,OP表示访问操作,且访问操作包括读、写、排序三种。设置时间窗口大小为window_t,设置最大更新阈值th;则具体的操作如下:步骤1.判断数据访问的操作类型,如果访问操作OP为读操作,则直接结束本算法。步骤2.数据访问前期操作具体如下:2-1.获取当前时间t,初始化i=0;2-2.如果映射表的第i项的文件名map[i].filename与访问数据三元组中的FN相等,并且映射表的第i项的文件内块号map[i].f_index与访问数据三元组中的BN相等,直接执行步骤2-4;2-3.对参数i重新赋值并进行判断,即i=i+1,然后判断如果i大于等于m,则直接结束本算法;否则返回步骤2-2;2-4.对映射表的第i项迁移后的更新次数map[i].renew_count进行重新赋值,即:map[i].renew_count=map[i].renew_count+1;并初始化p=0;定义当前访问的数据块所在的存储单元号INDEX=map[i].unit_index;定义当前访问的数据块所在的最后迁移时间Time=map[i].move_time;定义当前访问的数据块所在的迁移后的更新次数Count=map[i].renew_count;2-5.如果在存储单元管理表中第p项的存储单元号unit[p].unit_index等于INDEX,则对当前访问的数据块所在的存储单元的剩余可擦写次数remain_count进行重新赋值,unit[p].remain_count=unit[p]..remain_count–1;否则对p重新赋值;2-6.p=p+1,然后判断p是否小于n,如果小于n,则重新执行步骤2-5,否则直接结束本算法。步骤3.对数据访问操作OP进行判断,如果访问操作OP为写操作,则进入步骤4;如果访问操作OP为排序操作,则进入步骤5;步骤4.如果当前时间与最后迁移时间Time的差值小于window_t或Count小于th,直接结束本算法;步骤5.对存储单元管理表Unit[]的所有项按照remain_count进行降序排序,并初始化j=0。步骤6.如果unit[j].filename不等于table,跳转到步骤8;否则对j进行重新赋值,j=j+1;步骤7.对变量j进行判断,如果j大于等于n,直接结束本算法;否则返回步骤6;步骤8.初始化k=0,并判断:如果map[k].unit_index等于unit[j].unit_index,则跳转到步骤10.步骤9.否则对k进行重新赋值;k=k+1,并判断:如果k大于等于m,直接结束本算法,否则跳转到步骤8,对map[k].unit_index等于unit[j].unit_index重新判断;步骤10.交换map表第i项和第k项的存储单元号,即交换map[i].unit_index和map[k].unit_index;并重新初始化操作如下:map[i].move_time赋值为当前时间t,map[k].move_time赋值为当前时间t;map[i].renew_count赋值为0,map[k].renew_count赋值为0;步骤11.交换存储单元管理表中第j项和p项的文件名,即交换unit[j].filename和unit[p].filename;并重新初始化操作如下:unti[j].move_time赋值为当前时间t,unit[p].move_time赋值为当前时间t。步骤12.互相交换交换编号为map[i].unit_index和map[k].unit_index的存储单元中的数据块。实施例假设当前时间为2016年8月1日,时间窗口为7天,更新阈值等于100次,当前的数据访问为<table,1,写>,表示对table文件的0号数据块进行写操作。数据访问完成之后,迁移算法会被执行。迁移算法在写更新的迁移条件判断中,根据步骤41在映射表map的第二项中查到了这个数据块,根据步骤52在存储单元管理表unit的第一项中查到相应的存储单元,步骤50更新数据块的擦写次数,步骤56更新存储单元的剩余擦写次数。可以得到这个数据块在2016-7-11的23:00迁移到当前所在的存储单元,迁移后被更新了317次。根据步骤58和59可以计算得到均满足迁移的条件。于是在迁移过程中对unit进行排序,得到编号为n-1的存储单元剩余擦写次数最多,为7655次,并且当前该存储单元中存放的是非table文件,因此该存储单元中的数据与<table,1,写>的存储单元进行数据交换,同时更新map和unit。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1