SetrixDB 是一个可嵌入的 Go 集合引擎,针对 uint64 ID 提供精确的成员判断与集合交集运算,核心思路是把集合当作位图、把交集当作 AND 操作。它面向电商筛选、权限检查、反欺诈、RAG 候选预过滤这类场景,数据本身留在原数据库,SetrixDB 作为索引或预过滤器旁路运行。
项目从零实现了最小完美哈希函数(CHD v2)做键生成,在 5000 万键上零冲突,约 4.03 bits/key,查找约 118 ns。位图 AND 内核通过 cgo 走 AVX-512,带运行时指令检测与标量回退,同一二进制可在任意 CPU 上运行。支持分片与集群模式,节点增删只重映射约 1/(N+1) 的 ID。
实测数据(2 vCPU AMD EPYC Zen4,AVX-512,Go 1.22,2026 年 9 月):
成员判断(100 万键):SetrixDB 结构占用 0.5 B/key,约 118 ns/次;Go map 为 22.3 B/key、133.3M ops/s;Bloom filter 1.2 B/key、23.6M ops/s,但有 1% 误报。
交集(A=B=100 万):AVX-512 位图 AND 6 µs,纯 Go 位图 29 µs,Roaring 148 µs(稠密 ID)/523 ms(随机 64 位 ID),排序归并 9.2 ms,hash join 91.6 ms。
真实数据集验证:Online Retail II 上 "UK AND Q4/2011 AND price ≥ 5" 返回 22,701 行、823 µs;Wikipedia 标题(1926 万条)上 "multi-word AND starts with s" 返回 1,408,399 条、9.5 ms;MovieLens 25M 上三组查询结果均与外部 sort+comm 校验一致。
同一 25M ID 宇宙、千万级集合上,排序列表归并 87.7 MB/80.4 ms,稠密位图(AVX-512)2 MB/227 µs,约快 350 倍、小 43 倍。
作者也明确列出了劣势:宇宙空间稀疏或超出内存时不如 Roaring;不支持范围查询、相似度与 join;MPHF 面向静态集合,频繁增删需要重建。当前为 v0.1.0 alpha,已在回环与双机间测试,3 节点集群在云端跑过但未经历多数据中心生产环境。
项目开源,Apache-2.0 许可,代码与可复现基准见 GitHub:GitHub
🔗 原文:点击查看