写点什么

Uber 系统从 Postgres 迁移到 MySQL

  • 2016-08-25
  • 本文字数:986 字

    阅读完需:约 3 分钟

Uber 最近在博客中详细阐述了他们为什么要使用MySQL 来替代PostgreSQL 。Uber 遇到的主要困难源于Postgres 的写入放大问题。写入放大是在对涉及索引的单行数据进行更新时,需要更新所有的索引,从而导致大量对磁盘的写操作,在使用固态硬盘时这个问题更加严重。 HOT(Heap-Only-Tuples) 特性可以缓解这个问题,这在一些用例中也许是一个解决方案。因此,写入放大问题泄漏到了复制过程中,造成为了一些简单的更新而在副本间传播多个更新操作。在灾难恢复的场景中,由于数据中心之间可能相距较远,并且无法获得廉价、便利的带宽,就会导致重大问题。

在 Postgres 9.2 的一次常规更新中,一个 bug 导致了一些表的数据损坏。这是由于没有标记一些应该被标记为不活跃的数据所导致的。无法计算这个 bug 这所影响到的数据总数,而且由于复制是发生在物理层,这也就存在着损坏数据库索引的风险。

Postgres 的副本并没有真正支持多版本并发控制(MVCC)。副本必须和主节点使用一致的预写式日志(WAL: Write Ahead Log )。加上如果更新操作涉及其他事务中已打开的行,Postgres 会将其阻塞,这在很大程度上会影响长事务(long running transaction)。一旦长事务阻塞了预写式日志线程,就会被 Postgres 终止,如果应用开发人员没有意识到这点,特别是在使用事务边界不透明的对象关系映射(ORM)时,就会带来问题。

再一次由于复制过程是工作在物理层,数据库更新不得不在所有副本间同时进行,不然复制无法正常工作。这意味着就 Uber 的规模来说,升级到当时的新版本真的会造成很多问题。这个问题已经自 9.4 版本之后使用 pglogical 修复了。

在决定 Uber 案例的设计方案时,设计者看重 MySQL 的优势有:拥有灵活的副本、每个连接使用轻量级的线程而不是进程、廉价的缓存。应对磁盘存储上的主要问题,则使用 InnoDB 存储,使压缩更高效而不会影响大量索引或引起 Postgres 中的写入放大问题。

Markus Winand Simon Riggs Robert Haas 针对 Uber 用例提出了一些很好的反驳。他们详细阐述了在诸多用例中如何解决上述问题,以及为什么并不是对每个案例都应该抛弃 Postgres 而使用 MySQL,反之亦然。

查看英文原文: Uber Engineering Moving from Postgres to MySQL


感谢百占辉对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-08-25 19:004277
用户头像

发布了 41 篇内容, 共 14.5 次阅读, 收获喜欢 3 次。

关注

评论

发布
暂无评论
发现更多内容

什么是远程桌面连接?win11系统如何启用远程桌面连接?

RayLink远程工具

官宣|Apache Flink 1.17 发布公告

Apache Flink

大数据 flink 实时计算

低代码实现探索(五十七)脚本模板模式的生成

零道云-混合式低代码平台

GTC 2023的算力协奏曲,NVIDIA与宁畅“共舞”AI时代

脑极体

算力

电脑怎么远程连接服务器?如何进行远程桌面连接?

RayLink远程工具

远程桌面连接

紧跟潮流,抓住趋势,跟上全民AI的节奏,开源IM项目OpenIM产品介绍,为AIGC贡献力量

Geek_1ef48b

2023 年最佳免费远程控制软件RayLink-远程办公必备

RayLink远程工具

远程控制软件 远程办公软件

【必看答疑】为什么我的电脑远程连接不上?

RayLink远程工具

远程桌面连接

GPT-4正刮起新的生成式AI风暴

澳鹏Appen

人工智能 ChatGPT GPT-4

大数据分析工具Power BI(六):DAX表达式简单运用

Lansonli

大数据分析工具Power BI

远程桌面和远程协助的区别,选择哪个方式连接更好?

RayLink远程工具

远程协助 远程桌面连接

大会计走向业财合一,价值财务成追求方向

用友BIP

智能会计 价值财务 全球司库 业财合一 业财融合

定位任意时刻性能问题,持续性能分析实践解析

阿里巴巴中间件

阿里云 云原生 可观测

华为春季发布会召开,旗舰新品全面支持空间音频

最新动态

远程控制软件如何实现两台电脑连接

RayLink远程工具

远程控制软件

主题及关卡揭晓!全国智能汽车竞赛智慧交通创意组发布倒计时

飞桨PaddlePaddle

远程控制软件RayLink助力畅玩爆火双人游戏

RayLink远程工具

远程控制软件

好用的远程控制桌面连接工具有哪些?

RayLink远程工具

远程桌面连接

远程桌面无法连接远程计算机是什么原因?

RayLink远程工具

远程桌面连接 远程桌面

Securtiy Code Reviewer 需要做些什么?6个安全实例一探究竟

极狐GitLab

DevOps Code Review 代码质量 代码安全 代码评审

如何远程控制电脑,远程控制电脑的设置方法

RayLink远程工具

远程控制连接 远程控制电脑

内网渗透之某后渗透利用

网络安全学海

黑客 网络安全 安全 信息安全 渗透测试

远程办公模式开启,该如何选择合适的办公软件?

RayLink远程工具

远程办公 远程协助 远程办公软件

免费的远程控制软件有哪些?远程控制软件哪个好用?

RayLink远程工具

远程控制软件 远控软件

华为Mate X3震撼发布!轻薄折叠屏携华为阅读带来全新精品阅听体验

最新动态

时不我待,拥抱趋势,开源IM项目OpenIM技术简介

Geek_1ef48b

远程桌面连接是什么?远程桌面连接使用教程

RayLink远程工具

提升用户体验与搜索引擎排名|网页性能监控实操详解

云智慧AIOps社区

监控 监控管理平台 监控宝 网站优化 网站监控

业界数据库工具结合 ChatGPT 的(不完全)汇总

Bytebase

人工智能 数据库 dba ChatGPT

什么是远程桌面?远程桌面软件是如何进行连接工作的?

RayLink远程工具

远程桌面连接 远程桌面工具 远程桌面软件

什么是远程控制软件?远程控制软件推荐

RayLink远程工具

远程控制软件

Uber系统从Postgres迁移到MySQL_数据库_Alex Giamas_InfoQ精选文章