【系统架构设计】数据库系统(二)

数据库系统(二)

  • 数据库模式与范式
  • 数据库设计
    • 数据库设计的方法
    • 数据库设计的基本步骤
  • 事务管理
    • 并发控制
    • 故障和恢复
  • 备份与恢复
  • 分布式数据库系统
  • 数据仓库
  • 数据挖掘
  • NoSQL
  • 大数据

数据库模式与范式

数据库设计

数据库设计的方法

目前已有的数据库设计方法可分为四类:直观设计法、规范设计法、计算机辅助设计法和自动化设计法。其中,基于3NF的数据库设计方法,其具体设计步骤分为5个阶段,如图3-2所示。

在这里插入图片描述

数据库设计的基本步骤

分步设计法遵循自顶向下、逐步求精的原则,将数据库设计过程分解为若干相互独立又相互依存的阶段,每一阶段采用不同的技术与工具,解决不同的问题,从而将问题局部化,减少了局部问题对整体设计的影响。在分步设计法 中,通常把数据库的设计分为需求分析、概念结构设计、逻辑结构设计和数据库物理设计 4个阶段,如图3-3所示。

在这里插入图片描述

  1. 需求分析:指收集和分析用户对系统的信息需求和处理需求,得到设计系统所必需的需求信息,建立系统说明文档。其目标是通过调查研究,了解用户的数据要求和处理要求,并按一定格式整理形成需求说明书。该阶段的任务是
  • 确认需求、确定设计目标
  • 分析和收集数据
  • 整理文档
  1. 概念结构设计:其目标是对需求说明书提供的所有数据和处理要求进行抽象与综合处理,按一定的方法构造反映用户环境的数据及其相互联系的概念模型,即用户的数据模型或企业数据模型这种概念数据模型与DBMS无关,是面向现实世界的、极易为用户所理解的数据模型。概念模型的描述工具应该能够体现概念模型的特点,如E-R模型。概念结构的设计策略主要有自底向上、自顶向下、由里向外和混合策略
  2. 逻辑结构设计:设计目标是把上一阶段得到的与DBMS无关的概念数据模型转换成等价的,并为某个特定的DBMS所接受的逻辑模型所表示的概念模型,同时将概念设计阶段得到的应用视图转换成外部模式,即特定DBMS下的应用视图。该阶段的结果是用DBMS所提供的数据定义语言(DDL)写成的数据模式
  3. 数据库物理设计:任务是将逻辑设计阶段得到的满足用户需求的已确定的逻辑模型在物理上加以实现,其主要内容是根据DBMS提供的各种手段,设计数据的存储形式和存取路径,如文件结构、索引设计等,即设计数据库的内模式或存储模式。

ps: 概念设计可以理解为E-R的实物图,逻辑结构设计就涉及到了具体的表格设计,物理设计就是最底层的怎么去存储提高性能。

事务管理

数据库系统运行的基本工作单位是事务,相当于操作系统中的进程,是用户定义的一个数据库操作序列,这些操作序列要么全做要么全不做,是一个不可分割的工作单位。事务具体以下特性:

  1. 原子性(Atomicity ):数据库的逻辑工作单位;
  2. 一致性(Consistency):使数据库从一个一致性状态变成另一个一致性状态;
  3. 隔离性(Isolation):不能被其他事务干扰;
  4. 持续性(永久性)(Durability):一旦提交,改变就是永久性的。

事务提交语句: 表示事务执行成功的结束;
事务回退语句:表示事务执行不成功的结束。

并发控制

在多用户共享系统中,许多事务可能同时对同一数据进行操作,称为“并发操作",此时数据库管理系统DBMS的并发控制子系统负责协调并发事务的执行,保证数据库的完整性不受破坏,同时避免用户得到不正确的数据。并发操作带来的问题有:丢失更新问题、不一致分析问题(读过时的数据)、依赖于未提交更新的问题(读了”脏“数据)。这三个问题需要DBMS 的并发控制子系统解决,主要方法是采用封锁技术,它有2种类型:

  • 排他型封锁(简称 X封锁):如果事务T 对数据A 实现X封锁,那么只允许T 读取和修改数据A,其他事务要等T解除X封锁后,才能对数据A实现任何类型的封锁。即只允许一个事务独锁和使用数据
  • 共享型封锁(简称 S封锁):如果事务T 对数据A 实现S封锁,那么允许T读取数据A ,但不能修改数据A ,在所有S封锁解锁前,绝不允许任何事务对数据A 实现X封锁。即可以允许并发读,但不允许修改

