为什么进行分库分表?
引言
业务快速增长带来的问题
在一个系统初期,一个Java应用背后对应的是一套数据库、一套数据表。业务发展后,后天业务逻辑变长、请求数量增加、数据表数据量暴增,这种情况下会出现一系列的问题:
1、数据库连接数量逼近瓶颈;
2、单机存储容量难以控制,时长需要磁盘扩容;
3、单表数据量巨大将导致SQL执行缓慢;
4、锁等待、死锁问题时长发生;
以上问题都可以通过分库分表进行很好的缓解或解决;
分库分表都有具体含义细节?
分库分表包括分库和分表两个部分,
在生产中通常包括:垂直分库、水平分库、垂直分表、水平分表四种方式。
1、垂直分库:
2、垂直分表:
将一个表按照字段分成多表,每个表存储其中一部分字段;
当表数据量很大时,可以将表按字段切开,将热门字段、冷门字段分开放置在不同库中,这些库可以放在不同的存储设备上,避免IO争抢。垂直切分带来的性能提升主要集中在热门数据的操作效率上,而且磁盘争用情况减少;
通常我们按以下原则进行垂直拆分:
把不常用的字段单独放在一张表;把text,blob等大字段拆分出来放在附表中;经常组合查询的列放在一张表中;
3、水平分库:
目的:
解决了单库大数据,高并发的性能瓶颈,提高了系统的稳定性及可用性。是为解决单表数据量大的问题
4、水平分表:
目的:是为解决单表数据量大的问题