华为 PB 级时序数据库 Gauss DB,助力海量数据处理
近年来,时序数据的应用更为广泛,包括物联网、金融领域、监控领域、医学领域、农业生产领域等各方面,都在大量使用时序数据,通过数据来研究对象的趋势性、规律性、异常性;并且在 5G 与人工智能的浪潮下,时序数据作为大数据、机器学习、实时预测的基础数据,作用更加显著。因此,对时序数据的研究与应用应当更为深入。
近 5 年来,时序数据库发展十分迅猛,各大互联网企业包括 Google、阿里、Amazon 都推出自己的时序数据。
图 1 DB-Engines 统计不同类别数据库关注度趋势
图 1 为 DB-Engines 统计从2018年1月到2019 年 12 月截至 24 月各类数据库的关注度趋势,可以看到时序数据库关注度同比 2017 年 12 月上涨 77.3%,相比第二名的图形数据库上涨近两倍。图 2 为 DB-Engines 统计从2013年12月到2019 年 12 月截至 6年来业内流行的时序数据库的关注度和使用度排名。
图 2 DB-Engines 统计时序数据库关注度趋势
从图中可以看到,从 2015 年开始,各种时序数据库如雨后春笋般涌现。
GaussDB(for Influx)时序数据库依靠华为在数据存储领域多年的实践经验,整合华为云的计算、存储、服务保障和安全等方面的能力,在架构、性能和数据压缩等方面进行了突破性的技术创新,达到了较好的效果,对内支撑了华为云基础设施服务,对外以服务的形式开放,帮助上云企业解决相关业务问题。
GaussDB(for Influx) 具有支持亿级时间线、极致写入性能、低存储成本、高性能多维聚合查询和极致弹性扩缩容等5大特性。以下为特性的大致介绍:
1、支持亿级时间线
由于在时序数据库系统中,无时无刻存在大量并发查询和写入操作,因此合理控制内存的使用量就显得十分重要。而GaussDB(for Influx)便在这一问题上做了进一步优化:
l 在内存分配与回收上,使用内存池复用技术降低内存碎片,并实现算法动态调整GC频率,加快内存回收。
l 在单查询上,实行Quota控制,避免单查询耗尽内存。
l 在缓存中,针对不同节点规格提供不同最优配置。
2、极致写入性能
GaussDB(for Influx)支持每天万亿条数据写入,在工程实现上有以下优化:
l 利用所有节点并行写入,充分发挥集群优势。
l Shard节点采用针对场景优化的LSM-Tree布局
l 在大规模写入场景下,GaussDB(for Influx)的写入性能线性扩展度大于80%。
3、低存储成本
GaussDB(for Influx)对数据采用列式存储,相同类型的数据被集中存储,更有利于数据压缩。采用自研的时序数据自适应压缩算法,在压缩前对数据进行抽样分析,根据数据量、数据分布以及数据类型选择最合适的数据压缩算法。同时提供了时序数据的分级存储,支持用户自定义冷热数据,实现数据的冷热分离。热数据相对数据量小,访问频繁,被存储在性能更好、成本较高的存储介质上;冷数据相对数据量大,访问概率低,保存时间较久,被存储在成本较低的存储介质上,进而达到节约存储成本的目的。
4、高性能多维聚合查询
在提升聚合查询整体性能方面,GaussDB(for Influx)做了如下优化:
l 采用MPP架构:一条查询语句可以在多节点及多核并发执行。
l 向量化查询引擎:在查询结果数据量很大时,GaussDB(for Influx)内部实现了向量化查询引擎,每次迭代批量返回数据,大大减少了额外开销。
l 增量聚合引擎:基于滑动窗口的聚合查询,大部分从聚合结果缓存中直接命中,仅需要聚合增量数据部分即可。
l 多维倒排索引:支持多维多条件组合查询,加快数据查询中过滤无关数据。
5、极致弹性扩缩容
在时序数据库的运行过程中,随着业务量的增加,常常需要对数据库进行在线扩容,以满足业务的要求。
l 传统数据库中的数据存储在本地,扩容后往往需要迁移数据。当数据量达到一定规模时,数据迁移所耗费的时间往往按天计算,给运维带来了很大的困难。
l GaussDB(for Influx)相比于传统的数据库,最大的特点就是将计算与存储分离,能够轻松实现分钟级扩容。
此外,在能源、制造、IOT、互联网等行业的监控统计及分析的应用场景中,时序洞察提供了针对时序数据的可视化功能。在监控领域,我们常看到能实时反映整个系统运行情况的绚丽监控大屏,这便是数据库的监控看板功能,可以高效地运用监控数据辅助定位故障、性能调优、容量规划;可以查看各产品的监控数据走势及对比;跨产品展示关键指标的实时数据、历史数据和整体走势。业务人员可以根据该信息对业务进行及时调整。
通过对时序数据库的发展分析,时序数据库的发展空间巨大,但也存在很多问题,GaussDB(for Influx)针对其存在的问题,都进行了针对性的创新与发展,可以说GaussDB(for Influx)为时序数据库的发展提供了巨大推动力。