-
PostGIS高效解决行政区划归属查询
2018年06月06日 在 PG 开发
微信公众号原文 在应用开发中,很多时候我们需要解决这样一个问题:根据用户的经纬度坐标,定位用户的行政区划。 我们收集到的是诸如28°00'00"N 100°00'00.000"E这样的经纬度坐标,但实际感兴趣的是这个点所属的行政区划:(中华人民共和国,云南省,迪庆藏族自治州,香格里拉市)。这种将地理坐标映射到某条记录的操作就称为地理编码(GeoEncode)。高效实现地理编码是一个很有趣的问题。 本文介绍了该问题的解决与优化方案:能在确保正确性的前提下,能用几兆的空 …
-
KNN极致优化:从RDS到PostGIS
2018年06月06日 在 PG 开发
灵活应用数据库的功能,可以轻松实现 GIS 圈选场景下三万倍的性能提升。 Level 方法 性能/耗时(ms) 可维护性/可靠性 备注 1 暴力扫表 30,000 - 形式简单 2 经纬索引 35 复杂度/魔数问题 额外复杂度 3 联合索引 10 复杂度/魔数问题 额外复杂度 4 GIST 4 最简表达,完全精确 形式简单,距离更精确,PostgreSQL限定 5 btree_gist联合索引 1 最简表达,完全精确 形式简单,距离更精确,PostgreSQL限定 场景 互联网中的很多业务都涉及 …
-
为什么要学习数据库原理
2018年04月20日 在 数据库
我们学校开了数据库系统原理课程。但是我还是很迷茫,这几节课老师一上来就讲一堆令人头大的名词概念,我以为我们知道“如何设计构建表”,“如何mysql增删改查”就行了……那为什么还要了解关系模式的表示方法,计算,规范化……概念模型……各种模型的相互转换,为什么还要了解什么关系代数,什么笛卡尔积……这些的理论知识。我十分困惑,通过这些理论概念,该课的目的或者说该书的目的究竟是想让学生学会什么呢? 只会写代码的是码农;学好数据库,基本能混口饭吃;在此基础上再学好操作系统和计算机网络,就能当一个不错的程 …
-
PgAdmin安装配置
2018年04月14日 在 PG 管理
PgAdmin4的安装与配置 PgAdmin是一个为PostgreSQL定制设计的GUI。用起来很不错。可以以本地GUI程序或者Web服务的方式运行。因为Retina屏幕下面PgAdmin依赖的GUI组件显示效果有点问题,这里主要介绍如何以Web服务方式(Python Flask)配置运行PgAdmin4。 下载 PgAdmin可以从官方FTP下载。 postgresql网站FTP目录地址 wget …
-
故障档案:快慢不匀雪崩
2018年04月08日 在 PG 管理
最近发生了一起匪夷所思的故障,某数据库切走了一半的数据量和负载。 其他什么都没变,本来还好;压力减小,却在高峰期陷入濒死状态,完全不符合直觉。 但正如福尔摩斯所说,当你排除掉一切不可能之后,剩下的即使再离奇,也是事实。 一、摘要 某日凌晨4点,进行了核心库进行分库迁移,拆走一半的表和一半的查询负载,原库节点规模不变。 当日晚高峰核心库所有热备库(15台)出现连接堆积,压力暴涨,针对性地清理慢查询不再起效。 无差别持续杀查询,有立竿见影的救火效果(22:30后),且暂停后故障立刻重 …
-
Bash与psql小技巧
2018年04月07日 在 PG 管理
一些PostgreSQL与Bash交互的技巧。 使用严格模式编写Bash脚本 使用Bash严格模式,可以避免很多无谓的错误。在Bash脚本开始的地方放上这一行很有用: set -euo pipefail -e:当程序返回非0状态码时报错退出 -u:使用未初始化的变量时报错,而不是当成NULL -o pipefail:使用Pipe中出错命令的状态码(而不是最后一个)作为整个Pipe的状态码1。 执行SQL脚本的Bash包装脚本 通过psql运行SQL脚本时,我们期望有这么两个功能: 能向脚本中传入 …
-
用 Exclude 实现互斥约束
2018年04月06日 在 PG 开发
Exclude约束是一个PostgreSQL扩展,它可以实现一些更高级,更巧妙的的数据库约束。 前言 数据完整性是极其重要的,但由应用保证的数据完整性并不总是那么靠谱:人会犯傻,程序会出错。如果能通过数据库约束来强制数据完整性那是再好不过了:后端程序员不用再担心竞态条件导致的微妙错误,数据分析师也可以对数据质量充满信心,不需要验证与清洗。 关系型数据库通常会提供PRIMARY KEY, FOREIGN KEY, UNIQUE, CHECK约束,然而并不是所有的业务约束都可以用这几种约束表达。一些 …