专栏导览
按领域划分的六个长青专栏,均提供独立的 RSS 订阅源。

做正确的事
虚假的游记与评论,是技术用于歧途的表现。软件工程师作为先进生产力的代表,有责任将自己的力量用在正确的事情上。

理解互联网
世界潮流,浩浩汤汤。顺之则昌,逆之则亡。本文来聊一聊互联网的本质,互联网统治下的世界,权力的转移与未来的冲击。

关系膨胀的监控与治理
PostgreSQL使用了MVCC作为主要并发控制技术,它有很多好处,但也会带来一些其他的影响,例如关系膨胀。

珠峰东坡:嘎玛沟徒步
13天旅程,8天徒步,走完了著名的骨灰级路线 —— 嘎玛沟 终于看到最美的珠峰东坡日照金山。

TimescaleDB 快速上手
TimescaleDB是PostgreSQL的一个扩展插件,提供时序数据库的一些功能。

PipelineDB快速上手
PipelineDB是PostgreSQL的一个扩展插件,提供流式数据处理的相关功能。

故障档案:序列号消耗过快导致整型溢出
如果您在表上用了Interger的序列号,最好还是考虑一下可能溢出的情况。

故障档案:PostgreSQL事务号回卷
XID WrapAround也许是PostgreSQL特有的一种故障。

学习知识的几个层次
通过观察思辨,我们把脑内认识深化过程从接受知识开始到最高的“悟性”层次可以分成四个阶段:知识,理解,意识,悟性。

PostgreSQL的触发器使用注意事项
详细了解PostgreSQL中触发器的管理与使用。

GeoIP 地理逆查询优化
在应用开发中,一个很常见的需求就是GeoIP转换:将请求的来源IP转换为相应的地理坐标,或者行政区划。

理解字符编码原理
如果不了解字符编码的基本原理,即使只是简单常规的字符串比较、排序、随机访问操作,都可能会一不小心栽进大坑中。本文详细解析ASCII、Unicode、UTF-8等编码原理,希望能讲清楚这个问题。

理解字符编码
程序员,是与Code(代码/编码)打交道的,而字符编码又是最为基础的编码。如何使用二进制数来表示字符,这个字符编码问题并没有看上去那么简单,本文希望能讲清楚这个问题。

PostgreSQL开发规约(2018版)
没有规矩,不成方圆。本文针对PostgreSQL数据库原理与特性,整理了一份开发规范,可以减少大家在使用PostgreSQL数据库过程中遇到的困惑。

并发异常那些事
并发程序很难写对,更难写好。很多程序员只是把问题丢给数据库,但即使最强大的ACID数据库也会使用弱隔离级别。本文阐述SQL92标准定义的隔离级别及其缺陷,以及现代模型中的隔离级别定义。

PostgreSQL好处都有啥
PostgreSQL的Slogan是"世界上最先进的开源关系型数据库",要我说最能生动体现PG特色的口号应该是:一专多长的全栈数据库,一招鲜吃遍天。

区块链与分布式数据库
区块链的技术本质、提供的功能及演化方向就是分布式数据库。确切地讲,是拜占庭容错(抗恶意节点攻击)的分布式(无领导者复制)数据库。智能合约本质上就是这个分布式数据库上的存储过程。

PostGIS高效解决行政区划归属查询
如何高效解决典型地理逆编码问题:根据用户的经纬度坐标,定位用户的行政区划。

KNN极致优化:从RDS到PostGIS
KNN问题极致优化,从传统关系型设计到PostGIS,实现GIS圈选场景下三万倍的性能提升。

监控PG中的表大小
PostgreSQL中的表对应着许多物理文件,本文介绍如何统计一张表在PostgreSQL的实际大小。

一致性:过载的术语
一致性这个词重载得很厉害,在不同语境中代表着不同的东西。ACID里的C指事务一致性,CAP里的C指线性一致性,此外还有"一致性哈希"、"最终一致性"等不同涵义。本文梳理这些概念的区别。

为什么要学习数据库原理
只会写代码的是码农,学好数据库基本能混口饭吃。然而对优秀的工程师来说,只会用数据库是远远不够的。绝大多数应用都是数据密集型应用,数据库提供了对应用通用存储需求的高级抽象。

PgAdmin安装配置
PgAdmin是一个管理PostgreSQL的GUI程序,用python写成,但实在是过于古早,需要一些额外配置。

冯振彪自传
这是一份很有趣的自传

做正确的事
虚假的游记与评论,是技术用于歧途的表现。软件工程师作为先进生产力的代表,有责任将自己的力量用在正确的事情上。

理解互联网
世界潮流,浩浩汤汤。顺之则昌,逆之则亡。本文来聊一聊互联网的本质,互联网统治下的世界,权力的转移与未来的冲击。

关系膨胀的监控与治理
PostgreSQL使用了MVCC作为主要并发控制技术,它有很多好处,但也会带来一些其他的影响,例如关系膨胀。

