分库分表知识总结(三)之水平分表

146 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

水平分库

经过垂直分库后,数据库性能问题得到一定程度的解决,但是随着业务量的增长,PRODUCT_DB(商品库)单库存储数据已经超出预估。粗略估计,目前有8w店铺,每个店铺平均150个不同规格的商品,再算上增长,那商品数量得往1500w+上预估,并且PRODUCT_DB(商品库)属于访问非常频繁的资源,单台服务器已经无法支撑。此时该如何优化?

当一个应用难以再细粒度的垂直切分,或切分后数据量行数巨大,存在单库读写、存储性能瓶颈,这时候就需要进行水平分库了,经过水平切分的优化,往往能解决单库存储量及性能瓶颈

概念:

把同一个表的数据按一定规则拆到不同的数据库中,每个库可以放在不同的服务器上

它带来的提升:
  • 解决了单库大数据,高并发的性能瓶颈

  • 提高了系统的稳定性及可用性

    • 稳定性体现在 IO 冲突减少,锁定减少
    • 可用性指某个库出问题,部分可用
弊端:

由于同一个表被分配在不同的数据库,需要额外进行数据操作的路由工作,因此大大提升了系统复杂度

水平分表

库内的水平分表,解决了单一表数据量过大的问题,分出来的小表中只包含一部分数据,从而使得单个表的数据量变小,提高检索性能

概念:

在同一个数据库内,把同一个表的数据按一定规则拆到多个表中

它带来的提升:
  • 优化单一表数据量过大而产生的性能问题
  • 避免IO争抢并减少锁表的几率