如何用 PolarDB 在不确定世界寻找确定答案 (例如图像相似) - vector|pase

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核8GB 50GB
简介: 世界是确定的吗? 不就好像我们拍照, 同一个相机, 同一个地点, 同一个时间连拍几张, 结果都不一样. 更不用说时间地点不一样了.真正确定的数据并不多, 世界充满的是不确定的数据.例如人脸识别, 存在数据库中的数据可能是曾经的照片, 但是你去比对人脸时是实时的, 角度、化妆、发型都可能不一样.未来的数据库一定要解决一个问题, 如何在不确定的世界寻找确定的答案?PolarDB早几年就发布了pase插件, 解决高性能图像识别的问题, 通过将非结构化数据根据特征提取成为一串向量, 然后根据向量进行距离计算, 得到最相似的向量, 从而解决不确定数据的确定性搜索.

背景

世界是确定的吗? 不

就好像我们拍照, 同一个相机, 同一个地点, 同一个时间连拍几张, 结果都不一样. 更不用说时间地点不一样了.

真正确定的数据并不多, 世界充满的是不确定的数据.

例如人脸识别, 存在数据库中的数据可能是曾经的照片, 但是你去比对人脸时是实时的, 角度、化妆、发型都可能不一样.

未来的数据库一定要解决一个问题, 如何在不确定的世界寻找确定的答案?

PolarDB早几年就发布了pase插件, 解决高性能图像识别的问题, 通过将非结构化数据根据特征提取成为一串向量, 然后根据向量进行距离计算, 得到最相似的向量, 从而解决不确定数据的确定性搜索.

后来开源社区也发了一个插件vector, 知识支持的算法只有ivfflat.

本文将介绍如何在开源polardb中安装和使用vector插件, 解决向量数据相似搜索的问题.

PolarDB的安装请参考: 《如何用 PolarDB 证明巴菲特的投资理念》

vector on PolarDB

1、启动并进入polardb实例

IT-C02YW2EFLVDL:~ digoal$ docker ps -a  
CONTAINER ID   IMAGE                                    COMMAND                  CREATED        STATUS                        PORTS     NAMES  
67e1eed1b4b6   polardb/polardb_pg_local_instance:htap   "/bin/sh -c '~/tmp_b…"   2 months ago   Exited (137) 10 minutes ago             polardb_pg_htap  
  
IT-C02YW2EFLVDL:~ digoal$ docker start 67e1eed1b4b6  
67e1eed1b4b6  
  
IT-C02YW2EFLVDL:~ digoal$ docker exec -it 67e1eed1b4b6 bash  
[postgres@67e1eed1b4b6 ~]$ which git  
/usr/bin/git  

2、下载vector插件

[postgres@67e1eed1b4b6 ~]$ git clone --branch v0.3.2 --depth 1 https://github.com/pgvector/pgvector.git  
Cloning into 'pgvector'...  
remote: Enumerating objects: 80, done.  
remote: Counting objects: 100% (80/80), done.  
remote: Compressing objects: 100% (62/62), done.  
remote: Total 80 (delta 33), reused 29 (delta 15), pack-reused 0  
Unpacking objects: 100% (80/80), done.  
Note: checking out 'a7f712b5a4724cfe55e2793dd1a4b7d48257fa1e'.  
  
You are in 'detached HEAD' state. You can look around, make experimental  
changes and commit them, and you can discard any commits you make in this  
state without impacting any branches by performing another checkout.  
  
If you want to create a new branch to retain commits you create, you may  
do so (now or later) by using -b with the checkout command again. Example:  
  
  git checkout -b new_branch_name  

3、安装vector插件

[postgres@67e1eed1b4b6 ~]$ cd pgvector/  
[postgres@67e1eed1b4b6 pgvector]$ ll  
total 48  
-rw-rw-r-- 1 postgres postgres 1877 Dec  1 09:34 CHANGELOG.md  
-rw-rw-r-- 1 postgres postgres  482 Dec  1 09:34 Dockerfile  
-rw-rw-r-- 1 postgres postgres 1104 Dec  1 09:34 LICENSE  
-rw-rw-r-- 1 postgres postgres 1760 Dec  1 09:34 Makefile  
-rw-rw-r-- 1 postgres postgres 1105 Dec  1 09:34 META.json  
-rw-rw-r-- 1 postgres postgres 9495 Dec  1 09:34 README.md  
drwxrwxr-x 2 postgres postgres 4096 Dec  1 09:34 sql  
drwxrwxr-x 2 postgres postgres 4096 Dec  1 09:34 src  
drwxrwxr-x 6 postgres postgres 4096 Dec  1 09:34 test  
-rw-rw-r-- 1 postgres postgres  135 Dec  1 09:34 vector.control  
  
  
[postgres@67e1eed1b4b6 pgvector]$ which pg_config  
~/tmp_basedir_polardb_pg_1100_bld/bin/pg_config  
  
