本发明专利技术实施例公开了一种数据存储方法及装置,针对待存储数据,构建至少两级链表,该待存储数据存储在底层链表中,在底层链表包含的存储数据全部相同时,删除该底层链表,并更新该底层链表在上一级链表中的状态。一方面,将包含的存储数据全部相同的底层链表删除,节省了内存空间的占用;另一方面,当数据量很大、构建了多个底层链表时,如果出现数据变化的情况,仅需修改该数据对应的底层链表及该底层链表在上一级链表中的状态,不需要将全部链表进行解压‑修改‑压缩的处理,提高了执行效率。
【技术实现步骤摘要】
本专利技术涉及计算机
,特别涉及一种数据存储方法及装置。
技术介绍
随着科学技术的发展,计算机已深入人们的生活,并带来了巨大的便利。目前,利用计算机存储数据已十分普遍。比如,公司记录员工的考勤数据,一般都采用计算机来存储。例如,公司A需要记录8个员工的考勤信息,传统的记录方案是在计算机中存储每一天正常考勤员工的ID列表,比如:2016-2-15:[1,2,3,4,5,6,7,8]。假如员工ID采用的数据类型是CHAR型(占用1个BYTE),则在没有员工缺勤的情况下,存储当天的考勤记录需要8个BYTE(内存占用总数=员工个数*员工ID数据类型占用内存数)。当该公司的规模再扩大,比如扩大到100000个员工时,那么员工ID的数据类型就不能使用CHAR型,因为CHAR型数据只能表示0~127,员工ID的类型必须使用INT型(占用4个BYTE),则在没有员工缺勤的情况下,存储当天的考勤记录需要400,000(即100000*4)个BYTE。一种更优的方案是构造一个BIT-MAP(位图文件),用于存储每一个员工的考勤信息,如果某员工当前的考勤正常,则将该员工对应的位置设置成1,否则设置成0。以上述例子进行说明,当公司A中存在8个员工时,将这些员工映射到一个8个BIT的数组中,假设2016-2-16这天员工4和员工7考勤不正常时,其所对应的BIT-MAP如图1所示。由此可以看出,仅需8个比特位(即1个BYTE)便可存储所有员工的考勤信息,所占用的计算机的内存为传统方案的1/8。当该公司的规模再扩大,比如扩大到100000个员工时,需要申请一个12500(即100000/8)个BYTE的CHAR型数组arrayA,其中:arrayA[0]对应十进制数0~7,arrayA[1]对应十进制数8~15,arrayA[2]对应十进制数16~23……以此类推。因此,采用构造BIT-MAP的方案,占用的计算机的内存仅为传统方案的1/32(即12500/400000)。综上所述,当记录的数据中最大的数为N时,所需要消耗的内存最多为(1+N/8)个BYTE,通过采用构造BIT-MAP的方案能够很大程度上节省计算机内存。但是在很多的使用场景中,BIT-MAP数据结构中的比特位为0或者比特位为1都是连续的,如上面例子中的员工考勤,对于工作日,绝大部分员工所对应的比特位都是1(即考勤正常),因此该BIT-MAP数据结构仍然可以进行压缩和优化,进一步的节省内存。针对BIT-MAP数据结构中的比特位为0或者比特位为1都是连续的这一特点,通常使用的方案是引入字符串压缩技术,比如对BIT-MAP字符串采用RLE(run-length encoding,游程编码)编码方法进行压缩。如图2的BIT-MAP为例:可以将图2中的BIT-MAP编码为0,7,2,9,1,10,3。其意思是:第一位为0,连续有7个,接下来是2个1,9个0,1个1,10个0,最后是3个1(这里只是对RLE编码基本原理的解释,实际中的编码可能会存在差异)。对于一个数据量很大的BIT-MAP,如果里面的数据分布存在大片连续的0或者大片连续的1,采用RLE编码方法将其进行压缩,会节省很多内存的占用。但是,采用RLE编码方法,如果BIT-MAP中的某一个比特位发生变化,需要向将压缩的RLE编码解压成原始的BIT-MAP数据,将原始的BIT-MAP数据修改之后,再将修改后的BIT-MAP压缩成RLE编码格式。因此,对于数据频繁变化的情况,采用RLE编码方法压缩BIT-MAP数据,执行效率很低。
技术实现思路
本专利技术实施例的目的在于提供一种数据存储方法及装置,在节省计算机内存的基础上,针对数据频繁变化的情况,提高执行效率。为达到上述目的,本专利技术实施例公开了一种数据存储方法,包括:获得待存储数据,并确定所述待存储数据对应的目标链表以及所述待存储数据在所述目标链表的存储位置;将所述待存储数据存储至所述存储位置;在所述目标链表包含的所述数据全部相同时,删除所述目标链表,并更新所述目标链表在上一级链表中的状态。为达到上述目的,本专利技术实施例还公开了一种数据存储装置,包括:获得确定模块,用于获得待存储数据,并确定所述待存储数据对应的目标链表以及所述待存储数据在所述目标链表的存储位置;存储模块,用于将所述待存储数据存储至所述存储位置;删除更新模块,用于在所述目标链表包含的所述数据全部相同时,删除所述目标链表,并更新所述目标链表在上一级链表中的状态。由上述技术方案可见,应用本专利技术所示实施例,针对待存储数据,构建至少两级链表,该待存储数据存储在底层链表中,在底层链表包含的存储数据全部相同时,删除该底层链表,并更新该底层链表在上一级链表中的状态。一方面,将包含的存储数据全部相同的底层链表删除,节省了内存空间的占用;另一方面,当数据量很大、构建了多个底层链表时,如果出现数据变化的情况,仅需修改该数据对应的底层链表及该底层链表在上一级链表中的状态,不需要将全部链表进行解压-修改-压缩的处理,提高了执行效率。当然,实施本专利技术的任一产品或方法必不一定需要同时达到以上所述的所有优点。附图说明为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为
技术介绍
所举实例中对应的一个BIT-MAP;图2为
技术介绍
所举实例中对应的另一个BIT-MAP;图3为本专利技术实施例提供的一种数据存储方法的流程示意图;图4为本专利技术实施例提供的一种数据结构;图5为本专利技术实施例提供的另一种数据结构;图6为本专利技术实施例提供的一种数据存储装置的结构示意图。具体实施方式下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。为了解决现有技术问题,本专利技术实施例提供了一种数据存储方法及装置。下面首先对本专利技术实施例提供的一种数据存储方法进行详细说明。图3为本专利技术实施例提供的一种数据存储方法的流程示意图,包括:S101:获得待存储数据,并确定待存储数据对应的目标链表以及待存储数据在目标链表的存储位置。需要说明的是,以链表形式存储数据,可以以多级链表的形式对数据进行存储,本专利技术实施例中所述目标链表指的是多级链表中最底层的链表。在本专利技术所示实施例中,链表中可以以位图形式存储数据。作为本专利技术的一种实施方式,可以预先建立待存储数据与底层链表的对应关系、及待存储数据与其对应的底层链表的存储位置的对应关系。根据建立的对应关系,确定待存储数据对应的目标链表以及待存储数据在目标链表的存储位置。假设待存储数据为A公司的考勤数据,A公司有120个员工,针对A公司的考勤数据构建了两级链表,每个底层链表能容纳40条数据,则需构建3个底层链表。可以根据员工ID号或名称等,建立员工考勤数据与底层链表及底层链表的位图中的存储位置的对应关系,比如,ID号为1-40的本文档来自技高网...
【技术保护点】
一种数据存储方法,其特征在于,包括:获得待存储数据,并确定所述待存储数据对应的目标链表以及所述待存储数据在所述目标链表的存储位置;将所述待存储数据存储至所述存储位置;在所述目标链表包含的所述数据全部相同时,删除所述目标链表,并更新所述目标链表在上一级链表中的状态。
【技术特征摘要】
1.一种数据存储方法,其特征在于,包括:获得待存储数据,并确定所述待存储数据对应的目标链表以及所述待存储数据在所述目标链表的存储位置;将所述待存储数据存储至所述存储位置;在所述目标链表包含的所述数据全部相同时,删除所述目标链表,并更新所述目标链表在上一级链表中的状态。2.根据权利要求1所述的方法,其特征在于,预设x级链表,所述x为大于1的整数,则所述确定的目标链表为第x级链表,确定的所述存储位置为:在所述第x级链表的存储位置;确定所述目标链表之前,该方法还包括:依次确定所述待存储数据对应的第一级链表至第x-1级链表。3.根据权利要求2所述的方法,其特征在于,确定的所述第一级链表至第x-1级链表的编号为:[(i%p1%p2%...%pj-1)/pj],1≤j≤x-1;确定的第x级链表的编号为:[(i%p1%p2%...%pj…%px-1)/px];所述i为待存储数据的编号,i为非负整数;所述pj为第j级链表对应的所述待存储数据的个数,pj=wx*wx-1*…*wj,所述wj=yj/oj,所述yj为预设的第j级链表的容量,单位为比特,所述oj为预设的第j+1级链表的状态在第j级链表中占用的比特位数;所述px为第x级链表存储的所述待存储数据的个数,px=wx=yx/ox,所述yx为预设的第x级链表的容量,单位为比特,所述ox为预设的待存储数据在第x级链表中占用的比特位数。4.根据权利要求3所述的方法,其特征在于,所述待存储数据在所述第x级链表的存储位置为一个比特位组,所述比特位组包括:从编号为(i%px)*ox的比特位到编号为(i%px)*ox+ox-1的比特位。5.根据权利要求4所述的方法,其特征在于,在所述目标链表包含的所述数据全部相同时,所述更新所述目标链表在上一级链表中的状态,包括:在所述目标链表包含的每个比特位组的值全部相同时,在所述上一级链表中将目标链表的状态更新为对应的第一预设值;确定所述目标链表不存在时,该方法还包括:创建目标链表,并在所述上一级链表中将目标链表的状态设置为对应的初始值;在所述目标链表包含的所述数据不全部相同时,该方法还包括:在所述上一级链表中将目标链表的状态更新为对应的第二预设值。6.根据权利要求3所述的方法,其特征在于,该方法还包括:当第j级链表包含的状态全部相同时,删除所述第j级链表,并更新所述第j级链表在第j-1...
【专利技术属性】
技术研发人员:余清炎,
申请(专利权)人:杭州华三通信技术有限公司,
类型:发明
国别省市:浙江;33
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。