亿级数据优化必备只分库分表

1. 单表行数多少时适合分库分表?

单表行数超过500万行时或者单表容量超过2GB时,才推荐使用分库分表。

如果项目中预计三年以上的时间数据量才能达到这个级别时,请不要在创建表时就进行分库分表。

学习阿里Java规范

2. 分库分表带来的好处
  • 提高查询效率
  • 减轻数据库压力
  • 高可用:某个数据库出现了问题,其他业务不影响
3. 分库分表数据到底怎样拆分?
  • 垂直拆分:分不同的库,库中表的数据结构都不同
  • 水平拆分:分不同的库,库中有表的数据结构相同
4. 分库分表带来的问题和解决思路

一、垂直分库分表带来的问题:关联查询 和 分布式事务

关联查询解决思路:
①冗余:通过字段冗余的方式,尽量避免关联查询
②数据同步:通过MQ将另一个库的表数据同步到本库;dblink、ETL(通过定时任务将表数据同步,实时性低)
③广播表:每个库中都有一张一样的表,且表中数据一致
④代码中:将各个库中表的数据都查询出来,然后在代码在内存中去整理出来我们需要的数据
⑤尽量把有业务关联的表放在一个库

分布式事务解决思路:
seata、tcc…等分布式框架很好的解决了分布式事务的问题,但是使用分布式事务会带来效率变慢,这是必然的。

微服务其实就是垂直分库

二、水平拆分带来的问题:分页查询、全局ID、数据的均匀分布
分页查询解决思路:
①如果数据量大,可以将表每个月一张表,甚至每周一张表,查询的时候只支持查某个月的数据
②在代码中将数据排序

全局ID解决思路:
①UUID
②雪花算法

数据的均匀分布:
①hash % 取模
②随机
③范围:0-1亿数据在一个表,1-2亿数据在另一个表,2-3亿数据在另一表
④时间:月度、周…
⑤按地区,同地区产生的数据在一个表
⑥复合算法:范围取模 取模范围
⑦枚举:男 女

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值