珠峰东坡:嘎玛沟徒步
13天旅程,8天徒步,走完了著名的骨灰级路线 —— 嘎玛沟 终于看到最美的珠峰东坡日照金山。

TimescaleDB 快速上手
TimescaleDB是PostgreSQL的一个扩展插件,提供时序数据库的一些功能。

PipelineDB快速上手
PipelineDB是PostgreSQL的一个扩展插件,提供流式数据处理的相关功能。

故障档案:序列号消耗过快导致整型溢出
如果您在表上用了Interger的序列号,最好还是考虑一下可能溢出的情况。

故障档案:PostgreSQL事务号回卷
XID WrapAround也许是PostgreSQL特有的一种故障。

学习知识的几个层次
通过观察思辨,我们把脑内认识深化过程从接受知识开始到最高的“悟性”层次可以分成四个阶段:知识,理解,意识,悟性。

PostgreSQL的触发器使用注意事项
详细了解PostgreSQL中触发器的管理与使用。

GeoIP 地理逆查询优化
在应用开发中,一个很常见的需求就是GeoIP转换:将请求的来源IP转换为相应的地理坐标,或者行政区划。

理解字符编码原理
如果不了解字符编码的基本原理,即使只是简单常规的字符串比较、排序、随机访问操作,都可能会一不小心栽进大坑中。本文详细解析ASCII、Unicode、UTF-8等编码原理,希望能讲清楚这个问题。

理解字符编码
程序员,是与Code(代码/编码)打交道的,而字符编码又是最为基础的编码。如何使用二进制数来表示字符,这个字符编码问题并没有看上去那么简单,本文希望能讲清楚这个问题。

PostgreSQL开发规约(2018版)
没有规矩,不成方圆。本文针对PostgreSQL数据库原理与特性,整理了一份开发规范,可以减少大家在使用PostgreSQL数据库过程中遇到的困惑。

并发异常那些事
并发程序很难写对,更难写好。很多程序员只是把问题丢给数据库,但即使最强大的ACID数据库也会使用弱隔离级别。本文阐述SQL92标准定义的隔离级别及其缺陷,以及现代模型中的隔离级别定义。

PostgreSQL好处都有啥
PostgreSQL的Slogan是"世界上最先进的开源关系型数据库",要我说最能生动体现PG特色的口号应该是:一专多长的全栈数据库,一招鲜吃遍天。

区块链与分布式数据库
区块链的技术本质、提供的功能及演化方向就是分布式数据库。确切地讲,是拜占庭容错(抗恶意节点攻击)的分布式(无领导者复制)数据库。智能合约本质上就是这个分布式数据库上的存储过程。

PostGIS高效解决行政区划归属查询
如何高效解决典型地理逆编码问题:根据用户的经纬度坐标,定位用户的行政区划。

KNN极致优化:从RDS到PostGIS
KNN问题极致优化,从传统关系型设计到PostGIS,实现GIS圈选场景下三万倍的性能提升。

监控PG中的表大小
PostgreSQL中的表对应着许多物理文件,本文介绍如何统计一张表在PostgreSQL的实际大小。

一致性:过载的术语
一致性这个词重载得很厉害,在不同语境中代表着不同的东西。ACID里的C指事务一致性,CAP里的C指线性一致性,此外还有"一致性哈希"、"最终一致性"等不同涵义。本文梳理这些概念的区别。

为什么要学习数据库原理
只会写代码的是码农,学好数据库基本能混口饭吃。然而对优秀的工程师来说,只会用数据库是远远不够的。绝大多数应用都是数据密集型应用,数据库提供了对应用通用存储需求的高级抽象。

PgAdmin安装配置
PgAdmin是一个管理PostgreSQL的GUI程序,用python写成,但实在是过于古早,需要一些额外配置。

冯振彪自传
这是一份很有趣的自传
做正确的事

最近,微信公众号“小声比比”发表了几篇文章,捅了马蜂窝: 估值 175 亿的旅游独角兽,是一座僵尸和水军构成的鬼城? 马蜂窝开始毁灭证据了,但这水平真的哈哈哈哈哈哈哈哈 《我承认,我们是有组织攻击马蜂窝的》 非常敬佩博主梓泉,这个马蜂窝捅的好。蚂蜂窝已经提请诉讼,这个案子无论结果如何,意义和影响都是巨大的。目测将如同 06 年的南京彭宇案一样,载入中国的司法史。当年一个案子让国人的道德观念倒退了五十年;希望这一次劣币不会驱逐良币,虚假不会压倒真实。 虚假的游记与评论,是技术用于歧途的表现。软件工 …
最近,微信公众号“小声比比”发表了几篇文章,捅了马蜂窝: 估值 175 亿的旅游独角兽,是一座僵尸和水军构成的鬼城? 马蜂窝开始毁灭证据了,但这水平真的哈哈哈哈哈哈哈哈 《我承认,我们是有组织攻击马蜂窝的》 非常敬佩博主梓泉,这个马蜂窝捅的好。蚂蜂窝已经提请诉讼,这个案子无论结果如何,意义和影响都是巨大的。目测将如同 06 年的南京彭宇案一样,载入中国的司法史。当年一个案子让国人的道德观念倒退了五十年;希望这一次劣币不会驱逐良币,虚假不会压倒真实。 虚假的游记与评论,是技术用于歧途的表现。软件工 …
理解互联网

