垂直分表
操作数据库中某张表,把这张表的一部分字段数据存到一张新表里,再把这张表的另一部分字段数据存到另外一张表里面,垂直分表是在一个数据库中处理
字段数据:可以理解为表中的列
垂直分表的原则:
1、把不经常查询的字段放在一张单独的表
2、把字段中存储数据量大的放到一张单独的表
3、查询频率高的组合查询字段放在一张表中
垂直分表的好处:
1、为了避免IO争抢减少了锁表的几率
2、充分发挥热门数据的操作效率 ——> 商品信息的操作的高效率不会被商品描述的低效率所拖累
商品信息指的是简略信息:浏览众多商品时展示的卡片信息,而商品的描述信息则是点击进入卡片的详细信息
垂直分库——根据业务分库
垂直分库是指按照业务将表进行分类,分布到不同的数据库上面,每个库可以放在不同的服务器上
把单一数据库按照业务进行划分,专库专表
eg: 把 订单和商品的数据库分别放到不同的数据库中
垂直分库带来的好处:
1、在高并发场景下,垂直分库一定程度的提升IO、数据库的连接数
2、垂直分库将表按照业务分类,然后分布在不同的数据库中,并且可以将这些数据库部署到不同的服务器上,从而达到多个服务器共同分担压力的效果
垂直分库没有解决单表的数据量过大的问题
水平分库
将商品的ID为单数和商品ID为偶数的商品信息分别放在两个库中
水平分库是把同一个表的数据按照一定规则(奇数偶数)拆到不同的数据库中,每个库可以
放到不同的服务器上
水平分库带来的好处:
解决了单库大数据
提高了系统的稳定性和可用性
稳定性体现在IO的冲突减少,锁表的几率减少
可用性指某个库出问题,部分可用
水平分表
和水平分库一样,也是为了解决单表数据量大的问题
和水平分库的思路类似,不过这次操作的目标是表。如果商品的id为偶数,将此商品信息持久化到商品A表,如果商品的id为奇数,将此商品信息持久化到商品B表
水平分表是在同一个数据库内,把一个表的数据按照一定的规则拆到多个表中
水平分表的好处:
1、优化单一数据量过大而产生的性能问题
2、避免IO争抢并减少锁表的几率
总结
一般来说,在数据量及访问压力不是特别大的情况,首先考虑缓存、读写分离,索引等等技术方案。若数据量极大,且持续增长,再考虑水平分库水平分表方案