分库分表
网上分库分表的资料很多,这里主要是重新整理和梳理一下。如有和其他文章类似片段或解决方案,纯属前人总结或者业内标准。
为什么要分表分库
分表分库一般会在以下情况下出现:
一、数据库本身的性能瓶颈
- 单机数据库的存储容量限制
- 单机数据库的连接数限制
- 单张表的性能瓶颈
- 单张表性能瓶颈;
- 单个数据库性能瓶颈;
二、特殊场景需求
- SasS 特定场景下的数据隔离需要;
数据库瓶颈
不管是 IO 瓶颈,还是 CPU 瓶颈,最终都会导致数据库的查询缓慢甚至无法查询。进而导致业务服务的难以提高并发量、吞吐量。数据库瓶颈也会导致查询缓慢、大量的超时情况进而导致程序无法使用或者崩溃的情况
IO 瓶颈
第一种:磁盘读 IO 瓶颈,数据太多,数据库缓存放不下,每次查询时会产生大量的 IO,降低查询速度 -> 分库和垂直分表
第二种:网络 IO 瓶颈,请求的数据太多,网络带宽不够 -> 分库
CPU 瓶颈
第一种:SQL 问题,如 SQL 中包含 join,group by,order by,非索引字段条件查询等,增加 CPU 运算的操作 -> SQL 优化,建立合适的索引,在业务 Service 层进行业务计算。
第二种:单表数据量太大,查询时扫描的行太多,SQL 效率低,CPU 率先出现瓶颈 -> 水平分表。
网上也流传着一些更通俗具体的说法比如:当单表的数据量达到1000W或100G以后。更通俗的说话就是数据库已经无法满足性能需求了。至于什么情况不能满足性能需求,还是要根据具体的场景来确定的,并没有什么金科玉律。
特殊场景需求
这个就没有办法了,直接接受吧