[postgres@67e1eed1b4b6 pgvector]$ USE_PGXS=1 make  
[postgres@67e1eed1b4b6 pgvector]$ USE_PGXS=1 make install  

4、加载vector插件

[postgres@67e1eed1b4b6 pgvector]$ psql -h 127.0.0.1  
psql (11.9)  
Type "help" for help.  
  
postgres=# create extension vector ;  
CREATE EXTENSION  

5、测试向量数据搜索、以及索引加速搜索.

postgres=# CREATE TABLE items (embedding vector(3));  
CREATE TABLE  
postgres=# INSERT INTO items VALUES ('[1,2,3]'), ('[4,5,6]');  
INSERT 0 2  
postgres=# SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 1;  
 embedding   
-----------  
 [1,2,3]  
(1 row)  
  
postgres=# CREATE INDEX ON items USING ivfflat (embedding vector_l2_ops) WITH (lists = 100);  
CREATE INDEX  
  
postgres=# SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 1;  
 embedding   
-----------  
 [1,2,3]  
(1 row)  
  
postgres=# explain SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 1;  
                            QUERY PLAN                              
------------------------------------------------------------------  
 Limit  (cost=1.03..1.04 rows=1 width=40)  
   ->  Sort  (cost=1.03..1.04 rows=2 width=40)  
         Sort Key: ((embedding <-> '[3,1,2]'::vector))  
         ->  Seq Scan on items  (cost=0.00..1.02 rows=2 width=40)  
(4 rows)  
  
postgres=# set enable_seqscan=off;  
SET  
postgres=# explain SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 1;  
                                       QUERY PLAN                                         
----------------------------------------------------------------------------------------  
 Limit  (cost=4.08..6.09 rows=1 width=40)  
   ->  Index Scan using items_embedding_idx on items  (cost=4.08..8.11 rows=2 width=40)  
         Order By: (embedding <-> '[3,1,2]'::vector)  
(3 rows)  
  
postgres=# SET ivfflat.probes = 10;  
SET  
postgres=# SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 1;  
 embedding   
-----------  
 [1,2,3]  
(1 row)  
  
postgres=# explain SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 1;  
                                        QUERY PLAN                                          
------------------------------------------------------------------------------------------  
 Limit  (cost=40.80..42.81 rows=1 width=40)  
   ->  Index Scan using items_embedding_idx on items  (cost=40.80..44.83 rows=2 width=40)  
         Order By: (embedding <-> '[3,1,2]'::vector)  
(3 rows)  

参考

《PostgreSQL + FDW + vector 插件加速向量检索 - 在不确定世界寻找确定答案 (例如图像相似)》

《PostgreSQL 开源 高维向量相似搜索插件 vector - 关联阿里云rds pg pase, cube, 人脸识别》

《PostgreSQL 在资源搜索中的设计 - pase, smlar, pg_trgm - 标签+权重相似排序 - 标签的命中率排序》

《社交、电商、游戏等 推荐系统 (相似推荐) - 阿里云pase smlar索引方案对比》

《PostgreSQL 向量相似推荐设计 - pase》

《PostgreSQL 阿里云rds pg发布高维向量索引,支持图像识别、人脸识别 - pase 插件》

《如何用 PolarDB 证明巴菲特的投资理念》

https://github.com/pgvector/pgvector

