水平分库
经过垂直分库后,数据库性能问题得到一定程度的解决,但是随着业务量的增长,PRODUCT_DB(商品库)单库存储数据已经超出预估。粗略估计,目前有8w店铺,每个店铺平均150个不同规格的商品,再算上增长,那商品数量得往1500w+上预估,并且PRODUCT_DB(商品库)属于访问非常频繁的资源,单台服务器已经无法支撑。此时该如何优化?
当一个应用难以再细粒度的垂直切分,或切分后数据量行数巨大,存在单库读写、存储性能瓶颈,这时候就需要进行水平分库了,经过水平切分的优化,往往能解决单库存储量及性能瓶颈
概念:
把同一个表的数据按一定规则拆到不同的数据库中,每个库可以放在不同的服务器上
它带来的提升:
- 解决了单库大数据,高并发的性能瓶颈
- 提高了系统的稳定性及可用性
- 稳定性体现在 IO 冲突减少,锁定减少
- 可用性指某个库出问题,部分可用
弊端:
由于同一个表被分配在不同的数据库,需要额外进行数据操作的路由工作,因此大大提升了系统复杂度
水平分表
库内的水平分表,解决了单一表数据量过大的问题,分出来的小表中只包含一部分数据,从而使得单个表的数据量变小,提高检索性能
概念:
在同一个数据库内,把同一个表的数据按一定规则拆到多个表中
它带来的提升:
- 优化单一表数据量过大而产生的性能问题
- 避免IO争抢并减少锁表的几率