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

在线修改PG字段类型
如何在线修改PostgreSQL中的字段类型?一种通用方法。

事务隔离等级注意事项
PostgreSQL实际上只有两种事务隔离等级:读已提交(Read Commited)与可序列化(Serializable)。

前后端通信线缆协议
了解PostgreSQL服务器与客户端通信使用的TCP协议,并使用Go语言打印消息。

故障档案:PG安装Extension导致无法连接
今天遇到一个比较有趣的Case,客户报告说数据库连不上了,发现是扩展导致的。

CDC 变更数据捕获机理
数据变更捕获是一种很有趣的ETL替代方案,以流式的方式持续收集状态变化事件。

PostgreSQL中的锁
详细介绍PostgreSQL中的各种锁:表级锁、行级锁、页级锁、咨询锁等。

GIN搜索的O(n²)复杂度
GIN索引如果使用很长的关键词列表进行搜索,会导致性能显著下降。本文解释了为什么GIN索引关键词搜索的时间复杂度为O(n²)。

山巅之城:加州自驾
自驾一周,库比蒂诺,洛杉矶,旧金山,优胜美地

PostgreSQL 常见复制拓扑方案
复制是系统架构中的核心问题之一。

温备:使用pg_receivewal
备份有各种各样的策略,物理备份通常可以分为四种。

容器化数据库是个好主意吗?
生产环境的数据库是否应当放入容器中,仍然是一个充满争议的问题。站在开发者角度我喜欢Docker,但站在DBA立场上,我认为就目前而言,将生产环境数据库放入Docker/K8S中仍然是一个馊主意。

PostgreSQL监控系统概览
监控系统是几乎所有运维工作的基础,更亦是驾驭数据库的必备工具,本文简单介绍了一个PostgreSQL的监控系统。

互联网之殇
前途是不一定是光明的,道路肯定是曲折的。

理解时间:闰年闰秒,时间与时区
四年一遇的闰年2月29日,总有土鳖软件出现大翻车。对时间的正确理解,对正确处理工作生活中的时间问题很有帮助。本文聊一聊闰年、闰秒、时间与时区的原理,以及在数据库与编程语言中的注意事项。

故障档案:pg_dump导致的连接池污染
有时候,组件之间的相互作用会以微妙的形式表现出来。例如使用pg_dump从连接池中导出数据,就可能产生连接池污染的问题。

新年随想
前途是不一定是光明的,道路肯定是曲折的。新年难得有闲暇独处,写下此篇随笔,想到哪儿就写到哪。

中国行政区划相关知识
有关行政区划的等级、数量,行政区划代码的意义,城乡划分等。

互联网之冬
这是最好的时代,也是最坏的时代。人们正踏上天堂之路,人们正走向地狱之门。

PostgreSQL数据页面损坏修复
采用二进制编辑的方式修复PostgreSQL数据页,以及如何让一条主键查询出现两条记录来。

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

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

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

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

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

在线修改PG字段类型
如何在线修改PostgreSQL中的字段类型?一种通用方法。

事务隔离等级注意事项
PostgreSQL实际上只有两种事务隔离等级:读已提交(Read Commited)与可序列化(Serializable)。

前后端通信线缆协议
了解PostgreSQL服务器与客户端通信使用的TCP协议,并使用Go语言打印消息。

故障档案:PG安装Extension导致无法连接
今天遇到一个比较有趣的Case,客户报告说数据库连不上了,发现是扩展导致的。

CDC 变更数据捕获机理
数据变更捕获是一种很有趣的ETL替代方案,以流式的方式持续收集状态变化事件。

PostgreSQL中的锁
详细介绍PostgreSQL中的各种锁:表级锁、行级锁、页级锁、咨询锁等。

GIN搜索的O(n²)复杂度
GIN索引如果使用很长的关键词列表进行搜索,会导致性能显著下降。本文解释了为什么GIN索引关键词搜索的时间复杂度为O(n²)。

山巅之城:加州自驾
自驾一周,库比蒂诺,洛杉矶,旧金山,优胜美地

PostgreSQL 常见复制拓扑方案
复制是系统架构中的核心问题之一。

