从Uber切换Postgres说起

本文PPT来自云徙科技联合创始人及CTO李元佳于10月16日在2016年杭州云栖大会上发表的《从Uber切换Postgres说起》。

为什么Uber的工程师放弃使用Postgres,转而使用MySQL?这与下面的事件背景有关:Uber的工程师在使用Postgres时遇到了限制,具体是限制写入的低效率架构、低效的数据复制、潜在的表格损坏、不完善的MVCC支持、难以升级到新版本等,看来问题还不少呢!

尽管在Uber发展的早期Postgres能很好地胜任工作,但随着业务的扩展,Postgres开始逐渐显得力不从心了。现在,除开一些遗留的Postgres实例,Uber数据库的主体要么是基于MySQL,要么在某些特殊的情形下,使用了像Cassandra这样的NoSQL数据库。

具体而言,Postgres中记录的多版本机制在旧版本回收和管理问题问题比较大,记录写入路径比较长,中途需要度旧版本的话,代价比较大。在索引与数据的关系这个方面上,与MySQL使用Clustered Index不同,Postgres处理关系采用的是B-Tree + Heap 组合,这种索引结构差异导致一系列小问题,如记录物理位置变更会导致所有索引的变更,二级索引的检索需要进行两次索引检索,并且如果主索引的数据量大的话,比较消耗空间。其他的问题还包括Postgres表结构中存在的写放大问题(一次更新,四次写入),Postgres流复制问题.....针对这些问题,人们提出了逻辑复制解决方案、复制的业务问题解决方案,来解决这些问题。

所以难怪Uber会切换Postgres,这一切还得从Postgres自身说起呀!

831c0ad8c94c7bc8ae25a06d26bd9f9ad9a7555d

d0816f6f7886f34d533e6b62bf8e249edacf587c

523e92c2868615feb7e8c20128dce3ab8f90be16

03319211e1dbc3d8c69ce122014809ca52ba6fa9

515cc42034ee6f764d789b827f58fac7ba3e780e

ec8e2edf12ae83ad6e1f5234c536cc7640340cfd

c136685bcb83735ddc2188fb4ebcd2f7fb2d092e

cac9fc0f1a56dbf3b1c3909c3c3c024aaadbbfdc

7c2ab7ffee8fe74078cad7c01f30c98304cc1378

b9d63330022861ebd0987bdb4585750c60cb47d4

cedf19fb484fa1a82fb7a8aa69c794a6cf7b6a1f

69f432c9be26a45af31f414383a3f26452a136c2

c265e632ec6a32ac00f39c24811b489f7ef8efe5


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Uber Golang规范是Uber专门为其Golang代码库制定的一套代码编写指南和规范。以下是Uber Golang规范的主要特点: 命名规范:采用驼峰命名法,遵循Go语言的命名约定。使用有意义且描述性强的名称,避免使用缩写。 包和依赖管理:使用Go的标准工具go mod来管理包和依赖。在代码库的根目录下创建go.mod文件,明确定义需要使用的外部依赖。 代码布局:代码文件应按照功能逻辑进行组织,每个文件夹下应包含一个独立的Go模块。避免使用过深的嵌套文件夹结构。 错误处理:在函数签名中使用`error`类型,以便清晰地表示可能出现的错误。避免使用panic来处理错误,而是使用返回错误信息来处理。 并发:使用Go语言提供的并发原语,如goroutine和channel,来编写并发代码。避免使用传统的同步原语,如互斥锁。 测试:为每个包编写相应的测试代码,测试代码应放在与源代码相同的包中,以便方便进行单元测试。使用`go test`来运行测试。 文档:代码应有清晰的注释,包括每个公共函数和方法的文档注释。注释应使用规范的格式,方便生成文档。 性能优化:在编写代码时要考虑性能,并进行必要的性能优化。可以使用Go的性能分析工具来找出性能瓶颈并进行优化。 此外,Uber Golang规范还提供了关于代码风格、错误处理、日志记录、版本管理和代码重用等方面的指导。遵循这些规范可以使代码更易于理解、维护和扩展,并提高代码库的整体质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值