分析型数据库PostgreSQL版的向量分析特性针对非结构化数据检索分析,具备丰富功能和优异性能,与普通的检索系统有较大的差异,主要体现在下面的几点:
  • 结构化和非结构化混合分析

    例如,可以检索与输入图片中的连衣裙似度最高、价格在100元到200元之间且上架时间在最近1个月以内的产品。

  • 支持数据实时更新

    传统的向量分析系统中数据只能按照T+1更新,不支持数据实时写入。分析型数据库PostgreSQL版向量分析支持数据实时更新和查询。

  • 支持向量分析碰撞

    分析型数据库PostgreSQL版向量分析支持KNN-Join,即比较一堆向量与另外一堆向量的相似度,类似于spark中的KNN-Join操作,这种场景计算量巨大,分析型数据库PostgreSQL版针对该场景做了大量优化。

    典型的应用场景有商品去重,计算新加入的商品与历史商品库中有哪些是相似的。人脸聚类,计算一段时间内的人脸库中,哪些人脸是同一个人。

  • 易用性

    分析型数据库PostgreSQL版向量分析申请即可使用,支持标准SQL,简化开发流程。同时,分析型数据库PostgreSQL版向量分析内置常用特征提取和属性提取,也支持集成第三方特征提取服务。

结构化数据和非结构化关联分析

以检索与输入图片中的连衣裙相似度最高、价格在100元到200元之间且上架时间在最近1个月以内的产品为例,有下列商品库,其中商品表products的字段设计如下:

字段 类型 说明
Id Char(64) 商品
Name Varchar(256) 商品名称
Price real 价格
InTime timestamp 入库时间
Url Varchar(256) 图片链接
Feature real(512) 图片特征

检索的SQL如下:

Select id, price from products where price > 100 and price <=200 and InTime > ‘2019-03-01 00:00:00’ and InTime <= ‘2019-03-31 00:00:00’ order by l2_distance(array[10,2.0,…, 512.0], feature) desc limit 100;

其中l2_distance为向量检索定义的距离函数,它包含下列2个参数:

参数 举例 说明
Feature1 array[10,2.0,…, 512.0] 需要查询的特征向量
Feature2 Feature 底库中的向量列

分析型数据库PostgreSQL版向量分析支持“欧氏距离“、“点积距离” 及 “汉明距离” 三种距离函数,分别适用于不同的情景。

非结构化数据写入

分析型数据库PostgreSQL版向量分析支持数据实时写入,立等可查。数据的写入方式与传统数据库一样,使用insert语句插入向量数据。

向量检索与分析

以上述的商品库为例,我们实现商品去重的逻辑,计算最近1天加入的商品与上个月的商品库里面有哪些是相似的,它的SQL如下:

select A.id as ida, B.id as idb from products A join products B on dp_distance(A.feature, B.feature) > 0.9 where A.inTime > '2019-03-31 00:00:00' and B.InTime >= '2019-02-01 00:00:00' and  B.InTime < '2019-02-29 00:00:00';

上述SQL把'2019-03-31 00:00:00'后写入的数据与2月份的数据做笛卡尔积,把向量点积距离大于0.9的商品对应的id提取出来。基于分析型数据库PostgreSQL版强大的优化器,用户无需写子查询,直接使用描述性的SQL即可。

易用性

向量分析完整继承了分析型数据库PostgreSQL版向量分析的所有商业工具和生态,并支持常用的特征提取模型,还支持与第三方特征提取服务集成。

  • 申请即可使用:开通分析型数据库PostgreSQL版服务即可使用向量分析。
  • 分析型数据库PostgreSQL版全面兼容PostgreSQL协议和SQL2003,降低开发成本。
  • 内置常用特征提取模块,支持集成第三方特征提取服务。

为了让您对非结构化数据拥有更多的自主控制权,您可以把非结构化数据保存在OSS或者图片服务器上(下图使用OSS),非结构化数据的保存地址即URL存储在分析型数据库PostgreSQL版中,整体架构如下所示。

图 1. 特征提取集成


  1. 通过分析型数据库PostgreSQL版控制台注册特征提取服务。
  2. 非结构化数据保存到OSS,同时返回访问的URL。
  3. 非结构化数据的存储地址即URL保存在分析型数据库PostgreSQL版中。
  4. 通过Web App调用分析型数据库PostgreSQL版的自定义函数生成向量特征,分析型数据库PostgreSQL版后台通过调用特征提取服务从OSS读取非结构化数据,提取特征,并把特征向量保存在分析型数据库PostgreSQL版中。所有这些操作只需要一条SQL便可轻松完成,SQL语句示例如下。
    
    select feature_extractor('clothes','https://xxx/1036684144_687583347.jpg');  
    
    insert into product(id, url, feature) values(0, 'http://xxx/1036684144_687583347.jpg', feature_extractor('clothes','https://xxx/1036684144_687583347.jpg')); 
    feature_extractor为商品特征提取的自定义函数,传入商品图片URL,提取商品特征向量,该向量可以用来做商品检索和属性提取。
    说明 feature_extractor第一个参数区别要提取的属性类型,仅支持FACE、CLOTHES、TEXT。

    对于常用的人脸特征提取、文本特征提取BERT模型以及服装特征提取也已经内置于分析型数据库PostgreSQL版服务中,您也可以使用您自己的特征提取服务。