CN103577117B - 数据存储方法及装置 - Google Patents
数据存储方法及装置 Download PDFInfo
- Publication number
- CN103577117B CN103577117B CN201210282454.3A CN201210282454A CN103577117B CN 103577117 B CN103577117 B CN 103577117B CN 201210282454 A CN201210282454 A CN 201210282454A CN 103577117 B CN103577117 B CN 103577117B
- Authority
- CN
- China
- Prior art keywords
- memory cell
- logical data
- data
- storage
- need
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Static Random-Access Memory (AREA)
Abstract
本发明的实施例提供一种数据存储方法及装置,提高数据存储的成功率和存储空间的利用率。该方法包括:获取各个存储单元各自已存储逻辑数据的实际份数的总和;计算各个存储单元各自的存储能力以及各个存储单元的总存储能力;根据各个存储单元各自的存储能力与总存储能力的比值,获取各个存储单元的目标逻辑数据比例;根据所述各个存储单元各自已存储逻辑数据的实际份数的总和与各个存储单元各自的目标逻辑数据比例,确定各个存储单元各自需存储逻辑数据的目标份数;根据各个存储单元各自已存储逻辑数据的实际份数以及需存储逻辑数据的目标份数,在各个存储单元之间进行逻辑数据的迁移。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种数据存储方法及装置。
背景技术
现有技术中,将数据存储到各个存储单元的实现过程为:首先,将待存储数据通过哈希运算散列到N个逻辑区域中,每个逻辑区域中的数据称之为一份逻辑数据,总共可以得出N份逻辑数据。然后,将N份逻辑数据按照存储单元的个数进行均分,并存储到各个存储单元,亦即每个存储单元存储的逻辑数据的份数相同。
不同存储单元的格式化单位不同,会使得相同容量的存储单元的存储能力也不相同。例如,存储单元A和存储单元B的容量均为1MB,其中,存储单元A的格式化单位为1KB,亦即,该存储单元A的最小存储单位为1KB,那么存储单元A的存储能力为1MB/1KB=1024,亦即,存储单元A最大可以存储1024份逻辑数据;存储单元B的格式化单位为4KB,亦即该存储单元B的最小存储单位为4KB,那么存储单元B的存储能力为1MB/4KB=256,亦即,存储单元B最大可以存储256份逻辑数据。
然而,在采用上述方法存储数据到各个存储单元(各个存储单元的容量相同)时,由于每个存储单元存储的逻辑数据的份数相同,一方面,会导致部分存储能力小的存储单元发生数据溢出,导致存储失败,另一方面,部分存储能力大的存储单元则出现存储空间闲置,导致存储资源浪费。
发明内容
本发明的实施例提供一种数据存储方法及装置,提高数据存储的成功率和存储空间的利用率。
为达到上述目的,本发明的实施例采用如下技术方案:
一方面,提供一种数据存储方法,其特征在于,包括:
获取各个存储单元各自已存储逻辑数据的实际份数的总和;
计算各个存储单元各自的存储能力以及各个存储单元的总存储能力;
根据各个存储单元各自的存储能力与总存储能力的比值,获取各个存储单元的目标逻辑数据比例;
根据所述各个存储单元各自已存储逻辑数据的实际份数的总和与各个存储单元各自的目标逻辑数据比例,确定各个存储单元各自需存储逻辑数据的目标份数;
根据各个存储单元各自已存储逻辑数据的实际份数以及需存储逻辑数据的目标份数,在各个存储单元之间进行逻辑数据的迁移。
另一方面,提供一种数据存储装置,其特征在于,包括:
获取模块,用于获取各个存储单元各自已存储逻辑数据的实际份数的总和;
计算模块,用于计算各个存储单元各自的存储能力以及各个存储单元的总存储能力;
所述获取模块,还用于根据各个存储单元各自的存储能力与总存储能力的比值,获取各个存储单元的目标逻辑数据比例;
确定模块,用于根据所述各个存储单元各自已存储逻辑数据的实际份数的总和与各个存储单元各自的目标逻辑数据比例,确定各个存储单元各自需存储逻辑数据的目标份数;
控制模块,用于根据各个存储单元各自已存储逻辑数据的实际份数以及需存储逻辑数据的目标份数,在各个存储单元之间进行逻辑数据的迁移。
由上述技术方案所描述的本发明实施例中,在各个存储单元已经存储了逻辑数据时,通过根据所述各个存储单元各自已存储逻辑数据的实际份数的总和与各个存储单元各自的目标逻辑数据比例,确定各个存储单元各自需存储逻辑数据的目标份数,所述各个存储单元按照各自需存储逻辑数据的目标份数存储逻辑数据时,使得所述各个存储单元的存储率一致;并根据各个存储单元各自已存储逻辑数据的实际份数以及需存储逻辑数据的目标份数,在各个存储单元之间进行逻辑数据的迁移,使得各个存储单元各自最终存储的逻辑数据份数达到各自需存储逻辑数据的目标份数。亦即,通过在各个已经存储有逻辑数据的存储单元之间调整数据,使得当各个存储单元各自最终存储的逻辑数据份数达到各自需存储逻辑数据的目标份数,从而实现各个存储单元的使用率达到一致。
本发明实施例实现各个存储单元的使用率达到一致,可以有效避免现有技术中由于每个存储单元存储的逻辑数据的份数相同,一方面,会导致部分存储能力小的存储单元发生数据溢出,导致存储失败,另一方面,部分存储能力大的存储单元则出现存储空间闲置,导致存储资源浪费的问题,从而提高数据存储的成功率和存储空间的利用率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例1提供的一种数据存储方法的流程图;
图2为本发明实施例1提供的一种数据存储方法中步骤105的实现流程图;
图3为本发明实施例1提供的一种数据存储方法中步骤1051的实现流程图;
图4为采用本实施例1提供的方法对数据调整前的各个存储单元的数据存储示意图;
图5为采用本实施例1提供的方法对数据调整后的各个存储单元的数据存储示意图;
图6为本发明实施例2提供的一种数据存储方法的流程图;
图7为本发明实施例3提供一种数据存储装置的结构图;
图8为本发明实施例3提供一种数据存储装置中控制模块14的实现结构图;
图9为本发明实施例3提供一种数据存储装置中确定子模块141的实现结构图;
图10为本发明实施例3提供另一种数据存储装置的结构图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例1:
本实施例的一种可能的应用场景为:各个存储单元已经存储有逻辑数据,所采用的数据存储方式,可以与现有技术中相同。例如,存储时,将待存储数据通过哈希运算散列到N个逻辑区域中,每个逻辑区域中的数据称之为一份逻辑数据,总共可以得出N份逻辑数据。然后,将N份逻辑数据按照存储单元的个数进行均分,并存储到各个存储单元。然而,采用现有方法存储数据后,会存在由于每个存储单元存储的逻辑数据的份数相同,但是存储使用率不同,一方面,会导致部分存储能力小的存储单元发生数据溢出,导致存储失败,另一方面,部分存储能力大的存储单元则出现存储空间闲置,导致存储资源浪费的缺陷。
下面,将具体介绍如何通过本发明实施例提供的方法对已经存储有逻辑数据的存储单元进行数据调整,使得调整后的各个存储单元的存储使用率达到一致,进而有效避免上述缺陷。
如图1所示,本发明实施例提供一种数据存储方法,包括:
101、获取各个存储单元各自已存储逻辑数据的实际份数的总和。
本文中,各个存储单元存储的逻辑数据按照份数进行计量,每份逻辑数据的大小相同。例如,每份逻辑数据均为1K,或者他容量大小。
该各个存储单元可以位于内存中,各个存储单元的容量大小及个数可以由技术人员根据应用需要进行设定。
102、计算各个存储单元各自的存储能力以及各个存储单元的总存储能力。
本步骤中计算各个存储单元各自的存储能力的一种实现方式为:计算各个存储单元各自可存储逻辑数据的最大份数。具体为,使用存储单元的容量除于该存储单元的格式化单位。
例如,存储单元A的容量为1MB,存储单元A的格式化单位为1KB,那么存储单元A的可存储逻辑数据的最大份数(亦即存储单元A的存储能力)为1MB/1KB=1024份。
本步骤中计算各个存储单元各自的存储能力的另一种实现方式为:计算各个存储单元各自已存储逻辑数据的份数与当前使用率的比值。其中,存储单元的已存储逻辑数据的份数和存储单元的当前使用率均可以采用现有方式直接获取到。
需要说明的是,通过上述方式计算各个存储单元各自的存储能力时,有可能出现无法整除的情况,此时会采用小数形式进行表示,精度可以保留至小数后3位,当然,精度也可以根据实际应用的需求进行不同的设定。
所述各个存储单元的总存储能力是指各个存储单元的存储能力之和。
103、根据各个存储单元各自的存储能力与总存储能力的比值,获取各个存储单元的目标逻辑数据比例。
104、根据所述各个存储单元各自已存储逻辑数据的实际份数的总和与各个存储单元各自的目标逻辑数据比例,确定各个存储单元各自需存储逻辑数据的目标份数。
其中,所述各个存储单元各自需存储逻辑数据的目标份数均为正整数。由于一份逻辑数据为最小的存储单位,无法再进行细分,故,所述各个存储单元各自需存储逻辑数据的目标份数均为正整数。
本步骤中确定各个存储单元各自需存储逻辑数据的目标份数的意义在于:所述各个存储单元按照各自需存储逻辑数据的目标份数存储逻辑数据时,可以使得所述各个存储单元的存储率一致。进而,可以有效避免现有技术中由于每个存储单元存储的逻辑数据的份数相同,一方面,会导致部分存储能力小的存储单元发生数据溢出,导致存储失败,另一方面,部分存储能力大的存储单元则出现存储空间闲置,导致存储资源浪费的问题。
本步骤的一种实现方式为:根据确定各个存储单元各自需存储逻辑数据的目标份数,其中,Gi为第i个存储单元需存储逻辑数据的目标份数,T为所述各个存储单元各自已存储逻辑数据的实际份数的总和,Qi为第i个存储单元的存储能力,n为存储单元的总个数,为各个存储单元的总存储能力,为第i个存储单元的目标逻辑数据比例,||表示取整。
需要说明的是,采用上述实现方式计算目标份数时,有可能出现无法整数的情况,但是逻辑数据的目标份数要求为正整数,因而,可以采用四舍五入的方式得到最接近的正整数。
105、根据各个存储单元各自已存储逻辑数据的实际份数以及需存储逻辑数据的目标份数,在各个存储单元之间进行逻辑数据的迁移。
如图2所示,本步骤的一种实现方式包括如下步骤1051和1052:
步骤1051、根据各个存储单元各自已存储逻辑数据的实际份数和各自需存储逻辑数据的目标份数在所述各个存储单元中确定各个待写入存储单元及其各自需要写入逻辑数据的份数,并确定各个待读出存储单元及其各自需要读出并擦除逻辑数据的份数;
其中,各个存储单元各自需存储逻辑数据的目标份数的总和与所述各个存储单元各自已存储逻辑数据的实际份数的总和相等,且各个待读出存储单元各自需要读出并擦除逻辑数据的份数的总和与各个待写入存储单元各自需要写入逻辑数据的份数的总和相等;
如图3所示,本步骤1051的一种实现方式如下:
S1、将各个存储单元各自已存储逻辑数据的实际份数减去各自需存储逻辑数据的目标份数,得到各个存储单元各自对应的差值,所述差值表示存储单元中需要写入逻辑数据的份数或者需要读出并擦除逻辑数据的份数;
S2、当所述存储单元对应的差值小于零时,确定所述存储单元为待写入存储单元,所述待写入存储单元需要写入逻辑数据,且需要写入逻辑数据的份数为所述差值的绝对值;
S3、当所述存储单元对应的差值等于零时,确定所述存储单元无需执行写入或读出操作;
S4、当所述存储单元对应的差值大于零时,确定所述存储单元为待读出存储单元,所述待读出存储单元需要读出并擦除逻辑数据,且需要读出并擦除逻辑数据的份数为所述差值;其中,各个存储单元各自需存储逻辑数据的目标份数的总和与所述各个存储单元各自已存储逻辑数据的实际份数的总和相等,且各个待读出存储单元各自需要读出并擦除逻辑数据的份数的总和与各个待写入存储单元各自需要写入逻辑数据的份数的总和相等。
容易想到的是,上述步骤S1中还可以等同替换为:将各个存储单元各自需存储逻辑数据的目标份数减去各自已存储逻辑数据的实际份数,得到各个存储单元各自对应的差值。相应地,步骤S2等同替换为:当所述存储单元对应的差值大于零时,确定所述存储单元为待写入存储单元;步骤S4等同替换为:当所述存储单元对应的差值小于零时,确定所述存储单元为待读出存储单元。
1052、从各个待读出存储单元中按照各自需要读出并擦除逻辑数据的份数读出并擦除逻辑数据,在各个待写入存储单元中按照各自需要写入逻辑数据的份数将所述读出的逻辑数据写入,使得各个存储单元各自最终存储的逻辑数据份数达到各自需存储逻辑数据的目标份数。
需要说明的是,上述步骤104中,采用上述四舍五入的方式虽然可以得到最接近的正整数,但是却可能导致各个存储单元各自需存储逻辑数据的目标份数的总和与所述各个存储单元各自已存储逻辑数据的实际份数的总和不相等的情况,此时就需要对各个存储单元各自需存储逻辑数据的目标份数再次进行调整。具体调整过程可以为:按照存储能力从大到小的顺序对各个存储单元各自需存储逻辑数据的目标份数进行调整,亦即优先满足存储能力较大的存储单元,使得各个存储单元各自需存储逻辑数据的目标份数的总和与所述各个存储单元各自已存储逻辑数据的实际份数的总和相等,且各个待读出存储单元各自需要读出并擦除逻辑数据的份数的总和与各个待写入存储单元各自需要写入逻辑数据的份数的总和相等。
下面,结合一个具体的例子详细说明如何应用上述方法。
以3个存储单元为例,其中,存储单元1、存储单元2和存储单元3均已存储6份逻辑数据。各个存储单元的容量均相同,但是格式化单位不相同,因而使得各个存储单元可存储逻辑数据的最大份数也不一样(具体参见背景技术中的相关描述)。假设存储单元1可存储逻辑数据的最大份数为6份、存储单元2可存储逻辑数据的最大份数为16份、存储单元3可存储逻辑数据的最大份数为16份。如图4所示为数据调整前的各个存储单元的数据存储示意图,其中,位于外侧的方框用于表示存储单元的容量大小,位于该方框内部的每个用黑色斜线填充的小矩形表示一份逻辑数据。
各个存储单元的存储能力采用存储单元可存储逻辑数据的最大份数来表示,那么通过上述步骤104可以得出,存储单元1需存储逻辑数据的目标份数为18*(6/(6+16+16))=2.842,约等于3个;存储单元单元2需存储逻辑数据的目标份数为18*(16/(6+16+16))=7.578,约等于8个;存储单元单元3需存储逻辑数据的目标份数为18*(16/(6+16+16))=7.578,约等于8个。
此时,3个存储单元各自需存储逻辑数据的目标份数的总和为19,而所述3个存储单元各自已存储逻辑数据的实际份数的总和为18。亦即出现了各个存储单元各自需存储逻辑数据的目标份数的总和与所述各个存储单元各自已存储逻辑数据的实际份数的总和不相等的情况,接下来对各个存储单元各自需存储逻辑数据的目标份数再次进行调整。由于存储单元2和3的存储能力均比存储单元1的大,则优先调整存储2和3,由于这两的存储能力相同,因而,任选其一进行调整,例如,将存储单元3需存储逻辑数据的目标份数调整为7。
调整后得出:存储单元1需存储逻辑数据的目标份数为3;存储单元单元2需存储逻辑数据的目标份数为8;存储单元单元3需存储逻辑数据的目标份数为7个。
之后,执行步骤105可以得到,存储单元1已存储逻辑数据的实际份数减去需存储逻辑数据的目标份数为6-3=3,亦即,存储单元为待读出存储单元,需要读出的逻辑数据为3个;存储单元2已存储逻辑数据的实际份数减去需存储逻辑数据的目标份数为6-8=-2,亦即,存储单元为待写入存储单元,需要写入的逻辑数据为2个;存储单元3已存储逻辑数据的实际份数减去需存储逻辑数据的目标份数为6-7=-1,亦即,存储单元为待写入存储单元,需要写入的逻辑数据为1个。
最后,通过步骤105,可以将存储单元1中的2份逻辑数据读出并写入存储单元2中,将存储单元1中的1份逻辑数据读出并写入存储单元3中,调整后的各个存储单元的数据存储示意图如5所示,调整后存储单元1的存储使用率为3/6,存储单元2的存储使用率为8/16,存储单元3的存储使用率为7/16,可见调整后各个存储单元的存储使用率接近一致。
需要说明的是,上述方法还包括:按照各个待读出存储单元各自需要读出并擦除逻辑数据的份数和各个待写入存储单元各自需要写入逻辑数据的份数生成数据搬迁计划表,所述数据搬迁计划表用于记录从哪些待读出存储单元读出并擦除多少份的逻辑数据,并写入哪些待写入存储单元及写入逻辑数据的份数,其中,所述各个存储度按照所述数据搬迁计划表执行逻辑数据的读出和写入后,使得所述各个存储单元各自最终存储的逻辑数据份数达到各自需存储逻辑数据的目标份数;
例如,针对上述图4生成的数据搬迁计划表可以记录以下内容:将存储单元1中的2份逻辑数据读出并写入存储单元2中,将存储单元1中的1份逻辑数据读出并写入存储单元3中。
所述从各个待读出存储单元中按照各自需要读出并擦除逻辑数据的份数读出并擦除逻辑数据,在各个待写入存储单元中按照各自需要写入逻辑数据的份数将所述读出的逻辑数据写入具体为:按照所述搬迁计划表从各个待读出存储单元中按照各自需要读出并擦除逻辑数据的份数读出并擦除逻辑数据,在各个待写入存储单元中按照各自需要写入逻辑数据的份数将所述读出的逻辑数据写入。
本发明实施例中,在各个存储单元已经存储了逻辑数据时,通过根据所述各个存储单元各自已存储逻辑数据的实际份数的总和与各个存储单元各自的存储能力,确定各个存储单元各自需存储逻辑数据的目标份数,所述各个存储单元按照各自需存储逻辑数据的目标份数存储逻辑数据时,使得所述各个存储单元的存储率一致;并从各个待读出存储单元中按照各自需要读出并擦除逻辑数据的份数读出并擦除逻辑数据,在各个待写入存储单元中按照各自需要写入逻辑数据的份数将所述读出的逻辑数据写入,使得各个存储单元各自最终存储的逻辑数据份数达到各自需存储逻辑数据的目标份数。亦即,通过在各个已经存储有逻辑数据的存储单元之间调整数据,使得当各个存储单元各自最终存储的逻辑数据份数达到各自需存储逻辑数据的目标份数,从而实现各个存储单元的使用率达到一致。
本发明实施例实现各个存储单元的使用率达到一致,进而可以有效避免现有技术中由于每个存储单元存储的逻辑数据的份数相同,一方面,会导致部分存储能力小的存储单元发生数据溢出,导致存储失败,另一方面,部分存储能力大的存储单元则出现存储空间闲置,导致存储资源浪费的问题,从而提高数据存储的成功率和存储空间的利用率。
实施例2:
本发明实施例的一种应用场景为:各个存储单元未存储逻辑数据,或者已经按照本发明实施例提供的方法存储了逻辑数据,当有新的逻辑数据需要进行存储时,如何实现存储后各个存储单元的存储使用率趋向一致。
如图6所示,本发明实施例提供一种数据存储方法,包括:
201、获取待存储逻辑数据份数的总和。
202、计算各个存储单元各自的存储能力。
本步骤的一种实现方式为:计算各个存储单元各自可存储逻辑数据的最大份数;或者,本步骤的另一种实现方式为:计算各个存储单元各自已存储逻辑数据的份数与当前使用率的比值。具体计算方式可参见上述步骤102中的详细描述。
203、根据所述待存储逻辑数据份数的总和与各个存储单元各自的存储能力,确定各个存储单元各自需要写入逻辑数据的目标份数。
所述各个存储单元各自需要写入逻辑数据的目标份数均为正整数,且各个存储单元各自需要写入逻辑数据的目标份数的总和与所述待存储逻辑数据份数的总和相等。
本步骤的一种实现方式为:根据确定各个存储单元各自需要写入逻辑数据的目标份数,其中,Gi为第i个存储单元需要写入逻辑数据的目标份数,T为所述待存储逻辑数据份数的总和,Qi为第i个存储单元的存储能力,n为存储单元的总个数,||表示取整。
需要说明的是,采用上述实现方式计算目标份数时,有可能出现无法整数的情况,但是逻辑数据的目标份数要求为正整数,因而,可以采用四舍五入的方式得到最接近的正整数。
还需要说明的是,虽然采用上述四舍五入的方式虽然可以得到最接近的正整数,但是却可能导致各个存储单元各自需存储逻辑数据的目标份数的总和与所述待存储逻辑数据的份数总和不相等的情况,此时就需要对各个存储单元各自需存储逻辑数据的目标份数再次进行调整。具体调整过程可以为:按照存储能力从大到小的顺序对各个存储单元各自需存储逻辑数据的目标份数进行调整,亦即优先满足存储能力较大的存储单元,使得各个存储单元各自需存储逻辑数据的目标份数的总和与待存储逻辑数据的份数的总和相等。
204、在各个存储单元中按照各自需要写入逻辑数据的目标份数将所述待存储逻辑数据写入,使得各个存储单元的存储使用率一致。
本发明实施例中,在各个存储单元存储新的逻辑数据时,通过根据所述待存储逻辑数据份数的总和与各个存储单元各自的存储能力,确定各个存储单元各自需要写入逻辑数据的目标份数,并在各个存储单元中按照各自需要写入逻辑数据的目标份数将所述待存储逻辑数据写入,从而可以实现所述各个存储单元的存储率一致。
本发明实施例实现各个存储单元的使用率达到一致,进而可以有效避免现有技术中由于每个存储单元存储的逻辑数据的份数相同,一方面,会导致部分存储能力小的存储单元发生数据溢出,导致存储失败,另一方面,部分存储能力大的存储单元则出现存储空间闲置,导致存储资源浪费的问题,从而提高数据存储的成功率和存储空间的利用率。
实施例3
如图7所示,本发明实施例提供一种数据存储装置,包括:
获取模块11,用于获取各个存储单元各自已存储逻辑数据的实际份数的总和;
计算模块12,用于计算各个存储单元各自的存储能力以及各个存储单元的总存储能力;
所述获取模块11,还用于根据各个存储单元各自的存储能力与总存储能力的比值,获取各个存储单元的目标逻辑数据比例;
确定模块13,用于根据所述各个存储单元各自已存储逻辑数据的实际份数的总和与各个存储单元各自的目标逻辑数据比例,确定各个存储单元各自需存储逻辑数据的目标份数;
控制模块14,用于根据各个存储单元各自已存储逻辑数据的实际份数以及需存储逻辑数据的目标份数,在各个存储单元之间进行逻辑数据的迁移。
本发明实施例中,在各个存储单元已经存储了逻辑数据时,通过根据所述各个存储单元各自已存储逻辑数据的实际份数的总和与各个存储单元各自的目标逻辑数据比例,确定各个存储单元各自需存储逻辑数据的目标份数,所述各个存储单元按照各自需存储逻辑数据的目标份数存储逻辑数据时,使得所述各个存储单元的存储率一致;并根据各个存储单元各自已存储逻辑数据的实际份数以及需存储逻辑数据的目标份数,在各个存储单元之间进行逻辑数据的迁移使得各个存储单元各自最终存储的逻辑数据份数达到各自需存储逻辑数据的目标份数。亦即,通过在各个已经存储有逻辑数据的存储单元之间调整数据,使得当各个存储单元各自最终存储的逻辑数据份数达到各自需存储逻辑数据的目标份数,从而实现各个存储单元的使用率达到一致。
本发明实施例实现各个存储单元的使用率达到一致,可以有效避免现有技术中由于每个存储单元存储的逻辑数据的份数相同,一方面,会导致部分存储能力小的存储单元发生数据溢出,导致存储失败,另一方面,部分存储能力大的存储单元则出现存储空间闲置,导致存储资源浪费的问题,从而提高数据存储的成功率和存储空间的利用率。
一种可能的实现方式中,所述计算模块12具体用于计算各个存储单元各自可存储逻辑数据的最大份数;或者,具体用于计算各个存储单元各自已存储逻辑数据的份数与当前使用率的比值。
一种可能的实现方式中,所述确定模块13具体用于:根据确定各个存储单元各自需存储逻辑数据的目标份数,其中,Gi为第i个存储单元需存储逻辑数据的目标份数,T为所述各个存储单元各自已存储逻辑数据的实际份数的总和,Qi为第i个存储单元的存储能力,n为存储单元的总个数,||表示取整,为各个存储单元的总存储能力,为第i个存储单元的目标逻辑数据比例,。
一种可能的实现方式中,所述的装置,还包括:调整单元,用于当各个存储单元各自需存储逻辑数据的目标份数的总和与所述各个存储单元各自已存储逻辑数据的实际份数的总和不相等时,按照存储能力从大到小的顺序对各个存储单元各自需存储逻辑数据的目标份数进行调整,使得各个存储单元各自需存储逻辑数据的目标份数的总和与所述各个存储单元各自已存储逻辑数据的实际份数的总和相等,且各个待读出存储单元各自需要读出并擦除逻辑数据的份数的总和与各个待写入存储单元各自需要写入逻辑数据的份数的总和相等。
如图8所示,一种可能的实现方式中,所述控制模块14包括:
确定子模块141,用于根据各个存储单元各自已存储逻辑数据的实际份数和各自需存储逻辑数据的目标份数在所述各个存储单元中确定各个待写入存储单元及其各自需要写入逻辑数据的份数,并确定各个待读出存储单元及其各自需要读出并擦除逻辑数据的份数;其中,各个存储单元各自需存储逻辑数据的目标份数的总和与所述各个存储单元各自已存储逻辑数据的实际份数的总和相等,且各个待读出存储单元各自需要读出并擦除逻辑数据的份数的总和与各个待写入存储单元各自需要写入逻辑数据的份数的总和相等;
读出控制模块142,用于从各个待读出存储单元中按照各自需要读出并擦除逻辑数据的份数读出并擦除逻辑数据;
写入控制模块143,用于在各个待写入存储单元中按照各自需要写入逻辑数据的份数将所述读出的逻辑数据写入,使得各个存储单元各自最终存储的逻辑数据份数达到各自需存储逻辑数据的目标份数。
一种可能的实现方式中,如图9所示,所述确定子模块141具体包括:
计算单元131,用于将各个存储单元各自已存储逻辑数据的实际份数减去各自需存储逻辑数据的目标份数,得到各个存储单元各自对应的差值,所述差值表示存储单元中需要写入逻辑数据的份数或者需要读出并擦除逻辑数据的份数;
确定单元132,用于当所述存储单元对应的差值小于零时,确定所述存储单元为待写入存储单元,所述待写入存储单元需要写入逻辑数据,且需要写入逻辑数据的份数为所述差值的绝对值;
所述确定单元132,还用于当所述存储单元对应的差值等于零时,确定所述存储单元无需执行写入或读出操作;
所述确定单元132,还用于当所述存储单元对应的差值大于零时,确定所述存储单元为待读出存储单元,所述待读出存储单元需要读出并擦除逻辑数据,且需要读出并擦除逻辑数据的份数为所述差值;其中,各个存储单元各自需存储逻辑数据的目标份数的总和与所述各个存储单元各自已存储逻辑数据的实际份数的总和相等,且各个待读出存储单元各自需要读出并擦除逻辑数据的份数的总和与各个待写入存储单元各自需要写入逻辑数据的份数的总和相等。
一种可能的实现方式中,所述的装置,还包括:生成单元,用于按照各个待读出存储单元各自需要读出并擦除逻辑数据的份数和各个待写入存储单元各自需要写入逻辑数据的份数生成数据搬迁计划表,所述数据搬迁计划表用于记录从哪些待读出存储单元读出并擦除多少份的逻辑数据,并写入哪些待写入存储单元及写入逻辑数据的份数,其中,所述各个存储度按照所述数据搬迁计划表执行逻辑数据的读出和写入后,使得所述各个存储单元各自最终存储的逻辑数据份数达到各自需存储逻辑数据的目标份数;
所述读出控制模块142,具体用于按照所述数据搬迁计划表从各个待读出存储单元中按照各自需要读出并擦除逻辑数据的份数读出并擦除逻辑数据;
写入控制模块143,具体用于按照所述数据搬迁计划表在各个待写入存储单元中按照各自需要写入逻辑数据的份数将所述读出的逻辑数据写入,使得各个存储单元各自最终存储的逻辑数据份数达到各自需存储逻辑数据的目标份数。
如图10所示,本发明实施例还提供一种数据存储装置,包括:
获取模块21,用于获取待存储逻辑数据份数的总和;
计算模块22,用于计算各个存储单元各自的存储能力;
确定模块23,用于根据所述待存储逻辑数据份数的总和与各个存储单元各自的存储能力,确定各个存储单元各自需要写入逻辑数据的目标份数,所述各个存储单元各自需要写入逻辑数据的目标份数均为正整数,且各个存储单元各自需要写入逻辑数据的目标份数的总和与所述待存储逻辑数据份数的总和相等;
写入控制模块24,用于在各个存储单元中按照各自需要写入逻辑数据的目标份数将所述待存储逻辑数据写入,使得各个存储单元的存储使用率一致。
本实施例中,在各个存储单元存储新的逻辑数据时,通过根据所述待存储逻辑数据份数的总和与各个存储单元各自的存储能力,确定各个存储单元各自需要写入逻辑数据的目标份数,并在各个存储单元中按照各自需要写入逻辑数据的目标份数将所述待存储逻辑数据写入,从而可以实现所述各个存储单元的存储率一致。
本发明实施例实现各个存储单元的使用率达到一致,可以有效避免现有技术中由于每个存储单元存储的逻辑数据的份数相同,一方面,会导致部分存储能力小的存储单元发生数据溢出,导致存储失败,另一方面,部分存储能力大的存储单元则出现存储空间闲置,导致存储资源浪费的问题,从而提高数据存储的成功率和存储空间的利用率。
一种可能的实现方式中,所述计算模块22具体用于计算各个存储单元各自可存储逻辑数据的最大份数;或者,具体用于计算各个存储单元各自已存储逻辑数据的份数与当前使用率的比值。
一种可能的实现方式中,所述确定模块23具体用于:根据确定各个存储单元各自需要写入逻辑数据的目标份数,其中,Gi为第i个存储单元需要写入逻辑数据的目标份数,T为所述待存储逻辑数据份数的总和,Qi为第i个存储单元的存储能力,n为存储单元的总个数。
一种可能的实现方式中,所述的装置,还包括:调整单元,用于当各个存储单元各自需存储逻辑数据的目标份数的总和与待存储逻辑数据的份数的总和不相等时,按照存储能力从大到小的顺序对各个存储单元各自需存储逻辑数据的目标份数进行调整,使得各个存储单元各自需存储逻辑数据的目标份数的总和与待存储逻辑数据的份数的总和相等。
本发明实施例所述的数据存储装置可以为PC电脑,智能手机等。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘,硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (12)
1.一种数据存储方法,其特征在于,包括:
获取各个存储单元各自已存储逻辑数据的实际份数的总和;
计算各个存储单元各自的存储能力以及各个存储单元的总存储能力;所述计算各个存储单元各自的存储能力包括:计算各个存储单元各自可存储逻辑数据的最大份数;或者,计算各个存储单元各自已存储逻辑数据的份数与当前使用率的比值;
根据各个存储单元各自的存储能力与总存储能力的比值,获取各个存储单元的目标逻辑数据比例;
根据所述各个存储单元各自已存储逻辑数据的实际份数的总和与各个存储单元各自的目标逻辑数据比例,确定各个存储单元各自需存储逻辑数据的目标份数;
根据各个存储单元各自已存储逻辑数据的实际份数以及需存储逻辑数据的目标份数,在各个存储单元之间进行逻辑数据的迁移。
2.根据权利要求1所述的方法,其特征在于,根据各个存储单元各自已存储逻辑数据的实际份数以及需存储逻辑数据的目标份数,在各个存储单元之间进行逻辑数据的迁移,包括:
根据各个存储单元各自已存储逻辑数据的实际份数和各自需存储逻辑数据的目标份数在所述各个存储单元中确定各个待写入存储单元及其各自需要写入逻辑数据的份数,并确定各个待读出存储单元及其各自需要读出并擦除逻辑数据的份数;其中,各个存储单元各自需存储逻辑数据的目标份数的总和与所述各个存储单元各自已存储逻辑数据的实际份数的总和相等,且各个待读出存储单元各自需要读出并擦除逻辑数据的份数的总和与各个待写入存储单元各自需要写入逻辑数据的份数的总和相等;
从各个待读出存储单元中按照各自需要读出并擦除逻辑数据的份数读出并擦除逻辑数据,在各个待写入存储单元中按照各自需要写入逻辑数据的份数将所述读出的逻辑数据写入,使得各个存储单元各自最终存储的逻辑数据份数达到各自需存储逻辑数据的目标份数。
3.根据权利要求1或2所述的方法,其特征在于:
根据确定各个存储单元各自需存储逻辑数据的目标份数,其中,Gi为第i个存储单元需存储逻辑数据的目标份数,T为所述各个存储单元各自已存储逻辑数据的实际份数的总和,Qi为第i个存储单元的存储能力,n为存储单元的总个数,||表示取整。
4.根据权利要求3所述的方法,其特征在于,还包括:
当各个存储单元各自需存储逻辑数据的目标份数的总和与所述各个存储单元各自已存储逻辑数据的实际份数的总和不相等时,按照存储能力从大到小的顺序对各个存储单元各自需存储逻辑数据的目标份数进行调整,使得各个存储单元各自需存储逻辑数据的目标份数的总和与所述各个存储单元各自已存储逻辑数据的实际份数的总和相等。
5.根据权利要求2所述的方法,其特征在于,所述根据各个存储单元各自已存储逻辑数据的实际份数和各自需存储逻辑数据的目标份数在所述各个存储单元中确定各个待写入存储单元及其各自需要写入逻辑数据的份数,并确定各个待读出存储单元及其各自需要读出并擦除逻辑数据的份数包括:
将各个存储单元各自已存储逻辑数据的实际份数减去各自需存储逻辑数据的目标份数,得到各个存储单元各自对应的差值,所述差值表示存储单元中需要写入逻辑数据的份数或者需要读出并擦除逻辑数据的份数;
当所述存储单元对应的差值小于零时,确定所述存储单元为待写入存储单元,所述待写入存储单元需要写入逻辑数据,且需要写入逻辑数据的份数为所述差值的绝对值;
当所述存储单元对应的差值等于零时,确定所述存储单元无需执行写入或读出操作;
当所述存储单元对应的差值大于零时,确定所述存储单元为待读出存储单元,所述待读出存储单元需要读出并擦除逻辑数据,且需要读出并擦除逻辑数据的份数为所述差值。
6.根据权利要求2所述的方法,其特征在于,还包括:
按照各个待读出存储单元各自需要读出并擦除逻辑数据的份数和各个待写入存储单元各自需要写入逻辑数据的份数生成数据搬迁计划表,所述数据搬迁计划表用于记录从哪些待读出存储单元读出并擦除多少份的逻辑数据,并写入哪些待写入存储单元及写入逻辑数据的份数,其中,所述各个存储单元按照所述数据搬迁计划表执行逻辑数据的读出和写入后,使得所述各个存储单元各自最终存储的逻辑数据份数达到各自需存储逻辑数据的目标份数;
所述从各个待读出存储单元中按照各自需要读出并擦除逻辑数据的份数读出并擦除逻辑数据,在各个待写入存储单元中按照各自需要写入逻辑数据的份数将所述读出的逻辑数据写入具体为:
按照所述搬迁计划表从各个待读出存储单元中按照各自需要读出并擦除逻辑数据的份数读出并擦除逻辑数据,在各个待写入存储单元中按照各自需要写入逻辑数据的份数将所述读出的逻辑数据写入。
7.一种数据存储装置,其特征在于,包括:
获取模块,用于获取各个存储单元各自已存储逻辑数据的实际份数的总和;
计算模块,用于计算各个存储单元各自的存储能力以及各个存储单元的总存储能力;所述计算模块用于计算各个存储单元各自可存储逻辑数据的最大份数;或者,用于计算各个存储单元各自已存储逻辑数据的份数与当前使用率的比值;
所述获取模块,还用于根据各个存储单元各自的存储能力与总存储能力的比值,获取各个存储单元的目标逻辑数据比例;
确定模块,用于根据所述各个存储单元各自已存储逻辑数据的实际份数的总和与各个存储单元各自的目标逻辑数据比例,确定各个存储单元各自需存储逻辑数据的目标份数;
控制模块,用于根据各个存储单元各自已存储逻辑数据的实际份数以及需存储逻辑数据的目标份数,在各个存储单元之间进行逻辑数据的迁移。
8.根据权利要求7所述的装置,其特征在于,所述控制模块包括:
确定子模块,用于根据各个存储单元各自已存储逻辑数据的实际份数和各自需存储逻辑数据的目标份数在所述各个存储单元中确定各个待写入存储单元及其各自需要写入逻辑数据的份数,并确定各个待读出存储单元及其各自需要读出并擦除逻辑数据的份数;其中,各个存储单元各自需存储逻辑数据的目标份数的总和与所述各个存储单元各自已存储逻辑数据的实际份数的总和相等,且各个待读出存储单元各自需要读出并擦除逻辑数据的份数的总和与各个待写入存储单元各自需要写入逻辑数据的份数的总和相等;
读出控制模块,用于从各个待读出存储单元中按照各自需要读出并擦除逻辑数据的份数读出并擦除逻辑数据;
写入控制模块,用于在各个待写入存储单元中按照各自需要写入逻辑数据的份数将所述读出的逻辑数据写入,使得各个存储单元各自最终存储的逻辑数据份数达到各自需存储逻辑数据的目标份数。
9.根据权利要求7或8所述的装置,其特征在于,所述确定模块用于:根据确定各个存储单元各自需存储逻辑数据的目标份数,其中,Gi为第i个存储单元需存储逻辑数据的目标份数,T为所述各个存储单元各自已存储逻辑数据的实际份数的总和,Qi为第i个存储单元的存储能力,n为存储单元的总个数。
10.根据权利要求9所述的装置,其特征在于,还包括:调整单元,用于当各个存储单元各自需存储逻辑数据的目标份数的总和与所述各个存储单元各自已存储逻辑数据的实际份数的总和不相等时,按照存储能力从大到小的顺序对各个存储单元各自需存储逻辑数据的目标份数进行调整,使得各个存储单元各自需存储逻辑数据的目标份数的总和与所述各个存储单元各自已存储逻辑数据的实际份数的总和相等。
11.根据权利要求8所述的装置,其特征在于,所述确定子模块包括:
计算单元,用于将各个存储单元各自已存储逻辑数据的实际份数减去各自需存储逻辑数据的目标份数,得到各个存储单元各自对应的差值,所述差值表示存储单元中需要写入逻辑数据的份数或者需要读出并擦除逻辑数据的份数;
确定单元,用于当所述存储单元对应的差值小于零时,确定所述存储单元为待写入存储单元,所述待写入存储单元需要写入逻辑数据,且需要写入逻辑数据的份数为所述差值的绝对值;
所述确定单元,还用于当所述存储单元对应的差值等于零时,确定所述存储单元无需执行写入或读出操作;
所述确定单元,还用于当所述存储单元对应的差值大于零时,确定所述存储单元为待读出存储单元,所述待读出存储单元需要读出并擦除逻辑数据,且需要读出并擦除逻辑数据的份数为所述差值;其中,各个存储单元各自需存储逻辑数据的目标份数的总和与所述各个存储单元各自已存储逻辑数据的实际份数的总和相等,且各个待读出存储单元各自需要读出并擦除逻辑数据的份数的总和与各个待写入存储单元各自需要写入逻辑数据的份数的总和相等。
12.根据权利要求8所述的装置,其特征在于,还包括:生成单元,用于按照各个待读出存储单元各自需要读出并擦除逻辑数据的份数和各个待写入存储单元各自需要写入逻辑数据的份数生成数据搬迁计划表,所述数据搬迁计划表用于记录从哪些待读出存储单元读出并擦除多少份的逻辑数据,并写入哪些待写入存储单元及写入逻辑数据的份数,其中,所述各个存储单元按照所述数据搬迁计划表执行逻辑数据的读出和写入后,使得所述各个存储单元各自最终存储的逻辑数据份数达到各自需存储逻辑数据的目标份数;
所述读出控制模块,用于按照所述数据搬迁计划表从各个待读出存储单元中按照各自需要读出并擦除逻辑数据的份数读出并擦除逻辑数据;
写入控制模块,用于按照所述数据搬迁计划表在各个待写入存储单元中按照各自需要写入逻辑数据的份数将所述读出的逻辑数据写入,使得各个存储单元各自最终存储的逻辑数据份数达到各自需存储逻辑数据的目标份数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210282454.3A CN103577117B (zh) | 2012-08-09 | 2012-08-09 | 数据存储方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210282454.3A CN103577117B (zh) | 2012-08-09 | 2012-08-09 | 数据存储方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103577117A CN103577117A (zh) | 2014-02-12 |
CN103577117B true CN103577117B (zh) | 2017-07-25 |
Family
ID=50048986
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210282454.3A Active CN103577117B (zh) | 2012-08-09 | 2012-08-09 | 数据存储方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103577117B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105138282A (zh) * | 2015-08-06 | 2015-12-09 | 上海七牛信息技术有限公司 | 一种存储空间回收的方法及存储系统 |
CN106201342A (zh) * | 2016-06-30 | 2016-12-07 | 联想(北京)有限公司 | 一种数据处理方法及电子设备 |
CN106468560B (zh) * | 2016-09-13 | 2019-05-28 | Oppo广东移动通信有限公司 | 基于计步器消息的数据输出方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101827120A (zh) * | 2010-02-25 | 2010-09-08 | 浪潮(北京)电子信息产业有限公司 | 一种集群存储方法及系统 |
CN102014150A (zh) * | 2010-09-29 | 2011-04-13 | 厦门市美亚柏科信息股份有限公司 | 一种基于udp分布式小文件存储系统及其数据处理方法 |
CN102369506A (zh) * | 2009-05-13 | 2012-03-07 | 株式会社日立制作所 | 存储系统及存储系统的利用率管理方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2010271933A (ja) * | 2009-05-21 | 2010-12-02 | Brother Ind Ltd | 分散保存システム、ノード装置、ノード処理プログラム及びデータファイル保存方法 |
-
2012
- 2012-08-09 CN CN201210282454.3A patent/CN103577117B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102369506A (zh) * | 2009-05-13 | 2012-03-07 | 株式会社日立制作所 | 存储系统及存储系统的利用率管理方法 |
CN101827120A (zh) * | 2010-02-25 | 2010-09-08 | 浪潮(北京)电子信息产业有限公司 | 一种集群存储方法及系统 |
CN102014150A (zh) * | 2010-09-29 | 2011-04-13 | 厦门市美亚柏科信息股份有限公司 | 一种基于udp分布式小文件存储系统及其数据处理方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103577117A (zh) | 2014-02-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105205014B (zh) | 一种数据存储方法和装置 | |
CN103995855B (zh) | 存储数据的方法和装置 | |
CN102404399B (zh) | 一种云存储资源模糊动态分配方法 | |
TWI330792B (en) | Apparatus, system, and method for on-demand control of grid system resources | |
CN108090225B (zh) | 数据库实例的运行方法、装置、系统及计算机可读存储介质 | |
CN103842972B (zh) | 基于性能要求自动选择功能的方法和系统 | |
CN103631538B (zh) | 冷热数据识别门限值计算方法、装置和系统 | |
CN104182508B (zh) | 一种数据处理方法和数据处理装置 | |
CN109684074A (zh) | 物理机资源分配方法及终端设备 | |
CN104346284B (zh) | 一种内存管理方法及内存管理设备 | |
CN103577117B (zh) | 数据存储方法及装置 | |
CN108183947A (zh) | 分布式缓存方法及系统 | |
CN105335219A (zh) | 一种基于分布式的任务调度方法及系统 | |
CN110007870A (zh) | 一种存储设备写请求处理方法及相关装置 | |
CN106407207A (zh) | 一种实时新增数据更新方法和装置 | |
CN104410666B (zh) | 云计算下实现异构存储资源管理的方法及系统 | |
CN107493329A (zh) | 一种分布式内存文件系统的远程文件访问方法 | |
CN103905517A (zh) | 一种数据存储方法及设备 | |
CN106775947A (zh) | 基于openstack的大规模虚拟计算动态负载均衡方法 | |
CN108573029A (zh) | 一种获取网络访问关系数据的方法、装置及存储介质 | |
CN107422989A (zh) | 一种Server SAN系统多副本读取方法及存储架构 | |
CN109445943A (zh) | 内核态系统中i/o栈的内存管理方法、系统及相关装置 | |
CN108710686A (zh) | 一种数据存储方法、装置、存储介质及终端 | |
CN103488582B (zh) | 写高速缓冲存储器的方法及装置 | |
CN106502793A (zh) | 一种游戏资源的调配方法和设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |