美文网首页
分库分表-以及相关问题

分库分表-以及相关问题

作者: Franck_ | 来源:发表于2020-11-15 08:37 被阅读0次

普通服务器,数据库保持2000并发以下。

走数据库中间件,分发到各个数据库里面去。

也两种:
1 代理类型, 独立部署出来,独立部署一个集群。
MyCat
优点: 不需要改造各个业务系统。
缺点:需要部署和维护Mycat集群。

2 Client。只是一个jar,和WEB系统放在一起的。
Sharding-jdbc。
优点:不需要额外部署,直接放在业务系统系统。
缺点:如果要改造或者升级,所有相关的业务系统都需要改造,都改成使用sharding-jdbc。

分表:
垂直拆分: 将一张大表切分成多张小表, 频繁访问的字段放一张表,不那么频繁的放其他的表。

水平拆分:表结构都一样, 将一张有大量数据的表的数据,迁移拆分到多个数据库服务器。
或者,一个数据库里面,将一张表结构复制多份,例如用户表 User, 分为 User1, User2, User3,3张表,结构一样, 里面存的数据不一样。

按照ID来拆分一般叫做 Hash
扩容比较麻烦,可能会需要造成数据迁移。 但是流量可以较为均匀的分发到各个数据库里面去。

按照时间或者某个维度来拆分,叫做range拆分
扩容简单,可能会造成流量分发不均衡,容易造成流量集中访问到某些库里面去。

带来的问题:

跨库分页:
join: 分多次查询,在代码逻辑层面解决。
增加代码的复杂度,而且有些分页或者某些功能无完成。

count:

order by:
group by:
事务:
采用分布式事务。

迁移分库分表

停机迁移
简单停机,迁移数据,然后切换数据源完事。

不停机迁移
双写迁移
修改业务系统, 同事向旧库写入和向新库写入。

需要进行历史数据迁移, 需要自行开发程序来进行迁移。
迁移历史数据后, 还需要检查旧库和新库是否一致;如果不一致,则一直做迁移和检查,直到一致为止。

最后修改系统, 将双写改为单写。

扩容缩容

单台服务器并发撑不住就扩容。单表太大就扩容。

停机扩容
建立好新的库,编写迁移程序,然后找个业务低峰期,然后停机。 运行迁移程序,将旧的数据,迁移到新的数据库系统。 然后进行校验, 完成后释放掉旧的数据库服务器。

极度不推荐的方案。效率低。

动态扩容
第一次进行分库分表带时候, 就一次分配够, 对数据容量和并发承载都有一个扩大的预估。

一台服务器,部署32个库, 每个库32张表。
扩展的时候,2台服务器,每台16个库,每个库32张表。
最终可以扩展到32台服务器, 每台服务器1个库, 每个库32张表。
缩容也是如此。

只需要修改,数据库的连接字符串,容易扩展。

全局ID

方案1:
部署一个生成主键的库,用于生成自增id。
优点:简单,容易。
缺点:主键库可能成为瓶颈。

方案2:
UUID:
本地代码生成
优点:简单,便捷。
缺点:太长,不是自增,降低插入效率,对聚簇索引造成调整的压力。

方案3:
可以使用当前时间戳+自定义的业务模块id+随机数。
优点:本地生成,比较快, 由于时间戳有一定的顺序,插入的索引调整不会太大。
缺点:获取当前时间戳不一定很高效率。

方案4:
雪花算法

相关文章

  • 分库分表-以及相关问题

    普通服务器,数据库保持2000并发以下。 走数据库中间件,分发到各个数据库里面去。 也两种:1 代理类型, 独立部...

  • 面试必备:我们为什么要分库分表?

    目录 什么是分库分表 为什么需要分库分表呢 如何分库分表 什么时候开始考虑分库分表 分库分表会导致哪些问题 分库分...

  • 分库分表

    分库分表 为什么要分库分表? 超大容量问题 性能问题 如何去做到 垂直切分①垂直分库; 解决的是表过多的问题②垂直...

  • 水平分库分表的关键步骤以及可能遇到的问题

    水平分库分表的关键步骤以及可能遇到的问题 在之前的文章中,我介绍了分库分表的几种表现形式和玩法,也重点介绍了垂直分...

  • 架构师进阶实战随堂笔记十

    场景十:分布式数据管理问题 分布式事务和分库分表方法介绍与实践经验分享 目录 分库分表 为什么分片 分库分表策略 ...

  • Mysql的分库分表,水平拆分-垂直拆分

    参考文章MySQL分库分表总结参考数据库分库分表策略,如何分库,如何分表?MySQL分库分表原理 MySQL单库数...

  • 数据库小结

    常见问题 分库分表 对于海量数据,且有一定的并发量的分库分表,绝不是引入某一个分库分表中间件就能解决问题,而是一项...

  • 分库分表

    【分库、分表】MySQL分库分表方案 - MrSunny - 博客园 总结下Mysql分表分库的策略及应用 - 周...

  • Mysql-分库分表

    分库分表 1、按业务拆分成不同的库 2、区分实时热点数据,如用户相关与运营相关数据拆分 垂直拆分:垂直分库、垂直分...

  • 分库分表

    Reference 分库分表需要考虑的问题及方案

网友评论

      本文标题:分库分表-以及相关问题

      本文链接:https://www.haomeiwen.com/subject/palwbktx.html