温备:使用pg_receivewal
备份有各种各样的策略,物理备份通常可以分为四种。

容器化数据库是个好主意吗?
生产环境的数据库是否应当放入容器中,仍然是一个充满争议的问题。站在开发者角度我喜欢Docker,但站在DBA立场上,我认为就目前而言,将生产环境数据库放入Docker/K8S中仍然是一个馊主意。

PostgreSQL监控系统概览
监控系统是几乎所有运维工作的基础,更亦是驾驭数据库的必备工具,本文简单介绍了一个PostgreSQL的监控系统。

互联网之殇
前途是不一定是光明的,道路肯定是曲折的。

理解时间:闰年闰秒,时间与时区
四年一遇的闰年2月29日,总有土鳖软件出现大翻车。对时间的正确理解,对正确处理工作生活中的时间问题很有帮助。本文聊一聊闰年、闰秒、时间与时区的原理,以及在数据库与编程语言中的注意事项。

故障档案:pg_dump导致的连接池污染
有时候,组件之间的相互作用会以微妙的形式表现出来。例如使用pg_dump从连接池中导出数据,就可能产生连接池污染的问题。

新年随想
前途是不一定是光明的,道路肯定是曲折的。新年难得有闲暇独处,写下此篇随笔,想到哪儿就写到哪。

中国行政区划相关知识
有关行政区划的等级、数量,行政区划代码的意义,城乡划分等。

互联网之冬
这是最好的时代,也是最坏的时代。人们正踏上天堂之路,人们正走向地狱之门。

PostgreSQL数据页面损坏修复
采用二进制编辑的方式修复PostgreSQL数据页,以及如何让一条主键查询出现两条记录来。

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

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

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

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

TimescaleDB 快速上手
TimescaleDB是PostgreSQL的一个扩展插件,提供时序数据库的一些功能。
在线修改PG字段类型

场景 在数据库的生命周期中,有一类需求是很常见的,修改字段类型。例如: 使用 INT 作为主键,结果发现业务红红火火,INT32的21亿序号不够用了,想要升级为 BIGINT 使用 BIGINT 存身份证号,结果发现里面有个 X 需要改为 TEXT 类型。 使用 FLOAT 存放货币,发现精度丢失,想要修改为Decimal 使用 TEXT 存储JSON字段,想用到PostgreSQL的JSON特性,修改为JSONB类型。 那么,如何应对这种需求呢? 常规操作 通常来说,ALTER TABLE 可 …
场景 在数据库的生命周期中,有一类需求是很常见的,修改字段类型。例如: 使用 INT 作为主键,结果发现业务红红火火,INT32的21亿序号不够用了,想要升级为 BIGINT 使用 BIGINT 存身份证号,结果发现里面有个 X 需要改为 TEXT 类型。 使用 FLOAT 存放货币,发现精度丢失,想要修改为Decimal 使用 TEXT 存储JSON字段,想用到PostgreSQL的JSON特性,修改为JSONB类型。 那么,如何应对这种需求呢? 常规操作 通常来说,ALTER TABLE 可 …
事务隔离等级注意事项

PostgreSQL实际上只有两种事务隔离等级:读已提交(Read Commited) 与 可序列化(Serializable) 基础 SQL标准定义了四种隔离级别,但PostgreSQL实际上只有两种事务隔离等级:读已提交(Read Commited) 与 可序列化(Serializable) SQL标准定义了四种隔离级别,但实际上这也是很粗鄙的一种划分。详情请参考并发异常那些事。 查看/设置事务隔离等级 通过执行:SELECT …
PostgreSQL实际上只有两种事务隔离等级:读已提交(Read Commited) 与 可序列化(Serializable) 基础 SQL标准定义了四种隔离级别,但PostgreSQL实际上只有两种事务隔离等级:读已提交(Read Commited) 与 可序列化(Serializable) SQL标准定义了四种隔离级别,但实际上这也是很粗鄙的一种划分。详情请参考并发异常那些事。 查看/设置事务隔离等级 通过执行:SELECT …
前后端通信线缆协议

