CN103812877B - 基于Bigtable分布式存储***的数据压缩方法 - Google Patents
基于Bigtable分布式存储***的数据压缩方法 Download PDFInfo
- Publication number
- CN103812877B CN103812877B CN201410088278.9A CN201410088278A CN103812877B CN 103812877 B CN103812877 B CN 103812877B CN 201410088278 A CN201410088278 A CN 201410088278A CN 103812877 B CN103812877 B CN 103812877B
- Authority
- CN
- China
- Prior art keywords
- file
- sstable
- layer
- record
- bigtable
- 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)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本发明公开了一种基于Bigtable分布式存储***的数据压缩方法,主要解决现有技术生成的SSTable文件大小不可预测的问题,其实现步骤是:1)***根据运行情况为每个层级的SSTable文件设置数量阈值;2)检测***中第L层的SSTable文件数量是否超过阈值,若超过则执行步骤3,否则,继续检测;3)从第L层中轮流选择待压缩的SSTable文件;4)从第L+1层中找出所有与L层选定的SSTable文件在键值区间上有重叠的文件,并将这两个层级中选出的SSTable文件进行合并压缩。本发明充分利用了SSTable文件的层级结构,加快了数据的读取速度,可用于分布式存储***中数据的合并和压缩。
Description
技术领域
本发明属于数据处理技术领域,特别涉及一种数据压缩方法,可用于类似Bigtable分布式存储***的存储和管理。
背景技术
Bigtable是Google设计的分布式数据存储***,是一种用来处理海量数据的非关系型数据库,能够可靠地部署到成千上万台服务器上。Bigtable内部采用SSTable的格式存储数据,Bigtable中子表的持久化状态信息保存在Google文件***GFS之上。Bigtable中数据的读写操作流程如图1所示,当写操作到达子表服务器时,首先将事务信息记录在日志中,成功后将记录***Memtable有序内存缓冲区中。由于内存空间有限,当Memtable大小达到阈值时就会被冻结,新的Memtable被创建。被冻结的Memtable被转化为不可更改的SSTable,并写入GFS文件***。
Bigtable采用三级压缩机制:1)次压缩:当Memtable大小达到阈值时会被转化为SSTable;2)合并压缩:将Memtable和一部分SSTable合并成一个新的SSTable;3)主压缩:将所有SSTable重写成一个更大的SSTable。SSTable是由内存中的数据不断导出并经过压缩之后形成的,因为Bigtable采取了三级压缩机制,所以SSTable的所有文件形成了一种层级结构,每执行一次压缩,SSTable的层级会增加一次。本方法将第一层记为Level0,第二层记为Level1,并以此类推。
Bigtable使用Manifest文件记录各个SSTable文件的管理信息,包括文件所在层级、文件名、最小键值和最大键值,Manifest文件的存储示意如图2所示。SSTable中的记录都是键值有序的,但Level0中可能存在两个SSTable文件的键值重叠的情况。在Bigtable的三级压缩中除次级压缩外都是定期执行的,而Bigtable并未指定压缩周期的大小。当写操作比较频繁时,新生成的SSTable也会比较多。如果周期较长,经过一次压缩后,会合并成一个较大的SSTable,在这个大的SSTable中进行读操作会比较耗时;如果周期较短则会频繁执行压缩,加重了***的负担。对于定期执行的方案,通常的处理方法是根据实际运行情况设置一个经验值,然而在云时代的Bigtable中,读写操作具有不可预测性和高并发性,一个固定不变的压缩周期会导致所生成的SSTable大小不可预测。因此,Bigtable需要一种高效的数据压缩方案,既可以满足Bigtable的应用需求,又能够预测每个层级的SSTable大小。
发明内容
本发明的目的在于提出一种基于Bigtable分布式存储***的数据压缩方法,以解决Bigtable现有方法在面对高并发的读写操作时,生成的SSTable文件大小不可预测的问题。
为实现上述目的,本发明的技术方案包括如下步骤:
(1)Bigtable分布式存储***根据其实际运行情况,为每个层级的SSTable文件设置数量阈值;
(2)检测Bigtable分布式存储***中第L层的SSTable文件数量是否超过该层的数量阈值,若超过则执行步骤(3),否则,继续检测;
(3)采用轮流的方式从第L层中选择待压缩的SSTable文件:
当L>0时,从第L层中任意选择一个SSTable文件;
当L=0时,在选定一个SSTable文件之后,找出该层中所有与选定的SSTable文件在关键字区间上有重合的文件;
(4)从第L+1层中找出所有与第L层中选定的SSTable文件在键值区间上有重叠的文件,并将找出的SSTable文件与第L层中选定的SSTable文件进行如下合并压缩:
4a)将第L层中选定的SSTable文件和第L+1层中找出的SSTable文件进行汇总,并分解成K个能够一次性装入内存的部分;
4b)依次将这K个部分读入内存,并利用内部排序算法对每一部分进行排序;
4c)采用多路归并排序法将排序后的K个初始有序部分进行归并。
本发明与现有技术相比具有以下优点:
第一,本发明通过为各个SSTable层级设置数量限制,而不是采用定期压缩的方式,从而克服了定期压缩所固有的缺点:如果周期较长,压缩后合并成的SSTable太大,要进行读操作会比较耗时;如果周期较短则会频繁执行压缩,加重***的负担。
第二,本发明通过以轮流的方式从某一层中选择SSTable文件,和高一层级中的SSTable文件进行合并,使得每个文件都有机会和高层的文件进行合并;
第三,本发明通过选择高一层级中与所选文件在键值区间上有重叠的SSTable文件进行合并,可以充分利用SSTable的层级结构,使得每个层级的SSTable大小是可预测的,进一步减少子表服务器的内存使用率,加快了文件的读取速度。
附图说明
图1为Bigtable现有的三级压缩机制;
图2为Manifest文件的存储示意图;
图3为本发明的实现总流程图;
图4为本发明中在第0层选定一个SSTable文件之后,找出所有与之在关键字区间上有重合文件的子流程图;
图5为本发明中对SSTable文件进行合并压缩的子流程图;
图6为本发明中对SSTable文件进行归并排序的子流程图。
具体实施方式
下面结合附图对发明做进一步的详细描述。
参照图3,本发明的数据压缩,包括如下步骤:
步骤1.Bigtable分布式存储***根据其实际运行情况,为每个层级的SSTable文件设置数量阈值。
步骤2.检测Bigtable分布式存储***中第L层的SSTable文件数量是否超过该层的数量阈值,若超过则执行步骤3,否则,继续检测。
步骤3.采用轮流的方式从第L层中选择待压缩的SSTable文件。
根据SSTable文件所在层级L的不同,有如下两种情况:
当L>0时,从第L层中任意选择一个SSTable文件;
这是因为在L>0的层级中,每个SSTable文件均按照关键字的词典序排列,且任意两个SSTable文件的关键字区间不会重叠,所以在L>0的层级进行压缩时可以任意选择其中一个文件。
当L=0时,在选定一个SSTable文件之后,找出该层中所有与选定的SSTable文件在关键字区间上有重合的文件;
这是由于L=0层级中的SSTable文件是通过次压缩直接生成的,任意两个L=0层级中的SSTable文件可能存在关键字范围上的重叠。选定L=0层级的某个文件后,需要在该层找出所有与选定文件在关键字区间上有重合的文件,进而与高一层的文件进行合并,即L=0层级在进行文件选择时,可能会有多个文件参与压缩。
参照图4,当L=0时,本步骤的具体实现如下:
3a)查看所选定的SSTable文件的键值范围,并记为{N0,N1};
3b)加载Bigtable分布式文件***中的Manifest文件,依次读取Manifest文件的每条记录;
Bigtable使用Manifest文件记录各个SSTable文件的管理信息,包括文件所在层级、文件名、最小键值和最大键值。根据Manifest文件,读取所选层级的所有SSTable文件的键值范围;
3c)读取Manifest文件中所在层级为L的记录,并将SSTable文件的键值范围记为{M0,M1},如果N0≤M0≤N1或M0≤N0≤M1,说明两个SSTable文件在键值区间上存在重叠部分,将该SSTable文件加入待压缩集合。
步骤4.从第L+1层中找出所有与第L层中选定的SSTable文件在键值区间上有重叠的文件,并将找出的SSTable文件与第L层中选定的SSTable文件进行合并压缩。
参照图5,本步骤的具体实现如下:
4a)将第L层中选定的SSTable文件和第L+1层中找出的SSTable文件进行汇总,并分解成K个能够一次性装入内存的部分;
4b)依次将这K个部分读入内存,并利用内部排序算法对每一部分进行排序;
4c)采用多路归并排序法将排序后的K个初始有序部分进行归并:
参照图6,本步骤的具体实现如下:
4c1)依次遍历排序后的K个初始有序部分,对其中的所有记录按照关键字的字典序进行重新排序;
4c2)依次读取排序后的记录,判断某个关键字所对应的的记录是否需要保存:如果某个关键字同时在第L层和第L+1层中出现,则仅保留第L层中的记录;如果某个关键字被设置了删除标志,则将其删除,否则,保留该关键字所对应的记录;
4c3)根据上述判断标准,将没有保存价值的记录直接丢弃,否则将记录写入第L+1层中新生成的一个SSTable文件中;
4c4)将之前参与合并的第L层中选定的SSTable文件和第L+1层中找出的SSTable文件删除。
通过上述步骤4c1~4c3,使SSTable文件中的关键字通过梳理,形成了一系列新的L+1层SSTable文件,之前第L层中和第L+1层中参与压缩的文件已经没有意义了,故可全部删除,这样就完成了L层与L+1层文件记录的合并过程。
Claims (3)
1.一种基于Bigtable分布式存储***的数据压缩方法,包括如下步骤:
(1)Bigtable分布式存储***根据其实际运行情况,为每个层级的SSTable文件设置数量阈值;
(2)检测Bigtable分布式存储***中第L层的SSTable文件数量是否超过该层的数量阈值,若超过则执行步骤(3),否则,继续检测;
(3)采用轮流的方式从第L层中选择待压缩的SSTable文件:
当L>0时,从第L层中任意选择一个SSTable文件;
当L=0时,在选定一个SSTable文件之后,找出该层中所有与选定的SSTable文件在关键字区间上有重合的文件;
(4)从第L+1层中找出所有与第L层中选定的SSTable文件在键值区间上有重叠的文件,并将找出的SSTable文件与第L层中选定的SSTable文件进行如下合并压缩:
4a)将第L层中选定的SSTable文件和第L+1层中找出的SSTable文件进行汇总,并分解成K个能够一次性装入内存的部分;
4b)依次将这K个部分读入内存,并利用内部排序算法对每一部分进行排序;
4c)采用多路归并排序法将排序后的K个初始有序部分进行归并。
2.根据权利要求1所述的方法,其中所述步骤(3)中当L=0时,在选定一个SSTable文件之后,找出该层中所有与选定的SSTable文件在键值范围上有重叠的文件,其步骤如下:
3a)查看所选定的SSTable文件的键值范围,并记为_[N0,N1];
3b)加载Bigtable分布式文件***中的Manifest文件,依次读取Manifest文件的每条记录;
3c)读取Manifest文件中所在层级为L的记录,并将SSTable文件的键值范围记为[M0,M1],如果N0≤M0≤N1或M0≤N0≤M1,说明两个SSTable文件在键值区间上存在重叠部分,将该SSTable文件加入待压缩集合。
3.根据权利要求1所述的基于Bigtable分布式存储***的数据压缩方法,其中所述步骤4c)中采用多路归并排序法将排序后的K个初始有序部分进行归并,其步骤如下:
4c1)依次遍历排序后的K个初始有序部分,对其中的所有记录按照关键字的字典序进行重新排序;
4c2)依次读取排序后的记录,判断某个关键字所对应的的记录是否需要保存:如果某个关键字同时在第L层和第L+1层中出现,则仅保留第L层中的记录;如果某个关键字被设置了删除标志,则将其删除,否则,保留该关键字所对应的记录;
4c3)根据上述判断标准,将没有保存价值的记录直接丢弃,否则将记录写入第L+1层中新生成的一个SSTable文件中;
4c4)将之前参与合并的第L层中选定的SSTable文件和第L+1层中找出的SSTable文件删除。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410088278.9A CN103812877B (zh) | 2014-03-12 | 2014-03-12 | 基于Bigtable分布式存储***的数据压缩方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410088278.9A CN103812877B (zh) | 2014-03-12 | 2014-03-12 | 基于Bigtable分布式存储***的数据压缩方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103812877A CN103812877A (zh) | 2014-05-21 |
CN103812877B true CN103812877B (zh) | 2016-10-12 |
Family
ID=50709078
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410088278.9A Active CN103812877B (zh) | 2014-03-12 | 2014-03-12 | 基于Bigtable分布式存储***的数据压缩方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103812877B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104199892B (zh) * | 2014-08-26 | 2018-01-30 | 上海爱数信息技术股份有限公司 | 一种基于压缩合并异步更新的索引读写方法 |
CN106407224B (zh) | 2015-07-31 | 2019-09-13 | 华为技术有限公司 | 一种键值存储***中文件压实的方法和装置 |
CN108628542B (zh) * | 2017-03-22 | 2021-08-03 | 华为技术有限公司 | 一种文件合并方法及控制器 |
CN107247624B (zh) * | 2017-06-05 | 2020-10-13 | 安徽大学 | 一种面向Key-Value***的协同优化方法及*** |
CN110309138B (zh) * | 2018-03-01 | 2023-04-07 | 阿里巴巴集团控股有限公司 | 数据合并方法、基于fpga的合并器及数据库*** |
CN109271343B (zh) * | 2018-07-24 | 2020-12-15 | 华为技术有限公司 | 一种应用于键值存储***中的数据合并方法和装置 |
CN111949439B (zh) * | 2019-05-17 | 2023-08-01 | ***通信集团河南有限公司 | 基于数据库的数据文件更新方法和装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102129458A (zh) * | 2011-03-09 | 2011-07-20 | 胡劲松 | 关系型数据库的存储方法及装置 |
WO2013019913A1 (en) * | 2011-08-02 | 2013-02-07 | Jadhav Ajay | Cloud-based distributed persistence and cache data model |
CN103218365A (zh) * | 2012-01-20 | 2013-07-24 | 阿里巴巴集团控股有限公司 | 一种SSTable文件数据处理方法及其*** |
CN103268318A (zh) * | 2013-04-16 | 2013-08-28 | 华中科技大学 | 一种强一致性的分布式键值数据库***及其读写方法 |
-
2014
- 2014-03-12 CN CN201410088278.9A patent/CN103812877B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102129458A (zh) * | 2011-03-09 | 2011-07-20 | 胡劲松 | 关系型数据库的存储方法及装置 |
WO2013019913A1 (en) * | 2011-08-02 | 2013-02-07 | Jadhav Ajay | Cloud-based distributed persistence and cache data model |
CN103218365A (zh) * | 2012-01-20 | 2013-07-24 | 阿里巴巴集团控股有限公司 | 一种SSTable文件数据处理方法及其*** |
CN103268318A (zh) * | 2013-04-16 | 2013-08-28 | 华中科技大学 | 一种强一致性的分布式键值数据库***及其读写方法 |
Non-Patent Citations (2)
Title |
---|
一种基于HBase的高效空间关键字查询策略;张榆等;《小型微型计算机***》;20121031;第33卷(第10期);全文 * |
云计算:***实例与研究现状;陈康等;《软件学报》;20090531;第20卷(第5期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN103812877A (zh) | 2014-05-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103812877B (zh) | 基于Bigtable分布式存储***的数据压缩方法 | |
CN101706825B (zh) | 一种基于文件内容类型的重复数据删除方法 | |
Dittrich et al. | Data redundancy and duplicate detection in spatial join processing | |
CN105159915B (zh) | 可动态适应的lsm树合并方法及*** | |
CN103631940B (zh) | 一种应用于hbase数据库的数据写入方法及*** | |
CN102169491B (zh) | 一种多数据集中重复记录动态检测方法 | |
CN101963982A (zh) | 基于位置敏感哈希的删冗存储***元数据管理方法 | |
CN103198150B (zh) | 一种大数据索引方法及*** | |
CN103246549B (zh) | 一种数据转存的方法及*** | |
CN102567522B (zh) | 一种智能卡文件***的管理方法及设备 | |
CN101751475B (zh) | 号段记录压缩方法及其装置 | |
CN104239377A (zh) | 跨平台的数据检索方法及装置 | |
CN102253985B (zh) | 一种文件***数据的管理方法及*** | |
CN104142962A (zh) | 一种对电子地图的线要素进行处理的方法 | |
CN103631589B (zh) | 应用识别方法与装置 | |
CN102467525A (zh) | 单据关联方法及*** | |
CN102622302B (zh) | 碎片数据类型的识别方法 | |
US8190655B2 (en) | Method for reliable and efficient filesystem metadata conversion | |
CN104156420B (zh) | 事务日志的管理方法和装置 | |
CN102169499A (zh) | 一种话单剔重方法 | |
CN105786653A (zh) | 基于fat32文件***的文件恢复方法及其*** | |
CN108182209A (zh) | 一种数据索引方法、及设备 | |
CN104750743A (zh) | 一种交易文件勾对***和方法 | |
Hjaltason et al. | Improved bulk-loading algorithms for quadtrees | |
CN103500157A (zh) | 基于动态公式的表格填充装置和方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |