Jeff Dean出品:用机器学习索引替代B-Trees,3倍性能提高,10-100倍

本文由 【AI前线】原创,原文连接:http://t.cn/RTVTqN2html

译者 | 马卓奇web

编辑 | Emily算法

AI前线导读:数据库索引结构其实也是模型,例如 B-tree索引、哈希映射以及 BitMap索引。从这一点出发,本论文证实了目前的索引模型都可以用其它可学习的模型来替代。初步实验结果显示,与基于缓存优化的 B-tree结构相比,使用神经网络在速度上能够提升 70%,而且大大节省了内存。“机器学习模型有可能比目前最早进的数据库索引有更显著的好处”。

若是这项研究有更多的成果,或许未来咱们回顾的时候会说,索引领域首先受到了冲击,逐渐地,其余数据库组件(排序算法、查询优化、链接)都将被神经网络(NN)取代。

不管如何,这是一个颇有前途的研究方向,而这篇论文确实发人深省。

数据库

研究动机缓存

数据库最开始是统一的,一刀切的“黑箱”问题。随着时间的推移,这一观点细化到了“标准尺寸”的 OLAP数据库和 OLTP数据库。微信

数据库使用索引来快速访问数据。B-tree和哈希映射是经常使用的实现索引的技术。但从“黑箱”的观点来看,数据库处理将数据视为不透明的,盲目地使用这些索引方法,而不对数据作任何假设。然而,很明显的一点是,不清楚数据分布会使算法不能发挥它最大的做用。考虑一下这样的实验:若是关键字从 0到 500M,那么直接用关键字进行索引要比用哈希要快。若是咱们知道数据的累积分布函数(cumulative distributed function,CDF),这种观察能够扩展到其余的数据分布。咱们能够归纳成“ * CDF 关键字 * 记录大小”能够获得关键字指向的记录的大体位置。网络

那么,经过了解数据分布,咱们能够得到性能提高。可是当咱们把这个问题视做全“白盒”问题时,会失去可重用性。咱们不能全“白盒”,由于每次都从头检查数据、设计索引的代价太大了。框架

这篇文章研究代表,利用神经网络来学习数据的分布,咱们能够有一个“灰盒”的方法来进行索引的设计,而且经过将索引设计为数据感知的,能够得到性能优点。机器学习

目前较为主流的索引结构能够根据各类访问模式的不一样需求分为以下三类:函数

  • B-tree,用以处理范围查询
  • 哈希映射,用于点查找查询
  • 布隆过滤器,用于包含集合的查找

咱们主要关注用可学习结构替代 B-tree结构的部分。对于哈希映射,学习到的结构是基于数据累积分布函数的直接函数。


B-tree

B-tree提供了一种层级结构的有效索引方法。

为何能够用神经网络模型来代替 B-tree呢?从概念上讲,B-tree自己就是一个模型,相似机器学习中的回归树模型:它能够将查找键映射到页面中的位置,而且最小偏差为 0,最大偏差为页面尺寸,并且若是该键存在,则保证它必定能被定位。所以,咱们能够用其余机器学习模型,包括深度学习模型来替代这种索引,只要它们能提供一样的最小和最大偏差的保证。

下一步,如何用其它机器学习模型提供一样的偏差保证?咱们惟一须要作的就是为每一个键执行模型,并记住一个位置的最坏预测。给定一个键,该模型对数据的位置进行预测;若是该键存在,则保证它位于由最小和最大偏差定义的预测范围内。咱们用已有的数据来训练模型。所以,咱们可以用任何其余类型的回归模型取代 B-tree,包括线性回归和神经网络。

咱们用学习到的模型来替代 B-tree能得到以下好处:

  • 更小的索引:更少的内存或 L1缓存
  • 更快的查找:由于索引较小,提高了查找速度

更多的并行性(TPU),若是是 B-tree则是层次性。

这里的关键思想是以提升计算为代价减小内存,寄但愿于计算成本愈来愈低的市场趋势(若是你能在 TPU或 GPU上使用它,你会获得更多的好处)


主要算法

为了克服上述挑战,并探索可学习模型做为索引结构的替代或改进的潜力,做者提出了可学习索引框架(Learning Index Framework,LIF)、递归模型索引(Recursive-Model Indexes,RMI),以及基于标准偏差的搜索策略。做者主要关注简单、全链接的神经网络,仅仅是由于它们的简单性,但许多其余类型的模型也是能够考虑的。

可学习索引框架(Learning Index Framework, LIF)

LIF能够看做是一个索引合成系统,给定一个索引规范,LIF能够生成不一样的索引配置,优化它们,并自动测试它们。给定一个训练好的 Tensorflow模型,LIF从模型中自动提取全部的权重,而且基于模型规范在 C++中生成有效的索引结构。实验证实,运行简单模型的时间只需 30纳秒。

递归模型索引(Recursive-Model Indexes,RMI)

用单一模型来下降最小最大偏差是十分困难的,可是仅用简单模型来代替 B-tree的前两层,来获得一样的预测精度提高倒是十分容易作到的。相似的,若是模型能够只关注子数据集,那么下降偏差也就更简单了。

