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

16 天前
 echoless

面试的时候被问到这个.

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

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

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

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

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

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

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

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

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

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

© 2021 V2EX