分库分表是MYSQL应对大数据、高并发的常见解决方案,有很多朋友特别是熟悉ORACLE的朋友可能会问,
MYSQL有分区表,分区表同样能达到IO分散、提高性能的目的,而且更简单,更方便,为何还要采用分库分表呢。
我想主要有以下几个方便的原因:
1、MYSQL 对多CPU的支持还不是很好,还不能充分发挥多CPU的能力,如不支持并行,很多东西都不支持在线DDL等,
如果将分表数据堆积成分区表,即便IO不是问题,MYSQL自身管理上也是个问题,效率比分表差太多。
2、MYSQL分区表自身的不完善,坑太多,有时完全起不到分区表的作用,和巨大单表无二致,甚至更差。
3、分区表,分区键设计不太灵活,如果不走分区键,很容易出现全表锁,性能大幅下降。
4、自己分库分表,自己掌控业务场景与访问模式,可控。分区表,研发写了一个sql,都不确定mysql是怎么玩的,不太可控。
5、备份恢复问题,巨大的单表导致备份恢复时间成倍增加,加大整库备份恢复失败风险,在一些业务场景下,
甚至不能在有限的时间窗口内完成备份。
6、管理维护问题,如DDL,表一大简直是一场灾难。
所以,现在很多的互联网公司的一些互联网应用,很少有采用分区表的,而大都采用分库分表。