分区表锁粒度差异 - pg_pathman VS native partition table
背景 PostgreSQL 内置分区相比pg_pathman分区插件性能要差一大截: 《PostgreSQL 10 内置分区 vs pg_pathman perf profiling》 主要原因: 1、与优化器有关,内置分区表,plan\bind时需要分析所有子表,所以子表越多,性能会越差。例如下面这个CA...
背景 PostgreSQL 内置分区相比pg_pathman分区插件性能要差一大截: 《PostgreSQL 10 内置分区 vs pg_pathman perf profiling》 主要原因: 1、与优化器有关,内置分区表,plan\bind时需要分析所有子表,所以子表越多,性能会越差。例如下面这个CA...
背景 服务质量监控是精细化质量管理的重要环节: 例如实时统计FEED LOG在某些分组在某些固定区间(分钟、5分钟、10分钟)的水位值,avg, sum, count等。 本文将介绍一个CASE,某个服务的实时质量监控。 多个点值以数组的形式,批量合并写入。例如2500个点,一批写入。 为了实现高效率的统...
背景 背景请参考如下: 《PostgreSQL 相似搜索设计与性能 - 地址、QA、POI等文本 毫秒级相似搜索实践》 当需要进行相似搜索的数据量大于单机处理能力时,我们需要水平拆分来提高搜索能力。 或者可以使用阿里云的PolarDB for PG的产品(类似ORACLE RAC,支持增加计算节点)。比水平...
背景 PostgreSQL 10开始内置分区表的功能,11对分区表进行了增强,包括: 1、增加HASH分区的支持,支持了RANGE, HASH, LIST三种分区。 https://www.postgresql.org/docs/devel/static/ddl-partitioning.html 2、支持...
背景 关系数据库中很多操作来自关系代数中的一些概念。例如常见的JOIN操作,下面是关系代数中的一些概念。 https://en.wikipedia.org/wiki/Relational_algebra JOIN本身也分好多种比如EquiJoin , SemiJoin , AntiJoin , Divisio...
背景 append是数据库执行计划中很场景的一个NODE,数据来自扫描多个对象的集合时,都需要APPEND。比如: 1、扫描分区表 2、扫描主表(包含若干继承表时) 3、UNION ALL语句。(union 暂时不支持) 使用parallel append的功能,可以设计出非常灵活的架构,例如shar...
背景 PostgreSQL 10开始引入了原生支持的分区表,支持了range, list分区。 PostgreSQL 11对分区表的功能进行了增强,首先增加了hash分区表。其次,增加了分区表全局索引管理(PostgreSQL 10 分区表的主表上不支持索引,如果要建索引,不得不在每个分区上去定义,不太方便的。...
背景 在OLAP场景,排序是一个非常重要的功能。也是衡量数据库是否适合OLAP场景的一个重要指标。例如这些场景: 1、求TOP-K,例如在对数据进行分组后,取出每个分组的TOP-K。 2、求中位数,要求对数据排序,并取出处于中间水位的值。 3、数据柱状图,需要对数据进行排序,并按记录均匀分割成若干BUCKE...
背景 PostgreSQL 10开始引入了内置分区表功能,当分区表与分区表发生JOIN时,大家想象一下,分区和分区能直接一对一JOIN,而跳过与其他分区JOIN吗? 实际上我们在单表上,通过HASH可以达到类似的目的,即分片与分片JOIN,这样可以把JOIN的数据集合变小,同时能使用并行: 《PostgreS...
背景 在现实生活中,很多地方会用到相似搜索,例如 1、打车,要去某个地方,我们输入的目的地可能和数据库里面存的并不完全一致。所以只能通过相似搜索来实现。 2、搜索问题,同样的道理,我们搜的问题可能和存的问题不完全一致。只能通过相似搜索来匹配。 3、搜索兴趣点,等。 实际上PostgreSQL就可以支持相似...