欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

分库分表实战问题

程序员文章站 2022-04-15 20:00:02
1.分库分表中水平拆分和垂直拆分的区别?水平拆分:将表数据拆分到不同的数据数据库中。垂直拆分:把一个大表拆成多个小表。字段进行拆分。分表:是指的是把表数据拆分到多张表里面。range分发:每个月生成一个新表。如果访问新的数据还好,但是访问旧的数据就麻烦一些。hash分发:平均分配,但是扩容的话会比较麻烦。2.如何让未分库分表的系统,设计成分库分表的系统?1)停机迁移方案2)双写迁移方案修改系统中所有写库的代码,同时让他写老库和新的分库分表的库。单表的数据中取数据,同步...

1.分库分表中水平拆分和垂直拆分的区别?

水平拆分:将表数据拆分到不同的数据数据库中。

垂直拆分:把一个大表拆成多个小表。字段进行拆分。

分表:是指的是把表数据拆分到多张表里面。

range分发:每个月生成一个新表。如果访问新的数据还好,但是访问旧的数据就麻烦一些。

hash分发:平均分配,但是扩容的话会比较麻烦。

2.如何让未分库分表的系统,设计成分库分表的系统?

1)停机迁移方案

2)双写迁移方案

修改系统中所有写库的代码,同时让他写老库和新的分库分表的库。

单表的数据中取数据,同步到分库分表的系统,如果分库分表中不存在,直接写入进去。如果存在比较时间戳,单表的数据比数据库中的要新,就覆盖。迁移完了进行检查,检查完了之后一摸一样就可以关掉开始的写单表,如果不一样循环几次,直到一样。

3.如何设计可以动态扩容所容的分库分表方案?

例如 3个库 12张表的数据,扩容到6个库12张表。

【解决方案】

1.就一次性,一开始设计32个库 32张表

四个服务器,每个服务创建8个库,每个库创建32张表。现在支持的写并发8000/s,扩容的话,加四台服务器。每台服务器变成4个库,每个库32张表。直接迁移库,比较快捷和方便。最多可以扩到32个服务器。每个服务器放一个库,一个库存32张表。 

有多少个库,取模32的时候放到指定的库里面。放到指定表,再取32的模。

4.分库分表之后,id怎么解决?

1)数据库自增id

2)uuid

3)获取当前时间

4)雪花算法

5.mysql主从复制是如何实现的?

主库将变更写binlog日志中,然后从库连接到主库之后,从库有一个io线程,将主库binlog日志拷贝到本地,写入一个中继日志中。然后从库会有一个sql线程从中继日志中读取binlog日志,就会在本地执行一遍sql。

mysql有半同步复制来解决数据库主库数据丢失问题。意思是当数据存入binlog日志后,紧接着会发送给从库,从库会将日志写入relaylog日志中,接着会返回一个ack。至少一个ack才算成功。

mysql有并行复制来解决主从同步延时。指的是从库开启多个线程,并行读取relay log中不同库的日志,然后并行重放不同库的日志,这是库级别的并行。

强制读主库来解决延时问题。

 

本文地址:https://blog.csdn.net/a11112244444/article/details/107498631