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

目录

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。

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

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

相关文章

Redis(基础篇 + 实践篇 )

01 | 基本架构:一个键值数据库包含什么? Redis 作为一个内存数据存储系统,它的架构设计非常简洁,但功能非常强大。理解其核心架构对高效使用 Redis 至关重要。 客户端与服务器架构: 客户端通过 TCP 协议连接到 Redis …

蓝桥杯(Java)(ing)

Java前置知识 输入流: (在Java面向对象编程-CSDN博客里面有提过相关知识------IO流) // 快读快写 static BufferedReader in new BufferedReader(new InputStreamReader(System.in)); static BufferedWriter out new BufferedWriter(new…

GaussDB逻辑解码技术原理深度解析

GaussDB逻辑解码技术原理深度解析 一、背景介绍 在数字化转型的大潮中,异构数据库之间的数据同步需求日益增长。异构数据库同步指的是将不同类型、不同结构的数据库之间的数据进行同步处理,以确保数据在不同数据库之间的一致性。华为云提供的DRS服务&a…

【C++】深入理解C语言中的特殊字符处理与问题分析优化

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目:B2090 年龄与疾病输入格式输出格式输入输出样例 💯初始代码分析与问题排查问题点分析 💯修正后的代码与优化修正与优化要点 &#…

电商Google广告:2025年提升转化率的5种策略

展望 2025 年,Google 广告领域将迎来一系列显著变化,这些趋势对于提升广告转化率至关重要,值得我们提前关注与布局。 智能化程度持续加深,用户搜索习惯愈发精细,广告格式推陈出新,视频广告势头正猛...那么…

【pytorch练习】使用pytorch神经网络架构拟合余弦曲线

在本篇博客中,我们将通过一个简单的例子,讲解如何使用 PyTorch 实现一个神经网络模型来拟合余弦函数。本文将详细分析每个步骤,从数据准备到模型的训练与评估,帮助大家更好地理解如何使用 PyTorch 进行模型构建和训练。 一、背景 …

设计模式中的代理模式

在Java中,代理模式(Proxy Pattern)可以通过静态代理和动态代理两种主要方式实现。 一、静态代理模式 在编译时就已经确定了代理类和被代理类的关系。代理类和目标对象通常实现相同的接口或继承相同父类。缺点是对于每个需要代理的目标对象都…

编程入门(2)-2024年 RAD Studio version 12发布综述

随着2024年即将画上句号,我想借此机会回顾一下我们在这一年中发布的一些Embarcadero产品、行业趋势,并感谢我们尊贵的客户们对我们的产品一如既往的支持。这一年对我们来说充满了激动人心的变化和发展,我们非常高兴能与您一起踏上这段旅程。 …

使用LLM自回归与超级转义词表生成图像:超越传统扩散模型的新范式

引言 在人工智能领域,尤其是自然语言处理(NLP)和计算机视觉(CV),大型语言模型(LLM)的出现带来了前所未有的变革。随着技术的进步,研究人员开始探索如何将LLM应用于更多样…

visual studio 安全模式

一、安全模式: 在 Visual Studio 中,安全模式是一种启动方式,允许你在禁用所有扩展和自定义设置的情况下启动 Visual Studio。这个模式可以帮助排除插件或扩展引起的问题,特别是在 Visual Studio 无法正常启动时。 二、安全模式下…

RocketMQ消费者如何消费消息以及ack

1.前言 此文章是在儒猿课程中的学习笔记,感兴趣的想看原来的课程可以去咨询儒猿课堂 这篇文章紧挨着上一篇博客来进行编写,有些不清楚的可以看下上一篇博客: https://blog.csdn.net/u013127325/article/details/144934073 2.broker是如何…

现代光学基础5

总结自老师的讲义 yt5 开卷考试复习资料:光探测器与光伏技术 目录 光探测器(Photodetector) 工作原理二极管电路连接方式响应度(Responsivity)微弱光检测超导纳米线单光子探测光电二极管噪声 太阳能电池&#xff0…

EasyExcel自定义动态下拉框(附加业务对象转换功能)

全文直接复制粘贴即可,测试无误 一、注解类 1、ExcelSelected.java 设置下拉框 Documented Target({ElementType.FIELD})//用此注解用在属性上。 Retention(RetentionPolicy.RUNTIME)//注解不仅被保存到class文件中,jvm加载class文件之后&#xff0c…

【2025最新计算机毕业设计】基于Spring Boot+Vue影院购票系统(高质量源码,提供文档,免费部署到本地)

作者简介:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容:🌟Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…

信息科技伦理与道德1:研究方法

1 问题描述 1.1 讨论? 请挑一项信息技术,谈一谈为什么认为他是道德的/不道德的,或者根据使用场景才能判断是否道德。判断的依据是什么(自身的道德准则)?为什么你觉得你的道德准则是合理的,其他…

解读 C++23 std::expected 函数式写法

文章目录 std::expected 基础概念什么是 std::expected?优势与 std::optional 和 std::variant 的区别 函数式写法的功能和应用1. transform : 对"成功值"进行映射基本用法完全返回不同类型 2 and_then : 对"成功值"进行连续计算3 transform_error : 对&q…

Web安全扫盲

1、建立网络思维模型的必要 1 . 我们只有知道了通信原理, 才能够清楚的知道数据的交换过程。 2 . 我们只有知道了网络架构, 才能够清楚的、准确的寻找漏洞。 2、局域网的简单通信 局域网的简单通信(数据链路层) 一般局域网都通…

领域驱动设计(4)—绑定模型与实现

(4)—绑定模型与实现 模式:MODEL-DRIVEN DESIGN为什么模型对用户至关重要?模式:HANDS-ON MODELER 很多项目设计之初只考虑到模型如何设计,没有将模型如何实现、数据关系如何存储这些实现考虑在内,往往设计…

@MapperScan

简介: MapperScan注解是MyBatis框架在Spring Boot中的一个重要集成注解 作用: MapperScan主要作用是告诉Spring框架在启动时扫描指定的包路径,并将该路径下的所有MyBatis的Mapper接口批量注入到Spring容器中。这样,开发者就可以…

Linux驱动开发(18):linux驱动并发与竞态

并发是指多个执行单元同时、并行执行,而并发的执行单元对共享资源(硬件资源和软件上的全局变量、静态变量等)的访问 则很容易导致竞态。对于多核系统,很容易理解,由于多个CPU同时执行,多个CPU同时读、写共享资源时很容易造成竞态。…