本发明专利技术涉及一种SSTable文件存储方法及装置,用以解决存储SSTable文件时所需的磁盘空间较大的问题。该方法包括:读取合并前的多个SSTable文件,其中,每个合并前的SSTable文件中包含多条通过键值标识的行数据;确定合并前的多个SSTable文件所对应的键值区间,其中,合并前的多个SSTable文件所对应的键值区间由合并前的多个SSTable文件中包含的最大键值和最小键值界定;将合并前的多个SSTable文件所对应的键值区间划分为多个子区间,且每个子区间分别对应一个预设的子目录;对合并前的多个SSTable文件中所有键值相同的行数据进行合并,将合并后的行数据按照键值与子区间的对应关系存储为多个合并后的SSTable文件,将多个合并后的SSTable文件分别存储到对应子区间的子目录下。
【技术实现步骤摘要】
【专利摘要】本专利技术涉及一种SSTable文件存储方法及装置,用以解决存储SSTable文件时所需的磁盘空间较大的问题。该方法包括:读取合并前的多个SSTable文件,其中,每个合并前的SSTable文件中包含多条通过键值标识的行数据;确定合并前的多个SSTable文件所对应的键值区间,其中,合并前的多个SSTable文件所对应的键值区间由合并前的多个SSTable文件中包含的最大键值和最小键值界定;将合并前的多个SSTable文件所对应的键值区间划分为多个子区间,且每个子区间分别对应一个预设的子目录;对合并前的多个SSTable文件中所有键值相同的行数据进行合并,将合并后的行数据按照键值与子区间的对应关系存储为多个合并后的SSTable文件,将多个合并后的SSTable文件分别存储到对应子区间的子目录下。【专利说明】SSTab I e文件存储方法及装置
本专利技术涉及网络通信
,具体涉及一种SSTable文件存储方法及装置。
技术介绍
SSTable (Sorted String Table,排序字符串表)文件能够将内存中的数据按照KEY-VALUE的形式高效地存储到磁盘上。具体地,每当内存中写入的数据达到一定大小后,就会一次性刷新到磁盘上形成一个或多个SSTable文件。其中,一次生成多个SSTable文件的情况主要是在要存储的数据量超过了一个标准的SSTable文件的预设大小时才会发生,否则,一次只需生成一个SSTable文件即可。其中,每个SSTable文件包含多条行数据。每条行数据通过一个键值来标识,该键值相当于KEY-VALUE结构中的KEY ;每条行数据中存储的数据内容相当于KEY-VALUE结构中的VALUE。并且,每个SSTable文件中的各条行数据是按照键值KEY的大小有序存储的。这些刷新到磁盘上的SSTable文件一旦形成就只能读取不能修改。由于内存中不断有新的数据写入,因此,每隔一定的时间就会形成一些新的SSTable文件。因此,如果不对磁盘上的各个SSTable文件进行定期整理并重新存储,则会占用大量的磁盘空间,进而导致磁盘空间不足。目前,在对磁盘上的各个SSTable文件进行定期整理时,主要是通过对各个SSTable文件中键值相同的行数据进行合并来实现的。例如,对于KEY=DTOD3454的键值来说,该键值可能在每个SSTable文件中都存在着对应的行数据,由于这些不同的SSTable文件中的行数据都具有相同的键值,因而表明这些行数据都是关于同一信息项的内容,因此,只需要保留一条最新的行数据以供查询,而对于内容重复的行数据或者时间较早的行数据则可以直接删除。为了实现这一点,需要将磁盘中的所有SSTable文件都打开并读取其中的内容才能确定出关于每一键值的最新存储结果。但是,上述方式存在着以下明显缺陷:每次合并存储时都需要同时打开磁盘中的所有SSTable文件,因此当磁盘中的SSTable文件占用空间大于整个磁盘空间的二分之一时,则无法进行上述合并存储工作。例如,假设磁盘空间的总大小为15T,且当前磁盘空间中已经存储了 IOT的SSTable文件,此时,如果要将这些SSTable文件同时打开,则需要磁盘能够额外提供IOT的缓存空间,而这只有在磁盘总大小不小于20T的情况下才能完成,由此可见,现有的SSTable文件的合并存储方式存在很大的局限性,对磁盘空间的要求较高。而且,即使磁盘空间充足,但是由于上述操作需要同时占用很多的系统进程,因而操作失败或死机的风险很高。另外,在现有的合并存储方式中,合并后的每个SSTable文件中依然包含所有的键值,因此,合并后SSTable文件的键值数量并未得到简化,导致每次合并过程都会存在上述的诸多缺陷。而且,正是由于合并后SSTable文件的键值数量没有得到简化,因此,每次对SSTable文件进行扫描或读取时都必须打开所有的SSTable文件,所以也不能显著降低扫描或读取操作时的工作量。
技术实现思路
鉴于上述问题,提出了本专利技术以便提供一种克服上述问题或者至少部分地解决上述问题的SSTable文件存储方法及装置。依据本专利技术的一个方面,提供了一种SSTable文件存储方法,包括:读取合并前的多个SSTable文件,其中,每个合并前的SSTable文件中包含多条通过键值标识的行数据;确定所述合并前的多个SSTable文件所对应的键值区间,其中,所述合并前的多个SSTable文件所对应的键值区间由所述合并前的多个SSTable文件中包含的最大键值和最小键值界定;将所述合并前的多个SSTable文件所对应的键值区间划分为多个子区间,且每个子区间分别对应一个预设的子目录;对所述合并前的多个SSTable文件中所有键值相同的行数据进行合并,将合并后的行数据按照键值与子区间的对应关系存储为多个合并后的SSTable文件,将所述多个合并后的SSTable文件分别存储到对应子区间的子目录下。可选地,每个合并前的SSTable文件所对应的键值区间相同,且所述每个合并前的SSTable文件所对应的键值区间由该SSTable文件中包含的最大键值和最小键值界定。可选地,每个子目录下存储至少一个合并后的SSTable文件,且所述至少一个合并后的SSTable文件所对应的键值区间与该子目录对应的子区间相同,其中,所述至少一个合并后的SSTable文件所对应的键值区间由所述至少一个合并后的SSTable文件中包含的最大键值和最小键值界定。可选地,所述将所述多个合并后的SSTable文件分别存储到对应子区间的子目录下的步骤之后,进一步包括:删除所述合并前的多个SSTable文件。可选地,按照预设的第一时间间隔循环执行各个步骤。可选地,进一步包括:按照预设的第二时间间隔循环执行以下步骤:分别对每个子目录下存储的至少一个合并后的SSTable文件中键值相同的行数据进行合并。可选地,进一步包括:依次对每个子目录下存储的至少一个合并后的SSTable文件进行扫描,并且,在对每个子目录下存储的至少一个合并后的SSTable文件进行扫描的过程中,进一步扫描下次合并前的多个SSTable文件。依据本专利技术的另一方面,提供了一种SSTable文件存储装置,包括:读取单元,适于读取合并前的多个SSTable文件,其中,每个合并前的SSTable文件中包含多条通过键值标识的行数据;确定单元,适于确定所述合并前的多个SSTable文件所对应的键值区间,其中,所述合并前的多个SSTable文件所对应的键值区间由所述合并前的多个SSTable文件中包含的最大键值和最小键值界定;划分单元,适于将所述合并前的多个SSTable文件所对应的键值区间划分为多个子区间,且每个子区间分别对应一个预设的子目录;合并存储单元,适于对所述合并前的多个SSTable文件中所有键值相同的行数据进行合并,将合并后的行数据按照键值与子区间的对应关系存储为多个合并后的SSTable文件,将所述多个合并后的SSTable文件分别存储到对应子区间的子目录下。可选地,每个合并前的SSTable文件所对应的键值区间相同,且所述每个合并前的SSTable文件所对应的键值区间由该SSTable文件中包含的最大键值和最本文档来自技高网...
【技术保护点】
一种SSTable文件存储方法,包括:读取合并前的多个SSTable文件,其中,每个合并前的SSTable文件中包含多条通过键值标识的行数据;确定所述合并前的多个SSTable文件所对应的键值区间,其中,所述合并前的多个SSTable文件所对应的键值区间由所述合并前的多个SSTable文件中包含的最大键值和最小键值界定;将所述合并前的多个SSTable文件所对应的键值区间划分为多个子区间,且每个子区间分别对应一个预设的子目录;对所述合并前的多个SSTable文件中所有键值相同的行数据进行合并,将合并后的行数据按照键值与子区间的对应关系存储为多个合并后的SSTable文件,将所述多个合并后的SSTable文件分别存储到对应子区间的子目录下。
【技术特征摘要】
【专利技术属性】
技术研发人员:杨威,唐会军,
申请(专利权)人:北京奇虎科技有限公司, 奇智软件北京有限公司,
类型:发明
国别省市:北京;11
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。