1、为什么要分库分表
当一张表的数据达到几千万时,查询一次所花的时间会变长。这时候,如果有联合查询的话,可能会卡死在那儿,甚至把系统给拖垮。
而分库分表的目的就在于此:减小数据库的负担,提高数据库的效率,缩短查询时间。另外,因为分库分表这种改造是可控的,底层还是基于rdbms,因此整个数据库的运维体系以及相关基础设施都是可重用的。去中心化。
2、分库分表的手段有哪些?
1)垂直分表,按照业务,比如一张user表,userbase表做登录用,userinfo表做个人信息修改用
2)垂直分库,按照业务来,订单信息都在一个库,用户信息都在一个库,商品信息都在一个库
垂直拆分的特点:每个库每个表的结构都不一样;每个库每个表的数据至少一列一样;每个库每个表的并集是全量数据。
优点:拆分后业务清晰,数据维护简单,按照不同业务放到不同的机器上。
缺点:
一:如果的单表的数据量大,那么单表的读写压力依然比较大。
二:受某种业务的影响到库的瓶颈,比如双11,订单业务会大量新增,其他会员库和商品库查找多
三:部分业务无法直接关联join,只能通过java接口去调用,提供了开发的复杂度。比如双11订单表上面商品价格是20元,
然后过了双11商品表的价格是25,我们查订单信息不能直接join。
3)水平分表:将id通过运算,哈希,把数据分散在不同表。比如奇数id放在user1表,偶数id放在user2表。
4)水平分库:将id通过运算,哈希,把数据分散在不同库。比如奇数id放在user1表,偶数id放在user2表。