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

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

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

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

学习阿里Java规范

2. 分库分表带来的好处

  • 提高查询效率
  • 减轻数据库压力
  • 高可用:某个数据库出现了问题,其他业务不影响

3. 分库分表数据到底怎样拆分?

  • 垂直拆分:分不同的库,库中表的数据结构都不同
  • 水平拆分:分不同的库,库中有表的数据结构相同

4. 分库分表带来的问题和解决思路

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

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

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

微服务其实就是垂直分库

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

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

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

猜你喜欢

转载自blog.csdn.net/RookiexiaoMu_a/article/details/106630959