1. 前言
对于任何一种数据库类软件来说,无论其基于传统数据库模型还是基于分布式结构,作为核心的永远是数据本身。而数据的生命周期,则体现在CRUD操作(创建、查询、更新、删除)上。任何一条数据从其生成的时刻开始,数据价值随着时间的推移而逐渐降低,直至成为无用数据,最终删除。
作为使用数据的主体——用户,对于各种数据的需求程度是不同的,人们往往对重要的数据有更高效、稳定的访问需求;而对于不重要的数据则没有这么高的要求,而前者存储的代价往往是远高于后者的。用户在满足了自身对于数据使用要求的情况下,自然会开始考虑数据存储成本等方面的问题,对于那些很少访问甚至基本不访问的数据,使用成本更低的存储方式将是一种更好的选择。
针对这样的使用场景,我们将数据根据用户需求分为“热数据”与“冷数据”。顾名思义,“热数据”代表着用户对其有着更频繁的访问需求,“冷数据”则很少访问。一般数据在新创建的时候往往都是“热数据”,而随着时间的推移逐步变成“冷数据”。
2. 冷热数据与存算分离的结合
2.1. 老生常谈的存算分离
说起冷热数据存储,就不得不提到“存算分离”,两者之间有着非常多的交叉与相关性,存算分离是将存储节点与计算节点分开,以有限的计算力带动更多的存储资源,以实现更低的成本。
存算分离的概念近些年很火,然而其实早在十几年前存算分离就已经存在了, impala最早的版本就已经将数据存储在HDFS上,由impala远程加载到缓存中来进行计算,这是最典型的存算分离。然而多年来,为何存算分离还是被反复提出呢?最重要的原因,就是纯粹的存算分离有着巨大的缺陷:其牺牲了查询效率,并且在数据修改时非常麻烦,这对于一个追求查询效率的数据仓库来说是难以接受的,早期的impala推广不起来,这是很重要的一个因素。
存算分离绝对不是只实现一个读写HDFS文件的接口那么简单,需要投入更多的关注在数据管理策略上。
2.2. 基于存算分离模型的冷热数据存储
对于DORIS来说,早在第一个版本“百度PALO1.0”的时候就吸取了impala这方面的教训,数据存储不使用HDFS等远程存储,而使用的是本地磁盘,通过控制与调度本地存储,达到快速访问的目标,这也使得DORIS的基础查询速度可以达到一个令人满意的高度,也是DORIS自身的优势。正因为如此,为了最大限度地保留这一优势,同时又能获得存算分离低成本的优点,就需要引入冷热数据的概念。
对于热数据,其访问的频率很高,且往往是用户非常关心的数据,其实时性要求一般都很高,并且读写的频率也会更高,这正是DORIS本地存储重点解决的问题。
对于冷数据,其数据量往往远大于热数据,并且很少被访问,使用本地存储的代价就很高,这时使用存算分离模型,将其存储到代价更低的存储载体将大大降低成本。
3. DORIS****的冷热数据存储方案
3.1. 本地冷热数据存储(旧的冷热数据方案)
DORIS在实现冷热数据存储方面早已进行过尝试,最早的冷热数据存储使用的是本地冷热数据模型,其核心思路是:在集群中的BE节点上挂载多张硬盘,一部分是用于存储热数据的SSD盘,另一部分是存储冷数据的HDD盘。在CREATE TABLE时,用户根据自身需求,指定TABLE为热数据表,并指定其转为冷数据的时间。
如下图所示,当创建一个热数据表时,FE将会从挂载了SSD盘的BE节点(BE1,BE2,BE3)上随机选择多个来创建数据分片。当到达指定的冷却时间时,SSD盘上的数据将会复制到HDD盘,并更新其元数据信息。
本地数据存储的好处是,数据依旧是存储在本地,对数据查询效率影响较小。并且由于使用的是HDD盘,数据处理逻辑与SSD盘相同,所以在数据结构变更等操作时不需要另外再写一套处理逻辑。
坏处是,即使HDD盘的价格比SSD要低很多,但并没有质的变化,同时也存在扩容不方便、负载均衡麻烦等问题。并不能从根本上解决成本问题。
3.2. 基于存算分离的冷热数据模型
新的冷热数据方案是在整合了存算分离模型的基础上建立的,其核心思路是:DORIS本地存储作为热数据的载体,而外部集群(HDFS、S3等)作为冷数据的载体。数据在导入的过程中,先作为热数据存在,存储于BE节点的本地磁盘上。当数据需要转冷的时候,为该热数据分片创建一个冷数据的副本分片,然后将数据转储到冷数据指定的外部集群上,当冷数据副本生成完毕后,将热数据分片删除。
如下图所示,当数据变为冷数据后,BE本地将保留一个冷数据的元数据信息。当查询命中冷数据时,BE将通过这个元数据信息将冷数据缓存到本地使用。
对于冷数据,其使用的频率是很低的,这样可以做到使用有限的BE节点来管理更多的数据,成本将远远低于纯本地存储的方案。
4. 总结
本文介绍了DORIS实现冷热数据的整体方案,篇幅有限,冷热数据管理还有很多没有说到的方面。比如冷数据分片有新数据写入时如何处理、冷数据遇到表结构修改时如何处理,数据本地缓存的清理策略等。这些问题将在后续文章中逐步展开,请持续关注。
- 作者介绍 -
彭翔宇
百度 PALO 团队资深研发工程师,丰富的大数据工程研发经验,Apache Doris 冷热存储模块主要实现者,擅长 Doris 生态化组件研发。
Apache Doris 开源社区链接参考
Apache Doris****官方网站:
http://doris.apache.org
Apache Doris Github**:**
https://github.com/apache/incubator-doris
Apache Doris 开发者邮件组:
dev@doris.apache.org