我曾经觉得互联网的本质,互联网行业的发展,互联网公司的战略这些“高大上”的东西都应该是政府官员,公司高管思考的问题。作为一个互联网从业人员,一名软件工程师,能把自己领域的技术钻研透就不错了。但现在的我改变了想法:一个人的命运啊,当然要靠自我奋斗,但也要考虑到历史的进程。 世界潮流,浩浩汤汤。顺之则昌,逆之则亡。站在历史转折的十字路口,只有认清大势才不会迷茫。这几个月的空闲时间,几乎全部被我投入到了认识世界的过程之中。大致看清了当前的形势的轮廓,并对未来的走势形成了影影绰绰的直觉;虽然技术进步的脚 …
我曾经觉得互联网的本质,互联网行业的发展,互联网公司的战略这些“高大上”的东西都应该是政府官员,公司高管思考的问题。作为一个互联网从业人员,一名软件工程师,能把自己领域的技术钻研透就不错了。但现在的我改变了想法:一个人的命运啊,当然要靠自我奋斗,但也要考虑到历史的进程。 世界潮流,浩浩汤汤。顺之则昌,逆之则亡。站在历史转折的十字路口,只有认清大势才不会迷茫。这几个月的空闲时间,几乎全部被我投入到了认识世界的过程之中。大致看清了当前的形势的轮廓,并对未来的走势形成了影影绰绰的直觉;虽然技术进步的脚 …
关系膨胀的监控与治理

PostgreSQL使用了MVCC作为主要并发控制技术,它有很多好处,但也会带来一些其他的影响,例如关系膨胀。关系(表与索引)膨胀会对数据库性能产生负面影响,并浪费磁盘空间。为了使PostgreSQL始终保持在最佳性能,有必要及时对膨胀的关系进行垃圾回收,并定期重建过度膨胀的关系。 在实际操作中,垃圾回收并没有那么简单,这里有一系列的问题: 关系膨胀的原因? 关系膨胀的度量? 关系膨胀的监控? 关系膨胀的处理? 本文将详细说明这些问题。 关系膨胀概述 假设某个关系实际占用存储100G,但其中有很 …
PostgreSQL使用了MVCC作为主要并发控制技术,它有很多好处,但也会带来一些其他的影响,例如关系膨胀。关系(表与索引)膨胀会对数据库性能产生负面影响,并浪费磁盘空间。为了使PostgreSQL始终保持在最佳性能,有必要及时对膨胀的关系进行垃圾回收,并定期重建过度膨胀的关系。 在实际操作中,垃圾回收并没有那么简单,这里有一系列的问题: 关系膨胀的原因? 关系膨胀的度量? 关系膨胀的监控? 关系膨胀的处理? 本文将详细说明这些问题。 关系膨胀概述 假设某个关系实际占用存储100G,但其中有很 …
珠峰东坡:嘎玛沟徒步

今年的国庆假期不错,请六天假就能把中秋国庆串起来,连休十六天。中国的省份差不多都跑了一遍,但西藏还没有去过。在8264上看到了去嘎玛沟/珠峰东坡徒步的活动,心想这个这个倒是不错~,于是就定了下来。 嘎玛沟在上世纪20年代就被英美探险家称为“世界上最美丽的山谷”、“世界十大经典徒步线路”;在中国十大经典徒步线路中排第二名。一路上能看到珠穆朗玛峰(1st, 8844m)、洛子峰(4th, 8516m)、马卡鲁峰(5th, 8463m),以及珠穆朗卓(24th,7804m)。 这条徒步路线挑战不小,全 …
今年的国庆假期不错,请六天假就能把中秋国庆串起来,连休十六天。中国的省份差不多都跑了一遍,但西藏还没有去过。在8264上看到了去嘎玛沟/珠峰东坡徒步的活动,心想这个这个倒是不错~,于是就定了下来。 嘎玛沟在上世纪20年代就被英美探险家称为“世界上最美丽的山谷”、“世界十大经典徒步线路”;在中国十大经典徒步线路中排第二名。一路上能看到珠穆朗玛峰(1st, 8844m)、洛子峰(4th, 8516m)、马卡鲁峰(5th, 8463m),以及珠穆朗卓(24th,7804m)。 这条徒步路线挑战不小,全 …
TimescaleDB 快速上手

