MySQL 处理亿级别的数据怎么做?

2024-09-03 19:17:52 +08:00
 echoless

面试的时候被问到这个.

面试官的问题是要设计一个交易所, 支持亿级别的 CRUD.

我被问住了, 我的有限经验 Postgres 接近过了亿级别, 就很有点慢了.

当时一直找不到好的解决办法.

我就说要 sharding 一下, 分库分表实际上也是 sharding 的思维.

6237 次点击
所在节点    MySQL
55 条回复
awalkingman
2024-09-03 19:34:42 +08:00
上来就要设计一个交易所,亿你麻痹亿亿亿。
prodcd
2024-09-03 19:37:44 +08:00
我这有个 MySQL 表,结构比较简单,类似 key/value 结构,再加个 datetime 用来分区,7 亿数据量,查询带着 datetime ,速度没任何问题。感觉只要能将查询落到分区里,速度不会有什么明显变化。
luoyou1014
2024-09-03 19:39:34 +08:00
表结构尽量简单,确保查询要走到索引,复杂查询拆开,便于优化,上 SSD ,读写分离,可以支撑到 10 亿级别数据
再往上可以用分区功能,我的经验只到 20 亿级别,没有开分区,也扛住了。
echoless
2024-09-03 19:47:26 +08:00
@awalkingman #1 这个没办法, 面试官问,我没接触过, 给问懵了.
echoless
2024-09-03 19:48:11 +08:00
@prodcd #2 insert or update 怎么办?
R4rvZ6agNVWr56V0
2024-09-03 19:59:30 +08:00
就这些主要的
echoless
2024-09-03 20:00:37 +08:00
@GeekGao #6 多谢, 我顺着这个思路看看.
esile
2024-09-03 21:19:51 +08:00
MongoDB 高过 10 亿的,MySQL 百万级别优化不好都会卡吧。
june4
2024-09-03 21:27:06 +08:00
性能和查询有没有优化到位有关,和表数据多少关系不大,百亿表优化了照样正常用
Mrun
2024-09-03 21:31:21 +08:00
只要索引设置合理,mysql 单表存储几十亿并不是什么很难的事情。
Mrun
2024-09-03 21:31:51 +08:00
esee
2024-09-03 21:50:12 +08:00
索引设置合理,没有太多联表操作的话,上亿并没有什么问题,我的数据表已经 4 亿了,也没有性能问题,本来设想的是出现性能瓶颈再分库分表,现在看来完全是想多了。不过我用的阿里的 RDS ,可能硬件性能硬盘的 IO 也是一个很重要的指标。
xiuming
2024-09-03 21:50:53 +08:00
用中间件 vitess 之类
sagaxu
2024-09-03 22:08:24 +08:00
以前在传统行业的时候,Oracle 单表超过 10 亿的多了去了,那年代没有 SSD ,读写也不慢啊,基本只按 ID 读写,且索引字段不更新
sagaxu
2024-09-03 22:12:56 +08:00
不按冷热数据分,只按 ID 取模分,单机分库分表意义何在,B+树从 3 层变 4 层,性能下降一个数量级吗?
echoless
2024-09-03 22:20:53 +08:00
@Mrun #11 接近 1 亿的表, 索引就有几十 GB. 这个肯定是要从磁盘读写. 速度不会快的. 交易所要经受频繁读写.

偏读, 和 CRUD 全照顾到, 不是简单 db 优化就可以的. 我感觉 @GeekGao 那个表比较全面. 说几十亿没问题的, 要么偏向读, 要么写和更新速度肯定慢.
xuanbg
2024-09-03 23:32:47 +08:00
分表啊,还能怎么办。mysql 处理不了亿级规模的表,虽然开源,但你也没这个能力去优化不是么。
zhouhuab
2024-09-04 00:33:40 +08:00
上 TiDB
BBCCBB
2024-09-04 00:44:36 +08:00
用的 aws aurora mysql 版本, 单表几亿没任何问题.
UWH0TdA14ta0s6n9
2024-09-04 01:13:33 +08:00
加硬件可及

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1070007

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX