前几天有个朋友和我聊天时说,有些理论就是瞎忽悠,骗骗不懂行的人。最近他看到一篇文章,讲到“有界计算”实际上就是利用索引计算。我当时有点蒙圈,有界计算这个概念最近几年我还是从各种渠道听到过一些的,这个理论的基础是通过数据的业务属性来减小大数据访问成本的一种方法。是通过对数据的“理解”来更好地访问数据的一种新方案,怎么会和索引访问划等号呢?难道是我对“有界计算”的理解错了,被人给忽悠了?

打开网易新闻 查看更多图片

有界计算相关的论文不多,Querying Big Data by Accessing Small Data是介绍基础理论的。说实在的,我的数学底子一般,这篇长篇大论也只是大概看了一下,并没有逐字逐句去研究。大体上理论基础是对一个大数据集D的查询Q,可能存在访问约束集A,使得满足访问约束集A的访问条件的数据集D,存在存在 DQ ⊆ D,使得Q(DQ) = Q(D),并且识别 DQ 的时间以及 DQ 的大小 |DQ| 仅由 Q 和 A 决定。如果这个前提条件成立,则可以使用更为低成本的方式来处理数据。

说实在的,这篇论文看起来还是很晦涩的,我大概浏览了一下。大体了解了“有界计算”的思路,这个思路与我以前对有界计算的理解并无偏差。传统的SQL执行计划都是通过对数据的一些特性进行评估,选择最 优解的。如果数据确定了,执行路径也是确定的,执行结果也是确定的。有界计算也可以实现这种确定解,不过其扩展能力是获得近似解,这是传统关系型数据库模型不支持的,因此今天我们不展开到这个领域进行讨论。

仅从有界评估来讲,这是一种生成QUERY执行计划的新的算法,是根据数据特性中的有界性去寻找计算方法的最 优解的算法。说的通俗一点,就是在生成执行计划的时候,加入了数据业务特性中的有界条件(访问约束集A),从而获得一种更加贴近业务特性的数据处理方式,降低访问成本。

以前我们做复杂SQL优化的时候,经常问开发人员这个SQL的业务逻辑是什么样的,就是希望通过业务逻辑去寻找到更佳的执行路径,从而从根本上优化好这条SQL。数据库CBO优化器无法理解程序员对业务的理解,只能通过对数据的各种采样来判别表连接的顺序以及访问路径,这往往会发生偏差 。而如果加入访问约束集的因素,对于优化器找到更加精准的执行计划来说,肯定是有帮助的。

当然上面讨论的内容只是有界计算的一种场景,实际上有界计算理论发展起来,不仅仅可以用在执行路径的优化上,还可以覆盖到数据计算的方法上。

在传统的系统中想要实现有界计算确实存在很多技术难题,想要真正落地有界计算的算法存在很多技术要去解决。我觉得AI4DB为有界计算的真正落地提供了基础,随着这方面技术的发展,AI算法+访问约束集的组合将会取得更好的效果。

打开网易新闻 查看更多图片

《BEAS: Bounded Evaluation of SQL Queries》这篇论文则根据有界计算理论设计了一个原型系统,用于解决电信详单处理方面的一些SQL执行效率提升问题。这篇论文的技术实现上使用了PG数据库 ,利用PG数据库的Covering index和HINT在PG的执行计划中加入访问约束集中的有界计算特性,从而提升数据处理的效率。

打开网易新闻 查看更多图片

如果我们扩展SQL语法,可以设置约束条件menber_id对应的friend_id不超过5000个,这是某些业务的逻辑限制(上图内容来自于第一篇论文的第二作者Floris Geerts),那么优化器就可以依靠这个Constraint来生成更加合理的执行计划。目前Oracle 23ai的新功能“断语”就能实现类似的约束描述,只是目前Oracle仅用此来规范数据,不过这样的约束今后也可以被CBO优化器使用,用来对多表关联执行计划的优化。O记也已经从用户需求中发现了业务数据特性描述的重要性,数据库技术发展到一定程度,有界计算可能会成为共识性的东西。

利用类似O记“断语”这样的约束,CBO优化器也可以基于语义进行优化,但语义的利用成本非常高。有界评估是一种基于语义进行优化的方法,可以用比传统优化器低的成本来达到更好的效果。如果我们在数据模型定义时提供更多的语义描述来准确地描述业务,那么有界评估就可以基于此来进行。

当然大多数数据无法在模型定义时明确定义其界限,绝大多数数据的“界”是动态变化的,无法通过约束提前定义,因此我们需要通过算法来对数据进行成本可控并且有效的有界评估,这是有界计算中更具有挑战性的部分,未来也将是AI4DB发挥绝大作用的领域。

通过这几天对有界计算的研究,首先明确了,有界计算并非某些人眼中的“忽悠人”的东西,索引访问数据是有界计算最直观的案例,但绝不是有界计算的全部,有界计算是有其现实作用的;其次,有界计算目前仅处于理论层面,真正在数据库中落地尚需大量的工作,不知道是O记还是国产数据库中我们能最先看到;第三,基于有界评估的优化策略可能成为数据库领域解决复杂SQL优化问题的一种新的方案。