数据库主从同步原理等信息
关系型数据库mysql
缓存数据库redis
提升数据库高并发访问的效率:
- 考虑优化索引和sql语句的编写;
- 使用缓存,将热点数据保存在缓存中;
- 采用主从架构,进行读写分离;
主从架构的好处:
- 读写分离、提升并发能力(减轻主库压力、主库加锁时不影响从库的读取)
- 数据备份(从库相当于是对主库进行了备份)
- 高可用性(当主库因为某些原因需要维护或崩溃无法使用时,可以进行主从切换)
主从同步的原理:
基于binlog二进制日志(这个日志记录了所有的数据库操作)进行复制,有三个线程(一个主库线程和两个从库线程)
- 二进制日志转储线程(Binlog dump thread)是一个主库线程。当从库线程连接的时候,主库可以将二进制日志发送给从库,当主库读取事件的时候,会在Binlog上加锁,读取完成之后,再将锁释放掉。
- 从库I/O线程会连接到主库,向主库发送请求更新Binlog。这时从库的I/O线程就可以读取到主库的二进制日志转储线程发送的Binlog更新部分,并且拷贝到本地形成中继日志(Relay log)。
- 从库SQL线程会读取从库中的中继日志,并且执行日志中的事件,从而将从库中的数据与主库保持同步。
同步依赖于binlog日志文件,文件数据的传输收到网络延迟的影响,可能会出现主从同步的数据不一致问题;
mysql使用组复制技术,简称MGR(MySQL Group Replication),是一个基于Paxos(分布式一致性算法)协议的技术,来解决这个问题。
ps:这个Paxos算法我解释不好,感兴趣可以去网上搜一下相关论文