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

目录

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、云数据库

简述什么是云数据库概念和云数据库特点

云数据库:

  • 一种将数据存储在云平台上的数据库服务。通过云计算技术将数据库的管理和维护工作从用户端转移到云服务提供商端,用户可以通过互联网随时随地访问和管理自己的数据

云数据库特点:

  1. 高可用性和弹性扩展:根据用户需求自动调整数据库资源,根据流量变化自动扩展。
  2. 灵活性和可定制性:根据灵活配置,可定制不同存储引擎和数据库类型
  3. 安全性:使用数据加密和访问控制等安全措施保证数据库安全性
  4. 节约成本:按需付费节省了软硬件的成本,弹性扩展避免了资源浪费
  5. 可靠性:定期自动备份和容灾备份数据,保证数据安全可靠,故障自动恢复

11、主题数据库

简述设计要求:

  1. 保证稳定性,能提供稳定可用的服务
  2. 确保能加快应用系统的开发
  3. 保持主题数据库逻辑结构的独立性,不因计算机的软硬件不同而受到影响

主题数据库基本特征:

  1. 面向业务主题:围绕需要解决的问题组织存储
  2. 信息共享:彻底否定各个系统”自建自用“数据库,强调各个系统”共建共享“数据库
  3. 一次一处输入系统:同一数据必须一次一处进入系统,确保数据准确性、完整性、及时性、保证可以多次多处使用
  4. 由基本表组成:基本表具有原子性、演绎性,基本表中数据满足第三范式(3NF)要求等特性

12、数据同步案例(此案例2012年出现过,比较老)

某大型企业在全国各城市共有40个左右的分支机构,这些机构已经建设了基于大型关系数据库的信息管理系统,每天负责独立地处理本区域内的业务并实时存储业务数据。

每个机构的数据库服务器从PC Server(最小512MB内存)到RISC小型机(最大4GB内存)配置不一,操作系统也不一样,数据库产品类型也不统一。 

每个机构平均每天产生约4MB的数据,数据表中包括TEXT字段;每季度一次性产生约100MB的统计和报表数据。 

为了加强管理,实现对下属机构业务数据的异地存储备份,保证数据的安全及恢复,同时对全国业务数据进行挖掘分析,该企业拟在总部建设数据中心。数据中心通过公共广域网与各个分支机构组成VPN,每个分支机构到数据中心的逻辑信道带宽最高为128Kb/s。

1) 为保证分支机构可靠、高效地向数据中心汇总业务数据,避免单点故障,除了考虑广域网线路采用备份外,在数据中心还应采用什么技术?

  1. 数据中心数据库采用多机集群
  2. 数据库并行处理技术
  3. 存储设备采用全冗余的SAN结构

2)假设各个分支机构的历史数据已经通过某种方式顺利地存储到了数据中心。对于增量数据的汇总更新,总部的王副总工提议采用数据库复制技术和数据库的触发器技术获取数据更新日志的方式来完成,但张总认为这样做不仅增加了成本,而且不能解决全部问题,说说你的看法?

  1. 采用数据库复制技术,各地需要安装专门的复制服务器,增加成本,维护管理复杂,同时,太多的分支机构使得数据中心的复制服务器的复制压力大,因此本题的条件下,不宜采用数据库复制技术
  2. 采用数据库触发器技术,虽然能够实时记录数据库的数据变化,但不能捕获数据表中的Text类型的字段的Update动作,并且对于每季度一次的统计报表数据,采用数据库的触发器技术来记录数据库的变化,占用数据库资源太多,可能影响某些机构的日常业务处理