了解PostgreSQL服务器与客户端通信使用的TCP协议 启动阶段 启动阶段的基本流程如下所示: 客户端发送一条 StartupMessage (F) 向服务端发起连接请求 载荷包括 0x30000 的Int32版本号魔数,以及一系列kv结构的运行时参数(NULL0分割,必须参数为 user), 客户端等待服务端响应,主要是等待服务端发送的 ReadyForQuery (Z) 事件,该事件代表服务端已经准备好接收请求。 上面是连接建立过程中最主要的两个事件,其他事件包括包括认证消息 …
了解PostgreSQL服务器与客户端通信使用的TCP协议 启动阶段 启动阶段的基本流程如下所示: 客户端发送一条 StartupMessage (F) 向服务端发起连接请求 载荷包括 0x30000 的Int32版本号魔数,以及一系列kv结构的运行时参数(NULL0分割,必须参数为 user), 客户端等待服务端响应,主要是等待服务端发送的 ReadyForQuery (Z) 事件,该事件代表服务端已经准备好接收请求。 上面是连接建立过程中最主要的两个事件,其他事件包括包括认证消息 …
故障档案:PG安装Extension导致无法连接

今天遇到一个比较有趣的Case,客户报告说数据库连不上了。报这个错: psql: FATAL: could not load library "/export/servers/pgsql/lib/pg_hint_plan.so": /export/servers/pgsql/lib/pg_hint_plan.so: undefined symbol: RINFO_IS_PUSHED_DOWN 当然,这种错误一眼就知道是插件没编译好,报符号找不到。因此数据库后端进程在启动时尝试加载 …
今天遇到一个比较有趣的Case,客户报告说数据库连不上了。报这个错: psql: FATAL: could not load library "/export/servers/pgsql/lib/pg_hint_plan.so": /export/servers/pgsql/lib/pg_hint_plan.so: undefined symbol: RINFO_IS_PUSHED_DOWN 当然,这种错误一眼就知道是插件没编译好,报符号找不到。因此数据库后端进程在启动时尝试加载 …
CDC 变更数据捕获机理

在实际生产中,我们经常需要把数据库的状态同步到其他地方去,例如同步到数据仓库进行分析,同步到消息队列供下游消费,同步到缓存以加速查询。总的来说,搬运状态有两大类方法:ETL与CDC。 前驱知识 CDC与ETL 数据库在本质上是一个 状态集合,任何对数据库的 变更(增删改)本质上都是对状态的修改。 在实际生产中,我们经常需要把数据库的状态同步到其他地方去,例如同步到数据仓库进行分析,同步到消息队列供下游消费,同步到缓存以加速查询。总的来说,搬运状态有两大类方法:ETL与CDC。 …
在实际生产中,我们经常需要把数据库的状态同步到其他地方去,例如同步到数据仓库进行分析,同步到消息队列供下游消费,同步到缓存以加速查询。总的来说,搬运状态有两大类方法:ETL与CDC。 前驱知识 CDC与ETL 数据库在本质上是一个 状态集合,任何对数据库的 变更(增删改)本质上都是对状态的修改。 在实际生产中,我们经常需要把数据库的状态同步到其他地方去,例如同步到数据仓库进行分析,同步到消息队列供下游消费,同步到缓存以加速查询。总的来说,搬运状态有两大类方法:ETL与CDC。 …
PostgreSQL中的锁

PostgreSQL的并发控制以 快照隔离(SI) 为主,以 两阶段锁定(2PL) 机制为辅。PostgreSQL对DML(SELECT, UPDATE, INSERT, DELETE 等命令)使用SSI,对DDL(CREATE TABLE 等命令)使用2PL。 PostgreSQL有好几类锁,其中最主要的是 表级锁 与 行级锁,此外还有页级锁,咨询锁等,表级锁 通常是各种命令执行时自动获取的,或者通过事务中的 LOCK 语句显式获取;而行级锁则是由 SELECT FOR …
PostgreSQL的并发控制以 快照隔离(SI) 为主,以 两阶段锁定(2PL) 机制为辅。PostgreSQL对DML(SELECT, UPDATE, INSERT, DELETE 等命令)使用SSI,对DDL(CREATE TABLE 等命令)使用2PL。 PostgreSQL有好几类锁,其中最主要的是 表级锁 与 行级锁,此外还有页级锁,咨询锁等,表级锁 通常是各种命令执行时自动获取的,或者通过事务中的 LOCK 语句显式获取;而行级锁则是由 SELECT FOR …
GIN搜索的O(n²)复杂度

