前言
博主github
博主个人博客http://blog.healerjean.com
1、解释
我们知道互联网是由非常庞大的用户组成,所以肯定有非常绝大的请求,这些请求又会产生非常巨大的信息存储在数据库中,由于数据量非常巨大,单个数据库的表示很难容纳所有数据,所以就有了分库分表的需求。 对于数据的拆分主要有两个方面 :垂直拆分和水平拆分
1.1、垂直拆分
垂直拆分: 根据业务的维度,将原本的一个库(表)拆分为多个库(表〉,每个库(表)
与原有的结构不同。
1.1.1、垂直分表
也就是“大表拆小表”,基于列字段进行的。一般是表中的字段较多,将不常用的, 数据较大,长度较长(比如text类型字段)的拆分到“扩展表“。 一般是针对那种几百列的大表,也避免查询时,数据量太大造成的“跨页”问题。
1.1.2、垂直分库
垂直分库针对的是一个系统中的不同业务进行拆分,按照业务把不同的数据放到不同的库中。其实在一个大型而且臃肿的数据库中表和表之间的数据很多是没有关系的,比如用户User一个库,商品Producet一个库,订单Order一个库。 切分后,要放在多个服务器上,而不是一个服务器上
1.2、水平拆分
水平拆分: 根据分片(sharding )算法,将一个库(表)拆分为多个库(表),每个库(表)依旧保留原有的结构。
1.2.1、水平分表
针对数据量巨大的单张表(比如订单表),按照某种规则(
Hash取模
、地理区域
、时间
等),切分到多张表里面去。 但是这些表还是在同一个库中
**结果:分表能解决数据量过大造成的查询效率低下的问题 **
问题:但是无法有效解决数据的并发访问能力。,所以库级别的数据库操作还是有IO瓶颈。不建议采用。
1.2.2、水平分库+分表
将数据库拆分,提高数据库的写入能力就是所谓的分库。将单张表的数据切分到多个数据库中,表的结构是一样的 。
结果: 水平分库