当前位置: 首页 > news >正文

【软件系统架构】系列三:数据库系统之三

1.数据故障与备份

1.1 安全措施

措施说明
用户标识和鉴定最外层的安全保护措施,可以使用用户帐户、口令及随机数检验等方式
存取控制对用户进行授权,包括操作类型(如查找、插入、删除、修改等动作)和数据对象(主要是数据范围)的权限。
密码存储和传输对远程终端信息用密码传输
视图的保护对视图进行授权
审计使用一个专用文件或数据库,自动将用户对数据库的所有操作记录下来

1.2 数据故障

故障关系故障原因解决方法
事务本身的可预期故障本身逻辑在程序中预先设置Rollback语句
事务本身的不可预期故障算术溢出、违反存储保护由DBMS的恢复子系统通过日志,撤销事务对数据库的修改,回退到事务初始状态
系统故障系统停止运转通常使用检查点法
介质故障外存被破坏一般使用日志重做业务

1.3 数据备份

1.3.1 静态转储(冷备份)

  • 定义: 在转储期间不允许对数据库进行任何存取、修改操作。

  • 优点:非常快速的备份方法。

    • 容易归档(直接物理复制操作)。

  • 缺点:

    • 只能提供到某一时间点上的恢复。

    • 不能做其他工作。

    • 不能按表或按用户恢复。

1.3.2 转储(热备份)

  • 定义: 在转储期间允许对数据库进行存取、修改操作,因此,转储和用户事务可并发执行。

  • 优点:

    • 可在表空间或数据库文件级备份。

    • 数据库仍可使用。

    • 可达到秒级恢复。

  • 缺点:

    • 不能出错,否则后果严重。

    • 若热备份不成功,所得结果几乎全部无效。

1.3.3 完全备份

  • 定义: 备份所有数据。

1.3.4 差量备份

  • 定义: 仅备份上一次完全备份之后变化的数据。

1.3.5 增量备份

  • 定义: 备份上一次备份之后变化的数据。

1.3.6 日志文件

  • 定义: 在事务处理过程中,DBMS把事务开始、事务结束以及对数据库的插入、删除和修改的每一次操作写入日志文件。

  • 作用: 一旦发生故障,DBMS的恢复子系统利用日志文件撤销事务对数据库的改变,回退到事务的初始状态。

  • 重要性: 备份毕竟是有时间节点的,不是实时的。例如:上一次备份到这次备份之间数据库出现了故障,则这期间的数据无法恢复。因此,引入日志文件,可以实时记录针对数据库的任何操作,保证数据库可以实时恢复。

2.分布式数据库

分布式数据库是一个由多个物理上分散的数据库组成的逻辑统一的数据库系统。这些物理上分散的数据库通过网络连接,协同工作,为用户提供统一的数据访问接口。

分布式数据库
分布式数据库

分布式数据库的特点:

  • 物理分布性: 数据存储在不同的物理位置。

  • 逻辑整体性: 虽然数据分散存储,但用户感觉像是在操作一个单一的数据库。

  • 站点自治性: 每个局部数据库都有一定的自治能力。

  • 数据分布透明性: 用户无需关心数据的具体分布情况。

分布式数据库的优势:

  • 高可用性: 部分节点故障不影响整体服务。

  • 高扩展性: 可以通过增加节点来扩展存储和处理能力。

  • 性能提升: 可以将数据分布在离用户更近的位置,减少网络延迟。

分片模式

  • 水平分片: 将表中水平的记录分别存放在不同的地方。

  • 垂直分片: 将表中的垂直的列值分别存放在不同的地方。

分布式数据库的透明性:

  • 分片透明性: 用户无需知道数据是如何分片存储的。

  • 位置透明性: 用户无需知道数据存储在哪个物理位置。

  • 逻辑透明性: 用户无需知道局部数据库使用的数据模型。

  • 复制透明性: 用户无需知道数据的复制情况。

3.数据仓库与数据挖掘

3.1 数据仓库

  • 定义: 数据仓库是一种特殊的数据库,也是按数据库形式存储数据的,但是目的不同。数据库经过长时间的运行,里面的数据会保存的越来越多,就会影响系统运行效率。对于某些程序而言,很久之前的数据并非必要的,因此,可以删除掉以减少数据,增加效率,考虑到删除这些数据比较可惜,因此,一般都将这些数据从数据库中提取出来保存到另外一个数据库中,称为数据仓库。