GIN索引如果使用很长的关键词列表进行搜索,会导致性能显著下降。本文解释了为什么GIN索引关键词搜索的时间复杂度为O(n^2) Here is the detail of why that query have O(N^2) inside GIN implementation. Details Inspect the index example_keys_idx postgres=# select oid,* from pg_class where relname = …
GIN索引如果使用很长的关键词列表进行搜索,会导致性能显著下降。本文解释了为什么GIN索引关键词搜索的时间复杂度为O(n^2) Here is the detail of why that query have O(N^2) inside GIN implementation. Details Inspect the index example_keys_idx postgres=# select oid,* from pg_class where relname = …
山巅之城:加州自驾

去米帝出了趟差,工作一周玩一周。自驾一号公路、湾区、洛杉矶、旧金山、优胜美地 托公司的福去美帝出了趟差,待了两个星期,工作一周玩一周。说起来除了去年公司年会去了趟日本,我还从来没出过国,特别是一个人去,还是有点发怵的。加上玩的行程是出发前临时决定的,一路上几乎都是动态规划模式。不过最后的效果倒是相当不错,多亏了当地老同学和老同事的帮助。 准备 工作的一周安排很满,直到上路开玩前两天,我才正式开始规划行程,因为一个最基本的问题还没有确定,到底是租车自驾,还是报个旅行社呢?毕竟第一次到异国他乡人生地 …
去米帝出了趟差,工作一周玩一周。自驾一号公路、湾区、洛杉矶、旧金山、优胜美地 托公司的福去美帝出了趟差,待了两个星期,工作一周玩一周。说起来除了去年公司年会去了趟日本,我还从来没出过国,特别是一个人去,还是有点发怵的。加上玩的行程是出发前临时决定的,一路上几乎都是动态规划模式。不过最后的效果倒是相当不错,多亏了当地老同学和老同事的帮助。 准备 工作的一周安排很满,直到上路开玩前两天,我才正式开始规划行程,因为一个最基本的问题还没有确定,到底是租车自驾,还是报个旅行社呢?毕竟第一次到异国他乡人生地 …
PostgreSQL 常见复制拓扑方案

复制是系统架构中的核心问题之一。 集群拓扑 假设我们使用4单元的标准配置:主库,同步从库,延迟备库,远程备库,分别用字母M,S,O,R标识。 M:Master, Main, Primary, Leader, 主库,权威数据源。 S: Slave, Secondary, Standby, Sync Replica,同步副本,需要直接挂载至主库 R: Remote Replica, Report instance,远程副本,可以挂载到主库或同步从库上 O: Offline,离线延迟备库,可以挂载到主 …
复制是系统架构中的核心问题之一。 集群拓扑 假设我们使用4单元的标准配置:主库,同步从库,延迟备库,远程备库,分别用字母M,S,O,R标识。 M:Master, Main, Primary, Leader, 主库,权威数据源。 S: Slave, Secondary, Standby, Sync Replica,同步副本,需要直接挂载至主库 R: Remote Replica, Report instance,远程副本,可以挂载到主库或同步从库上 O: Offline,离线延迟备库,可以挂载到主 …
温备:使用pg_receivewal

