【系统分析师】- 案例 -数据库特训

目录

1、规范化与逆规范化

2、数据库视图

3、数据库索引

4、SQL优化

5、数据库分区

6、分布式数据库

7、NoSql

8、读写分离(主从复制)

9、缓存一致性

10、云数据库

11、主题数据库

12、数据同步


1、规范化与逆规范化

规范化:

优点:

  1. 解决数据库中数据的插入、删除、修改异常等问题
  2. 减少数据冗余
  3. 确保数据的一致性和完整性
  4. 提高数据安全性

缺点:

  1. 可能由于拆分的表过多,从而导致查询性能较低
  2. 连接查询较多,增加sql复杂性

技术手段:

  1. 第一范式 :属性不可再分
  2. 第二范式:消除非主属性对候选键的部分依赖
  3. 第三范式:消除非属性对候选键的传递依赖
  4. BC范式:每个依赖的左侧决定因素都包含某个候选键

逆规范化:

优点:

  1. 增加了冗余列,使得查询sql简化,增加了查询效率
  2. 增加了派生列,提搞了统计效率

缺点:

  1. 数据冗余可能导致在插入、更新,删除时,数据不一致问题
  2. 冗余数据,会消耗额外的存储空间
  3. 更新数据时,需要同时更新冗余数据,会降低操作效率
  4. 增加程序复杂性,需要编写复杂的数据同步程序来同步冗余数据

缺点解决方案:

数据不一致问题解决方案:

  1. 触发器数据同步
  2. 应用程序数据同步

技术手段:

  1. 增加冗余列:常用于减少连接查询
  2. 增加派生列:常用于减少计算,比如,订单中商品数量和单价存在,派生出订单总价字段
  3. 水平分割表:根据某个属性值按照一定规则(散列、取余)进行水平分割数据记录到相同结构的多张表
  4. 垂直分割表:将主键与表中的部分列作为一个表,主键与其他列最为另一张表
  5. 重新组表:将拆分过度的表重新组合为一张表
2、数据库视图

优点:

  1. 视图能简化用户操作
  2. 对数据库重构提供了一定的逻辑独立性,数据库修改表结构,视图使用者,无需修改
  3. 保护数据的机密性,比如用户表中有身份证,手机号信息,但我们指向对外提供用户名和邮箱,可以创建一个用户名和邮箱的视图
  4. 灵活的控制数据的可见性,可以提供不同视图供不同的用户使用

物化视图:将视图的内容存储起来,随原始表数据发生变化,同步更新

3、数据库索引

优点:提高查询效率

缺点:降低数据修改、删除效率、需要额外的空间存储索引文件

过多索引问题:

  1. 过多索引会占用大量的存储空间
  2. 更新语句会引发索引更新,降低更新操作效率
  3. 会导致查询优化器压力增加,评估的组合增多
  4. 聚集索引更新会导致非聚集索引同步更新,降低了处理效率

索引使用建议

1、需要对建立的索引进行实际的测试,因为索引的使用是数据库优化器决定的。

其他点,围绕"过多索引问题"进行罗列

4、SQL优化
  1. 建立物化视图,避免多表连接查询
  2. 查询时,只查询需要的属性列
  3. 对常用的查询列建立索引
  4. 以不相干的子查询替代相干子查询
  5. 经常提交COMMIT ,尽早释放锁
  6. 用带in的条件子句等价替换OR 子句
5、数据库分区

分区是数据库管理中的一种技术,指的是将一张表或索引按照某种规则水平切分为多个物理部分。虽然逻辑上表仍然是整体,但在存储层面,这些分区是独立的。每个分区可以单独存储在不同的磁盘或节点上。

分区类型:

  1. 范围分区(RANGE):根据数据范围值来做分区,例如:按用户年龄分区,0~18分区a,18~60 分区b
  2. 散列分区(HASH):通过对key进行hash运算分区,例如:类似于取余操作,把余数相同的放在一个分区
  3. 列分区(LIST):根据某字段的具体值进行分区,例如:用户归属地,长沙用户分为一个区,上海用户分为一个分区

优点:

  1. 查询优化:通过分区键值,减少扫描的数据量。
  2. 管理灵活:分区级别的数据操作更加高效,例如删除或归档。
  3. 支持扩展:方便将数据分布到多个节点或存储设备上。
  4. 提升并发:减少锁争用,提高多线程处理效率。

缺点:

  1. 设计复杂性:分区表的设计需要提前规划分区键和分区规则,且后续修改代价较高。
  2. 查询限制:某些查询可能无法利用分区优化(如未使用分区键)。
  3. 功能限制:部分数据库功能(如外键约束)在分区表中可能不支持。
  4. 存储开销:每个分区都会占用额外的元数据存储。
6、分布式数据库

分布式数据库特点:

  1. 自治性:每个数据节点都有独立的DBMS,节点之间没有主从关系
  2. 分布性:各节点数据可以存储在不同位置,不同设备上
  3. 透明性:用户不关心数据的存储位置、复制方式、数据模型。
  4. 可用性:部分节点故障,其他节点副本仍然可以正常对外提供服务

透明性:

  1. 位置透明:不关心数据存储在什么位置
  2. 逻辑透明(局部映射透明):用户不关心局部DBMS使用何种数据模型,哪种语言
  3. 复制透明:不关心副本数据使用何种方式,何时进行数据同步
  4. 分片透明:不关心各节点使用何种分片方式(水平分片、垂直分片、混合分片、导出分片)

