# 1. 前言
计划: 和软件设计师知识点很大不同,需要准备下
# 选择
DSP是专门用于实时的数字信号处理的处理器 采用哈佛架构
# 下午题
# 反规范化设计
# 增加冗余列
在多个表中增加相同的常用列,可用来在查询时避免连接操作。
# 增加派生列
把可由通过表中其他数据计算生成的列作为固定的列插入到表中,它的作用是在查询时减少计算量,从而加快查询速度。
# 重新组表
如果许多用户需要查看两个表连接出来的结果数据,则把这两个表重新组成一个表来减少连接从而提高性能。
# 分割表
有水平分割、垂直分割两种,水平分割把表按记录进行分割,把数据放到多个独立的表中,主要用于表数据规模很大、表中数据相对独立或数据需要存放到多个介质上时使用; 垂直分割表对表按照列进行分割,通常将主键与部分列放到一个表中,主键和其他列放到另一个表中,在查询时减少I/O次数。
# 数据不一致
# 批处理维护
通过定期运行批处理作业后者存储过程对数据进行修改,适用于实时性哟啊求不高的情况。
# 应用逻辑
在同一事务中对所有涉及的表进行增、删、改操作,同一逻辑必须在所有的应用中使用和维护,缺点是容易遗漏,特别是在需求变化时,不易于维护。
# 触发器
对数据的任何修改立即触发对数据库的某些列的相应修改,实时性号,也易于维护。
# Redis
# 数据类型
String是基本类型,可用于缓存层或计数器,如视频播放量、文章浏览量等。 Hash类型是一种特殊的String类型,更节省空间,描述用户信息较为方便。 Set是无序集合类型,每个值不能重复,可用于去重、抽奖、初始化用户池等。 List是双向链表结构,可以模拟栈、队列等形式,可用于回复评论、点赞。 ZSet是有序集合类型,每个元素有一个分数,可用于首页推荐10个最热门的帖子等功能。
# 数据同步
- 引用MySQL事务,因为事务有一致性保证,事务提交成功后再更新缓存;
- 在缓存里面引用一些访问控制位,数据库数据变化后,同步变更对应的访问控制位,然后从缓存查询时,率先判断该访问控制位,有变化就从数据库查,无变化直接从缓存返回数据
- 通过数据库中间件产品保证缓存和数据库数据的实时同步。
# RDB和AOF
- RDB更新频率低
- AOF可以保证数据不丢失,更安全
- RDB间隔一段时间存储,可能发生数据丢失和不一致。
- RDB文件小
# 反规范化设计
# 增加冗余列
在多个表中增加相同的常用列,可用来在查询时避免连接操作。
# 增加派生列
把可由通过表中其他数据计算生成的列作为固定的列插入到表中,它的作用是在查询时减少计算量,从而加快查询速度。
# 重新组表
如果许多用户需要查看两个表连接出来的结果数据,则把这两个表重新组成一个表来减少连接从而提高性能。
# 分割表
有水平分割、垂直分割两种,水平分割把表按记录进行分割,把数据放到多个独立的表中,主要用于表数据规模很大、表中数据相对独立或数据需要存放到多个介质上时使用; 垂直分割表对表按照列进行分割,通常将主键与部分列放到一个表中,主键和其他列放到另一个表中,在查询时减少I/O次数。
# 数据不一致
# 批处理维护
通过定期运行批处理作业后者存储过程对数据进行修改,适用于实时性哟啊求不高的情况。
# 应用逻辑
在同一事务中对所有涉及的表进行增、删、改操作,同一逻辑必须在所有的应用中使用和维护,缺点是容易遗漏,特别是在需求变化时,不易于维护。
# 触发器
对数据的任何修改立即触发对数据库的某些列的相应修改,实时性号,也易于维护。
# Redis
# 数据类型
String是基本类型,可用于缓存层或计数器,如视频播放量、文章浏览量等。 Hash类型是一种特殊的String类型,更节省空间,描述用户信息较为方便。 Set是无序集合类型,每个值不能重复,可用于去重、抽奖、初始化用户池等。 List是双向链表结构,可以模拟栈、队列等形式,可用于回复评论、点赞。 ZSet是有序集合类型,每个元素有一个分数,可用于首页推荐10个最热门的帖子等功能。
# 数据同步
- 引用MySQL事务,因为事务有一致性保证,事务提交成功后再更新缓存;
- 在缓存里面引用一些访问控制位,数据库数据变化后,同步变更对应的访问控制位,然后从缓存查询时,率先判断该访问控制位,有变化就从数据库查,无变化直接从缓存返回数据
- 通过数据库中间件产品保证缓存和数据库数据的实时同步。
# RDB和AOF
- RDB更新频率低
- AOF可以保证数据不丢失,更安全
- RDB间隔一段时间存储,可能发生数据丢失和不一致。
- RDB文件小
# 质量属性效用树(Utility Tree)
性能 安全性 可用性 可修改性
# 可用性
心跳、ping/Echo、冗余、进程监视器
# 可修改性
抽象、信息隐藏、限制通信路径、
# 主从复制
# 过程
当在从库上启用复制时,首先创建I/O线程连接主库,主库随后创建Binlog Dump线程读取数据库事件并发送给I/O线程,I/O线程获取到事件数据后更新到从库的中继日志Retry Log中去,之后从库上的SQL线程读取中继日志Retry Log中更新的数据库事件并应用。
我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=38dpnhkh4o8wo