PostgreSQL 电商小需求 - 凑单商品的筛选
背景
电商的促销活动非常多,规则可能比较复杂,要薅羊毛的话,数学可能要比较好才行。因此也出现了大量的导购网站,比如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
略,请参考以上文档。
参考
《时间、空间、对象多维属性 海量数据任意多维 高效检索 - 阿里云RDS PostgreSQL最佳实践》
《PostgreSQL 海量时序数据(任意滑动窗口实时统计分析) - 传感器、人群、物体等对象跟踪》
《多字段,任意组合条件查询(无需建模) - 毫秒级实时圈人 最佳实践》
《宝剑赠英雄 - 任意组合字段等效查询, 探探PostgreSQL多列展开式B树 (GIN)》
《PostgreSQL 如何高效解决 按任意字段分词检索的问题 - case 1》
《PostgreSQL 9.6 黑科技 bloom 算法索引,一个索引支撑任意列组合查询》