
数据库老司机
冯若航 @Vonng / Pigsty
关于数据库行业的动态、新闻、调查、理念与最佳实践 —— 拨云见日,直击行业本质。

数据库需求层次金字塔
与马斯洛需求金字塔类似,用户对数据库的需求也有递进的层次:功能正确性、安全备份、高可用监控、性能成本、可观测性、易用性控制、标准化产品化、最终达到超越与自我实现。

微服务是不是个蠢主意?
连SOA典范亚马逊自己都觉得微服务和Serverless拉胯了。Prime Video团队放弃微服务改用单体架构,运营成本节省了惊人的90%。微服务就像塞壬歌声一样诱惑你为系统添加毫无必要的复杂度。

分布式数据库是不是伪需求?
随着硬件技术进步,单机数据库的容量和性能已达到前所未有的高度。分布式TP数据库在这种变革面前显得极为无力,和"数据中台"一样穿着皇帝的新衣,处于自欺欺人的状态里。

开源不是大杀器,免费才是
本人作为一个程序员,天生对开源有好感,之前是坚定的开源拥护者,但是上次波吉的一篇文章《开源商业模式是个伪命题

StackOverflow 2022数据库年度调查
什么,PostgreSQL已经成为最流行,最先进,开发者最想学习使用的数据库了?最近,StackOverfl

是时候和GPL说再见了
DDIA作者Martin Kleppmann认为应远离GPL及相关许可证,因为它们未能实现其目的,造成的麻烦比产生的价值更大。在2020年代,计算自由的敌人是云软件,本文倡导本地优先软件的概念。

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

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

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

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

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

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

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

与马斯洛需求金字塔类似,用户对于数据库的需求也有着一个递进的层次。用户对于数据库的需求从下往上可以分为八个层次,分别与人的八个需求层次相对应: 生理需求,功能:内核/正确性/ACID 安全需求,安全:备份/保密/完整/可用 归属需求,可靠:高可用/监控/告警 尊重需求,ROI:性能/成本/复杂度 认知需求,洞察:可观测性/数字化/可视化 审美需求,掌控:可控制性/易用性/IaC 自我实现,智能:标准化/产品化/智能化 超越需求,变革:真·自治数据库 安全需求与生理需求同属 基础需求,一个用于生产 …
与马斯洛需求金字塔类似,用户对于数据库的需求也有着一个递进的层次。用户对于数据库的需求从下往上可以分为八个层次,分别与人的八个需求层次相对应: 生理需求,功能:内核/正确性/ACID 安全需求,安全:备份/保密/完整/可用 归属需求,可靠:高可用/监控/告警 尊重需求,ROI:性能/成本/复杂度 认知需求,洞察:可观测性/数字化/可视化 审美需求,掌控:可控制性/易用性/IaC 自我实现,智能:标准化/产品化/智能化 超越需求,变革:真·自治数据库 安全需求与生理需求同属 基础需求,一个用于生产 …
微服务是不是个蠢主意?

亚马逊的Prime Video团队发表了一篇非常引人注目的案例研究[2] ,讲述了他们为什么放弃了微服务与Serverless架构而改用单体架构。这一举措让他们在运营成本上节省了惊人的 90%,还简化了系统复杂度,堪称一个巨大的胜利。 但除了赞扬他们的明智之举之外,我认为这里还有一个重要洞察适用于我们整个行业: “我们最初设计的解决方案是:使用Serverless组件的分布式系统架构… 理论上这个架构可以让我们独立伸缩扩展每个服务组件。然而,我们使用某些组件的方式导致我们在大约5%的预期负载时, …
亚马逊的Prime Video团队发表了一篇非常引人注目的案例研究[2] ,讲述了他们为什么放弃了微服务与Serverless架构而改用单体架构。这一举措让他们在运营成本上节省了惊人的 90%,还简化了系统复杂度,堪称一个巨大的胜利。 但除了赞扬他们的明智之举之外,我认为这里还有一个重要洞察适用于我们整个行业: “我们最初设计的解决方案是:使用Serverless组件的分布式系统架构… 理论上这个架构可以让我们独立伸缩扩展每个服务组件。然而,我们使用某些组件的方式导致我们在大约5%的预期负载时, …
分布式数据库是不是伪需求?

