惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Jina AI
Jina AI
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
B
Blog
T
The Blog of Author Tim Ferriss
量子位
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - Franky
小众软件
小众软件
Recent Announcements
Recent Announcements
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
I
InfoQ
美团技术团队
G
Google Developers Blog
Engineering at Meta
Engineering at Meta
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V
Visual Studio Blog
云风的 BLOG
云风的 BLOG
博客园 - 【当耐特】
IT之家
IT之家
Microsoft Security Blog
Microsoft Security Blog
博客园 - 聂微东
Last Week in AI
Last Week in AI
H
Hackread – Cybersecurity News, Data Breaches, AI and More
H
Help Net Security

PostgreSQL

五年过去了,结论有什么变化吗? 适配信创数据库的人的精神状态 be like 用了十几年的 MySQL 了,突然发现 PostgreSQL 可能更加适合我,大家怎么看? postgresql 多进程改多线程 二键安装一个 postgresql 服务 PostgreSQL + TimescaleDB 方案不按主键索引走,有什么办法吗? 看看大家现在用 pg 的最佳实践是怎么样的 用 PostgreSQL 存图片等 binary 有什么坑吗 [求助] 在哪个网址能够下载 PostgresSQL 9.3.0 版本的 Windows 二进制安装包?官方/ftp/old/binary 里没有。 [请教]pgvector 的性能问题 多笔记本离线 PostgreSQL 数据库同步问题: UUID vs 自增主键 PostgreSQL 通过分 Database 做多租户可行吗? PostgreSQL 多租户的正确姿势 Postgresql 放 K8S 里,大家目前都用的什么方案呢? 2025 年 postgresql 有什么优秀的备份解决方案 有大神研究过 pg_resetwal 的原理吗,为什么会丢 user 表的数据 按照 stackoverflow 教程执行 pg_resetwal, postgresql 的数据库被清空了 求国内高性价比的 postgresql 服务,纳米项目 请教一个关于 PostgreSQL 连接被 Server 关闭的问题 PostgreSQL 18 JSONB 增加能取代 MongoDB 吗? PostgreSql Oracle 迁移 postgreSQL ,有什么经验分享 有什么权限管理最佳实践吗 请教 PostgreSQL 和 PostGIS 使用问题 pg 的毫秒级时间戳转换 关于 PostgreSQL 中的 max_connections 和 pg_stat_activity 的疑惑 目前国内最高性价比的 postgresql 服务是? 新手,请问 postgres 怎么配置 vacuum 学习 PostgreSQL,有什么资料推荐? Apache AGE 和 Neo4j 哪个更好? 有没有像 Citus 那样方便分片的图数据库?
通过 pg_roaringbitmap 优化标签查询的话,有没有必要做高频...
shendaowu · 2025-11-27 · via PostgreSQL

我问了 DeepSeek ,它说 roaringbitmap 类型的值的元素的取值范围如果很大的话会影响效率。就是类似 INSERT INTO tag_content_bitmaps (tag_id, content_bitmap) VALUES(1, rb_build(ARRAY[1,100000])) 的内容查询效率会低于 INSERT INTO tag_content_bitmaps (tag_id, content_bitmap) VALUES(1, rb_build(ARRAY[1,2])) 。然后我就想到了一些花活。
首先,使用关系型数据库建立(标签 id ,内容 id )复合索引之后如果标签的使用率不高的话,搜索效率还是可以的,但是如果标签的使用率很高,那么好像是因为区分度过低,所以搜索的效率会很低。但是 pg_roaringbitmap 对于高使用率的标签来说速度好像还是挺快的。但是就像前面第一段说的,这个也不是免费的。所以我不太敢全部标签都塞到 roaringbitmap 类型里。然后是具体的花活。
标签 id,标签名字,使用率
1,苹果,0.3
2,香蕉,0.01
3,梨,0.15
高频标签 id,原标签 id
1,1 //这个对应苹果
2,3 //这个对应梨
不过这还有问题,就是如何禁止高频标签建立索引,因为反正也不会用,还会占地方。可能最高效的方法是将低频标签全都复制到一个新表里?不过这个很反模式,也会导致维护麻烦。我问过 DeepSeek ,它给的方法感觉效率不怎么高的样子。
结合普通复合索引就是如果要搜索的标签同时包含高频标签和低频标签。那么就先在 roaringbitmap 里搜索那些高频标签,然后在结果中搜索满足低频标签的内容。或者可能反过来搜索效率更高? DeepSeek 说前者效率更高。
这个高频和低频的分界线有没有比较好的建议?我目前定的是 3%。因为 DeepSeek 说 1% 到 5% 的使用率的标签建立索引还是可以的。
roaringbitmap 相关的表结构:
CREATE TABLE tag_content_bitmaps (
tag_id BIGINT PRIMARY KEY,
content_bitmap roaringbitmap
);
CREATE TABLE content_tag_bitmaps (
content_id BIGINT PRIMARY KEY,
tag_bitmap roaringbitmap
);
或者我这套花活是不是没什么大用?有没有更好的实现加速标签查询的方法?另外最好是 CPU 和内存要求低点,ES 之类的我怕钱包吃不消。
我跟 DeepSeek 聊的内容: https://chat.deepseek.com/share/dkuyx547fddet8vwwi 。
最后,再加点我个人的问题,答不答看你心情。这套花活我一个野生程序员能不能把持住?实际会不会很复杂?另外具体的 SQL 我应该肯定是写不明白了,我肯定会让 AI 写。但是我会写测试。我感觉这个测试还是比较好写的,用那种标准的运行两套代码对比结果就行了。一套简单低效几乎不会出错,一套复杂高效可能有错。