笔记来源: Java工程师面试突击专栏 https://apppukyptrl1086.pc.xiaoe-tech.com/detail/p_5d3114935b4d7_CEcL8yMS/6
为什么要分库分表(设计高并发系统的时候,数据库层面该如何设计)? 用过哪些分库分表中间件? 不同的分库分表中间件都有什么优点和缺点? 你们具体是如何对数据库如何进行垂直拆分或水平拆分的?
高并发系统单库单表是扛不住的. 单表几百万数据最多了.
为什么要分库分表分库分表是两个概念. 可能只分库不分表. 可能只分表不分库.
模拟的项目的演进: 刚开始用户量较少, qps 可能就几十个请求. 之后产品获得爆发式增长, 用户量到达2000万, 单表数据量每天新增已经达到了10万条. 单个库每秒并发稳定在1000左右较为合适, 不要超过2000. 之后公司再次获得融资, 用户量达到一亿, 活跃用户达到上千万, 单表新增数据上千万条数据. 高峰期每秒8k请求. 中间可能用个mq , 用于流量消峰.
高峰后, mq积压了很多消息, 要一两个小时才能消费完 . 此时系统的问题 :
- 部署的MySQL单机, 扛不住高并发
- MySQL单机磁盘容量快满了
- MySQL单表数据量太大了, sql越跑越慢.