数据库分库分表

为什么分库分表

很多时候接口性能都是数据库造成的

并发量比较大时,大量的数据库请求,会带来磁盘IO的性能瓶颈

随着数据越来越多,导致sql查询数据,即使走了索引也比较慢


分库分表应用场景

分库和分表时不同的两个概念,解决的问题也不同

并发量很大,但是数据量比较少,可以只分库,不分表

【把库放在不同的服务器上,减少单台服务器的IO操作】

并发量不大,但数据量比较大,可以只分表,不分库

【把数据分配到不同的表,减少单表的压力】

并发量很多,数据量也比较大,既要分库,也要分表


分库分表有两个方向:垂直和水平

并发分库分表顺序,先垂直分,在水平分,垂直更简单更符合实际业务


垂直分库

分库垂直分库,针对一个系统的不同业务进行拆分,比如:用户拆到user库,商品到goods库,订单order库。拆分后放在不同的服务器上,在高并发下一定程度能够给解决IO,连接数,硬件资源等瓶颈。


垂直分表

垂直分表,大表拆小表,基于表中字段拆分,将不常用的,数据较大的拆分到扩展表,一般针对几百列的大表进行拆分。

idnamepwdsexaddrphone...
1xx
1xx

垂直拆分user表 user_base表 和user_info表

idnamepwd
1xx
1xx
iduser_idsex...
11
12

特点:

每个库/表的结构都不一样

每个库/表的数据列至少一列一样 user_id

每个库/表的并集是全量数据

优点:

按照业务进行拆分,拆分后业务更清晰

数据维护简单,按照业务放到不同的服务器中

缺点:

单表数据量大时,写读压力大

受业务影响,热门业务压力大,冷门业务造成资源浪费


水平拆分

水平分表,针对数据巨大的单表,按照某种规则,拆分到多个表中,但是这些表还是在一个库中。

水平分库分表,按照某种规则,把拆分的表再拆到不同的库中去

水平分库分表规则

  • RANGE,按照范围拆分,比如0-10000一个表,10001到20000一个表(id/10  10个表)
  • HASH取模,比如通过用户ID取模,然后分配到不同的库表中  一致性hash
  • 地理区域,比如按照华北,东北等区域区分
  • 时间拆分,比如将6个月前的数据拆出去放到一张表,随着时间的流逝,这些表的数据查询的机率很小,这就是冷热数据分离

水平分表

idnamepwdsexaddrphone...
1
2

拆分为两个表,user1, user2表 【按照10来取模id%10=x】

idnamepwdsexaddrphone...
1
idnamepwdsexaddrphone...
2

水平拆分

特点:

每个库/表的结构都一样

每个库/表的数据都不一样

每个库/表的并集时全量数据

优点:

单库表的数据减少,有利性能

库表结构相同,程序改动小

缺点:

数据扩容难度大,比如取模的值变了 【%2 变成了%10 不同的取模落到的库不一样】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值