【重新发现PostgreSQL之美】- 14 bloom 布隆过滤器索引

背景


场景:

分析业务, 任意字段、任意维度组合, 组合等值查询.

where a=? and b=? or c=? . 其他组合 ab ac ad bc bd bcd bdef def ... 每个字母代表一个字段.

在电商、金融等拖拽式实时分析场景中尤为常见.

挑战:

由于查询维度非常多, 完全不可控, 如果每个维度都预计算, 会导致结果数据量指数级增加.

如果为每个查询维度都创建一个索引, 那么会有N!+1个索引. 例如5个字段的任意组合有121种, 需要建121个索引, 完全不现实.

PG 解决方案:

使用bloom布隆过滤索引. 每个value被hash计算后映射到若干个bit位, 这些bit位被设置为1表示包含这个value.

一个索引即可满足任意维度的组合等值搜索.

https://www.postgresql.org/docs/14/bloom.html

202103/20210326_02.md  《PostgreSQL 14 preview - BRIN (典型IoT 时序场景) 块级索引支持 bloom filter - 随机,大量distinct value, 等值查询》
202011/20201128_04.md  《PostgreSQL bloom 索引原理》
201911/20191130_01.md  《UID编码优化 - 用户画像前置规则 (bloom, 固定算法等)》
201810/20181003_02.md  《PostgreSQL bloom filter index 扩展 for bigint》
201804/20180409_01.md  《PostgreSQL 11 preview - bloom filter 误报率评估测试及如何降低误报 - 暨bloom filter应用于HEAP与INDEX的一致性检测》
201803/20180323_05.md  《PostgreSQL 11 preview - BRIN索引接口功能扩展(BLOOM FILTER、min max分段)》
201605/20160523_01.md  《PostgreSQL 9.6 黑科技 bloom 算法索引,一个索引支撑任意列组合查询》


上一篇:【DB吐槽大会】第40期 - PG 缺少qps计数器


下一篇:PG+MySQL第10课-多维组合搜索