本发明专利技术公开一种键-值存储系统中数据文件的合并压缩方法及装置,属于计算机技术领域。所述方法包括:将数据节点的所有数据文件划分为若干个数据层级进行存储,其中,新增的数据文件存储在最低的数据层级;按照预定的合并周期对各数据层级中的数据文件进行合并压缩,并将合并压缩生成的数据文件从当前数据层级搬移到上一层数据层级,其中,所述合并压缩为消除各数据文件中的重复数据块。根据本发明专利技术,能够在保证重复数据块消重效果、提高存储空间利用率的基础上,降低对磁盘I/O资源的占用率。
【技术实现步骤摘要】
【专利摘要】本专利技术公开一种键-值存储系统中数据文件的合并压缩方法及装置,属于计算机
。所述方法包括:将数据节点的所有数据文件划分为若干个数据层级进行存储,其中,新增的数据文件存储在最低的数据层级;按照预定的合并周期对各数据层级中的数据文件进行合并压缩,并将合并压缩生成的数据文件从当前数据层级搬移到上一层数据层级,其中,所述合并压缩为消除各数据文件中的重复数据块。根据本专利技术,能够在保证重复数据块消重效果、提高存储空间利用率的基础上,降低对磁盘I/O资源的占用率。【专利说明】一种键-值存储系统中数据文件的合并压缩方法及装置
本专利技术涉及计算机
,具体涉及一种键-值(Key-Value)存储系统中数据文件的合并压缩方法及装置。
技术介绍
在很多大数据存储系统中,数据块(数据记录)是以Key-Value对的方式存储,基于存储与读写性能的考虑,在实现上都采用数据添加(Append)模式,即所有的写操作都先将数据块写入内存表(Memtable),当Memtable达到一定大小时,再将Memtable中的数据块排序写入(Dump)到磁盘上的有序字符串表(SSTable)文件中。后续通过合并压缩(Compaction)机制将全部或部分SSTable文件合并形成新的SSTable文件,从而达到降低数据文件个数以提高访问性能、去除重复数据以节省磁盘空间的目的。Cassandra系统也采用了类似的设计方式。Cassandra数据存储空间可以抽象为一个环形结构,数据块就是通过哈希(hash)分散在这个环形存储空间上。每个数据节点负责管理这个环形存储空间上的某一块连续的范围(也叫Range),落在此Range空间上的数据块就存储在这个数据节点上。SSTable是Cassandra系统中数据处理和交换的文件存储格式。SSTable是存储一组任意有序Key-Value对的数据文件。SSTable —旦完成写入,就不可更改,只能读取。在 Cassandra 系统中,Compaction 分为 Minor Compaction (部分合并压缩)和 MajorCompaction (全部合并压缩)。M ajor Compaction指的是全部数据文件都参与Compaction操作,但是随着写入的数据块越来越多,磁盘剩余空间不足,Major Compaction无法实施,这样,每次Compaction只能有部分数据文件参与,也就是只能做Minor Compaction。而在大量的Minor Compaction下,如何保证既能尽量去除重复的数据块,又能避免数据文件重复参与Compation而浪费磁盘输入/输出(I / 0)资源,是众多Compaction策略需要解决的问题。现有的一种技术方案为Tiered Compaction (阶梯合并压缩),其实现原理为:(I)首先将SSTable文件按照大小范围划分为若干级别;(2)当Memtable刷新到磁盘SSTable文件中时,从文件较小的SSTable级别开始,逐级检查SSTable个数,发现数目超过4个就将其做一次Compaction,生成一个新的SSTable 文件(3)直到各级别的SSTable文件都少于4个为止,这样,通过对每次4个SStable进行合并压缩,达到局部减小存储空间的目的。上述技术方案的缺点在于:(I)对磁盘I / 0性能有影响。由于一条记录的多个版本可能存在于多个SSTable文件中,最差的情况下可能某一条记录会存在于所有SSTable文件中,因此一条记录所在的SSTable文件可能多次重复参与Compaction才能将数据消除,并且参与次数无法确定,无形中浪费了 I / 0资源,间接也影响了读写性能。(2)在存储空间上浪费严重。因为一个被删除记录的老版本可能会一直存在于一些老的SSTable文件中,直到这个老的SSTable文件参与Compaction才可能消除掉;或者只有进行一次Major Compaction才可以消除。由于Tiered Compaction是按照SSTable文件大小进行级别划分进而分级做Minor Compaction,这样往往导致删除操作较多(SSTable文件较小)的SSTable文件和插入操作过多(SSTable文件较大)的SSTable文件分在不同的级别中,因而对于一个经常有删除操作的应用来说会造成空间的极大浪费。现有的另一种技术方案为Leveled Compaction (层级合并压缩),这种Compaction机制借鉴自LevelDB。如图1所示,Leveled Compaction方式将数据分成金字塔形的若干个层级(Level),最底层的叫LevelO,其上分别是Levell、Level2和Level3。新写入的SSTable文件存放在LevelO,其余Level上的文件为Compaction生成的文件,因此在本Level (除了 LevelO之外)内是全局有序的。同时,每个Level上的SSTable文件按照固定大小切分,因此文件大小是固定的。当LevelO生成一个SSTable文件后,会和Levell上所有与其有交集的SSTable文件进行一次合并,生成若干有序的SSTable文件存放在Levell上,然后Levell上的SSTable文件会和Level2上所有与其有交集的SSTable文件进行一次合并,依次类推,运行到Level3后周而复始。上述技术方案的缺点在于会造成磁盘I / 0负载严重。由于数据块的写入都是完全随机的,因此一个Memtable写入到LevelO的SSTable文件中时,这个SStale文件上的存储的数据块范围是分散在整个逻辑存储空间的,每一个SSTable文件和Levell所有的SStable文件都有交集。因此每一次LevelO的SSTable文件Compaction, Levell的所有SSTable文件都要全部重复参与,这造成了磁盘I / 0负载过大,I / 0浪费比较严重。
技术实现思路
鉴于上述问题,提出了本专利技术以便提供一种克服上述问题或者至少部分地解决上述问题的键-值存储系统中数据文件的合并压缩方法及装置。根据本专利技术的一个方面,提供了一种键-值存储系统中数据文件的合并压缩方法,包括:将数据节点的所有数据文件划分为若干个数据层级进行存储,其中,新增的数据文件存储在最低的数据层级;按照预定的合并周期对各数据层级中的数据文件进行合并压缩,并将合并压缩生成的数据文件从当前数据层级搬移到上一层数据层级,其中,所述合并压缩为消除各数据文件中的重复数据块。可选地,所述合并压缩方法还包括:对于除了最低的数据层级之外的其他所有数据层级,将各数据层级的存储空间划分为若干个存储范围;所述将合并压缩生成的数据文件从当前数据层级搬移到上一层数据层级为:将合并压缩生成的数据文件存储到上一层数据层级中与该数据文件对应的存储范围中。可选地,所述对各数据层级中的数据文件进行合并压缩为:依次对数据层级中各存储范围中的数据文件进行合并压缩。可选地,任一数据层级对应的合并周期小于上一层数据层级对应的合并周期。可选地,所述合并压缩方法还包括:控制任一数据层级的合并压缩速度小于下一层数据层级的合本文档来自技高网...
【技术保护点】
一种键?值存储系统中数据文件的合并压缩方法,包括:将数据节点的所有数据文件划分为若干个数据层级进行存储,其中,新增的数据文件存储在最低的数据层级;按照预定的合并周期对各数据层级中的数据文件进行合并压缩,并将合并压缩生成的数据文件从当前数据层级搬移到上一层数据层级,其中,所述合并压缩为消除各数据文件中的重复数据块。
【技术特征摘要】
【专利技术属性】
技术研发人员:王锋,
申请(专利权)人:北京奇虎科技有限公司,奇智软件北京有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。