官方网站:https://www.timescale.com 官方文档:https://docs.timescale.com/v0.9/main Github:https://github.com/timescale/timescaledb 为什么使用TimescaleDB 什么是时间序列数据? 我们一直在谈论什么是“时间序列数据”,以及与其他数据有何不同以及为什么? 许多应用程序或数据库实际上采用的是过于狭窄的视图,并将时间序列数据与特定形式的服务器度量值等同起来: Name: CPU …
官方网站:https://www.timescale.com 官方文档:https://docs.timescale.com/v0.9/main Github:https://github.com/timescale/timescaledb 为什么使用TimescaleDB 什么是时间序列数据? 我们一直在谈论什么是“时间序列数据”,以及与其他数据有何不同以及为什么? 许多应用程序或数据库实际上采用的是过于狭窄的视图,并将时间序列数据与特定形式的服务器度量值等同起来: Name: CPU …
PipelineDB快速上手

PipelineDB安装与配置 PipelineDB可以直接通过官方rpm包安装。 加载PipelineDB需要添加动态链接库,在 postgresql.conf 中修改配置项并重启: shared_preload_libraries = 'pipelinedb' max_worker_processes = 128 注意如果不修改 max_worker_processes 会报错。其他配置都参照标准的PostgreSQL PipelineDB使用样例 —— 维基PV数据 -- 创建Stream …
PipelineDB安装与配置 PipelineDB可以直接通过官方rpm包安装。 加载PipelineDB需要添加动态链接库,在 postgresql.conf 中修改配置项并重启: shared_preload_libraries = 'pipelinedb' max_worker_processes = 128 注意如果不修改 max_worker_processes 会报错。其他配置都参照标准的PostgreSQL PipelineDB使用样例 —— 维基PV数据 -- 创建Stream …
故障档案:序列号消耗过快导致整型溢出

0x01 概览 故障表现: 某张使用自增列的表序列号涨至整型上限,无法写入。 发现表中的自增列存在大量空洞,很多序列号没有对应记录就被消耗掉了。 故障影响:非核心业务某表,10分钟左右无法写入。 故障原因: 内因:使用了INTEGER而不是BIGINT作为主键类型。 外因:业务方不了解 SEQUENCE 的特性,执行大量违背约束的无效插入,浪费了大量序列号。 修复方案: 紧急操作:降级线上插入函数为直接返回,避免错误扩大。 应急方案:创建临时表,生成5000万个浪费空洞中的临时ID,修改插入函数 …
0x01 概览 故障表现: 某张使用自增列的表序列号涨至整型上限,无法写入。 发现表中的自增列存在大量空洞,很多序列号没有对应记录就被消耗掉了。 故障影响:非核心业务某表,10分钟左右无法写入。 故障原因: 内因:使用了INTEGER而不是BIGINT作为主键类型。 外因:业务方不了解 SEQUENCE 的特性,执行大量违背约束的无效插入,浪费了大量序列号。 修复方案: 紧急操作:降级线上插入函数为直接返回,避免错误扩大。 应急方案:创建临时表,生成5000万个浪费空洞中的临时ID,修改插入函数 …
故障档案:PostgreSQL事务号回卷

遇到一次磁盘坏块导致的事务回卷故障: 主库(PostgreSQL 9.3)磁盘坏块导致几张表上的VACUUM FREEZE执行失败。 无法回收老旧事务ID,导致整库事务ID濒临用尽,数据库进入自我保护状态不可用。 磁盘坏块导致手工VACUUM抢救不可行。 提升从库后,需要紧急VACUUM FREEZE才能继续服务,进一步延长了故障时间。 主库进入保护状态后提交日志(clog)没有及时复制到从库,从库产生存疑事务拒绝服务。 摘要 这是一个即将下线老旧库,疏于管理。坏块征兆在一周前就已经出现,没有及 …
遇到一次磁盘坏块导致的事务回卷故障: 主库(PostgreSQL 9.3)磁盘坏块导致几张表上的VACUUM FREEZE执行失败。 无法回收老旧事务ID,导致整库事务ID濒临用尽,数据库进入自我保护状态不可用。 磁盘坏块导致手工VACUUM抢救不可行。 提升从库后,需要紧急VACUUM FREEZE才能继续服务,进一步延长了故障时间。 主库进入保护状态后提交日志(clog)没有及时复制到从库,从库产生存疑事务拒绝服务。 摘要 这是一个即将下线老旧库,疏于管理。坏块征兆在一周前就已经出现,没有及 …
学习知识的几个层次

