一种数据存储方法及系统与流程

文档序号:13094514阅读:234来源:国知局
本发明涉及数据存储
技术领域
:,特别是涉及一种数据存储方法及系统。
背景技术
::随着互联网技术的发展,大数据时代的到来,人们对数据访问的需求越来越多。为了提高访问的速度和可靠性,通常把数据存储到缓存中,具体为分布到一系列服务器上,这种数据存储的方式称为分布式缓存。分布式缓存的出现使用户可以高性能地读取数据、动态地扩展缓存节点、自动发现和切换故障节点、自动均衡数据分区,而且能够为使用者提供图形化的管理界面,部署和维护都十分方便。redis是一个使用ansic编写的开源、支持网络、基于内存、可选持久性的键值对存储数据库。根据月度排行网站db-engines.com的数据显示,redis是最流行的键值对存储数据库,是目前最流行的分布式缓存的一种具体的技术实现手段。然而redis虽然能提高整个系统的响应速度和存储能力,但redis为了提高检索的速度,把数据全部存储到内存中,这样使得当数据规模较大时,对机器内存的要求太高,必然增加成本。为了满足用户对存储的需求,通常把一些非热点的数据写入到磁盘中,此时需要保证写入磁盘的速度很快。而redis本身自带的写入方式为基于附加文件(aof,append-onlyfile)的协议文本的方式,这种方式直接将数据写入磁盘,使得数据写入磁盘的效率较低。技术实现要素:本发明的目的是提供一种数据存储方法及系统,以提高数据写入磁盘的速度。为实现上述目的,本发明提供了如下方案:一种数据存储方法,包括:获取待存储数据;将所述待存储数据划分成数据块;将所述数据块写入到内存中;对所述内存中的所述数据块进行并行压缩处理,得到数据压缩包;将所述数据压缩包写入到磁盘中。可选的,所述将所述待存储数据划分成数据块,具体包括:利用lsm树将所述待存储数据划分成相同大小的所述数据块。可选的,所述将所述数据块写入到内存中,具体包括:生成所述数据块的日志文件;将所述日志文件写入到所述磁盘中;将所述数据块写入到所述内存中。可选的,所述对所述内存中的所述数据块进行并行压缩处理,得到数据压缩包,具体包括:利用snappy算法对所述数据块进行压缩,并引入avx指令集在一个时钟周期内按字节进行并行压缩。可选的,在所述将所述数据压缩包写入到磁盘之后,还包括:删除所述数据压缩包所对应的所述数据块的日志文件。本发明还公开了一种数据存储系统,包括:获取模块,用于获取待存储数据;划分模块,用于将所述待存储数据划分成数据块;写内存模块,用于将所述数据块写入到内存中;压缩模块,用于对所述内存中的所述数据块进行并行压缩处理,得到数据压缩包;写磁盘模块,用于将所述数据压缩包写入到磁盘中。可选的,所述划分模块,具体包括:等划分单元,用于利用lsm树将所述待存储数据划分成相同大小的所述数据块。可选的,所述写内存模块,具体包括:日志生成单元,用于生成所述数据块的日志文件;日志写入磁盘单元,用于将所述日志文件写入到所述磁盘中;数据写内存单元,用于将所述数据块写入到所述内存中。可选的,所述压缩模块,具体包括:压缩单元,用于利用snappy算法对所述数据块进行压缩,并引入avx指令集在一个时钟周期内按字节进行并行压缩。可选的,本发明的数据存储系统还包括:日志删除模块,用于删除所述数据压缩包所对应的所述数据块的日志文件。根据本发明提供的具体实施例,本发明公开了以下技术效果:本发明在数据存储到磁盘的过程中,先对数据进行压缩处理,然后将压缩后的数据写入磁盘,提高了写入的速度。同时本发明的压缩方式采用并行压缩的方式,加快了压缩的速度,进一步提高了数据写入磁盘的速度。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1为本发明数据存储方法实施例的方法流程图;图2为本发明数据存储系统实施例的系统结构图。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。图1为本发明数据存储方法实施例的方法流程图。参见图1,该数据存储方法包括:步骤101:获取待存储数据。步骤102:将所述待存储数据划分成数据块;具体为:利用lsm树将所述待存储数据划分成相同大小的所述数据块。采用lsm树对数据进行划分,提高redis存储的序列化程度,同时提高数据顺序写入磁盘的能力,便于按照key-value进行查找。步骤103:将所述数据块写入到内存中;具体为:生成所述数据块的日志文件;将所述日志文件写入到所述磁盘中;将所述数据块写入到所述内存中。本发明的数据存储方法在内存设置了mtables数据结构,在磁盘中设置了sttablesindex数据结构,同时还设置用于存储日志文件的logstructfile数据结构。当获取到待存储数据时,对所述待存储数据被划分成的数据块生成日志文件,先将所述日志文件写入到所述logstructfile数据结构中,然后再将所述数据块按顺序写入到所述内存中。当内存中的所述mtables数据结构填满后,所述mtables数据结构中的数据块就会被按顺序写入到磁盘中的sttablesindex数据结构中。所述数据块按顺序存放是为了方便按key-value进行查找。在该实施例中,所述数据块的大小为32kb。步骤104:对所述内存中的所述数据块进行并行压缩处理,得到数据压缩包,具体为:利用snappy算法对所述数据块进行压缩,并引入avx指令集在一个时钟周期内按字节进行并行压缩。sttablesindex数据结构为多个;当sttablesindex数据结构中的数据量达到预设值时,则需要对所述sttablesindex数据结构中的数据块进行压缩,并且还对需要从内存写入到磁盘的数据块进行压缩。压缩算法采用的算法为snappy算法;采用snappy算法进行压缩时,可以同时进行多个sttablesindex数据结构中数据的并行压缩,大大提高了压缩速度,缩短了压缩时间。同时在压缩的过程中引入avx指令集,可以在一个时钟周期内在每个sttablesindex数据结构中同时处理32个字节的并行压缩,进一步提高压缩速度。本发明的该实施例中,引入snappy算法实现了多个sttablesindex数据结构中数据的并行压缩,并且引入avx指令集,可以在每个sttablesindex数据结构中实现32个字节的并行压缩,即本发明在采用数据压缩的方法提高写入速度的同时,实现了双层并行压缩,极大提高了数据压缩的速度,进而使得数据写入的速度得到进一步提升。步骤105:将所述数据压缩包写入到磁盘中。在步骤105之后,还包括:删除所述数据压缩包所对应的所述数据块的日志文件。图2为本发明数据存储系统实施例的系统结构图。参见图2,该数据存储系统,包括:获取模块201,用于获取待存储数据。划分模块202,用于将所述待存储数据划分成数据块。该划分模块202,具体包括:等划分单元,用于利用lsm树将所述待存储数据划分成相同大小的所述数据块。写内存模块203,用于将所述数据块写入到内存中。该写内存模块203,具体包括:日志生成单元,用于生成所述数据块的日志文件;日志写入磁盘单元,用于将所述日志文件写入到磁盘中;数据写内存单元,用于将所述数据块写入到所述内存中。压缩模块204,用于对所述内存中的所述数据块进行并行压缩处理,得到数据压缩包。该压缩模块204,具体包括:压缩单元,用于利用snappy算法对所述数据块进行压缩,并引入avx指令集在一个时钟周期内按字节进行并行压缩。写磁盘模块205,用于将所述数据压缩包写入到磁盘中。该数据存储系统还包括日志删除模块,用于删除所述数据压缩包所对应的数据块的日志文件。本发明在数据存储到磁盘的过程中,先对数据进行压缩处理,然后将压缩后的数据写入磁盘,提高了写入的速度。同时本发明的压缩方式采用并行压缩的方式,加快了压缩的速度,进一步提高了数据写入磁盘的速度。本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处。综上所述,本说明书内容不应理解为对本发明的限制。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1