Recent Posts

PostgreSQL 多查询条件,多个索引的选择算法与问题诊断方法

3 minute read

背景 当一个SQL中涉及多个条件,并且多个条件有多种索引可选时,数据库优化器是如何选择使用哪个索引的? 例如 有一张表,有2个字段,单列一个索引,双列一个复合索引. 建表。 postgres=# create table tbl(id int, gid int); CREATE TABLE ...

阿里云 RDS PostgreSQL 隐藏开关 - hash to btree, unlogged to logged

less than 1 minute read

背景 为了保护用户数据的可靠性,阿里云RDS PostgreSQL做了一些保护机制。 1、例如PostgreSQL 10版本以前, HASH索引是不写WAL日志的,所以如果你使用了hash index,当数据库崩溃后,HASH INDEX是dirty的,走HASH INDEX SCAN可能导致数据不一致。 又...

PostgreSQL Oracle 兼容性之 - 消息队列 DBMS_AQ

less than 1 minute read

背景 数据库支持消息队列的功能,利用消息队列可以实现异步广播,结合流计算实现异常数据推送等。 Oracle中,通过dbms_aq这个包支持消息队列。在PPAS中,有对应的包,兼容Oracle。 在PostgreSQL中,使用listen, notify同样能够支持消息队列的功能。在对应的驱动中有相应的介绍。包...

PostgreSQL 多值类型(如数组),元素值全局唯一 - 约束如何实现

4 minute read

背景 《PostgreSQL 11 preview - 支持 数组外键约束》 在PostgreSQL中,应用可以非常方便使用多值类型,比如数组、全文检索、范围类型等。 对于多值类型的操作也越来越方便,比如查询相交、包含可以使用索引,更新、替换、APPEND的操作也都有对应的UDF和OP来支撑。 可能应用会有...

PostgreSQL 类微博FEED系统 - 设计与性能指标

3 minute read

背景 类微博系统,最频繁用到的功能: A,D,E用户关注B用户。 B用户推送消息。 A,D,E用户接收消息。 A,D,E用户消费消息。涉及消费排序算法。 之前写过一篇《三体高可用PCC大赛 - facebook\微博 like场景 - 数据库设计与性能压测》 LIKE相关...

PostgreSQL 社交类好友关系系统实践 - 正反向关系查询加速

3 minute read

背景 关系系统在很多设计类应用中非常常见,例如查询你有哪些好友,你是哪些人的好友。 又比如我LIKE了哪些人,哪些人LIKE了我。 比如在之前的”PCC大赛 - facebook\微博 like场景”,也是类似的场景。 《三体高可用PCC大赛 - facebook\微博 like场景 - 数据库设计与性能压...