AI 时代下,我们可以拥有怎样的数据库?
Hi,各位朋友们,我是 KaiwuDB 高级架构师赵衎衎。
KaiwuDB 始于万物互联时代下千万条数据洪流中,我们持续打磨构造了更加灵活兼容的分布式多模架构,实现了海量异构数据高性能、低成本的集中管理... ...这些底层特性都在为后续提供更多功能和业务拓展奠定关键基础,也是赋能客户的有效支撑。但仅仅只是这些,真的够么?我想答案肯定是:No🚫
许是因我长期深耕 DB 与 AI 的核心研究工作,AI 时代下,我们究竟需要怎样的数据库令我不禁深思。KaiwuDB 前进的步伐没有止于思考,我们引入原生 AI,通过 KaiwuDB 与 AI 的双向“奔赴”,期望可以真正帮助用户减负增效。那本期,我想就 KaiwuDB 的 AI 应用思路和具体实践与大家探讨交流。
01
首先和大家聊聊 KaiwuDB 在 AI for DB 及 DB for AI 的应用思路。
![](https://static001.geekbang.org/infoq/79/79651386ba075b53de4393cb2d8cb8ee.png)
👉AI for DB,其重点主要是利用 AI 实现数据库系统的自动化管理和运维。这里主要和大家分享一些比较常用的技术手段:
数据监控调优:我们通过对数据库行为数据的采集,生成数据库本身的负载画像,基于此画像来辅助完成数据库参数自调优以及数据库设计;
数据库参数自优化:数据库以及其涉及到的组件一般较为庞大复杂,单纯依靠 DBA 显然不堪重负,为了最大化发挥数据库在多样化工作负载和硬件环境下的自身性能,此时数据库系统需借助 AI 来实现自调优;
数据库设计优化:通常在执行一条 SQL 语句时,可能还会涉及到其他信息的输入,包括统计信息、索引设计、数据分区等,这些都会影响数据库的性能。我们借助 AI 手段处理索引、统计信息、数据分区模式等,实现全局数据库优化,保证我们尽可能准确得到最优查询计划,提高查询效率。
👉区别于 AI for DB,DB for AI 重点是利用原生或集成的 AI 能力来提升以数据库为数据基座的 AI 应用生产力。其重点研究内容主要包括:基于数据库架构如何完成数据处理、模型训练、模型持久化、模型推理、模型监控等 AI 工作流的增强。
02
基于数据库与 AI 融合的不同维度,接下来想重点谈谈 KaiwuDB 是如何完成与 AI 的融合探索实践。从两部分视角出发:Inside & Outside,介绍 KaiwuDB 构建的通用自治架构,及其实现的“四项自适应”。
在说明 KaiwuDB 是如何通过 AI for DB 的方式进行数据库优化前,我们首先将视角放大到数据库整体发展脉络,不难发现传统数据库系统面临由不完整/不准确统计信息、编译时优化限制、单一计划局限性、缺乏全局视角、缺乏计划生命周期管理等诸多问题导致的性能瓶颈。
为了有效解决上述问题,我们思考并尝试了诸多策略。根据优化的不同模块,我们将其划分为 Inside & Outside 两类方向。
![](https://static001.geekbang.org/infoq/c0/c079a1920c0c3fa4f197f03094265610.png)
✔️从 Inside 角度来看,数据库通过持续优化内核来对系统性能进行优化。以目前主流的两类优化器为例:1)对于 RBO(规则优化器),我们可对其进行更多的规则应用。如计算下推,当遇到特定过滤条件时,我们可将条件推送到存储层,减少返回给计算层的数据,从而降低开销并提升查询性能。2)对于 CBO(基于成本的优化器),我们可通过扩大搜索空间和使用更精确的成本估算方法来进一步改进。
✔️从 Outside 角度出发,我们可以不断优化数据库与应用。比如我们可以通过查询改写来提高优化器对 SQL 的识别和优化能力;通过优化数据库设计,例如索引和数据分区模式,以适应工作负载,实现查询最优化;通过及时收集统计信息,避免因信息缺失或陈旧导致无法选择最优查询计划的情况;通过调整数据库中的重要参数,最大化释放数据库性能。
在了解数据库整体优化发展脉络后,我们再将视角聚焦至 KaiwuDB 的 AI for DB 优化。通过融合 Inside & Outside 两个维度,KaiwuDB 实际构建了一个完善的通用自治架构,如下图所示:
![](https://static001.geekbang.org/infoq/01/0181417e88a3363e80de1339cafe83c6.png)
左侧 → 我们可以将其视为数据库优化过程,通过围绕 RBO 和 CBO 的规则和成本,洞察这两种优化策略来选择最佳执行计划。当到达 SQL 执行器阶段时,我们可通过相关参数对计划代价进行真实评估,这些数值又实时反馈进优化器中,对当前产生的最优执行计划进行调整,从而进一步优化查询计划,使其能够自适应并提升数据库性能。
右侧 → 在优化和 SQL 执行阶段,我们对用户进行详细数据采集,包括负载、编译、执行过程等行为数据,并将其存储在自治信息仓库中。基于这些信息,我们可构建工作负载画像,并在上层进行分析和高级自治功能应用,如索引推荐、智能统计信息、智能预计算等。这些功能可基于规则或 AI 策略来优化数据库并提升其性能。
✔️总而言之,在上述过程中,我们实现了“四项自适应”:
自适应优化:根据工作负载特性调整规则和成本模型;
自适应管理:根据工作负载特性调整数据库参数和调度后台任务;
自适应执行:根据负载实时反馈动态调整执行计划,提升复杂 AP 分析场景下的查询性能;
自适应监控:根据负载历史趋势调整监控信息和统计信息的收集频率和方式。
由于优化本身是一个动态过程,并非所有统计信息的收集都能使数据库性能达到最佳。例如,无论是索引构建还是统计信息收集,都会对系统产生较大开销。因此,在这个过程中需要动态平衡数据库性能及其资源消耗。
03
整体架构介绍完毕,接下来和大家分享 KaiwuDB 已实现的几项关键 AI 自治技术,主要包括智能生命周期管理、智能预计算及智能索引。
智能生命周期管理
以 IoT 场景数据为例,时序场景下的数据通常具有明显的冷热特性。新数据价值高,查询频繁,我们通过实时查询分析,在数据中台上展示相关大屏,让用户能够即时看到设备数据状态及相关场景数据。为提升查询性能,热数据存储在高效缓存中,但这也带来较高存储成本。
随着数据由热变冷,其价值和查询频率随之降低。此时,我们可以调整存储策略,以降低成本。通过在存储成本和查询性能之间寻找平衡,实现成本与性能的最优组合。在这一过程中,涉及数据压缩、降采样及存储策略置换。智能生命周期管理的重点在于如何选择适合不同数据类型的压缩算法,考虑压缩比和用户负载,构建自适应降采样周期以匹配当前工作负载。
智能预计算
以时序场景下海量数据的处理需求为切入点,我们需要一种机制来最大化提升查询性能,而预计算正是一个极佳选择。预计算机制通过对用户工作负载中频繁出现的聚合算子进行细粒度预先聚合计算,极大地降低了查询过程中的海量数据的聚合计算开销,从而提高了查询性能。然而,预计算并非万能良药,不当的预计算构建可能对查询性能产生负面影响,甚至导致性能下降。因此,用户在对工作负载认知不全的情况下,如何借助我们的预计算机制提升查询性能成为关键。
基于 KaiwuDB 自治架构,我们利用 AI 对预计算功能进行优化,实现自适应和智能化。其优化考量主要包括如何选择合适的预计算粒度、确定预计算过程中支持的聚合查询类型,以及如何管理预计算推荐的生命周期。通过预计算推荐功能,我们能够实现删除不适宜的预计算以节省存储成本,避免影响用户性能;对于合适的预计算,我们需要考虑以怎样的粒度和聚合查询推荐给用户,并提供适当的使用建议。
为实现上述预计算推荐,我们结合 AI 进一步分别预测在使用与不使用预计算情况下的代价,预计算的自适应和智能化可以为进一步为用户创建预计算时提供科学高效指导。此外,为方便用户使用预计算推荐功能,我们会将推荐结果以报告建议形式提供给用户,并为用户生成好 DDL 方便直接应用。用户可依据报告中创建的预计算,简化操作流程。基于上述完善的预计算推荐机制,我们帮助用户在不完全了解工作负载的情况下,有效利用预计算提升查询性能。
智能索引
智能索引同样很重要。我们基于资质信息仓库,标识出不健康的 SQL 语句,通常是就是指“慢 SQL”。对于这些语句,我们需要在索引推荐场景下,把他们标示为候选语句并做进一步分析,确定其是否是因为索引构建不合适而导致。
在该过程中,我们会用到强化学习思路,对已经分析得到确是因为索引不当产生的“慢 SQL”语句,进行候选索引的验证,包括候选索引巩固,最终会生成一个索引推荐结果。
![](https://static001.geekbang.org/infoq/65/653d7295693299527571821a7aaad223.png)
但是我们提供的不仅仅是一个简单的推荐结果,而是一份详细的影响力报告。这份报告会告诉用户,采用我们推荐的索引后,在当前工作负载下整体性能可以提升多少。用户可通过报告直观地看到索引的应用价值,如果认为值得应用,可直接使用我们提供的 DDL 语句实施。
此外,我们会监控已应用的索引和推荐索引的使用情况,这有点类似于智能生命周期管理。通过监控我们可以观察用户在应用索引后,其查询性能是否有实质性提升,以及提升的具体程度。
据此,我们可以生成性能总结报告,用户可以查看并分析索引的实际效果,判断是否合适。如果索引未达到预期效果,我们会在报告中发出警告,并将这些问题反馈到候选索引分析的 AI 算法中进一步优化。通过这种方式我们实现了一个推荐闭环,自适应地调整和优化数据库性能。
04
聊完 KaiwuDB 在 AI for DB 方面的探索实践,最后我们再来详细说说 KaiwuDB 在 DB for AI 方面做了哪些工作,用以提升基于 KaiwuDB 数据基座的 AI 应用生产力。
目前 AI 在企业使用中掀起层层浪潮,但实际使用中仍然存在诸多阻碍。究其根本原因,利用机器学习能力对企业而言门槛较高,需要专业的数据科学家来构建和持续监控模型,实现完整的模型生命周期管理,才能达成预定的数据治理目标。传统企业 IT 运维人员显然不具备上述能力。简而言之,当前机器学习的可消费性较差,入门门槛较高。
KaiwuDB 基于多模框架内置了 AI 预测分析引擎,实现人工智能模型实施全生命周期管理,包括数据预处理、模型训练、模型推理,以及监控模型服务能力等各个环节,以提升机器学习的可消费性,这也是我们构建库内 AI 预测分析引擎的初衷。
在构建过程中,我们反复思考如何高效构建 AI 预测分析引擎,同时考虑到机器学习开源生态的繁荣,若闭门造车,用户将面临较高的学习成本。因此,我们选择拥抱开源社区,集成主流机器学习算法框架如 Pytorch、Pandas、Tensorflow 等,使数据科学家能在熟悉的环境中进行 AI 应用开发,降低学习成本,提高开发效率。为让非专业人士也可利用机器学习能力,我们还基于 SQL 创建了一系列函数,使用户通过简单的 SQL 代码就能调用机器学习功能,包括数据预处理、模型训练、评估和推理等。
通过上述手段,我们为常见的人工智能算法提供了全方位的支持,确保其在各个阶段都能得到专业的优化和精细的管理。使用内置的 AI 预测分析引擎,用户可利用库中海量异构的数据进行知识挖掘,从而为决策提供有效辅助。
DB 与 AI 的实践依旧任重道远,但从长期来看探索新技术融合一定具备高价值性。除去技术本身,我想作为一名技术人员,我们的思维、心态也需要与时俱进,据此来更加灵活地对待技术变革,进而为用户、企业、社区提供更高势能。
评论