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

news2024/9/20 16:43:50

数据库系统(二)

  • 数据库模式与范式
  • 数据库设计
    • 数据库设计的方法
    • 数据库设计的基本步骤
  • 事务管理
    • 并发控制
    • 故障和恢复
  • 备份与恢复
  • 分布式数据库系统
  • 数据仓库
  • 数据挖掘
  • 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.coloradmin.cn/o/1947531.html

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

相关文章

Matlab 命令行窗口默认输出(异常)

目录 前言Matlab 先验知识1 异常输出的代码2 正常输出的代码 前言 在单独调试 Matlab 写的函数时出现不想出现的异常打印值,逐个注释排查才找到是 if elseif else 代码块的问题,会默认打印输出 else 部分第一个返回值的值(下方代码中的 P值&…

【linux】Shell脚本三剑客之grep和egrep命令的详细用法攻略

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

【MySQL进阶之路 | 高级篇】简谈redo日志

1. 前言 事务有四种特性:原子性,一致性,隔离性和持久性。那么事务的四种特性到底是基于什么机制实现呢? 事务的隔离性由锁机制实现。而事务的原子性,一致性和持久性由事务的redo日志和undo日志来保证。 REDO LOG称为…

Mysql或MariaDB数据库的用户与授权操作——实操保姆级教程

一、问题描述 在日常的工作中,我们需要给不同角色的人员创建不同的账号,他们各自可访问的数据库或权限不一样,这时就需要创建用户和赋予不同的权限内容了。 二、问题分析 1、创建不同的角色账号; 2、给这些账号授予各自可访问数据库的权限。 三、实现方法 Centos8安装…

多层感知机(神经网络)

目录 一、感知机(逻辑回归、二分类)定义:二、感知机不能解决XOR问题:三、多层感知机定义:四、训练过程:1.参数维度:2.常用激活函数:2.1Sigmoid激活函数:2.2Tanh激活函数&…

排序XXXXXXXXX

信息学奥赛|常见排序算法总结(C+) - 腾讯云开发者社区-腾讯云 (tencent.com) https://cloud.tencent.com/developer/news/975232 常用序号层级排序 一、序号 序号Sequence Number,有顺序的号码,如数字序号…

数据结构: 链表回文结构/分割链表题解

目录 1.链表的回文结构 分析 代码 2.链表分割 ​编辑分析 代码 1.链表的回文结构 分析 这道题的难点是空间复杂度为O(1) 结合逆置链表找到链表的中间节点就可以解决了。 先找到链表的中间节点,再对中间节点的下一个节点进行逆置&…

代码随想录打卡第三十五天

代码随想录–动态规划部分 day 35 动态规划第三天 文章目录 代码随想录--动态规划部分一、卡码网46--携带研究材料二、力扣416--分割等和子集 一、卡码网46–携带研究材料 代码随想录题目链接:代码随想录 小明是一位科学家,他需要参加一场重要的国际科…

Leetcode—297. 二叉树的序列化与反序列化【困难】

2024每日刷题(148) Leetcode—297. 二叉树的序列化与反序列化 实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(…

学习记录——day18 数据结构 树

树的存储 1、顺序存储 对于普通的二叉树,不适合存储普通的二叉树顶序存储,一般用于存储完全二叉树而言,如果使用顺序存储,会浪费大量的存储空间,因为需要给没有节点的位置留出空间,以便于后期的插入。 所以…

Springboot循环依赖的解决方式

Springboot循环依赖的解决方式 起因原因解决方案配置文件解决使用工具类获取bean还有一种我设想的方案 起因 今天重构代码时,发现之前的代码结构完全混乱,没有按照MVC分层思想去编写,很多业务逻辑写在了controller中,导致引用的很…

WebStorm中在Terminal终端运行脚本时报错无法加载文件进行数字签名。无法在当前系统上运行该脚本。有关运行脚本和设置执行策略的详细信息,请参阅

错误再现 我们今天要 在webstorm用终端运行脚本 目的是下一个openAPI的 前端请求代码生成的模块 我们首先从github上查看官方文档 我们根据文档修改 放到webstorm终端里执行 报错 openapi : 无法加载文件 C:\Users\ZDY\Desktop\多多oj\dduoj\node_modules\.bin\openapi.p…

LabVIEW多种测试仪器集成控制系统

在现代工业生产与科研领域,对测试设备的需求日益增长。传统的手动操作测试不仅效率低下,而且易出错。本项目通过集成控制系统,实现了自动化控制,降低操作复杂度和错误率,提高生产和研究效率。 系统组成与硬件选择 系…

逆向软件更新 x64dbg 加入 windows api 函数设断点插件

百度网盘链接:https://pan.baidu.com/s/1VaGP0rN8uTf8j_SzBgaEPg?pwd6666

Docker容器限制内存与CPU使用

文章目录 Docker 容器限制内存与 CPU 使用内存限额内存限制命令举例使用 `nginx` 镜像学习内存分配只指定 `-m` 参数的情况CPU 限制命令举例验证资源使用Docker 容器限制内存与 CPU 使用 在生产环境中,为了保证服务器不因某一个软件导致服务器资源耗尽,我们会限制软件的资源…

用uniapp 及socket.io做一个简单聊天app 2

在这里只有群聊,二个好友聊天,可以认为是建了一个二人的群聊。 const express require(express); const http require(http); const socketIo require(socket.io); const cors require(cors); // 引入 cors 中间件const app express(); const serv…

学术研讨 | 区块链治理与应用创新研讨会顺利召开

学术研讨 近日,国家区块链技术创新中心组织,长安链开源社区支持的“区块链治理与应用创新研讨会”顺利召开,会议围绕区块链治理全球发展现状、研究基础、发展趋势以及区块链行业应用创新展开研讨。北京大学陈钟教授做了“区块链治理与应用创…

我们的人生,向阳而生,去更远的地方,见更亮的光

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/140683410 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…

qt SQLite学习记录

1. 查看qt中数据库的驱动的类型的支持 QStringList drivers QSqlDatabase::drivers();//获取qt中所支持的数据库驱动类型foreach(QString driver,drivers){qDebug()<<driver;}2. Qt SQL 模块包含的主要类的功能介绍 Qt SQL 模块包含了一些主要的类&#xff0c;用于在 …

自动驾驶系统开发与调试:车路云一体化无人驾驶挑战赛参赛体验

点击蓝字 关注我们 在过去的几年里&#xff0c;自动驾驶技术在全球范围内吸引了大量关注。其潜力不仅在于提升行车安全&#xff0c;而且还可以改变我们的出行方式和城市规划&#xff0c;提高交通运输效率。国际汽车工程师学会&#xff08;SAE&#xff09;根据不同自动驾驶程度&…