论文部分内容阅读
海量数据时代对数据存储提出更高要求,基于LSM树架构的NoSQL应运而生,如Bigtable、Apache HBase和Apache Cassandra等。它们拥有良好的性能、扩展性和灵活性,已经被广泛的使用。基于LSM树的存储系统把对索引和数据的变更进行延迟和批量处理,定期将内存数据直接刷写到磁盘形成文件,通过合并文件,减少文件数量,进而减少每次查询涉及到的文件数量,提高查询效率,这就是合并,合并既可以优化查询,又可以真正删除数据。但是,合并会占用CPU、磁盘I/O和网络等资源,影响系统的整体性能,而不当的或不及时的合并又会造成查询时涉及过多文件而降低查询性能。 针对合并的问题,几种合并算法相继出现,如Native Compact、LeveledCompact和Stripe Compact,但是它们并不能很好的解决优化查询和减少不必要的合并等问题。本文在深入研究LSM树架构的基础上,分析总结现有合并算法,结合实际应用的需求,提出了一种可动态适应的合并算法——Tree Compact,算法使用树形结构来组织数据文件,树形结构动态适应数据的分布变化,减小合并范围以避免不必要的合并,优化查询性能。 将文件组织成节点,节点进而组成了树形结构,节点内部可以进行合并,数据在节点间也可以流动,文件会被合并然后下推到子节点中,同时为了保持树形结构的平衡状态,使其既不会太宽也不会太高,树形结构可以随着数据分布的变化动态调整形状,操作包括节点的创建、删除、分裂和合并,并通过合适的合并策略定义这些操作的执行顺序,从而达到优化系统资源消耗和查询效率的效果。 以Tree Compact算法作为理论基础,我们在Apache HBase上实现了相应的存储引擎,通过实验证明,在多种实验数据下,Tree Compact算法都可以在提供更好查询性能的同时,减少对磁盘I/O等系统资源的消耗。 如何评价合并算法的优劣?目前还没有一个可以评测合并算法的模型,本文结合现有的系统和应用场景,基于合并影响的因子:查询性能和系统资源,提出了一个合并算法评测模型。在不同的应用场景下、不同的数据下,全面的对NativeCompact、Leveled Compact、Stripe Compact以及本文提出的Tree Compact进行了评测,基本符合人们对各种合并算法的评价,同时Tree Compact算法在评测中展现了比较大的优势。