垂直分表:将一个表按照字段分成多表,每个表存储其中一部分字段。
可以将商品表中的商品详情字段拆分成单独一个表
- 把不常用的字段单独放在一张表;
- 把text,blob等大字段拆分出来放在附表中;
- 经常组合查询的列放在一张表中;
- 热门数据操作效率提高
- 磁盘使用情况减少
垂直分表只解决了单一表数据量过大的问题,但没有将表分布到不同的服务器上,因此每个表还是竞争同一个物理机的CPU、内存、网络IO、磁盘。
垂直分库:按照业务将表进行分类,分布到不同的数据库上面,每个库可以放在不同的服务器上,它的核心理念是专库专用
- 解决业务层面的耦合,业务清晰
- 能对不同业务的数据进行分级管理、维护、监控、扩展等
- 高并发场景下,垂直分库一定程度的提升IO、数据库连接数、降低单机硬件资源的瓶颈
依然没有解决单表数据量过大的问题
水平分库:把同一个表的数据按一定规则拆到不同的数据库中,每个库可以放在不同的服务器上
- 解决了单库大数据,高并发的性能瓶颈。
- 提高了系统的稳定性及可用性。
同一个表被分配在不同的数据库,需要额外进行数据操作的路由工作,因此大大提升了系统复杂度。
水平分表:在同一个数据库内,把同一个表的数据按一定规则拆到多个表中
- 优化单一表数据量过大而产生的性能问题
- 避免IO争抢并减少锁表的几率
- 解决了单一表数据量过大的问题,分出来的小表中只包含一部分数据,从而使得单个表的数据量变小,提高检索性能。