Recent Posts

PostgreSQL 递归妙用案例 - 分组数据去重与打散

22 minute read

背景 我们现在业务场景,有对筛选结果进行去重和打散的需求,比如每个品牌的商品只能出现不超过10个。 目前我们是在业务层进行处理的,效率比较低。 PGSql有没有更好的方式来支持对结果的去重和打散呢? PostgreSQL SQL功能强大,有很多种方法可以实现这类业务需求的高效检索。比如 1、递归 2、窗...

PostgreSQL 11 preview - with_llvm JIT支持部署与试用

43 minute read

背景 PostgreSQL 11 JIT,目前支持tuple deform(将磁盘上的tuple转换为内存中TUPLE格式),以及表达式(select, where, 等语义中的表达式,操作符运算,UDF等)的动态编译。 对海量数据的计算(并且表达式或TUPLE DEFORM已成为瓶颈时)有加速效果。 特别适...

PostgreSQL 任意列组合条件 行数估算 实践 - 采样估算

4 minute read

背景 在任意维度查询(ADHoc)的场景中,有诸多技术手段来保证查询的性能,比如rum索引,GIN倒排索引,BLOOM FILTER索引。又比如多个索引的bitmap 合并scan。 例子: 《PostgreSQL ADHoc(任意字段组合)查询 与 字典化 (rum索引加速) - 实践与方案1》 《用Po...

insert on conflict - 合并写 (消除不必要更新)

1 minute read

背景 合并更新的应用非常广泛,存在则更新,不存在则写入。 但是在某些场景中,存在并不一定要更新,原因是新的内容可能和老的内容完全一致。这种更新操作是完全没有必要的。 因为PG是多版本的,更新会产生新的TUPLE版本,如果这种没必要的更新很多,只会给数据库带来额外的负担同时影响性能。特别体现在批量操作中。 例...

[转载] 磁盘硬件问题(坏块)检测

1 minute read

背景 Linux下面可以使用smartctl , badblocks检查是否有坏块。 Win下面可以使用HD Tune。 1 smartmontools apt install smartmontools https://www.aliyun.com/jiaocheng/120499.html s...

PostgreSQL 相似文本检索与去重 - (银屑病怎么治?银屑病怎么治疗?银屑病怎么治疗好?银屑病怎么能治疗好?)

6 minute read

背景 在云栖社区的问答区,有一位网友提到有一个问题: 表里相似数据太多,想删除相似度高的数据,有什么办法能实现吗? 例如: 银屑病怎么治? 银屑病怎么治疗? 银屑病怎么治疗好? 银屑病怎么能治疗好? 等等 解这个问题的思路 1. 首先如何判断内容的相似度,PostgreSQL中提...