3.2 数据仓库四大特点

  • 面向主题: 按照一定的主题域进行组织的。

  • 集成的: 数据仓库中的数据是在对原有分散的数据库数据抽取、清理的基础上经过系统加工、汇总和整理得到的,必须消除源数据中的不一致性,以保证数据仓库内的信息是关于整个企业的一致的全局信息。

  • 相对稳定的: 数据仓库的数据主要供企业决策分析之用,所涉及的数据操作主要是数据查询,一旦某个数据进入数据仓库以后,一般情况下将被长期保留,也就是数据仓库中一般有大量的查询操作,但修改和删除操作很少,通常只需要定期的加载、刷新。

  • 反映历史变化: 数据仓库中的数据通常包含历史信息,系统记录了企业从过去某一时间点(如开始应用数据仓库的时点)到目前的各个阶段的信息,通过这些信息,可以对企业的发展历程和未来趋势做出定量分析和预测。

3.3 数据仓库的结构通常包含四个层次

如下图所示:

数据仓库体系架构
数据仓库体系架构

(1)数据源: 是数据仓库系统的基础,是整个系统的数据源泉。

(2)数据的存储与管理: 是整个数据仓库系统的核心。

(3)OLAP(联机分析处理)服务器: 对分析需要的数据进行有效集成,按多维模型组织,以便进行多角度、多层次的分析,并发现趋势。

(4)前端工具: 主要包括各种报表工具、查询工具、数据分析工具、数据挖掘工具以及各种基于数据仓库或数据集市的应用开发工具。

3.4 数据挖掘的分析方法

  • 关联分析: 主要用于发现不同事件之间的关联性,即一个事件发生的同时,另一个事件也经常发生。

  • 序列分析: 主要用于发现一定时间间隔内接连发生的事件,这些事件构成一个序列,发现的序列应该具有普遍意义。

  • 分类分析: 通过分析具有类别的样本特点,得到决定样本属于各种类别的规则或方法。

    • 分类分析时首先为每个记录赋予一个标记(一组具有不同特征的类别),即按标记分类记录,然后检查这些标定的记录,描述出这些记录的特征。

  • 聚类分析: 是根据“物以类聚”的原理,将本身没有类别的样本聚集成不同的组,并且对每个这样的组进行描述的过程。

3.5 商业智能 BI

  • BI系统主要包括数据预处理、建立数据仓库、数据分析和数据展现四个主要阶段。

  • 数据预处理: 是整合企业原始数据的第一步,它包括数据的抽取(Extraction)、转换(Transformation)和加载(Load)三个过程(ETL过程);

  • 建立数据仓库: 则是处理海量数据的基础;

  • 数据分析: 是体现系统智能的关键,一般采用联机分析处理(OLAP)和数据挖掘两大技术。

    • 联机分析处理: 不仅进行数据汇总/聚集,同时还提供切片、切块、下钻、上卷和旋转等数据分析功能,用户可以方便地对海量数据进行多维分析。

    • 数据挖掘: 的目标则是挖掘数据背后隐藏的知识,通过关联分析、聚类和分类等方法建立分析模型,预测企业未来发展趋势和将要面临的问题;

  • 数据展现: 在海量数据和分析手段增多的情况下,数据展现则主要保障系统分析结果的可视化。

4.反规划化技术

背景:

  • 规范化操作可以防止插入异常、更新、删除异常和数据冗余,一般是通过模式分解,将表拆分,来达到这个目的。

  • 但是表拆分后,解决了上述异常,却不利于查询,每次查询时,可能都要关联很多表,严重降低了查询效率。

目的:

  • 提高查询效率。

技术手段:

  • 增加派生性冗余列

  • 增加冗余列

  • 重新组表

  • 分割表

本质:

  • 主要就是增加冗余,提高查询效率,为规范化操作的逆操作。

5.SQL语言

