PostgreSQL 电商小需求 - 凑单商品的筛选

less than 1 minute read

背景

电商的促销活动非常多,规则可能比较复杂,要薅羊毛的话,数学可能要比较好才行。因此也出现了大量的导购网站,比如SMZDM。

但是实际上电商里面也有类似的应用,可以智能的分析买家的需求,根据买家的需求、已有的券、购物车,向用户推荐凑单品。

凑单的需求,本质上是多个字段组合搜索的需求。

1、购物车总金额

2、用户标签

3、用户优惠券

4、店铺活动标签

5、商品本身的多种标签

等。

根据规则计算出一些条件,根据这些条件,到商品标签表进行查询,找到对应的商品。

例如用户有一些满减优惠券,那么可以与购物车的总金额进行计算,得到还需要多少就能使用这个券。

同时,根据用户最近关注的商品类别(体现在用户标签表),到商品标签表,找到这类商品。根据多个条件,筛选出复合条件的商品。

PostgreSQL 有多个技术手段能够解决高速任意字段检索的需求。

1、布隆过滤,支持任意字段组合的等值查询。

《PostgreSQL 9.6 黑科技 bloom 算法索引,一个索引支撑任意列组合查询》

2、bitmap scan

gin复合索引,或者多个b-tree单列索引,都可以实现bitmap scan。多个条件过滤,收敛到更少的数据块,顺序扫描+FILTER。

《PostgreSQL bitmapAnd, bitmapOr, bitmap index scan, bitmap heap scan》

3、列存储

4、bitmap标签

《阿里云RDS for PostgreSQL varbitx插件与实时画像应用场景介绍》

《基于 阿里云 RDS PostgreSQL 打造实时用户画像推荐系统(varbitx)》

5、数组标签

《恭迎万亿级营销(圈人)潇洒的迈入毫秒时代 - 万亿user_tags级实时推荐系统数据库设计》

DEMO

略,请参考以上文档。

参考

《PostgreSQL 多字段任意组合搜索的性能》

《时间、空间、对象多维属性 海量数据任意多维 高效检索 - 阿里云RDS PostgreSQL最佳实践》

《PostgreSQL 海量时序数据(任意滑动窗口实时统计分析) - 传感器、人群、物体等对象跟踪》

《多字段,任意组合条件查询(无需建模) - 毫秒级实时圈人 最佳实践》

《宝剑赠英雄 - 任意组合字段等效查询, 探探PostgreSQL多列展开式B树 (GIN)》

《PostgreSQL 如何高效解决 按任意字段分词检索的问题 - case 1》

《PostgreSQL 9.6 黑科技 bloom 算法索引,一个索引支撑任意列组合查询》

Flag Counter

digoal’s 大量PostgreSQL文章入口