VLDB'20-(阿里云向量型OLAP支持)AnalyticDB

2023-02-18  本文已影响0人  Caucher

标题:面向结构化和非结构化数据混合查询的分析引擎

编者的总结

  1. 本文设计了一套标量向量综合查询的完整解决方案,从存储到查询,包括索引和查询优化技术。文章质量很高。
  2. 改进了PQ的索引方式,做的粒度更细了。
  3. 归纳了4种混合查询的执行:暴搜、筛选后暴搜量化码、筛选后PQ搜索、PQ搜索后再筛选,做了一定的代价分析。

编者的思考

  1. VGPQ似乎将PQ和上层的索引彻底分开来看待了,仅把PQ当做一个能做近似距离计算的压缩技术来使用。但实际上PQ也是用k-means来做的,所以索引结构VGPQ本身可以利用PQ的Centroids,不需要自己额外去做k-means。这样最终就不需要存储那么多PQ code了。【不知道是否自己理解有误,欢迎大佬指正】
  2. 若离query距离较近的点不满足筛选条件,本文提出的第三种和第四种物理执行计划都会有些问题,如何通过代价评估避免尚不清楚。
  3. 超参选择中的accuracy-aware没有讲的很清楚,什么样的参数组合能满足accuracy的条件,这个条件具体怎么来定的不太清楚。实际查询时候是平滑地,根据query来定的超参选择空间,还是默认几套固定参数来选。如何去做智能参数调控是一个非常有意义的问题。
  4. 实验方面,不清楚是否是首先做了k-means partition然后测定的,正如文中所说,通过将向量k-means partition在实践中并不常用。

1. INTRODUCTION

image.png

2. SQL dialects

在传统数仓中引入向量数据,首先是设计SQL接口。这一部分其实非常自然,包括增删改查。下图放了一个查询的推荐式SQL。


image.png

3. SYSTEM DESIGN

3.1 Architecture overview

image.png

4. VECTOR PROCESSING ALGORITHMS

从内存消耗方面考虑,批量数据的索引选择是一个改良版PQ。
PQ方面的介绍可以参考我这篇博客https://www.jianshu.com/p/533ac746748b

4.2 Voronoi graph product quantization

5. HYBRID QUERY OPTIMIZATION

本节讲向量和标量向量混合查询时的查询优化问题。示例query如下。


image.png
  1. 第一种直接走标量的B-tree索引,选出所有标量满足条件的tuple,算距离,取topK。这种方法小批量数据还可以,而且能给出精确结果;但满足条件的数据量一旦变大,用于取数的I/O量将会变得非常多,则延迟极大。
  2. 第二种是在scan node内部,首先走标量的B-tree索引,对于每个满足条件的tuple,用双向对应表取出PQ码,计算近似距离,然后取出比\sigma*k个tuple,返回给上层做具体的距离计算和排序。
    • 相比于第一种是把距离计算改成了PQ码的计算,适合数据量稍大的情况。
  3. 第三种也是首先通过标量过滤,但是直接进入VGPQ的搜索,只不过在取PQ code的时候验证一下是否有标记,满足条件的再取。
    • 由于使用了索引,这种方法的速度将明显提升,但潜在的问题在于,如果库里和query较近的数据点都不满足筛选条件,满足筛选条件都较远时就比较麻烦,会逐步退化为第二种计划。
  4. 第四种最为激进,首先通过VGPQ做了“过度”的kNN,然后进行属性筛选。
    • 由于首先使用了索引,所以无需生成bitmap,后续操作的数据量基数也大大减少,速度是最快的。
    • 不过和第三种有相似的问题,面临的后果也比第三种更严重。第三种尚可以不断向远处搜索满足候选集基数,第四种则无法弥补。


      image.png

5.2 Cost model for optimization

作者根据上述四种方案,设计了代价模型,如下图。


image.png

模型很简单,但关键是在查询时要确定模型中的参数,主要是下面3个。

5.3 Accuracy-aware hyperparameter tuning

6. EXPERIMENTS

6.2 VGPQ

6.4 Hybrid query optimization

从图中看出在任何精度限制下,ADBV的参数选择都是不错的,而且CBO确实可以定位到最快的物理计划;


image.png

6.6 Scalability and mixed read & write

上一篇下一篇

猜你喜欢

热点阅读