Recent Posts

PostgreSQL 连接串URI配置(libpq兼容配置)

1 minute read

背景 连接数据库是最基本的操作之一,PostgreSQL libpq支持URI的连接模式,格式如下: postgresql://[user[:password]@][netloc][:port][,...][/dbname][?param1=value1&...] 例子 postgresql:...

秒级任意维度分析1TB级大表 - 通过采样估值满足高效TOP N等统计分析需求

9 minute read

背景 估值计算是统计学的常用手段。因为数据量庞大,求精确数值需要耗费巨大的资源,而统计分析并不要求完全精确的数据,因此估值计算是一种折中的方法,广泛应用于统计分析场景。 PostgreSQL是一个功能强大的数据库,在估值统计方面,提供了很多方法。 1、PostgreSQL中,求估计的UV,增量UV等(即cou...

地理坐标系(球面坐标系)和投影坐标系(平面坐标系)

less than 1 minute read

背景 《PostGIS 坐标转换(SRID)的边界问题引发的背景知识 - ST_Transform》 一文,介绍了使用某个坐标系时,计算国内某个点到某个点的距离出现了负数。 背景知识和坐标系有关。 什么是地理坐标系,什么是投影坐标系? 参考此文: http://www.cnblogs.com/jetz/...

PostgreSQL vs Greenplum Hash outer join hash表的选择

5 minute read

背景 数据分析、大表JOIN、多表JOIN时,哈希JOIN是比较好的提速手段。 hash join会首先扫描其中的一张表(包括需要输出的字段),根据JOIN列生成哈希表。然后扫描另一张表。 hash join介绍 https://www.postgresql.org/docs/10/static/planne...

PostgreSQL 黑科技 - 空间聚集存储, 内窥GIN, GiST, SP-GiST索引

6 minute read

背景 单身汉的房间可能是这样的,凌乱得很。 可能会有人表示不服,不是应该这样的吗? 实际上大多数情况下数据库存储也可能是这样的,数据凌乱。索引的目的是在凌乱的数据中找到目标数据,但是从凌乱的数据中按索引顺序扫描一批数据,会有什么后果呢: 没错,IO放大,我在以前的文章中有详细介绍过其原理。 《...

PostgreSQL 10 黑科技 - 自定义统计信息

4 minute read

背景 PostgreSQL和Oracle一样,优化器是基于成本的估算。 成本估算中很重要的一个环节是估计每个执行节点返回的记录数。 例如两张表JOIN的时候,如果走HASH JOIN那么需要选择记录数少的那个作为哈希表。 又比如求多个字段的group by,评估返回多少条记录给上层节点。 对于基于单列统计...

PostgreSQL cube 插件 - 多维空间对象

6 minute read

背景 CUBE是一个多维数据类型,支持两种多维类型:多维POINT、区间(左下+右上)。以及这些几何对象的几何特性搜索和计算(方位搜索、距离计算),这些搜索都支持GiST索引。 我们甚至可以将多个字段合并成多维POINT,实现对大量数据的高效空间聚集、空间计算。 语法 Ex...