基于以上观察,做者提出了递归回归模型(以下图)。

做者创建了模型的层次结构。在每一层,模型将查询键做为输入,并基于它选择下一阶模型,直到最后一阶模型预测出位置。每一个模型对键的位置进行了必定的预测,并利用预测结果来选择下一个模型,该模型负责键空间的某个区域,而且以较低的偏差进行更好的预测。

该模型有如下几个优势:

(1)它利用了数据分布的总体形状具备很容易学习的特色。

(2)该结构有效地将空间划分红更小的子范围,相似 B-tree或决策树,可以在更少的操做次数内达到所要求的“最后一步”的准确度。

(3)在各阶段之间不须要搜索过程。

混合索引

该递归模型索引的另一个优势是能够构造混合模型。例如,在模型顶层,一个简单的 ReLU神经元或许是最好的选择,由于它一般可以学习各类复杂的数据分布,而底层的模型能够是大量的简单线性回归模型,由于它们在空间和执行时间上消耗都很低。

注意,混合索引能够将可学习索引结构在最坏状况下的性能保留在 B-tree水平。也就是说,当数据分布很难学习获得时,全部的模型都会自动替换成 B-tree,让它几乎成为一个完整的 B-tree。

搜索策略

论文提出了几个搜索策略:

(1)模型二进制搜索:默认搜索策略,传统的二进制搜索不一样之处仅在于第一个中间点被设置为模型所预测的值。

(2)偏置搜索:这种搜索策略是默认搜索策略的改进,经过在每次迭代中不均匀地从中间到左右位置进行范围分割。

(3)偏置四进制搜索:最后,咱们开发了一种新的搜索策略,在每次迭代中并非选择一个新的中间点进行测试,而是三个新的数据点,即四进制搜索。

字符串索引

论文主要关注索引实值键,可是许多数据库依靠字符串索引,但幸运的是,大量机器学习研究都在关注字符串建模。

将字符串转化为可输入模型的特征向量须要进行词条化操做。因为大多数机器学习模型在输入尺寸相同的条件下表现更好,做者设置了最大输入长度 N。做者使用了一个相对较小的前馈神经网络的层次结构。与以前的模型不一样之处在于输入为一个向量,而不是实值。

根据字符串的累计分布函数(CDF)设计出通用的机器学习模型是十分困难的,将来的大量研究工做能够围绕优化字符串索引的可学习模型展开。


实验结果

为了对比可学习的索引和 B-tree索引,做者建立了 4个二级索引,3个真实世界数据库,(1) Weblogs,(2)Maps,(3)web-documents,和一个合成的数据库,(4)Lognormal。

数值索引数据库

Weblogs数据库,可学习索引结构与 B-tree索引对比结果:

Maps数据库,可学习索引结构与 B-tree索引对比结果:

Lognormal合成数据库,可学习索引结构与 B-tree索引对比结果:

做者主要对比了总查询时间和局部搜索时间,以及索引结构大小、节省空间、模型偏差以及偏差方差。从实验结果中能够看出,几乎全部的配置状况下,可学习索引结构的表现都领先于 B-tree,速度上快了 3倍,尺寸上小了一个数量级。

字符串索引数据库

web-documents,基于字符串的索引数据库,可学习索引结构与 B-tree索引对比结果:

从实验结果中能够看出,对于字符串索引,可学习索引结构的优点并非很突出。做者分析认为运行模型的计算量太大,这个问题能够用 GPU或 TPU解决。

学习获得的字符串索引在不一样搜索策略下的对比结果:


将来研究挑战

插入和更新

(1)模型泛化性和“最后一步”准确度的折衷。模型的“最后一步”预测越准确,模型就会越容易过拟合,而且很难泛化到新的数据条目上。

(2)若是数据分布发生变化怎么办?可学习索引是否能够检测到数据变化?是否能够像 B-tree同样能够一直保证搜索和插入操做的复杂度为 O(logn)?

做者认为处理插入的另外一种更简单的方法是构建 delta索引:全部的插入都放在缓冲区中,而且不时地合并到模型的再训练中。这种方法已经被大量使用,而且能够获得 GPU或 TPU的硬件加速支持。除此以外,也能够经过使用之前的解决方案做为出发点,热启动每一个模型的训练。特别是依赖于梯度降低优化的模型能够从这种优化方法中获益。

分页

对于存储在磁盘上的数据索引而言,将数据分割成存储在磁盘中不一样区域的较大页面是很常见的。这种状况下,学习数据的 CDF分布再也不知足建模要求。

做者认为有如下几种替代方法:

(1)利用 RMI结构,最小化模型覆盖区域的重叠部分。

(2)使用翻译表。

(3)用更复杂的模型学习页面的实际指针。

更多算法细节,请参考原论文:

https://arxiv.org/abs/1712.01208

查看英文原文:

http://muratbuffalo.blogspot.com/2017/12/paper-summary-case-for-learned-index.html

关注咱们的微信号"AI前线",后台回复“AI”可得到《AI前线》系列PDF电子书

相关文章
相关标签/搜索