Uber数据库转型:从Postgres到MySQL的Schemaless系统
143 浏览量
更新于2024-08-30
收藏 242KB PDF 举报
"Uber在面对业务快速增长带来的存储挑战时,决定将其底层存储系统从Postgres迁移到MySQL,并在此基础上开发了自有的Schemaless数据库系统。这个转变主要是为了满足线性可扩展性、写缓冲能力、数据变更通知、二级索引以及高可用性的需求。在比较了多种NoSQL解决方案后,Uber技术团队选择MySQL作为Schemaless的底层存储,利用其顺序写入特性、InnoDB的Buffer Pool以及MySQL的二索引功能,来提升系统性能和稳定性。Schemaless设计为一个无模式的键值存储,允许灵活的数据存储,且在MySQL主库故障时提供写入缓冲功能。"
在早期,Uber的后台系统基于Python和Postgres构建,但随着业务的迅速扩张,原有的架构难以应对日益增长的数据量和复杂性。Uber逐渐转向微服务架构,同时对数据库系统提出了更高的要求。在评估了多种分布式数据库如Cassandra、Riak和MongoDB后,Uber发现没有现成的解决方案能够完全满足其需求,因此决定自研数据库管理系统——Schemaless。
Schemaless的核心特性包括:
1. **线性可扩展性**:通过添加服务器来增加容量,同时减少系统响应时间,确保性能随着硬件增加而提升。
2. **写缓冲能力**:当数据库持久化失败时,系统能够暂存数据,稍后重试,保证数据不丢失。
3. **数据变更通知**:通过发布-订阅机制(trigger)实现无损的数据变更传播,使得下游系统能够实时获取更新。
4. **二级索引**:MySQL的二索引功能增强了查询效率,使得Schemaless能够高效处理复杂查询。
5. **高可用性**:设计为7*24小时运行,即使在主库故障时也能保证服务不中断。
Schemaless在MySQL之上构建了一个较轻量级的层,主要负责请求的路由,使得系统能够在不严格模式验证的情况下存储JSON数据。MySQL的顺序写入特性,结合InnoDB的BufferPool,显著提高了读写性能。
Evan Klitzke的文章深入探讨了Postgres与MySQL的底层存储机制,分析了Postgres在面临特定问题时的不足,以及MySQL如何更好地适应Uber的业务需求。通过这一转型,Uber成功地构建了一个能够支撑其大规模业务扩展的数据库系统,同时保持了服务的稳定性和高性能。
2021-02-25 上传
2021-08-23 上传
点击了解资源详情
2021-02-15 上传
点击了解资源详情
2021-03-18 上传
2021-04-01 上传
2021-04-01 上传
2021-05-02 上传
weixin_38748207
- 粉丝: 7
- 资源: 917
最新资源
- 正整数数组验证库:确保值符合正整数规则
- 系统移植工具集:镜像、工具链及其他必备软件包
- 掌握JavaScript加密技术:客户端加密核心要点
- AWS环境下Java应用的构建与优化指南
- Grav插件动态调整上传图像大小提高性能
- InversifyJS示例应用:演示OOP与依赖注入
- Laravel与Workerman构建PHP WebSocket即时通讯解决方案
- 前端开发利器:SPRjs快速粘合JavaScript文件脚本
- Windows平台RNNoise演示及编译方法说明
- GitHub Action实现站点自动化部署到网格环境
- Delphi实现磁盘容量检测与柱状图展示
- 亲测可用的简易微信抽奖小程序源码分享
- 如何利用JD抢单助手提升秒杀成功率
- 快速部署WordPress:使用Docker和generator-docker-wordpress
- 探索多功能计算器:日志记录与数据转换能力
- WearableSensing: 使用Java连接Zephyr Bioharness数据到服务器