1.分库分表的核心思想
本质:解决数据库表由于数据量过大导致数据库性能下降
实现方式:将独立的数据库分为若干个数据库,将大表分为若干个小表
最终目的:通过数据库的分库分表,减小数据库表的数据量,从而提升数据库的性能
2.分库分表的分类
2.1 垂直分表
定义:将表按指定字段拆分为若干个小表,每张表储存部分字段
优势:进行数据冷热分离,避免IO过度争抢减少表锁几率
原则:冷热分离,将text(大文本),blob(图片,视频类)等拆分放入附表,将经常组合查询的列放一张表中,避免联表查询
存在问题:所有数据存储在一台服务器中,竞争同意台服务器的cup,内存,IO,磁盘等
2.2 垂直分库(专库专用)
定义:将表按照业务进行归类,不同表可以放在不同数据库中,不同的数据库可以部署在不同的服务器上。
优势:不同表的进行业务聚合,数据库维护不同数据更加层次化,提高了一定的磁盘IO和数据库连接次数
存在问题:没有解决单表中数据量过大的问题
2.3 水平分表
定义:将表的数据按一定的规则分成若干个表,表的结构未发生改变
优势:优化了单一表中数据量过大的问题;避免IO争抢减少表锁几率
存在问题:没有解决单库数据库数据量过大问题
2.4 水平分库
定义:水平分表的进一步拆分,讲表中的数据按照一定的规则拆分到不同数据库中,不同的数据库部署到不同的服务器上
优势:解决了单库中数据量过大的问题及并发访问压力问题
存在问题:同一张表被分配到不同数据库中,需进行额外的路由工作,提高了系统的复杂性
2.5 分库分表总结
一般来说,在系统设计阶段就应该根据业务耦合松紧来确定垂直分库,垂直分表方案。当然在数据量及访问压力不是特别大的情况,首先考虑缓存、读写分离、索引技术等方案。若数据量极大,且持续增长,再考虑水平分库水平分表方案