AICon 上海站|日程100%上线,解锁Al未来! 了解详情
写点什么

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:004323
用户头像

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

关注

评论

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

人工智能丨Dify开源平台安装指南

测试人

喜讯 | 华瑞指数云喜获“2024专精特新中小企业”认定

科技热闻

“全球金牌敏捷课程” · 3月29-30日CSM认证课程 · Jim老师引导讨论AI & Agility话题

ShineScrum

Scrum CSM CSM认证

Data+LLM:AI 在智能制造数字化转型中的应用

Altair RapidMiner

机器学习 AI 数字化转型 知识图谱 智能制造

二级域名如何解析?一个一级域名可以解析多少个二级域名?

国科云

4.98 亿月活背后的国产数据库:咪咕视讯携手 TiDB 攻克内容分发核心系统挑战

PingCAP

数据库 分布式 TiDB

“2025青岛国际人工智能展览会”智能科技·引领未来

AIOTE智博会

人工智能展

太好了,IDE支持满血版DeepSeek了,我们有救了!

阿里云云效

阿里云 云原生 AI程序员 AI程序员体验官

海信激光电视连续六年稳居全球第一

财见

【新年版】JimuReport 积木报表 v1.9.4发布,免费报表、打印设计和视化设计

JEECG低代码

报表 可视化数据 BI 报表 大屏设计 报表工具

刷题玩梗?LeetCode上的神回复治好了你的精神内耗

卷福同学

面试 LeetCode 神回复

区块链技术:构建区块链生态的核心要素

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

交易所开发:构建安全、高效、可靠的数字资产交易平台

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

Java反射机制

不在线第一只蜗牛

Java

面试官:说说你项目中JWT的执行流程?

不在线第一只蜗牛

Java 面试 服务器

AI+智能财务 | 智能资金预测,智能驱动决策升级!

用友智能财务

企业 财会 经营

微信搜索“暗藏玄机”?DeepSeek-R1灰度测试背后有何深意?

测吧(北京)科技有限公司

测试

“NGINX邮件组历史”论坛上线了!

通明湖

nginx 云原生 njet

飞算 JavaAI 代码生成实战:如何用 AI 技术减少 70% 重复编码

飞算JavaAI开发助手

区块链技术前沿:DApp、DeFi与IDO开发的深度探索

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

领导者!天翼云登顶中国AI云终端市场!

天翼云开发者社区

AI 云终端 DeepSeek

招商管理系统(源码+文档+部署+讲解)

深圳亥时科技

太好了,IDE支持满血版DeepSeek了,我们有救了!

阿里巴巴云原生

阿里云 云原生 通义灵码 AI程序员 AI程序员体验官

BSI为金斯瑞集团颁发ISO/IEC 27001信息安全管理体系认证证书

财见

从 DeepSeek 趋势看 AI 开发工具:飞算 JavaAI 如何解决开发者核心痛点?

飞算JavaAI开发助手

mysql实时同步到es

秃头小帅oi

告别 996!飞算 JavaAI 如何用 AI 技术让开发者准时下班?

飞算JavaAI开发助手

面试被问“你的缺点是什么?”该怎么答?

王磊

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