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

目录

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、数据同步

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/498571.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RabbitMQ中的异步Confirm模式:提升消息可靠性的利器

在现代分布式系统中,消息队列(Message Queue)扮演着至关重要的角色,它能够解耦系统组件、提高系统的可扩展性和可靠性。RabbitMQ作为一款广泛使用的消息队列中间件,提供了多种机制来确保消息的可靠传递。其中&#xff…

【深度学习】多目标融合算法—样本Loss提权

目录 一、引言 二、样本Loss提权 2.1 技术原理 2.2 技术优缺点 三、总结 一、引言 在朴素的深度学习ctr预估模型中(如DNN),通常以一个行为为预估目标,比如通过ctr预估点击率。但实际推荐系统业务场景中,更多是多…

如何在谷歌浏览器中创建安全的密码

在数字化时代,网络安全变得日益重要。谷歌浏览器提供了多种工具和功能帮助用户创建和管理强密码,确保在线账户的安全。本文将简要介绍几种方法,帮助您在谷歌浏览器中创建和管理安全密码。 一、启用自动填充功能 确认密码保存功能已开启&…

一份完整的营销策划包含哪些内容?营销策划主要内容和流程--中小企实战运营和营销工作室博客

一份完整的营销策划包含哪些内容?营销策划主要内容和流程–中小企实战运营和营销工作室博客 在当今竞争激烈的市场环境中,营销策划成为企业取得成功的关键。一份完整的营销策划是企业实现市场目标的重要工具,它涵盖了多个方面的内容&#xff…

vscode-QT环境配置

vscode-QT环境配置 参考链接:https://www.cnblogs.com/RioTian/p/18281114 一、 背景 已经安装了QT软件,电脑里有了QT Creater 12.0。使用QT生成并运行了一个project在这个project的基础上,直接配置vscode的环境 二、环境配置 确认QT工程成…

[2025] 如何在 Windows 计算机上轻松越狱 IOS 设备

笔记 1. 首次启动越狱工具时,会提示您安装驱动程序。单击“是”确认安装,然后再次运行越狱工具。 2. 对于Apple 6s-7P和iPad系列(iOS14.4及以上),您应该点击“Optinos”并勾选“允许未经测试的iOS/iPadOS/tvOS版本”&…

ARM64 Windows 10 IoT工控主板运行x86程序效率测试

ARM上的 Windows 10 IoT 企业版支持仿真 x86 应用程序,而 ARM上的 Windows 11 IoT 企业版则支持仿真 x86 和 x64 应用程序。英创推出的名片尺寸ARM64工控主板ESM8400,可预装正版Windows 10 IoT企业版操作系统,x86程序可无需修改而直接在ESM84…

万里数据库GreatSQL监控解析

GreatSQL是MySQL的一个分支,专注于提升MGR(MySQL Group Replication)的可靠性及性能。乐维监控平台可以有效地监控GreatSQL,帮助用户及时发现并解决潜在的性能问题。 通过在GreatSQL服务器上安装监控代理,收集数据库性…

【贪心算法】贪心算法七

贪心算法七 1.整数替换2.俄罗斯套娃信封问题3.可被三整除的最大和4.距离相等的条形码5.重构字符串 点赞👍👍收藏🌟🌟关注💖💖 你的支持是对我最大的鼓励,我们一起努力吧!😃&#x1f…

四年匠心磨砺,快手系统软件技术创新与领域演进之路

一、系统软件技术的核心价值与面临挑战 系统软件作为软件架构的基石,扮演着连接软件与硬件的桥梁角色,位于整个软件生态的最底层,处于关键核心的位置。系统软件最为显著的特征在于其规模效应,随着服务器体量的增加,系…

使用JMeter对Linux生产服务器进行压力测试

安装 JMeter wget https://downloads.apache.org/jmeter/binaries/apache-jmeter-5.4.1.tgz tar -xzf apache-jmeter-5.4.1.tgz cd apache-jmeter-5.4.1创建 JMeter 脚本 设置中文 选择Options—>Choose Language—>选择其他语言(例如:Chinese&am…

Nginx1.20.2-Linux-安装

文章目录 1.下载压缩包1.官网下载2.找到1.20.23.百度网盘 2.Linux安装1.搭建gcc环境2.上传到 /usr/local/nginx1.20.23.解压1.解压到当前目录2.删除压缩包 4.配置Nginx的编译路径1.进入nginx-1.20.22.执行内部的脚本,指定编译路径为/usr/local/nginx 5.编译并安装6.…

常用的linux命令介绍

Linux是一个强大的操作系统,它提供了许多命令行工具来帮助用户管理文件和目录、监控系统性能、以及执行各种系统管理任务。下面是一些常用的Linux命令,我会用简单的语言来解释它们的作用: 1. ls • 作用:列出目录内容。 • 比喻&a…

linux--编译驱动模块【虚拟网卡 tun】

linux--编译驱动模块【虚拟网卡 tun】 1 介绍2 操作2.1 源码 linux-5.10.1602.2 安装控制台应用程序依赖库,其他库2.3 普通用户模式操作2.4 然后配置需要编译的模块2.5 关闭 preempt2.6 开启 bpf【未成功,放弃】2.7 编译模块报错处理一:缺少证…

前端超大缓存IndexDB、入门及实际使用

文章目录 往期回顾项目实战初始化表获取列表新增表的数据项获取详情根据ID获取详情根据其他字段获取详情 删除数据 总结 往期回顾 在之前的文章中,我们介绍了IndexDB vs Cookies vs Session这几个的对比,但是没有做实际项目的演示,今天我们用…

swiftui开发页面加载发送请求初始化@State变量

在SwiftUI中,你不能直接在init中更新State变量,因为State是由SwiftUI框架管理的,初始化时不允许直接修改。所以需要在onAppear发送请求然后修改State状态。 在SwiftUI中,如果希望在页面加载时立即发送网络请求,可以使…

OpenStack系列第四篇:云平台基础功能与操作(Dashboard)

文章目录 1. 镜像(Image)添加镜像查看镜像删除镜像 2. 卷(Volume)创建卷查看卷删除卷 3. 网络(虚拟网络)创建网络查看网络删除网络 4. 实例类型创建实例类型查看实例类型删除实例类型 4. 密钥对&#xff08…

3D数学基础2

矩阵的行列式 在任意方阵中都存在至少一个标量,称作该方阵的行列式。在线性代数中,行列式有很多有用的性质 线性运算法则 方阵 M M M的行列式记作 ∣ M ∣ |M| ∣M∣或“det M”。非方阵矩阵的行列式是未定义的。 注意,在书写行列式时&…

elementui的默认样式修改

今天用element ui ,做了个消息提示,发现提示的位置总是在上面,如图: 可是我想让提示的位置到下面来,该怎么办? 最后还是看了官方的api 原来有个自定义样式属性 customClass 设置下就好了 js代码 css代码…

WebRTC:实现浏览器与移动应用的实时通信

1.技术简介 (Web Real-Time)是一种开放式实时通信技术,旨在使浏览器和移动应用程序通过简单的API即可实现实时音频、视频和数据传输,而无需安装插件或额外软件。它支持网络应用中的点对点通信,例如视频聊天、语音通话…