微信公众号原文 老冯按:最近关于分布式的讨论又开始热闹起来,比如白老师就发了一篇《分布式数据库真的是伪需求吗》。回头看看两年前写的《分布式数据库是伪需求吗?》,依然非常应景。所以在此修订重发。 随着硬件技术的进步,单机数据库的容量和性能已达到了前所未有的高度。而分布式(TP)数据库在这种变革面前极为无力,和“数据中台”一样穿着皇帝的新衣,处于自欺欺人的状态里。 太长不看\ 分布式数据库的核心权衡是:“以质换量”,牺牲功能、性能、复杂度、可靠性,换取更大的数据容量与请求吞吐量。但分久必合,硬件变 …
微信公众号原文 老冯按:最近关于分布式的讨论又开始热闹起来,比如白老师就发了一篇《分布式数据库真的是伪需求吗》。回头看看两年前写的《分布式数据库是伪需求吗?》,依然非常应景。所以在此修订重发。 随着硬件技术的进步,单机数据库的容量和性能已达到了前所未有的高度。而分布式(TP)数据库在这种变革面前极为无力,和“数据中台”一样穿着皇帝的新衣,处于自欺欺人的状态里。 太长不看\ 分布式数据库的核心权衡是:“以质换量”,牺牲功能、性能、复杂度、可靠性,换取更大的数据容量与请求吞吐量。但分久必合,硬件变 …
开源不是大杀器,免费才是

原作者:老头头 · 微信公众号转载页 本人作为一个程序员,天生对开源有好感,之前是坚定的开源拥护者,但是上次波吉的一篇文章《开源商业模式是个伪命题》引发思考,然后在一个微信群里引发广泛讨论,导致我对开源商业化的态度发生大转弯。 本文讨论的开源项目是开源软件,而不是开源的基础类库;所说的开源商业公司指的是以开源项目为核心竞争力的商业公司。开源本身当然值得被尊敬,本文从商业层面分析软件开源对开源商业公司的利弊。 每个项目几乎都会用到开源软件,但绝大部分开发者并不关心开源软件的源码,另外从公司角度来 …
原作者:老头头 · 微信公众号转载页 本人作为一个程序员,天生对开源有好感,之前是坚定的开源拥护者,但是上次波吉的一篇文章《开源商业模式是个伪命题》引发思考,然后在一个微信群里引发广泛讨论,导致我对开源商业化的态度发生大转弯。 本文讨论的开源项目是开源软件,而不是开源的基础类库;所说的开源商业公司指的是以开源项目为核心竞争力的商业公司。开源本身当然值得被尊敬,本文从商业层面分析软件开源对开源商业公司的利弊。 每个项目几乎都会用到开源软件,但绝大部分开发者并不关心开源软件的源码,另外从公司角度来 …
StackOverflow 2022数据库年度调查

什么,PostgreSQL已经成为最流行,最先进,开发者最想学习使用的数据库了? 最近,StackOverflow公布了在5月份进行的一次开发者调研报告。其中PostgreSQL获得了三连冠: PostgreSQL成为专业开发者中最流行的数据库!超越MySQL攀升至第一! PostgreSQL成为开发者最喜爱,且最想学习的数据库,超越Redis攀升至第一! PostgreSQL成为现有其他数据库用户最感兴趣的数据库! StackOverflow是享誉全球的开发者社区,其用户调研覆盖7万名开发者 …
什么,PostgreSQL已经成为最流行,最先进,开发者最想学习使用的数据库了? 最近,StackOverflow公布了在5月份进行的一次开发者调研报告。其中PostgreSQL获得了三连冠: PostgreSQL成为专业开发者中最流行的数据库!超越MySQL攀升至第一! PostgreSQL成为开发者最喜爱,且最想学习的数据库,超越Redis攀升至第一! PostgreSQL成为现有其他数据库用户最感兴趣的数据库! StackOverflow是享誉全球的开发者社区,其用户调研覆盖7万名开发者 …
是时候和GPL说再见了

原文由 Martin Kleppmann 于2021年4月14日发表,译者:Vonng。原文地址 Martin Kleppmann是《设计数据密集型应用》(a.k.a DDIA)的作者,译者 Vonng 为该书中文译者。 本文的导火索是Richard Stallman恢复原职,对于自由软件基金会(FSF)的董事会而言,这是一位充满争议的人物。我对此感到震惊,并与其他人一起呼吁将他撤职。这次事件让我重新评估了自由软件基金会在计算机领域的地位 —— 它是GNU项目(宽泛地说它属于Linux发行版的一 …
原文由 Martin Kleppmann 于2021年4月14日发表,译者:Vonng。原文地址 Martin Kleppmann是《设计数据密集型应用》(a.k.a DDIA)的作者,译者 Vonng 为该书中文译者。 本文的导火索是Richard Stallman恢复原职,对于自由软件基金会(FSF)的董事会而言,这是一位充满争议的人物。我对此感到震惊,并与其他人一起呼吁将他撤职。这次事件让我重新评估了自由软件基金会在计算机领域的地位 —— 它是GNU项目(宽泛地说它属于Linux发行版的一 …
容器化数据库是个好主意吗?

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

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

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

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

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

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

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