分片方式:

  1. 水平分片:按照数据记录分片
  2. 垂直分片:按照属性列分片
  3. 混合分片:(水平 + 垂直)
  4. 导出分片:一个关系的分片不是基于关系本身的属性,而是根据另一个与其有关联的关系的属性来划分。例如 :有两张表"课程表"(课程名,课程号,学号)、"学生表"(学号,姓名,性别),此时根据性别进行水平分片,就叫做导出分片
7、NoSql

1、键值数据(key-value):每条记录以字符串作为key, 值可以是任意类型数据,例如: redis

优点:扩展性好,灵活性高,大量写操作时性能高

缺点:无法存储结构化数据,条件查询效率低

2、列式数据库:以列为单位组织数据,每一列都有一个相关的列式存储文件,例如:Hbase

优点:查找速度快,可扩展性强,更容易进行分布式扩展

缺点:不支持强数据一致性,对修改操作较慢

3、文档数据库:以键值来定位一个文档,可以看作是键值数据库的衍生品,主要用来存储半结构化和非结构化数据,例如:mongoDB

优点:数据结构灵活,复杂性低

缺点:查询性能不高,缺乏统一的查询语法

4、图形数据库(Graph):使用灵活的图形模型,专门处理高度关联关系的数据,例如:Neo4J, InfoGrid

优点:灵活性高,支持复杂的图形算法,可用于构件复杂的关系图谱

缺点:复杂性高,分布式集群较复杂

8、读写分离(主从复制)

简述优点:

  1. 提高数据库可用性:主数据库故障宕机时,会在从数据库里选举一个作为新的主数据库,从而提高了数据库的可用性。
  2. 提升数据库处理效率:主数据库处理数据更新操作,将查询操作分发给从数据库,从而减少主数据库的处理压力,提高数据库处理性能。

简述数据库主从复制流程

  1. 当从库启动复制时,创建I/O线程连接主库
  2. 主库随后创建Binlog Dump线程读取数据库事件,发送给I/O线程
  3. I/O线程接收到事件数据后,更新到从库的中继日志Relay Log 中
  4. 从库的SQL线程读取中继日志Relay Log中的更新数据库事件并应用

简述"同步复制","异步复制",半同步复制三种复制方式的特点

  1. 同步复制,主库需要等待所有从库同步成功才可以响应用户,影响用户体验,这种方式保证了数据一致性,但是牺牲了数据的可用性
  2. 异步复制:当用户请求更新数据时,主库更新成功后直接响应,异步将更新事件发送给从库,不会等待从库是否完成同步,这种方式保证了主数据库的可用性,但牺牲了数据的一致性。
  3. 半同步复制:用户请求更新数据,主库执行更新操作,同步发送数据库事件给从库,但主库不用等待所有从库同步成功便可响应用户,也就是说主库可以等待部分从库同步成功后,响应用户操作成功。
9、缓存一致性

简述数据库缓存同步过程

读操作:

  1. 根据key先从缓存中读取
  2. 缓存读取不到,则从数据库中查询数据,将查到的数据添加到缓存中,返回数据
  3. 缓存读取到,直接将数据返回

写操作:

  1. 数据库更新数据,同步将缓存中的数据更新/删除,返回成功

简述redis存储方案:

1、主从复制模式:主节点负责写操作,从节点复制主节点数据,负责读操作

  • 优点:实现了读写分离,可以提高读操作的性能;通过从节点复制主节点的数据,提高了数据可用性
  • 缺点:主节点仍然存在单点故障问题,故障转移需要手动进行
  • 使用场景:读写分离,数据备份

2、哨兵模式:主从模式上增加了哨兵(sentinel)进程,用于监控主从节点的状态,并在主节点故障时,自动进行故障转移

  • 优点:提供了自动故障转移功能,提高了系统的可用性,可以监控多个redis节点的健康状态
  • 缺点:配置相对复杂,故障转移时可能导致短暂的服务中断
  • 适用场景:高可用

3、集群模式:分布式部署方式,数据被分割成多个片段,分布在不同节点上,每个节点可以是主节点也可以是从节点,节点相互协调,共同提供服务

  • 优点:分布式存储,提高可存储容量和处理能力,自动进行故障转移,提高了系统可用性,支持动态扩容
  • 缺点:配置和运维复杂,不支持跨界点的事务和某些复杂操作
  • 适用场景:水平扩展,高并发、高可用

4、单机模式:

  • 优点:配置简单、操作节点
  • 缺点:单点故障
10、云数据库
11、主题数据库
12、数据同步
相关推荐
Yawesh_best5 小时前
告别系统壁垒!WSL+cpolar 让跨平台开发效率翻倍
运维·服务器·数据库·笔记·web安全
Ccjf酷儿7 小时前
操作系统 蒋炎岩 3.硬件视角的操作系统
笔记
习习.y8 小时前
python笔记梳理以及一些题目整理
开发语言·笔记·python
在逃热干面8 小时前
(笔记)自定义 systemd 服务
笔记
DKPT10 小时前
ZGC和G1收集器相比哪个更好?
java·jvm·笔记·学习·spring
QT 小鲜肉11 小时前
【孙子兵法之上篇】001. 孙子兵法·计篇
笔记·读书·孙子兵法
星轨初途12 小时前
数据结构排序算法详解(5)——非比较函数:计数排序(鸽巢原理)及排序算法复杂度和稳定性分析
c语言·开发语言·数据结构·经验分享·笔记·算法·排序算法
QT 小鲜肉12 小时前
【孙子兵法之上篇】001. 孙子兵法·计篇深度解析与现代应用
笔记·读书·孙子兵法
love530love15 小时前
【笔记】ComfUI RIFEInterpolation 节点缺失问题(cupy CUDA 安装)解决方案
人工智能·windows·笔记·python·插件·comfyui
愚戏师15 小时前
MySQL 数据导出
数据库·笔记·mysql