3) 如何解决数据中心数据更新与同步问题

  1. 针对多数业务数据的更新,各分支机构数据库采用触发器技术,通过触发器捕获数据修改记录,以标准的SQL命令保存到数据更新日志中;
  2. 改造各分支机构原有业务,当发生数据表Text类型字段内容修改时,在同一事务中该字段的更新以SQL命令记录到数据更新日志中,数据中心根据记录抽取Text类型字段变更内容
  3. 针对每季度产生的统计报表数据,改造各分支机构业务系统,在数据更新日志中保存生产的数据条件,数据中心根据记录一次性抽取满足条件的数据
  4. 针对个别机构数据库服务器配置低,采用触发器技术可能造成资源不足的情况,升级该机构的数据库服务器,比如将内存增加到1GB。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深入Android架构(从线程到AIDL)_12 Android UI 单线程程序

目录 6、 Android UI 单线程程序 單線程程序概念 单线程可避免线程安全问题 SurfaceView与非UI线程 6、 Android UI 单线程程序 單線程程序概念 单线程程序意谓着两个(或多个)线程不能共享对象或变量值。Android的UI是单线程程序的环境。UI控件(如Button等)都是由UI线程所…

庐山派K230学习日记3 外设模块GPIO

GPIO和FPIOA 1 本节介绍​ 本节您将学习如何通过控制开发板的GPIO引脚,实现对RGB灯和按键的控制。 🏆学习目标 1️⃣如何将GPIO引脚配置为输出模式,通过引脚电平来控制RGB灯的颜色变化。 2️⃣如何将GPIO引脚配置为输入模式,来检…

【网络安全 | 漏洞挖掘】通过模拟功能实现提权(Bugcrowd)

未经许可,不得转载。 我将与大家分享我在 Bugcrowd 的某个项目中发现的一个漏洞,该项目中有一个“用户模拟”功能。 什么是用户模拟? 用户模拟允许管理员在不知晓用户凭据的情况下“以用户身份登录”。这种功能常见于管理员需要调试问题、审查用户权限或解决投诉的平台中。…

TCP Analysis Flags 之 TCP Retransmission

前言 默认情况下,Wireshark 的 TCP 解析器会跟踪每个 TCP 会话的状态,并在检测到问题或潜在问题时提供额外的信息。在第一次打开捕获文件时,会对每个 TCP 数据包进行一次分析,数据包按照它们在数据包列表中出现的顺序进行处理。可…

doris:基于 Arrow Flight SQL 的高速数据传输链路

Doris 基于 Arrow Flight SQL 协议实现了高速数据链路,支持多种语言使用 SQL 从 Doris 高速读取大批量数据。 用途​ 从 Doris 加载大批量数据到其他组件,如 Python/Java/Spark/Flink,可以使用基于 Arrow Flight SQL 的 ADBC/JDBC 替代过去…

HTML5实现好看的二十四节气网页源码

HTML5实现好看的新年春节元旦网站源码 前言一、设计来源1.1 主界面1.2 关于我们界面1.3 春季节气界面1.4 夏季节气界面1.5 秋季节气界面1.6 冬季节气界面 二、效果和源码2.1 动态效果2.2 源代码 源码下载结束语 HTML5实现好看的二十四节气网页源码,春季节气&#xf…

Elasticsearch:利用 AutoOps 检测长时间运行的搜索查询

作者:来自 Elastic Valentin Crettaz 了解 AutoOps 如何帮助你调查困扰集群的长期搜索查询以提高搜索性能。 AutoOps 于 11 月初在 Elastic Cloud Hosted 上发布,它通过性能建议、资源利用率和成本洞察、实时问题检测和解决路径显著简化了集群管理。 Au…

mysql报错2059

客户端连接mysql服务时提示2059错误,通常与身份验证插件有关,具体表现为客户端无法加载指定的身份验证插件。这个错误在MySQL 8.0及更高版本中较为常见,因为从MySQL 8.0开始,默认的加密规则从mysql_native_password变为了caching_…

应用架构模式

设计模式 设计模式是指根据通用需求来设计解决方案的模板或蓝图,使用设计模式能够更加有效地解决设计过程中的常见问题。设计模式针对不同的问题域有不同的内涵,主要涉及业务、架构、程序设计等问题域,本文主要讨论架构设计模式。 业务设计模…

