PostgreSQL 11 相似图像搜索插件 imgsmlr 性能测试与优化 1 - 单机单表 (4亿图像)

背景

imgsmlr是PostgreSQL的一款支持以图搜图的插件,

https://github.com/postgrespro/imgsmlr

这个插件新增了:

1、几种图像特征值数据类型,

2、图像特征值相似算子,

3、图像特征值相似排序索引支持,

4、图像相似排序的索引(通过扩展GiST索引接口实现)支持,

5、png,gif等图像格式特征值提取函数。

图像特征值为64*64的16个区域经过小波转换后的16个浮点数。

在数据量(图片数)非常庞大时,输入一个图片特征值,搜索相似度排行前N的图片,性能如何呢?如何优化呢?

接下来的3篇文档将分别介绍如下三种场景的图像特征值搜索性能以及优化思路:

1、单机单表

2、单机分区表(使用DBLINK 异步调用)

3、citus,多机,sharding 表

附加 - rum 相似查询性能(以及存在的问题)

《PostgreSQL 相似搜索插件介绍大汇总 (rum,pg_trgm,smlar,imgsmlr,pg_similarity) (rum,gin,gist)》

相似查询分元素重叠类,向量类。RUM为第一种元素重叠度类的相似搜索技术。

相似排序,走索引,性能如何,有什么需要优化的点?

git clone https://github.com/postgrespro/rum  
cd rum  
. /var/lib/pgsql/.bash_profile  
USE_PGXS=1 make  
USE_PGXS=1 make install  
create extension rum;

1、生成随机浮点数组的UDF接口

create or replace function gen_rand_float4(int,int) returns float4[] as $$  
  select array(select (random()*$1)::float4 from generate_series(1,$2));  
$$ language sql strict;

2、建表,索引

create unlogged table t_rum(id int primary key, arr float4[]);  
create index idx_t_rum_1 on t_rum using rum(arr);

4、写入随机浮点数数组

vi test.sql  
\set id random(1,2000000000)  
insert into t_rum values (:id, gen_rand_float4(10,16)) on conflict(id) do nothing;
pgbench -M prepared -n -r -P 1 -f ./test.sql -c 64 -j 64 -t 10000000
postgres=# select * from t_rum limit 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值