《德说-第166期, 象(决定人生命运的机会)只出现一次, 就看你能不能发现 - PolarDB的象》

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
关系型数据库 定位技术 分布式数据库
沉浸式学习PostgreSQL|PolarDB 18: 通过GIS轨迹相似伴随|时态分析|轨迹驻点识别等技术对拐卖、诱骗场景进行侦查
本文主要教大家怎么用好数据库, 而不是怎么运维管理数据库、怎么开发数据库内核.
1343 1
|
关系型数据库 分布式数据库 数据库
沉浸式学习PostgreSQL|PolarDB 21,相似图像搜索
传统数据库不支持图像类型, 图像相似计算函数, 图像相似计算操作服, 相似排序操作符. 所以遇到类似的需求, 需要自行编写应用来解决. PG|PolarDB 通过imgsmlr插件, 可以将图像转换为向量特征值, 使用相似距离计算函数得到相似值, 使用索引加速相似度排序, 快速获得相似图片, 实现以图搜图. 也可以通过pgvector插件来存储图片向量特征值, 结合大模型服务(抠图、图像向量转换), 可以实现从图像转换、基于图像的相似向量检索全流程能力.
932 1
|
存储 算法 搜索推荐
使用 PolarDB 开源版 smlar 插件进行高效率相似文本搜索、自助选药、相似人群圈选等业务
PolarDB 的云原生存算分离架构, 具备低廉的数据存储、高效扩展弹性、高速多机并行计算能力、高速数据搜索和处理; PolarDB与计算算法结合, 将实现双剑合璧, 推动业务数据的价值产出, 将数据变成生产力. 本文将介绍使用 PolarDB 开源版 smlar 插件进行高效率相似文本搜索、自助选药、相似人群圈选等业务
385 0
|
存储 并行计算 Cloud Native
使用 PolarDB 开源版 和 imgsmlr 存储图像特征值以及快速的进行图像相似搜索
PolarDB 的云原生存算分离架构, 具备低廉的数据存储、高效扩展弹性、高速多机并行计算能力、高速数据搜索和处理; PolarDB与计算算法结合, 将实现双剑合璧, 推动业务数据的价值产出, 将数据变成生产力. 本文将介绍使用 PolarDB 开源版 和 imgsmlr 存储图像特征值以及快速的进行图像相似搜索
489 0
|
存储 并行计算 算法
PolarDB 开源版通过pg_similarity实现17种文本相似搜索 - token归一切分, 根据文本相似度检索相似文本.
PolarDB 的云原生存算分离架构, 具备低廉的数据存储、高效扩展弹性、高速多机并行计算能力、高速数据搜索和处理; PolarDB与计算算法结合, 将实现双剑合璧, 推动业务数据的价值产出, 将数据变成生产力. 本文将介绍PolarDB 开源版通过pg_similarity实现17种文本相似搜索 - token归一切分, 根据文本相似度检索相似文本.
553 0
|
6天前
|
Cloud Native 关系型数据库 分布式数据库
让PolarDB更了解您--PolarDB云原生数据库核心功能体验馆
让PolarDB更了解您——PolarDB云原生数据库核心功能体验馆,由阿里云数据库产品事业部负责人宋震分享。内容涵盖PolarDB技术布局、开源进展及体验馆三大部分。技术布局包括云计算加速数据库演进、数据处理需求带来的变革、软硬协同优化等;开源部分介绍了兼容MySQL和PostgreSQL的两款产品;体验馆则通过实际操作让用户直观感受Serverless、无感切换、SQL2Map等功能。
|
3月前
|
关系型数据库 MySQL 分布式数据库
零基础教你用云数据库PolarDB搭建企业网站,完成就送桌面收纳桶!
零基础教你用云数据库PolarDB搭建企业网站,完成就送桌面收纳桶,邀请好友完成更有机会获得​小米Watch S3、小米体重称​等诸多好礼!
零基础教你用云数据库PolarDB搭建企业网站,完成就送桌面收纳桶!
|
2天前
|
存储 关系型数据库 分布式数据库
PolarDB PostgreSQL版:商业数据库替换与企业上云首选
PolarDB PostgreSQL版是商业数据库替换与企业上云的首选。其技术架构实现存储计算分离,具备极致弹性和扩展性,支持Serverless、HTAP等特性。产品在弹性、性能、成本优化和多模处理方面有显著提升,如冷热数据自动分层、Ganos多模引擎等。已在汽车、交通、零售等行业成功应用,典型案例包括小鹏汽车、中远海科等,帮助企业大幅降低运维成本并提高业务效率。
23 13
|
2天前
|
容灾 关系型数据库 分布式数据库
PolarDB分布式版:与云融合的分布式数据库发展新阶段
PolarDB分布式版标志着分布式数据库与云融合的新阶段。它经历了三个发展阶段:从简单的分布式中间件,到一体化分布式架构,再到云原生分布式数据库。PolarDB充分利用云资源的弹性、高性价比、高可用性和隔离能力,解决了大规模数据扩展性问题,并支持多租户场景和复杂事务处理。零售中台的建设背景包括国家数字化转型战略及解决信息孤岛问题,采用分布式数据库提升高可用性和性能,满足海量订单处理需求。展望未来,零售中台将重点提升容灾能力、优化资源利用并引入AI技术,以实现更智能的服务和更高的业务连续性。
|
4天前
|
关系型数据库 分布式数据库 数据库
瑶池数据库大讲堂|PolarDB HTAP:为在线业务插上实时分析的翅膀
瑶池数据库大讲堂介绍PolarDB HTAP,为在线业务提供实时分析能力。内容涵盖MySQL在线业务的分析需求与现有解决方案、PolarDB HTAP架构优化、针对分析型负载的优化(如向量化执行、多核并行处理)及近期性能改进和用户体验提升。通过这些优化,PolarDB HTAP实现了高效的数据处理和查询加速,帮助用户更好地应对复杂业务场景。

热门文章

最新文章

相关产品

  • 云原生数据库 PolarDB