ps:脏数据是指没有经过预处理而直接接收到的原始数据,或者不符合特定分析要求的数据。

在多个事务并发执行的系统中,主要采用封锁协议来进行处理:

  • 一级封锁协议:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。该协议可以防止丢失修改,并保证事务T是可恢复的,但不能保证可重复读和不读脏数据。
  • 二级封锁协议:一级封锁协议加上事务T在读取数据R之前先对其加S锁,读完后即可释放S锁。该协议可以防止丢失修改,防止读脏数据,但不能保证可重复读。
  • 三级封锁协议:一级封锁协议加上事务T在读取数据R之前先对其加S锁,直到事务结束才释放。该协议可以防止丢失修改,防止读脏数据,保证可重复读。
  • 两段锁协议:所有事务必须分2个阶段对数据项加锁和解锁,其中扩展阶段是在对任何数据进行读写操作之前,首先要申请并获得该数据的封锁;收缩阶段是在释放一个封锁之后,事务不能再申请和获得任何其他封锁。若并发执行的所有事务均遵守两段封锁协议,则对这些事务的任何并发调度策略都是可串行化的。但遵守两段锁协议的事务可能发生死锁,而死锁是不可避免的,目前采用** 预防法** 和死锁的解除法来进行处理。。

可串行化调度是指多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行它们时的结果相同。这种调度策略确保了数据库的一致性和正确性,避免了数据不一致的情况,如丢失修改、读“脏”数据和不可重复读等。
封锁是指事务T在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据对象。

封锁的粒度 是被封锁数据目标的大小。封锁粒度小则并发性高,但开销大;封锁粒度大则并发性低,但开销小

故障和恢复

数据库的故障可用事务的故障来表示,主要有4种:

  1. 事务故障:事务在运行过程中由于种种原因,如输入数据的错误、运算溢出、违反了某些完整性限制、某些应用程序的错误,以及并发事务发生死锁等,使事务未运行至正常终止点就被撤销。
  2. 系统故障:是指系统在运行过程中,由于某些原因(如操作系统或数据库管理系统代码错误、操作员操作失误、特定类型的硬件错误(如CPU故障)、突然停电等造成系统停止运行),致使事务在执行过程中以非正常方式终止,这时内存中的信息丢失,但存储在外存上的数据不会受影响
  3. 介质故障:系统在运行过程中,由于某种硬件故障,如磁盘损坏、磁头碰撞或由于操作系统的某种潜在的错误、瞬时强磁场干扰,使存储在外存上的数据部分损失或全部损失
  4. 计算机病毒:是一种人为破坏计算机正常工作的特殊程序。

分别对应的故障恢复,最常用的恢复方式是** 转储和登记日志文件**,可根据故障的不同类型,采用不同的恢复策略。

  1. 事务故障的恢复,由系统自动完成,不用用户干预,步骤如下:
  • 反向扫描文件日志,查找该事务的更新操作;
  • 对该事务的更新操作执行逆操作;
  • 继续反向扫描日志文件,查找该事务的其他更新操作,并做同样处理;
  • 如此处理下去,直至读到此事务的开始标记,事务故障恢复完成。
  1. 系统故障的恢复,系统故障发生时,造成数据库不一致状态原因有2个:一是由于一些未完成事务对数据库的更新已写入数据库;二是由于一些已提交事务对数据库的更新还留在缓冲区没来得及写入数据库。系统故障的恢复是在重新启动时自动完成,不需要用户干预,步骤如下:
  • 正向扫描日志文件,找到在故障发生前已经提交的事务,将其事务标识记入重做(Redo)队列,同时找出故障发生时尚未完成的事务,将其事务标识记入撤销(Undo)队列;
  • 对撤销队列中的各个事务进行撤销处理:反向扫描日志文件,对每个Undo事务的更新操作执行逆操作;
  • 对重做队列中的各个事务进行重做处理:正向扫描日志文件,对每个Redo事务重新执行日志文件登记的操作。

