开发者学堂课程【第八届大学生创新创业大赛阿里命题数据库命题解析:结合 AnalyticDB 特性实现结构化和非结构化数据的联合分析赛题分析】学习笔记,与课程紧密连接,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/1045/detail/15274
结合 AnalyticDB 特性实现结构化和非结构化数据的联合分析赛题分析
内容介绍:
一、云原生数据仓库 AnalyticDB 特性
二、命题的介绍与开发模式
三、优化方式
四、主要挑战
此次课将会从云原生数据仓库AnalyticDB特性、开发模式与开发环境、常见的优化方式以及挑战这四个方面对这个赛区进行解析。
一、云原生数据仓库 AnalyticDB 特性介绍
AnalyticDB 特性是阿里云融合数据库、大数据技术于一体的云原生企业级数据仓库平台。根据针对的数据数据库的生态不同,我们拥有MySQL、PostgreSQL版两个产品,首先是云原生数据仓库AnalyticDB MySQL版,它拥有资源弹性、高性能、低成本和高可用的产品优势,
并且能够做到分时弹性、冷热数据分层、资源组隔离以及快速一键建仓的能力。
对于云原生数据仓库 AnalyticDB PostgreSQL 版,它是TB到TB级数据分析优选数据库,能够做到 TB 到 PB 级数据的秒级分析,拥有全量云原生能力,拥有企业级产品力的高可用能力,数据多模分析能力,能够对接多种数据源,构建实时数仓,支持商业智能搭建,并且能够支持分布式事物,实现HTAP混合负载。
后面我会针对数据多模分析能力中向量分析能力进行进一步展开介绍。同时,我们的云原生架构 seven 类似版本实例正式发布,拥有存算分离架构、秒级扩收容、按需存储,数据共享,在成本优化的同时依旧性能强劲。
介绍完两个产品的特点和功能,下面针对向量分析能力进行进一步的介绍,这也是为本课题的解析做铺垫。向量是具有一定大小和方向的数据的集合,它通常是通过AI算法从非结构化数据中提取特征而形成,可以用于描述非结构化数据特征。那向量之间的距离是衡量非结构化数据在AI算法所敏感的维度中的相似度。通常距离有汉明距离、欧式距离,余弦距离,向量查询就是在大量的向量数据中找到与指定的向量距离最近的几个向量记录,而结构化和非结构化数据融合查询,就是在结构化条件筛选条件存在的同时,找到非结构化数据相似度最高的几个
那么下图中就表示,通过AI算法将各种非结构化数据提取成向量数据,与结构化数据共同存储到数据仓库中,不仅可以利用其中高效的向量索引和融合查询的优化算法进行数据分析,同时也可以借助数据库高可用分布式计算SQL语法兼容事物管理的一些能力做到高可用高易用。
二、命题的介绍与开发模式
命题是结构化和非结构化数据的联合分析,那么背景就是说,在文本和音视频这样的非结构化数据数据量指数性增长的同时,我们对这些非结构化数据检索和分析的需求日益增长。通常会使用AI算法提取非结构化数据特征变成向量数据,那么我们的命题内容就是设计一个向量检索引擎,支持向量和结构化数据的实时导入、删除、更新和检索能力,其中检索能力,包括向量检索能力以及带结构化条件的向量检索能力。比如,满足一定时间范围内的与特定向量距离最近的几条记录,就是结构化条件与非结构化条件同时存在的检索能力。
举个例子,对于摄像头捕获的一批车辆数据,可以提取出时间、地点这样的结构化信息,也能提取出就是车辆特征这样的非结构化信息,而仅仅通过几个数据维度做分析只能得到比较笼统的信息,比如,结构化数据只能得到车辆流量、车辆通图量这样的信息,仅仅通过年龄过非结构化数据,只能知道这些数据中比较类似的车辆有哪些,那么我们的分析通常是需求横跨多个的数据维度,而这些数据维度横跨了结构化信息和非结构化信息的时候,那么这这就是结构化与非结构化数据联合分析。这个时候结构化数据的条件的存在,就会对非结构化数据的分析产生挑战。
举个例子,就是在某个地区某时间段的图片内,通过车辆特征找到这些图片中的类似的车辆,这就是结合时间,摄像头ID和我们的非结构化数据,通过图像特征来结构检索最相近的,这就是非结构化的数据分析,结构化与非结构化数据的联合分析是我们本次的命题。
那接下来说明课题的开放模式,为了准降低准入门槛,也更加聚焦于专注解决核心问题,把问题简化了,会提供一个实际的数据集,每行数据包含数据ID、时间、摄像头ID和车辆信息,车辆信息是128维的float数据,对向量引擎的要求是提供四个接口,分别是数据导入、数据删除、数据更新和数据检索,给到的参数列表可以作为参考,大家尽量按照这样的结构设计这个接口,其中数据更新不做硬性要求。那么对于数据检索而言,固定检索相近的100条数据,也就是说,其中的参数返回数据行数固定是100条,如果检索条件筛选后不足100条,那就按实际的数据输出。检索条件将会涉及起止时间、摄像头ID、向量查询,其中的时间起止和摄像头ID的列表可能为空,也就是没有这个条件限制,但一定包含向量查询,也就是说可能为纯向量查询,也可能带一个或数个的结构化条件筛选的向量查询,即融合查询。
考核点分别是数据总导入时间、导入数据后的查询正确率和查询耗时、删除指定数据时的时间,删除数据库的查询正确率和查询耗时,更新功能不做硬性要求,同样也会关注到,如果支持的话,更新的时间,更新后的查询正确率和查询时间特别要注意到上面各个阶段平均查询正确率必须至少达到95%。简单来说就是,如果满足要求的数据超过100个,那么,实际最接近的100条数据中必须有95条包含在输出结果中,如果结果少于100个,那么就按实际输出的数据量为准来进行评估。
这里限制了机器的资源作为平衡,为公平各个资源的一个限制,操作系统是指定为ubuntu 和 centos,硬件系统是2core 4GB内存虚拟机,软件环境参考列举的情况。
三、常见的优化方法
列举了三个比较常见的优化方法,首先是常规优化方案,比如说SMD、并行计算,数据预取、数据分区、数据排序等等,这些方法对于机构化数据同样有效,相对来说比较常见和常用。后面两种方法主要针对向量查询的场景,分别是计算量优化和基于数据分布的优化。
计算量优化,主要是通过对高维的向量数据进行降维量化,特征提取这些方法以损失计算精度的代价达到大幅度降低向量计算量的优化方案。这边列举了标量量化、矢量量化、成绩量化,还有是PCA特征提取这几个比较常见的方案。标量量化就是常说的降低精度,原来量化这个词是出自于数字信号处理领域,是将模电信号转化成数电信号,这里是将高精度的数值类型降低为低精度的数值类型进行计算,那么会降低计算的精度但是会减少计算量,矢量量化也是类似,它是将矢量空间分为若干个小区域,每个小区域寻找一个代表矢量,代表这这个区域中所有的其他矢量,矢量量化也有个演化算法,就是乘积量化,它是通过高维度向量空间分解为若干个低维度空间的笛卡尔积,对低维度的向量空间做矢量量化。特征提取主要是专注将向量数据中较为突出的特征进行提取,从而达到降低数据维度的效果,PC特征提取就是通过一个正焦化信息变化将数据变换到一个新的坐标系中,使这些数据的主成分依次位于前面几个维度,可以保留前面的主成分,截去尾部这些重要重要程度没那么高,或者说是噪音的部分,做到降维的效果,这一页主要介绍的是降低数据的维度或者精度来减少我们的计算量、提高分析能力的方案,也能很直观的感受到会降低查询的准确度即精度。
数据分布的优化,主要是通过对已有数据进行数据分布的学习,并且把这些分布信息记录下来,在为这些向量进行分析的时候就能利用这些信息做一些加速查询我这边列举了树状索引、图索引和聚簇特征这三个点。树状索引,类似比较常见的btree索引,对向量而言,它就是将我们感兴趣的向量空间进行多次切分,做到相近的数据都在同一个区块中,那查询的时候就可以快速获取对应区块和相邻区块数据,筛除掉大量的无关数据,代表算法有KD-tree。图索引通常是采用近邻图,将已有的向量彼此连结在一起,在查询时可以按图索骥快速定位到哪些是我们感兴趣的数据,也可以筛选掉大量的无关数据,代表的算法有NSW、HNSW等。数据聚簇特性是利用数据的聚簇特征,通过聚簇算法把数据划分为各个聚簇,同样可以帮助到快速查询到相关聚簇的数据或者周围聚簇的数据,上文提到的矢量量化就是通过数据聚簇特征来完成的。当然这里的介绍只是点到为止,可以积极发散思维,开拓创新,碰撞出更加优秀的向量检索算法。
四、主要挑战
首先是数据分布特征未知,这个是针对向量查询的,作为一个通用的数据分析系统,我们无法预估数据的分布特征,仅仅能够通过导入数据或者正在导入中的数据做分析,学习获取数据的分布特征,才能反馈给查询做加速分析。所以要求向量检索的算法是动态能够学习的,而不是僵硬的规则和仅仅针对某个数据的特征所产生的算法。但是同样可以预期数据拥普遍拥有一些分布并不均匀,数据拥有一定的聚簇特征,数据彼此之间并不完全等距这样的向量数据集普遍拥有的特性。那么下图就举了个例,以 KD-tree 为例,如果说针对数据集a训练的KD-tree的分割方案完全迁移到数据集B中,可以看到效果急剧劣化,多个聚簇核心会导致计算度大幅度下降或它的计算量会大幅度上升,那这样的话会导致计算准确度大幅度下降或者它的计算量会大幅上升。
那最后介绍一下联合查询所带来的挑战,联合查询就是在结构化条件存在的同时,对非结构化数据进行分析,在仅仅做向量查询的时候,可以完全利用我们分析得到的数据分布特征来进行数据分析,但是一旦引入结构化数据筛选条件,原来很多对当前这个向量来说很感兴趣这些数据比较相近的这些向量数据被结构化的数据筛选条件筛选掉了,那么就需要对这种场景做特殊的处理。这边简单列举了两个比较直观的思路和其中对应的挑战,最直观是如果说通过向量只找到了一部分数据,数据量被大量筛选掉的话,可以扩大向量的查询搜索范围,就可以拿到更多的数据,扩大搜索范围就会扩大计算量,而且这个扩大是各个维度等比扩大、扩展,在高维度数据下扩展的搜索范围是按维度几何扩大,所以要控制好这个扩大的量。第二个思路是在收集向量分析信息的同时也考虑到结构化数据的数据分析状态,这个挑战就在于如何协调这两个异类数据在存储或者查询之中的一些关系,大家不要受到这个思路的限制,也就不再进行扩展了,大家可以发散思维,开创出更好的算法。
上图中举了一个简单的例子,在做向量查询的时候,可以快速框定最相近的一个聚簇找到最感兴趣的几个数据,但是在大量数据被结构化条件筛选掉的时候。仅仅通过一个聚簇是无法获取到足够量的数据返回的,那么我们就需要扩大,因为这边只是一个二维的空间,就可以看到已经向四面八方扩展了,可以想象到128维、256维、1024维这种场景,扩展的幅度会按维度几何地扩大。