微信公众号原文 知识的层次 当我们说“学习知识”时,究竟说的什么? 当我们说一个人“聪明”时,指的又到底是什么? 通过观察思辨,我们把脑内认识深化过程从接受知识开始到最高的“悟性”层次可以分成四个阶段:知识,理解,意识,悟性。整个认识的函数图景整体上是连续单调递增的,但在理解与意识的阶段之间存在一个跃迁。那么让我们来明确一下,这四个词到底意味着什么。 第一层次:知识 简而言之,知识就是脑内存储的正确信息,换言之,脑内存储的一切正确信息都叫做知识,因此知识一词是很广泛的术语。所谓“正确”信息,即 …
微信公众号原文 知识的层次 当我们说“学习知识”时,究竟说的什么? 当我们说一个人“聪明”时,指的又到底是什么? 通过观察思辨,我们把脑内认识深化过程从接受知识开始到最高的“悟性”层次可以分成四个阶段:知识,理解,意识,悟性。整个认识的函数图景整体上是连续单调递增的,但在理解与意识的阶段之间存在一个跃迁。那么让我们来明确一下,这四个词到底意味着什么。 第一层次:知识 简而言之,知识就是脑内存储的正确信息,换言之,脑内存储的一切正确信息都叫做知识,因此知识一词是很广泛的术语。所谓“正确”信息,即 …
PostgreSQL的触发器使用注意事项

概览 触发器行为概述 触发器的分类 触发器的功能 触发器的种类 触发器的触发 触发器的创建 触发器的修改 触发器的查询 触发器的性能 触发器概述 触发器行为概述:英文,中文 触发器分类 触发时机:BEFORE, AFTER, INSTEAD 触发事件:INSERT, UPDATE, DELETE,TRUNCATE 触发范围:语句级,行级 内部创建:用于约束的触发器,用户定义的触发器 触发模式:origin|local(O), replica(R),disable(D) 触发器操作 触发器的操作通 …
概览 触发器行为概述 触发器的分类 触发器的功能 触发器的种类 触发器的触发 触发器的创建 触发器的修改 触发器的查询 触发器的性能 触发器概述 触发器行为概述:英文,中文 触发器分类 触发时机:BEFORE, AFTER, INSTEAD 触发事件:INSERT, UPDATE, DELETE,TRUNCATE 触发范围:语句级,行级 内部创建:用于约束的触发器,用户定义的触发器 触发模式:origin|local(O), replica(R),disable(D) 触发器操作 触发器的操作通 …
GeoIP 地理逆查询优化

IP归属地查询的高效实现 在应用开发中,一个‘很常见’的需求就是GeoIP转换。将请求的来源IP转换为相应的地理坐标,或者行政区划(国家-省-市-县-乡-镇)。这种功能有很多用途,譬如分析网站流量的地理来源,或者干一些坏事。使用PostgreSQL可以多快好省,优雅高效地实现这一需求。 0x01 思路方法 通常网上的IP地理数据库的形式都是:start_ip, stop_ip , longitude, latitude,再缀上一些国家代码,城市代码,邮编之类的属性字段。大概长这样: …
IP归属地查询的高效实现 在应用开发中,一个‘很常见’的需求就是GeoIP转换。将请求的来源IP转换为相应的地理坐标,或者行政区划(国家-省-市-县-乡-镇)。这种功能有很多用途,譬如分析网站流量的地理来源,或者干一些坏事。使用PostgreSQL可以多快好省,优雅高效地实现这一需求。 0x01 思路方法 通常网上的IP地理数据库的形式都是:start_ip, stop_ip , longitude, latitude,再缀上一些国家代码,城市代码,邮编之类的属性字段。大概长这样: …
理解字符编码原理

程序员,是与 Code(代码/编码) 打交道的,而字符编码又是最为基础的编码。 如何 使用二进制数来表示字符,这个 字符编码 问题并没有看上去那么简单,实际上它的复杂程度远超一般人的想象:输入、比较排序与搜索、反转、换行与分词、大小写、区域设置,控制字符,组合字符与规范化,排序规则,处理不同语言中的特异需求,变长编码,字节序与BOM,Surrogate,历史兼容性,正则表达式兼容性,微妙与严重的安全问题等等等等。 如果不了解字符编码的基本原理,即使只是简单常规的字符串比较、排序、随机访问操作,都 …
程序员,是与 Code(代码/编码) 打交道的,而字符编码又是最为基础的编码。 如何 使用二进制数来表示字符,这个 字符编码 问题并没有看上去那么简单,实际上它的复杂程度远超一般人的想象:输入、比较排序与搜索、反转、换行与分词、大小写、区域设置,控制字符,组合字符与规范化,排序规则,处理不同语言中的特异需求,变长编码,字节序与BOM,Surrogate,历史兼容性,正则表达式兼容性,微妙与严重的安全问题等等等等。 如果不了解字符编码的基本原理,即使只是简单常规的字符串比较、排序、随机访问操作,都 …
理解字符编码