备份是DBA的安身立命之本,也是数据库管理中最为关键的工作之一。有各种各样的备份,但今天这里讨论的备份都是物理备份。物理备份通常可以分为以下四种: 热备(Hot Standby):与主库一模一样,当主库出现故障时会接管主库的工作,同时也会用于承接线上只读流量。 温备(Warm Standby):与热备类似,但不承载线上流量。通常数据库集群需要一个延迟备库,以便出现错误(例如误删数据)时能及时恢复。在这种情况下,因为延迟备库与主库内容不一致,因此不能服务线上查询。 冷备(Code Backup): …
备份是DBA的安身立命之本,也是数据库管理中最为关键的工作之一。有各种各样的备份,但今天这里讨论的备份都是物理备份。物理备份通常可以分为以下四种: 热备(Hot Standby):与主库一模一样,当主库出现故障时会接管主库的工作,同时也会用于承接线上只读流量。 温备(Warm Standby):与热备类似,但不承载线上流量。通常数据库集群需要一个延迟备库,以便出现错误(例如误删数据)时能及时恢复。在这种情况下,因为延迟备库与主库内容不一致,因此不能服务线上查询。 冷备(Code Backup): …
容器化数据库是个好主意吗?

前言:这篇文章是19年1月写的,四年过去了,涉及到数据库与容器的利弊权衡依然成立。这里进行细微调整后重新发出。明天我会发布一篇《数据库是否应当放入K8S中?》,那么今天就先用这篇老文来预热一下吧。 对于无状态的应用服务而言,容器是一个相当完美的开发运维解决方案。然而对于带持久状态的服务 —— 数据库来说,事情就没有那么简单了。生产环境的数据库 是否应当放入容器中,仍然是一个充满争议的问题。 站在开发者的角度上,我非常喜欢Docker,并相信容器也许是未来软件开发部署运维的标准方式。但站在DBA …
前言:这篇文章是19年1月写的,四年过去了,涉及到数据库与容器的利弊权衡依然成立。这里进行细微调整后重新发出。明天我会发布一篇《数据库是否应当放入K8S中?》,那么今天就先用这篇老文来预热一下吧。 对于无状态的应用服务而言,容器是一个相当完美的开发运维解决方案。然而对于带持久状态的服务 —— 数据库来说,事情就没有那么简单了。生产环境的数据库 是否应当放入容器中,仍然是一个充满争议的问题。 站在开发者的角度上,我非常喜欢Docker,并相信容器也许是未来软件开发部署运维的标准方式。但站在DBA …
PostgreSQL监控系统概览

PostgreSQL 驾驶技巧 PostgreSQL 是一个很棒的数据库,但也相当复杂。上手虽简单,但想要用好不容易,想要管理好就更麻烦了。监控系统是几乎所有运维工作的基础,更亦是驾驭数据库的必备工具。用好一个监控系统,理解各种指标背后的意义并不是一件简单的事情,因此本司机决定写一系列文章,来介绍了 PostgreSQL 监控系统的设计,实施与使用。 0x01 PostgreSQL 监控面板 为了帮助读者形成一种直觉,这里展示了在实际环境中,我所使用的监控面板。最为常用的监控面板为“单数据库实例 …
PostgreSQL 驾驶技巧 PostgreSQL 是一个很棒的数据库,但也相当复杂。上手虽简单,但想要用好不容易,想要管理好就更麻烦了。监控系统是几乎所有运维工作的基础,更亦是驾驭数据库的必备工具。用好一个监控系统,理解各种指标背后的意义并不是一件简单的事情,因此本司机决定写一系列文章,来介绍了 PostgreSQL 监控系统的设计,实施与使用。 0x01 PostgreSQL 监控面板 为了帮助读者形成一种直觉,这里展示了在实际环境中,我所使用的监控面板。最为常用的监控面板为“单数据库实例 …
互联网之殇

《理解互联网》 中聊了对互联网的认识,今天聊一聊刻意省略的部分:互联网将面临的挫折。 命运 这是一个最好的时代,也是一个最坏的时代; 这是一个智慧的年代,这是一个愚蠢的年代; 这是一个信任的时期,这是一个怀疑的时期; 这是一个光明的季节,这是一个黑暗的季节; 这是希望之春,这是失望之冬; 人们面前应有尽有,人们面前一无所有; 人们正踏上天堂之路,人们正走向地狱之门。 —— 狄更斯,《双城记》 让我们先从宏大叙事开始。 互联网的长远发展是无比光明的,因为这是一种新兴的社会组织形式,具有无可比拟的巨 …
《理解互联网》 中聊了对互联网的认识,今天聊一聊刻意省略的部分:互联网将面临的挫折。 命运 这是一个最好的时代,也是一个最坏的时代; 这是一个智慧的年代,这是一个愚蠢的年代; 这是一个信任的时期,这是一个怀疑的时期; 这是一个光明的季节,这是一个黑暗的季节; 这是希望之春,这是失望之冬; 人们面前应有尽有,人们面前一无所有; 人们正踏上天堂之路,人们正走向地狱之门。 —— 狄更斯,《双城记》 让我们先从宏大叙事开始。 互联网的长远发展是无比光明的,因为这是一种新兴的社会组织形式,具有无可比拟的巨 …
理解时间:闰年闰秒,时间与时区

