前言
主要讲解mycat框架的面试题
关于mycat的知识框架可看我之前的文章
Mycat框架从入门到精通(全)
1. 主从复制的原理
这里所运用到的主从复制主要还是mysql的
- master将
数据的改变
记录到二进制日志(binary log)
。这些记录过程叫做二进制日志事件,binary log events;当数据发生改变时,则将其改变写入二进制日志中; - slave会在一定时间间隔内对master二进制日志进行
探测其是否发生改变
,如果发生改变,则开始一个I/OThread
请求master二进制事件 - 同时
主节点为每个I/O线程启动一个dump线程
,用于向其发送二进制事件,并保存至从节点本地的中继日志中
,从节点将启动SQL线程
从中继日志中读取二进制日志,在本地重放
,使得其数据和主节点的保持一致,最后I/OThread和SQLThread将进入睡眠状态,等待下一次被唤醒。
更加详细的了解可看我之前的文章
还有和之前框架的主从复制进行对比
关于主从复制的超详细解析(全)
2. 分库分表是什么
垂直分库是指按照业务将表进行分类,分布到不同的数据库上面
具体原则:
分库,分到不同的主机上,各个主机的数据库不能联表
有紧密关联关系的表应该在一个库里,相互没有关联关系的表可以分到不同的库里
优点:
拆分后业务清晰,系统之间整合或扩展容易。
缺点:
部分业务表无法join,只能通过接口方式解决,提高了系统复杂度。
由于垂直切分是按照业务的分类将表分散到不同的库,所以有些业务表会过于庞大,存在单库读写与存储瓶颈,所以就需要水平拆分来做解决。
水平分表:
将数据的水平切分理解为是按照数据行的切分,是将表中的某些行切分到一个数据库,而另外的某些行又切分到其他的数据库中
优点:
不存在单库大数据,高并发的性能瓶颈。
提高了系统的稳定性跟负载能力。
缺点:
拆分规则难以抽象。分片事务一致性难以解决。
数据多次扩展难度跟维护量极大。
跨库join性能较差。
3. 全局表,ER表是什么
全局表:数据量少改动少,不需要拆分可当全局表。每个分片都会有一张相同的表,一个字典类数据的表,每个表都有可能用到的数据。在进行插入、更新、删除操作时,会将sql语句发送到所有分片上进行执行,在进行查询时,也会把sql发送到各个节点。这样避免了跨库JOIN操作,直接与本分片上的全局表进行聚合操作。
ER表:ER表将子表的存储位置依赖于主表,并且物理上紧邻存放,因此彻底 解决了 JOIN 的效率和性能问题。子表的记录与其关联的父表的记录保存在同一个分片上
补充全局表:
① 全局表的插入、更新操作会实时在所有节点上执行,保持各个分片的数据一致性
② 全局表的查询操作,只从一个节点获取
③ 全局表可以跟任何一个表进行 JOIN 操作
字典表具有以下几个特性:
① 变动不频繁
② 数据量总体变化不大
③ 数据规模不大,很少有超过数十万条记录
4. 分片的规则有什么
有取模、分片枚举、范围约定、按日期分片
5. 全局ID有什么
在实现分库分表的情况下,数据库自增主键已无法保证自增主键的全局唯一。为此,Mycat 提供了全局 sequence
- 本地文件
优点:本地加载,读取速度较快
缺点:抗风险能力差,Mycat 所在主机宕机后,无法读取本地文件
- 数据库方式
利用数据库一个表 来进行计数累加。但是并不是每次生成序列都读写数据库,这样效率太低。Mycat 会预加载一部分号段到 Mycat 的内存中,这样大部分读写序列都是在内存中完成的。如果内存中的号段用完了 Mycat 会再向数据库要一次
- 时间戳方式
全局序列ID= 64 位二进制 (42(毫秒)+5(机器 ID)+5(业务编码)+12(重复累加) 换算成十进制为 18 位数的
long 类型,每毫秒可以并发 12 位二进制的累加。
优点:配置简单
缺点:18 位 ID 过长
6. mycat的核心配置文件有哪些
- schem.xml 逻辑库,逻辑表,数据节点
- rule.xml:分片规则
- server.xml:连接mycat的用户名和密码