微信公众号原文 程序员,是与 Code(代码/编码) 打交道的,而字符编码又是最为基础的编码。如何 使用二进制数来表示字符,这个 字符编码 问题并没有看上去那么简单,实际上它的复杂程度远超一般人的想象:输入、比较排序与搜索、反转、换行与分词、大小写、区域设置,控制字符,组合字符与规范化,排序规则,处理不同语言中的特异需求,变长编码,字节序与BOM,Surrogate,历史兼容性,正则表达式兼容性,微妙与严重的安全问题等等等等。 如果不了解字符编码的基本原理,即使只是简单常规的字符串比较、排序、 …
微信公众号原文 程序员,是与 Code(代码/编码) 打交道的,而字符编码又是最为基础的编码。如何 使用二进制数来表示字符,这个 字符编码 问题并没有看上去那么简单,实际上它的复杂程度远超一般人的想象:输入、比较排序与搜索、反转、换行与分词、大小写、区域设置,控制字符,组合字符与规范化,排序规则,处理不同语言中的特异需求,变长编码,字节序与BOM,Surrogate,历史兼容性,正则表达式兼容性,微妙与严重的安全问题等等等等。 如果不了解字符编码的基本原理,即使只是简单常规的字符串比较、排序、 …
PostgreSQL开发规约(2018版)

微信公众号原文 0x00背景 没有规矩,不成方圆。 PostgreSQL的功能非常强大,但是要把PostgreSQL用好,需要后端、运维、DBA的协力配合。 本文针对PostgreSQL数据库原理与特性,整理了一份开发规范,希望可以减少大家在使用PostgreSQL数据库过程中遇到的困惑。你好我也好,大家都好。 0x01 命名规范 无名,万物之始,有名,万物之母。 【强制】 通用命名规则 本规则适用于所有对象名,包括:库名、表名、表名、列名、函数名、视图名、序列号名、别名等。 对象名务必只使用 …
微信公众号原文 0x00背景 没有规矩,不成方圆。 PostgreSQL的功能非常强大,但是要把PostgreSQL用好,需要后端、运维、DBA的协力配合。 本文针对PostgreSQL数据库原理与特性,整理了一份开发规范,希望可以减少大家在使用PostgreSQL数据库过程中遇到的困惑。你好我也好,大家都好。 0x01 命名规范 无名,万物之始,有名,万物之母。 【强制】 通用命名规则 本规则适用于所有对象名,包括:库名、表名、表名、列名、函数名、视图名、序列号名、别名等。 对象名务必只使用 …
并发异常那些事

并发程序很难写对,更难写好。很多程序员也没有真正弄清楚这些问题,不过是一股脑地把这些问题丢给数据库而已。并发异常并不仅仅是一个理论问题:这些异常曾经造成过很多资金损失,耗费过大量财务审计人员的心血。但即使是最流行、最强大的关系型数据库(通常被认为是“ACID”数据库),也会使用弱隔离级别,所以它们也不一定能防止这些并发异常的发生。 比起盲目地依赖工具,我们应该对存在的并发问题的种类,以及如何防止这些问题有深入的理解。 本文将阐述SQL92标准中定义的隔离级别及其缺陷,现代模型中的隔离级别与定义这 …
并发程序很难写对,更难写好。很多程序员也没有真正弄清楚这些问题,不过是一股脑地把这些问题丢给数据库而已。并发异常并不仅仅是一个理论问题:这些异常曾经造成过很多资金损失,耗费过大量财务审计人员的心血。但即使是最流行、最强大的关系型数据库(通常被认为是“ACID”数据库),也会使用弱隔离级别,所以它们也不一定能防止这些并发异常的发生。 比起盲目地依赖工具,我们应该对存在的并发问题的种类,以及如何防止这些问题有深入的理解。 本文将阐述SQL92标准中定义的隔离级别及其缺陷,现代模型中的隔离级别与定义这 …
PostgreSQL好处都有啥

PostgreSQL的Slogan是“世界上最先进的开源关系型数据库”,但我觉得这口号不够响亮,而且一看就是在怼MySQL那个“世界上最流行的开源关系型数据库”的口号,有碰瓷之嫌。要我说最能生动体现PG特色的口号应该是:一专多长的全栈数据库,一招鲜吃遍天嘛。 全栈数据库 成熟的应用可能会用到许许多多的数据组件(功能):缓存,OLTP,OLAP/批处理/数据仓库,流处理/消息队列,搜索索引,NoSQL/文档数据库,地理数据库,空间数据库,时序数据库,图数据库。传统的架构选型呢,可能会组合使用多种组 …
PostgreSQL的Slogan是“世界上最先进的开源关系型数据库”,但我觉得这口号不够响亮,而且一看就是在怼MySQL那个“世界上最流行的开源关系型数据库”的口号,有碰瓷之嫌。要我说最能生动体现PG特色的口号应该是:一专多长的全栈数据库,一招鲜吃遍天嘛。 全栈数据库 成熟的应用可能会用到许许多多的数据组件(功能):缓存,OLTP,OLAP/批处理/数据仓库,流处理/消息队列,搜索索引,NoSQL/文档数据库,地理数据库,空间数据库,时序数据库,图数据库。传统的架构选型呢,可能会组合使用多种组 …
区块链与分布式数据库