5.1 SQL 语言中的语法关键字

  • 创建表: create table

  • 指定主键: primary key()

  • 指定外键: foreign key()

  • 修改表: alter table

  • 删除表: drop table

  • 索引: index

  • 视图: view

  • 数据库查询: select...from...where

  • 分组查询: group by

    • 分组时要注意 select 后的列名要适应分组

    • having 为分组查询附加条件

  • 更名运算: as

  • 字符串匹配: like

    • % 匹配多个字符串

    • _ 匹配任意一个字符串

  • 数据库插入: insert into...values()

  • 数据库删除: delete from...where

  • 数据库修改: update...set...where

  • 排序: order by

    • 默认为升序

    • 降序要加关键字 DESC

  • 授权: grant...on...to

    • with grant option:允许其将权限再赋给另一用户

  • 收回权限: revoke...on...from

  • with check option 表示要检查 where 后的谓词条件

  • DISTINCT 过滤重复的选项,只保留一条记录

  • UNION 出现在两个 SQL 语句之间,将两个 SQL 语句的查询结果取或运算,即值存在于第一句或第二句都会被选出

  • INTERSECT 对两个 SQL 语句的查询结果做与运算,即值同时存在于两个语句才被选出

5.2 SQL 语法原理

  • SELECT 之后的为要查询显示的属性列名

  • FROM 后面是要查询的表名

  • WHERE 后面是查询条件

  • 涉及到平均数、最大值、求和等运算,必须要分组,group by 后面是分组的属性列名,分组的条件使用 Having 关键字,后面跟条件

  • 在 SQL 语句中,条件判断时数字无需打引号,字符串要打单引号

6.NoSQL数据库

6.1 定义:

  • NoSQL 最常见的解释是 Non-Relational(非关系型),Not Only SQL 也被很多人接受。

  • NoSQL 仅仅是一个概念,泛指非关系型的数据库,区别于关系数据库。

  • 它们不保证关系数据的 ACID 特性。