ps:可以理解成:故障发生前事务结束,放在缓冲区的更新操作,恢复目的是要执行完;故障发生时事务进行中,恢复目的是要回退。

  1. 介质故障与病毒破坏的恢复,此时磁盘上的物理数据库被破坏了,步骤如下:
  • 装入最新的数据库后备副本,使数据库恢复到最近一次转储时的一致性状态;
  • 从故障点开始反向读日志文件,找出已提交事务标识将其记入重做队列;
  • 从起始点开始正向阅读日志文件,根据重做队列中的记录,重做所有已完成事务,将数据库恢复至故障前某一时刻的一致状态。

备份与恢复

备份与恢复计划制定要遵循2个原则:

  • 保证数据丢失的情况尽量少或者完整不丢失;
  • 备份和恢复时间尽量短,保证系统最大的可用性。

数据库备份按照不同方式可以分为多种,按照** 备份内容** 分为物理备份 和** 逻辑备份**

  1. 物理备份是在操作系统层面对数据库的数据文件进行备份,分为冷备份和热备份
  • 冷备份:将数据库正常关闭,在停止状态下利用操作系统的命令将数据库文件全部备份下来,当数据库发生故障时,将数据文件复制回去,进行恢复。
  • 热备份分2种,一种是不关闭数据库,将数据库中需要备份的数据文件依次置于备份状态相对保持静止,然后再利用操作系统的命令将数据库文件备份下来,备份完毕后再将数据文件恢复为正常状态,当数据库发生故障时,恢复方法同冷备份;另一种是利用备份软件(如ServHA),在数据库正常运行状态下,将数据库中数据文件备份出来。

为提高物理备份效率,通常将完全、增量、累积三种备份方式相组合。

ps:累积备份是将自上次完全或累积备份以来所有修改过的数据备份;增量备份是只备份修改的数据。

  1. 逻辑备份是指利用各数据库系统自带的工具软件备份和恢复数据库的内容

分布式数据库系统

数据仓库

数据挖掘

NoSQL

大数据

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

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

相关文章

element UI :el-table横向列内容超出宽度,滚动条不显示问题