区块链的本质,想提供的功能,及其演化方向,就是分布式数据库。 确切的讲,是 拜占庭容错(抗恶意节点攻击)的分布式(无领导者复制)数据库。 如果这种分布式数据库用来存储各种币的 交易记录,这个系统就叫做所谓的“XX币”。例如以太坊就是这样一个分布式数据库,上面除了记载着各种山寨币的交易记录,还可以记载各种奇奇怪怪的内容。花一点以太币,就可以在这个分布式数据库里留下一条记录(一封信)。而所谓 智能合约 就是这个分布式数据库上的 存储过程。 从形式上看,区块链 与 预写式日志 …
区块链的本质,想提供的功能,及其演化方向,就是分布式数据库。 确切的讲,是 拜占庭容错(抗恶意节点攻击)的分布式(无领导者复制)数据库。 如果这种分布式数据库用来存储各种币的 交易记录,这个系统就叫做所谓的“XX币”。例如以太坊就是这样一个分布式数据库,上面除了记载着各种山寨币的交易记录,还可以记载各种奇奇怪怪的内容。花一点以太币,就可以在这个分布式数据库里留下一条记录(一封信)。而所谓 智能合约 就是这个分布式数据库上的 存储过程。 从形式上看,区块链 与 预写式日志 …
PostGIS高效解决行政区划归属查询

微信公众号原文 在应用开发中,很多时候我们需要解决这样一个问题:根据用户的经纬度坐标,定位用户的行政区划。 我们收集到的是诸如 28°00'00"N 100°00'00.000"E 这样的经纬度坐标,但实际感兴趣的是这个点所属的行政区划:(中华人民共和国,云南省,迪庆藏族自治州,香格里拉市)。这种将地理坐标映射到某条记录的操作就称为 地理编码(GeoEncode)。高效实现地理编码是一个很有趣的问题。 本文介绍了该问题的解决与优化方案:能在确保正确性的前提下,能用几兆的空间,110μs的执行时 …
微信公众号原文 在应用开发中,很多时候我们需要解决这样一个问题:根据用户的经纬度坐标,定位用户的行政区划。 我们收集到的是诸如 28°00'00"N 100°00'00.000"E 这样的经纬度坐标,但实际感兴趣的是这个点所属的行政区划:(中华人民共和国,云南省,迪庆藏族自治州,香格里拉市)。这种将地理坐标映射到某条记录的操作就称为 地理编码(GeoEncode)。高效实现地理编码是一个很有趣的问题。 本文介绍了该问题的解决与优化方案:能在确保正确性的前提下,能用几兆的空间,110μs的执行时 …
KNN极致优化:从RDS到PostGIS

灵活应用数据库的功能,可以轻松实现 GIS 圈选场景下三万倍的性能提升。 Level 方法 性能/耗时(ms) 可维护性/可靠性 备注 1 暴力扫表 30,000 - 形式简单 2 经纬索引 35 复杂度/魔数问题 额外复杂度 3 联合索引 10 复杂度/魔数问题 额外复杂度 4 GIST 4 最简表达,完全精确 形式简单,距离更精确,PostgreSQL限定 5 btree_gist 联合索引 1 最简表达,完全精确 形式简单,距离更精确,PostgreSQL限定 场景 互联网中的很多业务都涉 …
灵活应用数据库的功能,可以轻松实现 GIS 圈选场景下三万倍的性能提升。 Level 方法 性能/耗时(ms) 可维护性/可靠性 备注 1 暴力扫表 30,000 - 形式简单 2 经纬索引 35 复杂度/魔数问题 额外复杂度 3 联合索引 10 复杂度/魔数问题 额外复杂度 4 GIST 4 最简表达,完全精确 形式简单,距离更精确,PostgreSQL限定 5 btree_gist 联合索引 1 最简表达,完全精确 形式简单,距离更精确,PostgreSQL限定 场景 互联网中的很多业务都涉 …
监控PG中的表大小

表的空间布局 宽泛意义上的 表(Table),包含了 本体表 与 TOAST表 两个部分: 本体表,存储关系本身的数据,即狭义的关系,relkind='r'。 TOAST表,与本体表一一对应,存储过大的字段,relinkd='t'。 而每个表,又由 主体 与 索引 两个 关系(Relation) 组成(对本体表而言,可以没有索引关系) 主体关系:存储元组。 索引关系:存储索引元组。 每个 关系 又可能会有 四种分支: main: 关系的主文件,编号为0 fsm:保存关于main分支中空闲空间的信 …
表的空间布局 宽泛意义上的 表(Table),包含了 本体表 与 TOAST表 两个部分: 本体表,存储关系本身的数据,即狭义的关系,relkind='r'。 TOAST表,与本体表一一对应,存储过大的字段,relinkd='t'。 而每个表,又由 主体 与 索引 两个 关系(Relation) 组成(对本体表而言,可以没有索引关系) 主体关系:存储元组。 索引关系:存储索引元组。 每个 关系 又可能会有 四种分支: main: 关系的主文件,编号为0 fsm:保存关于main分支中空闲空间的信 …
一致性:过载的术语

