Recent Posts

PostgreSQL 收缩膨胀表或索引 - pg_squeeze or pg_repack

1 minute read

背景 PostgreSQL的表或索引发生膨胀后,用户可以使用vacuum full或rewrite table(如cluster)的方式重建表。 但是vacuum full或者rewrite都需要持有排它锁,会堵塞读操作。 为了减少锁冲突,社区有一个名为pg_reorg或pg_repack的插件,使用了增量的...

PostgreSQL 流行 HA 方案

less than 1 minute read

背景 数据库的HA是一个比较经典的话题,几乎所有的生产环境都会考虑给数据库部署HA。 PostgreSQL 的HA方案也很多,在我的GIT里有两个自定义的HA脚本,有兴趣的童鞋可以参考一下原理。 单个虚拟IP, 自动failover, 手动failback, 需fence设备 双虚拟IP, 自动failov...

PostgreSQL 9.6 sharding based on FDW & pg_pathman

8 minute read

背景 可以阅读以下几篇文章先回顾一下FDW,基于FDW的shared以及高效的分区插件pg_pathman。 《PostgreSQL 9.6 单元化,sharding (based on postgres_fdw) - 内核层支持前传》 《PostgreSQL 9.6 sharding + 单元化 (base...

PostgreSQL 9.5+ 高效分区表实现 - pg_pathman

41 minute read

背景 目前PostgreSQL社区版本的分区表功能比较弱,需要通过继承和触发器或RULE来实现分区表的功能,由于查询和更新涉及约束的检查、插入则涉及触发器或规则重写,导致分区功能性能较差。 商业版本EDB,以及数据仓库Greenplum都有比较好的分区支持。 去年GP开源后,阿里云RDS PostgreSQL...

基于 阿里云 RDS PostgreSQL 打造实时用户画像推荐系统(varbitx)

20 minute read

背景 用户画像在市场营销的应用重建中非常常见,已经不是什么新鲜的东西,比较流行的解决方案是给用户贴标签,根据标签的组合,圈出需要的用户。 通常画像系统会用到宽表,以及分布式的系统。 宽表的作用是存储标签,例如每列代表一个标签。 但实际上这种设计不一定是最优或唯一的设计,本文将以PostgreSQL数据库为基...

PostgreSQL 无缝自增ID的实现 - by advisory lock

3 minute read

背景 一般来说,数据库都会有序列的功能,例如PostgreSQL就支持序列。 序列是指一直增长的值,但是它有一个不好的地方,就是用掉后就不会再有了,因此对于使用者来说,可能会拿到空洞的值。 例如 ``` postgres=# create table seq_test(id serial, info tex...

MySQL 增量同步到 PostgreSQL

less than 1 minute read

背景 接触到越来越多MySQL的数据库迁移到PostgreSQL的需求,整理了一些从MySQL增量迁移到PostgreSQL的开源项目。 有一些是基于binlog的,增量效果比较好,有兴趣的童鞋可以参考一下。 有一些是比较通用的,例如结合Kafka的。 参考 1. https://github.com/xs...

PostgreSQL 全文检索加速 快到没有朋友 - RUM索引接口(潘多拉魔盒)

5 minute read

背景 全文检索,模糊查询在现实的应用中用得非常多,特别是搜索引擎。 通常我们会想到使用搜索引擎来解决,但是需要考虑数据同步到搜索引擎,以及同步延迟,更新,一致性的问题。 并且使用搜索引擎我们还得多维护一个组件。 那么有没有更好的办法呢? 答案是有的,在PostgreSQL中,有内置的全文检索数据类型,以及...