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

news2025/1/6 13:42:33

目录

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.coloradmin.cn/o/2270858.html

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

相关文章

接口开发完后,个人对于接下来接口优化的一些思考

优化点 入参的合法性和长度范围&#xff0c;必填项的检查验证 因为没有入参&#xff0c;所以不需要考虑。 批量思想解决N1问题 // 假设要查询100个订单及其对应的用户信息 List<Order> orders orderMapper.selectList(new QueryWrapper<>().last("limit …

C403 unity打开方法

1 unity hub右键以管理员方式打开。 2 注册登录账户 如果出现 如果还是不行&#xff0c;把地址栏的网址复制&#xff0c;在google浏览器中打开 如果出现安全策略&#xff0c;就不勾选安全防护 尝试方案1 把unityhub在任务管理器中关闭 如果验证码发送成功&#xff0c;还是进不…

linux-25 文件管理(三)复制、移动文件,cp,mv

命令cp是copy的简写&#xff0c;而mv则是move的简写。那既然copy是用于实现复制文件的&#xff0c;那通常一般我们要指定其要复制的是谁&#xff1f;而且复制完以后保存在什么地方&#xff0c;对吧&#xff1f;那因此它的使用格式很简单&#xff0c;那就是cp srcfile dest&…

『 Linux 』高级IO (二) - 多路转接

文章目录 前情提要新连接的获取新连接的添加不同事件的处理select 的缺点poll( )SelectServer 改为 PollServer Epoll多路转接方案Epoll 原理深入了解Epoll接口Epoll的优势 select( )/poll( )完整代码(供参考) 前情提要 在博客『 Linux 』高级IO (一)中介绍了五种IO模型; 阻塞式…

基于微信小程序的自修室预约系统

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 在知识爆炸的时代&#xff0c;自修室成为了众多学习者…

CPO-CNN-GRU-Attention、CNN-GRU-Attention、CPO-CNN-GRU、CNN-GRU四模型多变量时序预测对比

CPO-CNN-GRU-Attention、CNN-GRU-Attention、CPO-CNN-GRU、CNN-GRU四模型多变量时序预测对比 目录 CPO-CNN-GRU-Attention、CNN-GRU-Attention、CPO-CNN-GRU、CNN-GRU四模型多变量时序预测对比预测效果基本介绍程序设计参考资料 预测效果 基本介绍 基于CPO-CNN-GRU-Attention、…

ctfshow 每日练习 web 区 php特性 1-10

前置知识 这个php特性可以很好的练习我们的白盒简单代码的审计能力 web89 preg_match 正则匹配函数 &#xff08;绕过 &#xff1a; 换行符绕过 &#xff08;也可以利用他的数组返回数字进行绕过一下禁止字符的情况&#xff09;&#xff09; include("flag.php&q…

单元测试入门和mockup

Java 新手入门&#xff1a;Java单元测试利器&#xff0c;Mock详解_java mock-CSDN博客 这个是典型的before when assert三段式&#xff0c;学一下单测思路 这个没有动态代理&#xff0c;所以是直接class(对比下面) Jmockit使用笔记_增加代码覆盖率_覆盖try catch_使用new Mock…

使用Docker部署最新版JupyterHub

拉取镜像 docker pull jupyterhub/jupyterhub:latest启动镜像 docker run -d -p 8000:8000 --name jupyterhub jupyterhub/jupyterhub:latest jupyterhub进入容器 docker exec -it jupyterhub bash生成jupyterhub的配置文件 jupyterhub --generate-config# 有需要可以安装中…

MySQL 01 02 章——数据库概述与MySQL安装篇

一、数据库概述 &#xff08;1&#xff09;为什么要使用数据库 数据库可以实现持久化&#xff0c;什么是持久化&#xff1a;数据持久化意味着将内存中的数据保存到硬盘上加以“固化”持久化的主要作用是&#xff1a;将内存中的数据存储在关系型数据库中&#xff0c;当然也可以…

OLED的显示

一、I2C I2C时序&#xff1a;时钟线SCL高电平下&#xff1a;SDA由高变低代表启动信号&#xff0c;开始发送数据&#xff1b;SCL高电平时&#xff0c;数据稳定&#xff0c;数据可以被读走&#xff0c;开始进行读操作&#xff0c;SCL低电平时&#xff0c;数据发生改变&#xff1…

Java高频面试之SE-08

hello啊&#xff0c;各位观众姥爷们&#xff01;&#xff01;&#xff01;本牛马baby今天又来了&#xff01;哈哈哈哈哈嗝&#x1f436; 成员变量和局部变量的区别有哪些&#xff1f; 在 Java 中&#xff0c;成员变量和局部变量是两种不同类型的变量&#xff0c;它们在作用域…

3blue1brow线代笔记

向量 物理&#xff1a;空间中的箭头&#xff0c;长度和方向决定一个向量。只要两者相同&#xff0c;可以任意移动保持不变 计算机&#xff1a;有序的数字列表 &#xff08;数组&#xff09; 数学&#xff1a;向量可以是任何东西&#xff0c;只要保证两个向量相加以及数字与向量…

开源的Vue低代码表单设计器 form-create-designer v3.2.9 版本发布,新增10多种功能

form-create-designer 是一款开源的低代码表单设计器&#xff0c;通过数据驱动表单渲染。可以通过拖拽的方式快速创建表单&#xff0c;提高开发者对表单的开发效率&#xff0c;节省开发者的时间。并广泛应用于在政务系统、OA系统、ERP系统、电商系统、流程管理等领域。 项目采…

告别编程困惑:GDB、冯诺依曼、操作系统速通指南

&#x1f31f; 快来参与讨论&#x1f4ac;&#xff0c;点赞&#x1f44d;、收藏⭐、分享&#x1f4e4;&#xff0c;共创活力社区。&#x1f31f; &#x1f6a9;用通俗易懂且不失专业性的文字&#xff0c;讲解计算机领域那些看似枯燥的知识点&#x1f6a9; 目录 前言 一…

Jenkins 中自动化部署 Spring Boot 项目

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的全栈工程师 欢迎分享 / 收藏 / 赞 / 在看…

cesium小知识:常见的20多种property详解

要详细解释 Cesium 中所有的 Property 类,内容确实会非常丰富且详尽。 Property 基础 Property 是 Cesium 中用于表示随时间或条件变化的值的基础类。它允许你定义属性值如何根据时间、用户交互或其他逻辑动态改变。Property 的设计使得你可以创建复杂的动画和交互效果,而…

PCL点云库入门——PCL库点云特征之点云法向量(NormalEstimation)及其可视化

1、PCL点云库中点云特征综述 1.1、点云特征综述 点云特征描述在三维数据处理领域扮演着至关重要的角色&#xff0c;它直接决定了后续的识别、分类以及重建等关键任务的执行效果。在众多的特征描述方法中&#xff0c;我们可以看到基于几何形状的特征、基于统计信息的特征以及…

【《python爬虫入门教程11--重剑无峰168》】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 【《python爬虫入门教程11--selenium的安装与使用》】 前言selenium就是一个可以实现python自动化的模块 一、Chrome的版本查找&#xff1f;-- 如果用edge也是类似的1.chrome…

C++之map和set的模拟实现

目录 引言 红黑树迭代器实现 红黑树元素的插入 map模拟实现 set模拟实现 之前我们已经学习了map和set的基本使用&#xff0c;但是因为map和set的底层都是用红黑树进行封装实现的&#xff0c;上期我们已经学习了红黑树的模拟实现&#xff0c;所以本期我们在红黑树模拟实现…