一致性 这个词重载的很厉害,在不同的语境和上下文中,它其实代表着不同的东西: 在事务的上下文中,比如ACID里的C,指的就是通常的 一致性(Consistency) 在分布式系统的上下文中,例如CAP里的C,实际指的是 线性一致性(Linearizability) 此外,“一致性哈希”,“最终一致性”这些名词里的“一致性”也有不同的涵义。 这些一致性彼此不同却又有着千丝万缕的联系,所以经常会把人绕晕。 在事务的上下文中,一致性(Consistency) 的概念是:对数据的一组特定陈述必须始终成立 …
一致性 这个词重载的很厉害,在不同的语境和上下文中,它其实代表着不同的东西: 在事务的上下文中,比如ACID里的C,指的就是通常的 一致性(Consistency) 在分布式系统的上下文中,例如CAP里的C,实际指的是 线性一致性(Linearizability) 此外,“一致性哈希”,“最终一致性”这些名词里的“一致性”也有不同的涵义。 这些一致性彼此不同却又有着千丝万缕的联系,所以经常会把人绕晕。 在事务的上下文中,一致性(Consistency) 的概念是:对数据的一组特定陈述必须始终成立 …
为什么要学习数据库原理

我们学校开了数据库系统原理课程。但是我还是很迷茫,这几节课老师一上来就讲一堆令人头大的名词概念,我以为我们知道“如何设计构建表”,“如何mysql增删改查”就行了……那为什么还要了解关系模式的表示方法,计算,规范化……概念模型……各种模型的相互转换,为什么还要了解什么关系代数,什么笛卡尔积……这些的理论知识。我十分困惑,通过这些理论概念,该课的目的或者说该书的目的究竟是想让学生学会什么呢? 只会写代码的是码农;学好数据库,基本能混口饭吃;在此基础上再学好 操作系统和计算机网络,就能当一个不错的 …
我们学校开了数据库系统原理课程。但是我还是很迷茫,这几节课老师一上来就讲一堆令人头大的名词概念,我以为我们知道“如何设计构建表”,“如何mysql增删改查”就行了……那为什么还要了解关系模式的表示方法,计算,规范化……概念模型……各种模型的相互转换,为什么还要了解什么关系代数,什么笛卡尔积……这些的理论知识。我十分困惑,通过这些理论概念,该课的目的或者说该书的目的究竟是想让学生学会什么呢? 只会写代码的是码农;学好数据库,基本能混口饭吃;在此基础上再学好 操作系统和计算机网络,就能当一个不错的 …
PgAdmin安装配置

PgAdmin4的安装与配置 PgAdmin是一个为PostgreSQL定制设计的GUI。用起来很不错。可以以本地GUI程序或者Web服务的方式运行。因为Retina屏幕下面PgAdmin依赖的GUI组件显示效果有点问题,这里主要介绍如何以Web服务方式(Python Flask)配置运行PgAdmin4。 下载 PgAdmin可以从官方FTP下载。 postgresql网站FTP目录地址 wget …
PgAdmin4的安装与配置 PgAdmin是一个为PostgreSQL定制设计的GUI。用起来很不错。可以以本地GUI程序或者Web服务的方式运行。因为Retina屏幕下面PgAdmin依赖的GUI组件显示效果有点问题,这里主要介绍如何以Web服务方式(Python Flask)配置运行PgAdmin4。 下载 PgAdmin可以从官方FTP下载。 postgresql网站FTP目录地址 wget …
冯振彪自传

在书房收拾时,发现了先父的自传。本应是档案中的党八股,未想其中却包含这多精彩内容。 新旧社会映像,KMT与TG的对比访谈。 关于文革起因的政治论文 关于逻辑学的哲学论文 关于‘中国特色社会主义’的思考 贡嘎雪山历险求生。 89年与大学生活。 反舰弹道导弹轶事。 如何当一名‘发测架构师’。 资深业余摄影师的心得 应该说,这是一份很有趣的自传。 这100页纸,记录了父亲的光辉岁月。 斯人已去,名不见经传。 至少我能做的是,把它转成电子版罢。 归档在互联网的某个旮旯,聊以告慰,作为留念。 冯振彪自传 …
在书房收拾时,发现了先父的自传。本应是档案中的党八股,未想其中却包含这多精彩内容。 新旧社会映像,KMT与TG的对比访谈。 关于文革起因的政治论文 关于逻辑学的哲学论文 关于‘中国特色社会主义’的思考 贡嘎雪山历险求生。 89年与大学生活。 反舰弹道导弹轶事。 如何当一名‘发测架构师’。 资深业余摄影师的心得 应该说,这是一份很有趣的自传。 这100页纸,记录了父亲的光辉岁月。 斯人已去,名不见经传。 至少我能做的是,把它转成电子版罢。 归档在互联网的某个旮旯,聊以告慰,作为留念。 冯振彪自传 …





