说到分库分表,会想到垂直拆分和水平拆分
1.垂直拆分:
根据业务的维度,将原本的一个库(表)拆分为多个库(表〉,每个库(表)
与原有的结构不同。什么意思呢?
1.1垂直分表:
就是“大表拆小表”,基于列字段进行的。一般是表中的字段较多,将不常用的, 数据较大,长度较长的字段拆分到“扩展表“。 一般是针对那种几百列的大表,也避免查询时,数据量太大造成的“跨页”问题。
1.2垂直分库:
垂直分库是对一个系统中不同的业务进行拆分,按照业务把不同的数据放到不同的库中。数据库中表和表之间很多是没有关系的,比如用户User一个库,商品Producet一个库,订单Order一个库。 切分后,要放在多个服务器上,而不是一个服务器上
2.水平拆分:
根据分片(sharding )算法,将一个库(表)拆分为多个库(表),每个库(表)依旧保留原有的结构。
2.1水平分表:
最简单的拆分规则是根据id进行%,把数据切分到多个表中。当然也有其他的规则,这里目前先不多说。
2.2水平分库:
将数据库拆分,提高数据库的写入能力就是所谓的分库。将单张表的数据切分到多个数据库中,表的结构是一样的 。
3.水平分库分表的规则
路由:通过分库分表规则查找到对应的表和库的过程叫作路由。比如,分库分表的规则是user_id % 2,当数据库需要新增账号时,如果用户的ID是2,那么2 % 2 = 0,根据%后的结果,来确定此账号应该被保存在User0表中,以此类推。