前几天出现了四年一遇的闰年 2 月 29 号,每到这一天,总会有一些土鳖软件出现大翻车。这种问题如果运气不好,可能要等上四年才会暴露出来。比如今天新鲜出炉的:禾赛科技激光雷达和新西兰加油站都因为闰年 Bug 无法使用。 今天确实是个很应景的日子,所以重发这篇六年前写的老文。聊一聊闰年,闰秒,时间与时区的原理,以及在数据库与编程语言中的注意事项。 0x01 秒与计时 时间的单位是秒,但秒的定义并不是一成不变的。它有一个天文学定义,也有一个物理学定义。 世界时(UT1) 在最开始,秒的定义来源于日。 …
前几天出现了四年一遇的闰年 2 月 29 号,每到这一天,总会有一些土鳖软件出现大翻车。这种问题如果运气不好,可能要等上四年才会暴露出来。比如今天新鲜出炉的:禾赛科技激光雷达和新西兰加油站都因为闰年 Bug 无法使用。 今天确实是个很应景的日子,所以重发这篇六年前写的老文。聊一聊闰年,闰秒,时间与时区的原理,以及在数据库与编程语言中的注意事项。 0x01 秒与计时 时间的单位是秒,但秒的定义并不是一成不变的。它有一个天文学定义,也有一个物理学定义。 世界时(UT1) 在最开始,秒的定义来源于日。 …
故障档案:pg_dump导致的连接池污染

PostgreSQL很棒,但这并不意味着它是Bug-Free的。这一次在线上环境中,我又遇到了一个很有趣的Case:由 pg_dump 导致的线上故障。这是一个非常微妙的Bug,由Pgbouncer,search_path,以及特殊的 pg_dump 操作所触发。 背景知识 连接污染 在PostgreSQL中,每条数据库连接对应一个后端进程,会持有一些临时资源(状态),在连接结束时会被销毁,包括: 本会话中修改过的参数。RESET ALL; 准备好的语句。 DEALLOCATE ALL 打开的游 …
PostgreSQL很棒,但这并不意味着它是Bug-Free的。这一次在线上环境中,我又遇到了一个很有趣的Case:由 pg_dump 导致的线上故障。这是一个非常微妙的Bug,由Pgbouncer,search_path,以及特殊的 pg_dump 操作所触发。 背景知识 连接污染 在PostgreSQL中,每条数据库连接对应一个后端进程,会持有一些临时资源(状态),在连接结束时会被销毁,包括: 本会话中修改过的参数。RESET ALL; 准备好的语句。 DEALLOCATE ALL 打开的游 …
新年随想

本文可能引起不适,阅读请谨慎。 新年难得有闲暇独处,写下此篇随笔,想到哪儿就写到哪。 我一直认为选择要比努力重要:人的一生在形式上就是由一系列关键的选择组成的路径,做出正确的选择需要智慧,而坚持努力前行需要意志。智慧与意志两者都是珍贵而稀有的属性,但智慧相对更为重要,因为它决定了前进的方向,以及可行选择的多少。 在过去一年里,我做出了很多重要的选择:换了职业,换了行业,也换了工作。但要说最重要的选择是什么,我认为是将大量时间花在了社会认知水平的提高上。得益于职业特殊性,我有着大把的时间来学习, …
本文可能引起不适,阅读请谨慎。 新年难得有闲暇独处,写下此篇随笔,想到哪儿就写到哪。 我一直认为选择要比努力重要:人的一生在形式上就是由一系列关键的选择组成的路径,做出正确的选择需要智慧,而坚持努力前行需要意志。智慧与意志两者都是珍贵而稀有的属性,但智慧相对更为重要,因为它决定了前进的方向,以及可行选择的多少。 在过去一年里,我做出了很多重要的选择:换了职业,换了行业,也换了工作。但要说最重要的选择是什么,我认为是将大量时间花在了社会认知水平的提高上。得益于职业特殊性,我有着大把的时间来学习, …
中国行政区划相关知识