基于MPPT算法的光伏并网发电系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于MPPT算法的光伏并网发电系统simulink建模与仿真,包括PV光伏发电模块,并网电路,MPPT,PWM等模块。 2.系统仿真结果 3.核心程…

DeepSeek v3为何爆火?如何用其集成Milvus搭建RAG?

最近,DeepSeek v3(一个MoE模型,拥有671B参数,其中37B参数被激活)模型全球爆火。 作为一款能与Claude 3.5 Sonnet,GPT-4o等模型匹敌的开源模型DeepSeek v3不仅将其算法开源,还放出一份扎实的技术…

GPU算力平台的应用之任意门:任意穿搭匹配模型的应用教程

大家好,今天给大家介绍一下:GPU算力平台的应用之任意门:任意穿搭匹配模型的应用教程。 文章目录 一、GPU算力平台概述人工智能智能发展为什么需要GPU算力平台 二、注册与登录账号注册流程 三、平台的应用之Anydoor应用启动器选择Anydoor的应用场景Anydoo…

微信小程序中 “页面” 和 “非页面” 的区别

微信小程序中 “页面” 和 “非页面” 的区别,并用表格进行对比。 核心概念: 页面 (Page): 页面是微信小程序中用户可以直接交互的视图层,也是小程序的基本组成部分。每个页面都有自己的 WXML 结构、WXSS 样式和 JavaScript 逻辑…

exam0-试卷整理

exam0-试卷整理 2010,2013是梦开始的地方,大概率会出原题的 2010 2013 2015 大题 manchester RIP更新 说出ISO与TCP/IP模型的相同点和不同点(8分) 相似: 两者都有层次,网络专业人员都需要知道二者&a…

QT-------------对话框和多窗口程序设计

一、标准对话框 1. QFileDialog 对话框 功能&#xff1a;提供文件选择对话框&#xff0c;方便用户选择文件或目录。 #include <QApplication> #include <QFileDialog> #include <QMessageBox>int main(int argc, char *argv[]) {QApplication app(argc, a…

论文解读 | NeurIPS'24 IRCAN:通过识别和重新加权上下文感知神经元来减轻大语言模型生成中的知识冲突...

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 点击 阅读原文 观看作者讲解回放&#xff01; 作者简介 史丹&#xff0c;天津大学博士生 内容简介 大语言模型&#xff08;LLM&#xff09;经过海量数据训练后编码了丰富的世界知识。最近的研究表明&#xff0c…

在DJI无人机上运行VINS-FUISON(PSDK 转 ROS)

安装ceres出现以下报错&#xff0c;将2版本的ceres换成1版本的ceres CMake did not find one.Could not find a package configuration file provided by "absl" with any ofthe following names:abslConfig.cmakeabsl-config.cmakeAdd the installation prefix of …

A*算法与人工势场法结合的路径规划(附MATLAB源码)

A*算法与人工势场法&#xff08;APF&#xff09;结合实现路径规划 路径规划是机器人、无人机及自动驾驶等领域中的一个重要问题。本文结合了经典的 A* 算法与 人工势场法&#xff08;Artificial Potential Field, APF&#xff09;&#xff0c;实现了一种改进的路径规划方法。下…

SASS 简化代码开发的基本方法

概要 本文以一个按钮开发的实例&#xff0c;介绍如何使用SASS来简化CSS代码开发的。 代码和实现 我们希望通过CSS开发下面的代码样式&#xff0c;从样式来看&#xff0c;每个按钮的基本样式相同&#xff0c;就是颜色不同。 如果按照传统的方式开发&#xff0c;需要开发btn &…

Spring为什么要用三级缓存解决循环依赖?

1.什么是循环依赖 本文为了方便说明&#xff0c;先设置两个业务层对象&#xff0c;命名为AService和BService。其中Spring是如何把一个Bean对象创建出来的&#xff0c;其生命周期如下&#xff1a; 构造方法–> 不同对象 --> 注入依赖 -->初始化前 --> 初始化后–&…