我有一个大表(~1B 行),btree
在单列上有一个索引bytea
(~20GB,但适合内存)。
我想使用概率过滤器(例如布隆过滤器或布谷鸟过滤器)从客户端发送查询,并让数据库扫描索引,收集所有可能与过滤器匹配的行。这应该返回所有可能的匹配项和一些误报。目标是避免提供所请求项目的完整列表(出于隐私考虑 - 客户端有一个列表,但不能与服务器共享它)。
我看到 Postgres 有一个用于创建基于布隆过滤器的索引的bloom
模块,但我认为它不能用于针对btree
索引测试查询中提供的布隆过滤器。
我想最终结果看起来像:
SELECT key, value FROM table WHERE matches_filter(key, b'01010101010101');
有什么方法可以在这里重用bloom
模块中的内部方法吗?或者是否有任何暴露概率过滤功能的扩展?