当前位置: 移动技术网 > IT编程>数据库>Redis > 分库分表实战问题

分库分表实战问题

2020年07月23日  | 移动技术网IT编程  | 我要评论

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网