6.2 数据模型分类:

  • 按照所使用的数据结构的类型,一般可以将 NoSQL 数据库分为以下 4 种类型:

        列式存储数据库:
    • 行式数据库即传统的关系型数据库,数据按记录存储,每一条记录的所有属性存储在一行。

    • 列式数据库是按数据库记录的列来组织和存储数据的,数据库中每个表由一组页链的集合组成,每条页链对应表中的一个存储列。

        键值对存储数据库:
    • 键值存储的典型数据结构一般为数组链表:先通过 Hash 算法得出 Hashcode,找到数组的某一个位置,然后插入链表。

        文档型数据库:
    • 文档型数据库同键值对存储数据库类似。

    • 该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如 JSON。

        图数据库:
    • 图形结构的数据库同其他采用行列以及刚性结构的 SQL 数据库不同,它使用灵活的图形模型,并且能够扩展到多个服务器上。

    • NoSQL 数据库没有标准的查询语言 (SQL),因此进行数据库查询需要指定数据模型。

    6.3 NoSQL 数据库的共同特征:

    • 目前业界对于 NoSQL 并没有一个明确的范围和定义,但是它们普遍存在下面一些共同特征:

      • 易扩展: 去掉了关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。

      • 大数据量,高性能: NoSQL 数据库都具有非常高的读写性能,尤其在大数据量下。这得益于它的无关系性,数据库的结构简单。

      • 灵活的数据模型: NoSQL 无须事先为要存储的数据建立字段,随时可以存储自定义的数据格式。

      • 高可用: NoSQL 在不太影响性能的情况下,就可以方便地实现高可用的架构,有些产品通过复制模型也能实现高可用。

    6.4 NoSQL 整体框架:

    • NoSQL 整体框架分为 4 层,由下至上分为数据持久层、数据分布层、数据逻辑模型层和接口层。

      • (1) 数据持久层:

        • 定义了数据的存储形式,主要包括基于内存、硬盘、内存和硬盘接口、订制可插拔 4 种形式。

      • (2) 数据分布层:

        • 定义了数据是如何分布的,相对于关系型数据库,NoSQL 可选的机制比较多,主要有 3 种形式:

          • 一是 CAP 支持,可用于水平扩展;

          • 二是多数据中心支持,可以保证在横跨多数据中心时也能够平稳运行;

          • 三是动态部署支持,可以在运行着的集群中动态地添加或删除结点。

      • (3) 数据逻辑层:

        • 表述了数据的逻辑表现形式。

      • (4) 接口层:

        • 为上层应用提供了方便的数据调用接口,提供的选择远多于关系型数据库。

    6.4 NoSQL 分层架构:

    • NoSQL 分层架构并不代表每个产品在每一层只有一种选择。

    • 相反,这种分层设计提供了很大的灵活性和兼容性,每种数据库在不同层面可以支持多种特性。

    6.5 NoSQL 数据库适用情况:

    • NoSQL 数据库在以下这几种情况比较适用:

      • 数据模型比较简单;

      • 需要灵活性更强的 IT 系统;

      • 对数据库性能要求较高;

      • 不需要高度的数据一致性;

      • 对于给定 key,比较容易映射复杂值的环境。

    【软件系统架构】系列

    系统架构设计教程简介【软件系统架构】系列简介-CSDN博客
    【软件系统架构】系列三:数据库系统之一【软件系统架构】系列三:数据库系统之一_内模式映像-CSDN博客
    【软件系统架构】系列三:数据库系统之二【软件系统架构】系列三:数据库系统之二-CSDN博客
    【软件系统架构】系列三:数据库系统之三【软件系统架构】系列三:数据库系统之三-CSDN博客
    【软件系统架构】系列三:数据库系统之四-Redis数据库(1)https://blog.csdn.net/moton2017/article/details/145990776

    相关文章:

    【软件系统架构】系列三:数据库系统之三

    1.数据故障与备份 1.1 安全措施 措施说明用户标识和鉴定最外层的安全保护措施,可以使用用户帐户、口令及随机数检验等方式存取控制对用户进行授权,包括操作类型(如查找、插入、删除、修改等动作)和数据对象(主要是数…...

    lamp平台介绍

    一、lamp介绍 网站: 静态 动态 php语言 .php 作用:运行php语言编写动态网站应用 lamp Linux Apache MySQL PHP PHP是作为httpd的一个功能模块存在的 二、部署lamp平台 1、测试httpd是否可正常返回PHP的响应 2、测试PHP代码是否可正常连接数据…...

    826考研

    初试总分第一的hh佬小红书:https://www.xiaohongshu.com/user/profile/64e106aa000000000100fe33 深研院巨佬经验贴:https://zhuanlan.zhihu.com/p/690464528 本部羊神经验贴:https://zhuanlan.zhihu.com/p/689494655 本部学硕佬经验贴&#…...

    局域网自动识别机器名和MAC并生成文件的命令

    更新版本:添加了MAC 地址 确定了设备唯一性 V1.1 局域网自动识别机器名和MAC并生成文件的批处理命令 echo off setlocal enabledelayedexpansionREM 设置输出文件 set outputFilenetwork_info.txtREM 清空或创建输出文件 echo Scanning network from 192.168.20.1…...

    todo: 使用融云imserve做登录(android)

    使用融云做登录注册思路 注册界面需要name, email, password考虑到融云注册用户的post格式 POST http://api.rong-api.com/user/getToken.json?userId1690544550qqcom&nameIronman这里的userId可以使用用户的email,但是要截断和 . 符号,即1690544…...

    Mac OS升级后变慢了,如何恢复老系统?

    我的一台Mac Air闲置很久了,原因是某次系统升级后用着会卡,有差不多10年没用了。今天想试着恢复一下出厂系统,目前看这条路可以走通。记录如下: 1、去哪里下载旧版系统? https://support.apple.com/zh-cn/102662 2、…...

    cursor使用经验分享(java后端服务开发向)

    前言 cursor是一款基于vscode,并集成AI能力的代码编辑器,其功能包括但不限于代码生成及补全、AI对话(能够直接将代码环境作为上下文)、即时应用建议等等,是一款面向未来的代码编辑器。 对于vscode,最先想…...

    初次使用 IDE 搭配 Lombok 注解的配置

    前言 在 Java 开发的漫漫征程中,我们总会遇到各种提升效率的工具。Lombok 便是其中一款能让代码编写变得更加简洁高效的神奇库。它通过注解的方式,巧妙地在编译阶段为我们生成那些繁琐的样板代码,比如 getter、setter、构造函数等。然而&…...

    vue 安装依赖npm install过程中报错npm ERR! cb() never called!

    解决办法: 步骤 1:清理 npm 缓存 npm cache clean --force rm -rf node_modules package-lock.json 步骤 2:一个第三方 npm 工具包,功能是 自动重试失败的 npm install 操作,适用于网络不稳定或依赖源不可靠的场景 …...

    android接入rocketmq

    一 前言 RocketMQ 作为一个功能强大的消息队列系统,不仅支持基本的消息发布与订阅,还提供了顺序消息、延时消息、事务消息等高级功能,适应了复杂的分布式系统需求。其高可用性架构、多副本机制、完善的运维管理工具,以及安全控制…...

    libilibi项目优化(1)使用Redis实现缓存

    第一版 获取视频信息使用旁路缓存 当视频信息存在缓存中时(命中),直接从缓存中获取。不存在缓存中时,先从数据库中查出对应的信息,写入缓存后再放回数据。 //获取视频详细信息RequestMapping("/getVideoInfo&q…...

    The Rust Programming Language 学习 (二)

    通用编程概念 变量和可变性 默认情况下变量是不可变的(immutable),不过你也可以选择让变量是可变的(mutable). 变量的遮蔽 你可以声明和前面变量具有相同名称的新变量,说这个是第一个变量被第二个变量遮蔽(shadow&…...

    http链接转成https的链接的几种方法

    以下是一个将HTTP链接转换为HTTPS的JavaScript函数,处理了多种常见输入情况: function convertToHttps(url) {if (typeof url ! string) return url;// 移除首尾空格并处理空字符串const trimmedUrl url.trim();if (!trimmedUrl) return https://;// 替…...

    STM32——串口通信 UART

    一、基础配置 Universal Asynchronous Receiver Transmitter 异步,串行,全双工 TTL电平 :高电平1 低电平0 帧格式: 起始位1bit 数据位8bit 校验位1bit 终止位1bit NVIC Settings一栏使能接受中断。 之前有设置LCD,…...

    mybatis日期格式与字符串不匹配bug

    异常特征:java.lang.IllegalArgumentException: invalid comparison: java.time.LocalDateTime and java.lang.String ### Error updating database. Cause: java.lang.IllegalArgumentException: invalid comparison: java.time.LocalDateTime and java.lang.Str…...

    文献分享: ConstBERT固定数目向量编码文档

    😂图放这了,大道至简的 idea \text{idea} idea不愧是 ECIR \text{ECIR} ECIR 👉原论文 1. ConstBERT \textbf{1. ConstBERT} 1. ConstBERT的原理 1️⃣模型的改进点:相较于 ColBERT \text{ColBERT} ColBERT为每个 Token \text{Tok…...

    学习记录-用例设计编写

    黑马测试视频记录 目录 一、 软件测试流程 二、测试用例编写格式 1、等价类法 2、边界值分析法 3、 判定表法 4、场景法​编辑 5、错误推荐法 一、 软件测试流程 二、测试用例编写格式 1、等价类法 2、边界值分析法 3、 判定表法 4、场景法 5、错误推荐法 时间紧任务重…...

    学习工具的一天之(burp)

    第一呢一定是先下载 【Java环境】:Java Downloads | Oracle 下来是burp的下载 Download Burp Suite Community Edition - PortSwigger 【下载方法二】关注的一个博主 【BurpSuite 安装激活使用详细上手教程 web安全测试工具】https://www.bilibili.com/video/BV…...

    el-tree右键节点动态位置展示菜单;el-tree的节点图片动态根据节点属性color改变背景色;加遮罩层(opacity)

    一、el-tree右键节点动态位置展示菜单 关键:@node-contextmenu="handleRightClick"与@node-click=“handleNodeClick” <div class="content"><el-tabs class="tabs" @tab-click="handleClick" v-model="Modal"…...

    K8s 1.27.1 实战系列(一)准备工作

    一、主机规划与硬件要求 1、节点数量 至少需要 3 台服务器(1 台 Master 节点,2 台 Worker 节点)。本地测试可缩容:若仅用于测试,可缩减为 1 个 Master 和 1 个 Worker,但需注意稳定性风险。2、硬件配置 ​Master 节点:建议 2 核 CPU、8GB 内存、80GB 硬盘。​Worker 节…...

    Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

    文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

    【项目实战】通过多模态+LangGraph实现PPT生成助手

    PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

    linux 错误码总结

    1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

    P3 QT项目----记事本(3.8)

    3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

    【HTML-16】深入理解HTML中的块元素与行内元素

    HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

    CMake控制VS2022项目文件分组

    我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

    蓝桥杯3498 01串的熵

    问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

    OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

    操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

    QT3D学习笔记——圆台、圆锥

    类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…...

    A2A JS SDK 完整教程:快速入门指南

    目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...