高性能db集群
2021-09-07 10:20:42 7 举报
面试整体的大体节点,支持更新。
作者其他创作
大纲/内容
与NoSQL的对比
简介
Not Only SQL,不止是SQL
关系型数据库的确定
1. 存储的是行记录,无法存储数据结构
2. Schema强约束,操作不存在的列会报错,扩充列需要执行DDL修改,修改过程可能长时间将表锁住
3. 大数据场景下IO较高
4. 全文搜索功能比较弱
NoSQL方案
1. KV存储,解决无法存储数据结构问题,以Redis为代表
2. 文档数据库,解决强Schema问题,以MongoDB为代表
3. 列式数据库,解决大数据场景下IO问题,以HBase为代表
4. 全文搜索引擎,解决全文搜索性能问题,以ElasticSearch为代表
读写分离
主从
主机提供写服务,从机提供读服务
主备
从机不提供读服务
本质
减轻了db的访问压力,db的存储压力仍然存在
通过复制来实现主从、主备数据同步
问题
主从复制延迟
出现场景
写操作在主机上,随后进行读操作落到从机上。可数据还未同步到从机,从机的数据就与主机的不一致。用户读取的数据就是老数据。
1. 用户刚注册完就去登录。等场景
解决方法
1. 写操作后读操作指定发送给主机
与业务强绑定,对业务的侵入和影响较大
2. 读取从机失败后,二次读取主机数据
增加了主机的读压力
3. 关键业务访问主机,非关键业务读写分离
分配机制
简介
不同请求访问不同节点服务器
方法
程序代码封装
代码中抽象一个数据访问层或中间层封装,来实现读写请求和db服务器连接的管理
中间件封装
独立一套系统,来实现读写请求和db服务器连接的管理
Atlas
TDDL
MySQL Route
分库分表
本质
减轻了db的数据存储压力
业务分库
简介
根据业务拆分db,不同数据库存储在不同服务器上
带来的问题
join操作
事务的不可用
分表
水平分表
拆分表数据中的行,以算法来实现每张表的数据分配
带来的问题
1. 需要路由算法来实现分配
2. 需要进行多次join操作
3. 分页问题,涉及多张表,需要多次查询最好整合数据进行聚合操作
count操作
orderby操作
垂直分表
拆分表数据中的列,将一些不常用且占了大量空间的列拆分出去
带来的问题
1. 表操作的数量增加
不局限拆分的次数
实现方式
程序代码封装
中间件封装
复制
异步复制
1. master记录写操作到binary log中
2. slave会在一定时间间隔内探测master是否修改了数据
3. 探测到master binary log发生了改变,则开始一个IO线程读取binary log
4. 同时master会开始一个dump线程来给IO线程发送事件
5. slave收到事件会保存到自己的中继日志中 relay log
6. slave会启动SQL线程来读取relay log,在本地重放,保持其与master的数据一致
7. IO线程、SQL线程进入睡眠,等待下次唤醒
半同步复制
组复制
0 条评论
下一页