是否能解决你问题的前提 **看到这篇文章的解决问题的方案之前,请先回忆你是否在项目中的全局样式或者私有组件中去单独设置过滚动条样式。如果有 请继续往下看:**单独设置过滚动条样式代码实例: ::-webkit-scrollbar {/*滚动条整体样式*/wi…

layui 让table里的下拉框不被遮挡

记录:layui 让table里的下拉框不被遮挡 /* 这个是让table里的下拉框不被遮挡 */ .goods_table .layui-select-title,.goods_table .layui-select-title input{line-height: 28px;height: 28px; }.goods_table .layui-table-cell {overflow: visible !important; }.…

【Django】网上蛋糕项目商城-注册,登录,修改用户信息,退出功能

概念 通过以上多篇文章的讲解,对该项目的功能已经实现了很多,本文将对该项目的用户注册,登录,修改用户信息,以及退出等功能的实现。 注册功能实现 点击head.html头部页面的注册按钮,触发超链接跳转至use…

操作系统发展简史(Unix/Linux 篇 + DOS/Windows 篇)+ Mac 与 Microsoft 之风云争霸

操作系统发展简史(Unix/Linux 篇) 说到操作系统,大家都不会陌生。我们天天都在接触操作系统 —— 用台式机或笔记本电脑,使用的是 windows 和 macOS 系统;用手机、平板电脑,则是 android(安卓&…

来聊聊去中心化Redis集群节点如何完成通信

写在文章开头 今天我们来聊点有意思的,关于redis中集群间通信的设计与实现,本文将从源码的角度分析redis集群节点如何利用Gossip协议完成节点间的通信与传播,希望对你有帮助。 Hi,我是 sharkChili ,是个不断在硬核技术…

MAVSKD-Java开源库mavsdk_server库macOS平台编译

1.下载源码 2.使用IDEA打开,进行mavsdk_server目录,使用gradle进行编译 3.开始编译时会自动下载依赖 4.下载完成后,会自动编译 5.编译成功 6.成功生成AAR文件

2024算力基础设施安全架构设计与思考(免费下载)

算网安全体系是将数据中心集群、算力枢纽、一体化大数据中心三个层级的安全需求进行工程化解耦,从国家安全角度统筹设计,通过安全 服务化方式,依托威胁情报和指挥协同通道将三层四级安全体系串联贯通,达成一体化大数据安全目标。 …

文件IO(Ubuntu)

文件IO 目的 将数据写入文件中 与标准IO的区别 (为什么要学习文件IO) 标准IO只能操作普通文件和特殊的管道文件 文件IO能操作几乎所有的的文件 缓存区的目的 标准IO有缓存区 文件IO没有缓存区 根据右图描述 标准IO 文件IO buffer缓存区 有缓存区…

数据库管理的艺术(MySQL):DDL、DML、DQL、DCL及TPL的实战应用(上:数据定义与控制)

文章目录 DDL数据定义语言1、创建数据库2、创建表3、修改表结构4、删除5、数据类型 列的约束主键约束(primary key)唯一约束(unique key)非空约束检查约束(check)外键约束(foreign key&#xff…

水域救援装备的详细简介_鼎跃安全

水域救援行动需要救援人员配备全面、专业的装备,以应对各种复杂的水域环境和救援任务。水域救援套装应运而生,它集合了水域救援所需的各类关键装备,为救援人员提供全方位的保护和辅助,确保数援行动的高效与安全。 水域救援头盔&am…

S参数入门

一、说明 S参数全称为散射参数,主要用来作为描述线性无源互联结构的一种行为模型,来源于网络分析方法。网络分析法是一种频域方法,在一组离散的频率点上,通过在输入和输出端口得到的参量完全描述线性时不变系统(定义参…

PyTorch 深度学习实践-循环神经网络基础篇

视频指路 参考博客笔记 参考笔记二 文章目录 上课笔记基于RNNCell实现总代码 基于RNN实现总代码 含嵌入层的RNN网络嵌入层的作用含嵌入层的RNN网络架构总代码 其他RNN扩展基本注意力机制自注意力机制(Self-Attention)自注意力计算多头注意力机制&#xf…

redis笔记和测试

redis是用c语言写的,放不频繁更新的数据(用户数据。课程数据) Redis 中,"穿透"通常指的是缓存穿透(Cache Penetration)问题,这是指一种恶意或非法请求直接绕过缓存层,直接访问数据库或…

Nginx(详解)

1. 什么是Nginx? Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表…

elementUI在手机端使用遇到的问题总结

之前的博客有写过用vue2elementUI封装手机端选择器picker组件,支持单选、多选、远程搜索多选,最终真机调试的时候发现有很多细节样式需要调整。此篇博客记录下我调试过程中遇到的问题和解决方法。 一、手机真机怎么连电脑本地代码调试? 1.确…

Blender4.2版本正式上线,新版本的5个主要功能!

​Blender刚刚推出了备受瞩目的 Blender 4.2 版本,这款软件专为那些在视觉特效、动画制作、游戏开发和可视化设计领域工作的艺术家们量身打造。作为最新的长期稳定更新,Blender 4.2 不仅稳定可靠,还引入了备受期待的“Eevee Next”实时渲染引…

LabVIEW在CRIO中串口通讯数据异常问题

排查与解决步骤 检查硬件连接: 确保CRIO的串口模块正确连接,并且电缆无损坏。 确认串口模块在CRIO中被正确识别和配置。 验证串口配置: 在LabVIEW项目中,检查CRIO目标下的串口配置,确保波特率、数据位、停止位和校验…

用EXCEL和python 计算马尔可夫链转移矩阵

目录 目标:用EXCEL和python 计算马尔可夫链转移矩阵 1 用EXCEL计算 1.1 马尔可夫链的基本应用 1.2 具体计算 2 用python计算马尔可夫转移矩阵 2.1 py代码 2.2 运行结果 3 上面2者计算结果相同 目标:用EXCEL和python 计算马尔可夫链转移矩阵 1 用…

【信号频率估计】MVDR算法及MATLAB仿真

目录 一、MVDR算法1.1 简介1.2 原理1.3 特点1.3.1 优点1.3.2 缺点 二、算法应用实例2.1 信号的频率估计2.2 MATLAB仿真代码 三、参考文献 一、MVDR算法 1.1 简介 最小方差无失真响应(Mininum Variance Distortionless Response,MVDR)算法最…

Dify中的高质量索引模式实现过程

思考在什么情况下会使用到高质量索引模式呢?第1种情况是在知识库中上传文档,文档被拆分为段落后需要进行编码(增加);第2种情况是在召回测试的时候,需要对query进行编码(查询);第3种情况是当文档中的段落增加和更新时需要进行编码(增加和更新)。索引模式是针对知识库…