中国行政区划分为几个级别,宪法规定了三个级别,但实际上有五个级别:省—地区—县(区)—乡镇” 四级制,算上中央就是五级。 行政区划的级别 中国行政区划(administrative division)分为几个级别(government level): 宪法规定了三个级别(de jure level),但实际上有五个级别(de facto level/practical level) 我国现行的行政层级是“省—地区—县(区)—乡镇” 四级制,算上中央就是五级。 由于我国存在“以党代政”的问题,有党 …
中国行政区划分为几个级别,宪法规定了三个级别,但实际上有五个级别:省—地区—县(区)—乡镇” 四级制,算上中央就是五级。 行政区划的级别 中国行政区划(administrative division)分为几个级别(government level): 宪法规定了三个级别(de jure level),但实际上有五个级别(de facto level/practical level) 我国现行的行政层级是“省—地区—县(区)—乡镇” 四级制,算上中央就是五级。 由于我国存在“以党代政”的问题,有党 …
互联网之冬

这是最好的时代,也是最坏的时代; 这是智慧的年代,这是愚蠢的年代; 这是信任的时期,这是怀疑的时期; 这是光明的季节,这是黑暗的季节; 这是希望之春,这是失望之冬; 人们面前应有尽有,人们面前一无所有; 人们正踏上天堂之路,人们正走向地狱之门。 —— 狄更斯,《双城记》 互联网之冬 让我们先从宏大叙事开始。 互联网的长远发展是无比光明的,因为这是一种新兴的社会组织形式,具有无可比拟的巨大优势。 以阿里巴巴为例,为什么一家做toB交易中介平台起家的网站,能够发展成为今天这样一个囊括人们衣食住行吃 …
这是最好的时代,也是最坏的时代; 这是智慧的年代,这是愚蠢的年代; 这是信任的时期,这是怀疑的时期; 这是光明的季节,这是黑暗的季节; 这是希望之春,这是失望之冬; 人们面前应有尽有,人们面前一无所有; 人们正踏上天堂之路,人们正走向地狱之门。 —— 狄更斯,《双城记》 互联网之冬 让我们先从宏大叙事开始。 互联网的长远发展是无比光明的,因为这是一种新兴的社会组织形式,具有无可比拟的巨大优势。 以阿里巴巴为例,为什么一家做toB交易中介平台起家的网站,能够发展成为今天这样一个囊括人们衣食住行吃 …
PostgreSQL数据页面损坏修复

PostgreSQL是一个很可靠的数据库,但是再可靠的数据库,如果碰上了不可靠的硬件,恐怕也得抓瞎。本文介绍了在PostgreSQL中,应对数据页面损坏的方法。 最初的问题 线上有一套统计库跑离线任务,业务方反馈跑SQL的时候碰上一个错误: ERROR: invalid page in block 18858877 of relation base/16400/275852 看到这样的错误信息,第一直觉就是硬件错误导致的关系数据文件损坏,第一步要检查定位具体问题。 这里,16400是数据库的 …
PostgreSQL是一个很可靠的数据库,但是再可靠的数据库,如果碰上了不可靠的硬件,恐怕也得抓瞎。本文介绍了在PostgreSQL中,应对数据页面损坏的方法。 最初的问题 线上有一套统计库跑离线任务,业务方反馈跑SQL的时候碰上一个错误: ERROR: invalid page in block 18858877 of relation base/16400/275852 看到这样的错误信息,第一直觉就是硬件错误导致的关系数据文件损坏,第一步要检查定位具体问题。 这里,16400是数据库的 …
做正确的事

最近,微信公众号“小声比比”发表了几篇文章,捅了马蜂窝: 估值 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 …





