软件设计师笔记-数据库技术基础

数据库种类

数据库的种类繁多,根据数据的组织方式、存储结构以及应用场景的不同,可以分为多种类型。以下是一些常见的数据库种类:

关系型数据库(RDBMS)
  • 定义:关系型数据库是基于关系模型来存储和管理数据的数据库系统。数据被组织成表格的形式,每个表格包含一系列的行和列,数据之间通过关系(如外键)相互关联。
  • 特点:数据独立性高、数据一致性和数据安全性强。
  • 常见产品:MySQL、Oracle、SQL Server、PostgreSQL等。
非关系型数据库(NoSQL)
  • 定义:非关系型数据库泛指非关系型的、分布式的、且一般不保证遵循ACID原则的数据库系统。它们不使用传统的表格结构来存储数据,而是使用键值对、文档、列族或图形等方式来组织数据。
  • 特点:高度可扩展性、灵活性、适用于大数据和实时应用场景。
  • 常见产品:MongoDB(文档数据库)、Redis(键值存储数据库)、Cassandra(列存储数据库)、Neo4j(图形数据库)等。
分布式数据库
  • 定义:分布式数据库是一种数据分布在多个物理节点上的数据库系统,这些节点通过网络相互连接,共同构成一个逻辑上的整体。
  • 特点:数据分布透明、并发控制透明和故障恢复透明,适用于大规模数据集的存储和处理。
  • 常见产品:Google Spanner、Cassandra、HBase等。
内存数据库(IMDB)
  • 定义:内存数据库将数据存储在内存中,以提供极高的读写速度。它们通常用于需要超高性能的应用场景,如在线交易处理、实时分析等。
  • 特点:访问速度快,但受限于内存容量。
  • 常见产品:Redis、Memcached、VoltDB等。
其他类型数据库
  • 文档数据库:如MongoDB、CouchDB等,以文档(如JSON或BSON格式)的形式存储数据,适合处理半结构化数据。
  • 图形数据库:如Neo4j、OrientDB等,以图的形式存储数据,能够高效地表示和查询数据之间的关系。
  • 时序数据库:如InfluxDB、TimeScaleDB等,专门用于处理时间序列数据,适用于监控和物联网应用。
  • 对象数据库:如ObjectDB、Versant等,以对象的形式存储数据,支持面向对象编程。
  • XML数据库:如eXist-db、BaseX等,专门用于存储和查询XML数据。

数据库系统

数据库系统是一个复杂的系统,由多个关键组件构成,主要包括数据库、硬件、软件和人员。

数据库
  • 定义:数据库(Database,简称DB)是长期存储在计算机内的、有组织的、可共享的数据集合。这些数据按一定的数学模型组织、描述和存储,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。
  • 特点:数据库中的数据具有一定的结构,可以是关系型数据库(如Oracle、SQL Server、MySQL等)或非关系型数据库(如MongoDB、Redis等)。
硬件
  • 核心组件:数据库系统的硬件包括处理器、内存、存储设备和输入/输出设备。
    • 处理器:负责执行数据库操作和管理数据库系统的任务,其性能直接影响到数据库系统的运行效率。
    • 内存:用于存储处理器执行操作时所需的数据和程序,其大小和速度对数据库系统的性能有显著影响。
    • 存储设备:主要是硬盘和固态硬盘(SSD),用于持久化存储数据库的数据,其容量、速度和稳定性都会影响数据库系统的运行效果。
    • 输入/输出设备:如键盘、鼠标、显示器等,用于用户与数据库系统的交互。
  • 其他硬件:还可能包括网络接口卡(用于连接服务器与网络,实现数据的传输和通信)等。
软件
  • 操作系统:为数据库管理系统(DBMS)和其他应用程序提供运行环境。
  • 数据库管理系统(DBMS):是数据库系统的核心软件,负责科学地组织和存储数据,以及高效地获取和维护数据。DBMS的主要功能包括数据定义、数据操纵、数据库的运行管理和数据库的建立与维护。
  • 应用程序:利用DBMS提供的功能编写,用于实现特定的数据处理和业务逻辑。
  • 其他软件:还可能包括支持DBMS的操作系统、具有与数据库接口的高级语言及其编译系统、以DBMS为核心的应用开发工具等。
人员
  • 数据库管理员(DBA):负责数据库的总体信息控制,包括数据库的创建、监控、维护和优化。DBA需要确保数据库的安全性、完整性和性能。
  • 系统分析员和数据库设计人员:负责应用系统的需求分析和规范说明,以及数据库的设计和优化。
  • 应用程序员:负责编写使用数据库的应用程序,实现对数据的检索、建立、删除或修改等操作。
  • 最终用户:利用系统的接口或查询语言访问数据库,以获取所需的信息或执行相应的操作。

DBMS(数据库管理系统)的功能

  • 数据定义
  • 数据库操作
  • 数据库运行管理
  • 数据组织、存储和管理
  • 数据库的建立和维护
  • 与其他软件系统的通信功能等

DBMS 的特征

  • 数据结构化且统一管理
  • 有较高的数据独立性
  • 数据控制功能(数据库的安全性保护、数据的完整性、并发控制、故障恢复)

数据库系统体系结构

  • 集中式(数据、数据管理、数据库功能等都集中在一起)
  • 分布式(物理上分布+逻辑上分布)
  • C/S 模式(客户端负责数据表示服务、服务器负责数据库服务)
  • 并行结构(多个 CPU 物理上连在一起处理)

数据库的三级模式

  • 概念模式(数据库中全部数据的逻辑结构和特征的描述、只涉及型的
    描述而不涉及具体的值)
  • 外模式(用户与数据库系统的接口、用户用到那部分数据的描述)
  • 内模式(数据物理结构和存储方式的描述、数据在数据库内部的表示方式)

数据库的两级映像

  • 模式/内模式映像(实现概念模式与内模式的转换)
  • 外模式/模式映像(实现外模式与概念模式的转换)

数据的独立性

  • 物理独立性(数据库的内模式改变时数据的逻辑结构不变)
  • 逻辑独立性(用户的应用程序与数据库的逻辑结构相互独立)

数据模型

  • 概念数据模型(E-R 模型等)
  • 基本数据模型
    • 层次模型:用树型结构表示数据间的联系
    • 网状模型:用网络结构表示数据间的联系
    • 关系模型:用表格结构表示实体间的联系
    • 面向对象模型:对象标识+封装+对象的属性+类和类层次+继承

数据模型三要素

  • 数据结构
  • 数据操作
  • 数据的约束条件

E-R 图

  • 实体(矩形)
  • 联系(菱形)
  • 属性(椭圆形)

完整性约束

  • 实体完整性
  • 参照完整性
  • 用户自定义完整性

关系代数运算

  • 笛卡尔积
  • 投影
  • 选择
  • 连接

SQL 语言的特点

  • 综合统一
  • 高度非过程化
  • 面向集合的操作方式
  • 两种使用方式(自含式、嵌入式)
  • 语言简洁易学易用

SQL 语言的组成

  • 数据定义语言
  • 交互式数据操纵语言
  • 事务控制
  • 嵌入式 SQL 和动态SQL
  • 完整性
  • 权限管理

SQL 数据定义

  • 创建(create)
  • 修改(alter)
  • 删除(drop)
  • 表(table)
  • 视图(view[as select])
  • 索引(index[on])

SQL 数据查询

select…from…where…group by…having…order by…

插入数据

insert into…values…

修改数据

update…set…=…where…

删除数据

delete from…where…

授权

grant…on…to…(with grant option)

回收权限

revoke…on…from…

函数依赖

  • 反映属性间的联系(X→Y)
  • 完全函数依赖:(学生 ID,所修课程 ID)→成绩
  • 部分函数依赖 :(学生 ID,所修课程 ID)→学生姓名
  • 平凡函数依赖:X→Y 且 Y 包含于 X
  • 非平凡函数依赖:X→Y 且 Y 不包含于 X
  • 传递函数依赖:X→Y,Y→Z

规范化

  • 1NF:每个分量都不可再分
  • 2NF:消除非主属性对码的部分函数依赖
  • 3NF:消除非主属性对码的传递函数依赖

模式分解标准

  • 无损连接
  • 保持函数依赖

事务的 ACID 性质

  • 原子性
  • 一致性
  • 隔离性
  • 持久性

事务管理

  • 事务开始(begin transaction)
  • 事务提交(commit)
  • 事务回滚(rollback)

数据库故障

  • 事务内部故障
  • 系统故障
  • 介质故障
  • 计算机病毒

数据备份方法

  • 静态转储和动态转储
  • 海量转储和增量转储
  • 日志文件

数据恢复步骤

  • 反向扫描文件日志
  • 对事物的更新操作执行逆操作
  • 继续反向扫描和更新,直到事务的开始标志

并发控制的技术

并发控制技术是数据库管理系统中确保数据一致性和事务隔离性的重要手段。其中,封锁技术是实现并发控制的一种关键技术,它通过加锁和解锁机制来控制多个事务对同一数据对象的并发访问。封锁技术中的写锁(排他锁,X锁)和读锁(共享锁,S锁)是两种基本的锁类型。

封锁技术概述

封锁技术是指当一个事务在对某个数据对象进行操作之前,先向系统发出请求,对其加锁。成功加锁之后,该事务就获得了对该数据的控制权,其他事务在锁被释放之前不能对该数据进行更新。这种机制有效地防止了并发事务之间的数据不一致问题。

写锁(排他锁,X锁)

定义

  • 写锁又称为排他锁或X锁。当事务T对数据对象A加上X锁时,只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直到T释放A上的X锁。

特点

  • 排他性:在X锁被持有的期间,其他事务不能对同一数据对象进行读取或修改。
  • 严格性:写操作必须使用X锁,以确保数据的一致性和完整性。
读锁(共享锁,S锁)

定义

  • 读锁又称为共享锁或S锁。当事务T对数据对象A加上S锁时,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。

特点

  • 共享性:在S锁被持有的期间,多个事务可以同时读取同一数据对象,但都不能进行修改。
  • 兼容性:S锁与S锁之间是兼容的,但S锁与X锁之间是不兼容的。
封锁的粒度

封锁的数据对象可以是逻辑单元(如属性值、属性值集合、元组、关系、索引项等)或物理单元(如页、块等)。封锁粒度的大小与系统的并发度和并发控制的开销密切相关。选择封锁粒度时,需要权衡开销和并发度两个因素,以求达到最优的效果。

封锁协议

在运用X锁和S锁对数据对象加锁时,需要约定一些规则,这些规则被称为封锁协议。常见的封锁协议包括三级封锁协议和两段锁协议等。这些协议通过规定何时申请锁、持锁时间和何时释放锁等规则,来确保数据的一致性和事务的隔离性。

活锁与死锁

封锁技术虽然可以有效地解决并行操作的一致性问题,但也可能带来活锁和死锁等问题。活锁是指系统可能使某个事务永远处于等待状态,得不到封锁的机会。死锁则是指系统中两个或两个以上的事务都处于等待状态,并且每个事务都在等待其中另一个事务解除封锁,结果造成任何一个事务都无法继续执行。

为了避免活锁和死锁,可以采取一些策略和方法,如采用先来先服务的策略、一次封锁法、顺序封锁法等。此外,数据库管理系统还会通过诊断并解除死锁的方法来保证系统的正常运行。

数据不一致性

  • 丢失修改
  • 不可重复读
  • 读脏数据

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

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

相关文章

【折半查找】

目录 一. 折半查找的概念二. 折半查找的过程三. 折半查找的代码实现四. 折半查找的性能分析 \quad 一. 折半查找的概念 \quad 必须有序 \quad 二. 折半查找的过程 \quad \quad 三. 折半查找的代码实现 \quad 背下来 \quad 四. 折半查找的性能分析 \quad 记住 比较的是层数 …

git 报错git: ‘remote-https‘ is not a git command. See ‘git --help‘.

报错内容 原因与解决方案 第一种情况:git路径错误 第一种很好解决,在环境变量中配置正确的git路径即可; 第二种情况 git缺少依赖 这个情况,网上提供了多种解决方案。但如果比较懒,可以直接把仓库地址的https改成ht…

Android 简单实现联系人列表+字母索引联动效果

效果如上图。 Main Ideas 左右两个列表左列表展示人员数据,含有姓氏首字母的 header item右列表是一个全由姓氏首字母组成的索引列表,点击某个item,展示一个气泡组件(它会自动延时关闭), 左列表滚动并显示与点击的索引列表item …

Elasticsearch 8.16 和 JDK 23 中的语言环境变化

作者:来自 Elastic Simon Cooper 随着 JDK 23 即将发布,语言环境信息中有一些重大变化,这将影响 Elasticsearch 以及你提取和格式化日期时间数据的方式。首先,介绍一些背景知识。 什么是语言环境? 每次 Java 程序需要…

理解Matplotlib构图组成

介绍 Matplotlib 是 Python 中最流行的数据可视化库之一。它提供了一系列丰富的工具,可以绘制高度自定义且适用于各种应用场景的图表。无论你是数据科学家、工程师,还是需要处理数据图形表示的任何人,理解如何操作和定制 Matplotlib 中的图表…

三、数据链路层(上)

目录 3.1数据链路层概述 3.1.1术语 3.1.2功能 3.2封装成帧和透明传输 3.2.1封装成帧 ①字符计数法 ②字符(节)填充法 ③零比特填充法 ④违规编码法 3.2.2透明传输 3.2.3差错控制 差错原因 检错编码 奇偶校验 ☆循环冗余码CRC 例题 纠错…

骨架屏 (懒加载优化)

骨架屏 (懒加载优化) 即便通过 Webpack 的按需加载、CDN 静态资源缓存 和 代码分割 等技术来减少首屏的代码体积,首屏加载时的白屏时间(也称为首屏等待时间)仍然可能存在,尤其在网络条件较差或页面内容复杂…

MongoDB 快速入门+单机部署(附带脚本)

目录 介绍 体系结构 数据模型 BSON BSON 数据类型 特点 高性能 高可用 高扩展 丰富的查询支持 其他特点 部署 单机部署 普通安装 脚本安装 Docker Compose 安装 卸载 停止 MongoDB 删除包 删除数据目录 参考: https://docs.mongoing.com/ 介绍…

python全栈学习记录(二十一)类的继承、派生、组合

类的继承、派生、组合 文章目录 类的继承、派生、组合一、类的继承二、派生三、组合 一、类的继承 继承是一种新建类的方式,新建的类称为子类,被继承的类称为父类。 继承的特性是:子类会遗传父类的属性(继承是类与类之间的关系&a…

2024年研究生数学建模“华为杯”E题——肘部法则、k-means聚类、目标检测(python)、ARIMA、逻辑回归、混淆矩阵(附:目标检测代码)

文章目录 一、情况介绍二、思路情况二、代码展示三、感受 一、情况介绍 前几天也是参加了研究生数学建模竞赛(也就是华为杯),也是和本校的两个数学学院的朋友在网上组的队伍。昨天(9.25)通宵干完论文(一条…

Prompt 初级版:构建高效对话的基础指南

Prompt 初级版:构建高效对话的基础指南 文章目录 Prompt 初级版:构建高效对话的基础指南一 “标准”提示二 角色提示三 多范例提示四 组合提示五 规范化提示 本文介绍了提示词的基础概念与不同类型,帮助用户更好地理解如何在对话中构建有效的…

Pytorch实现玉米基因表达量预测模型

一、实验要求 通过搭建残差卷积网络,实现对玉米基因表达量的预测 二、实验目的 理解基因表达量预测问题:基因表达预测是生物信息学和基因组学领域中的重要任务之一,促进学科交叉融合。熟悉深度学习框架PyTorch:通过实现基因表达量…

css 数字比汉字要靠上

这个问题通常是由于数字字体的下排的问题造成的,也就是数字的底部边缘位置比汉字的顶部边缘位置更靠下。为了解决这个问题,可以尝试以下几种方法: 使用CSS的vertical-align属性来调整对齐方式。例如,可以将数字的对齐方式设置为to…

Linux高级编程_27_系统调用

文章目录 系统调用函数分类系统编程概述系统调用概述**类UNIX系统的软件层次** 用户态和内核态系统调用与库函数的关系文件操作符概述文件磁盘权限 系统调用之文件操作open:打开文件close:关闭文件write:写入read:读取 文件状态fcntl 函数stat 函数 st_mode的值示例 1&#xff…

【优选算法之队列+宽搜/优先级队列】No.14--- 经典队列+宽搜/优先级队列算法

文章目录 前言一、队列宽搜示例:1.1 N 叉树的层序遍历1.2 ⼆叉树的锯⻮形层序遍历1.3 ⼆叉树最⼤宽度1.4 在每个树⾏中找最⼤值 二、优先级队列(堆)示例:2.1 最后⼀块⽯头的重量2.2 数据流中的第 K ⼤元素2.3 前 K 个⾼频单词2.4 …

数造科技入选中国信通院《高质量数字化转型产品及服务全景图》三大板块

9月24日,2024大模型数字生态发展大会暨“铸基计划”年中会议在北京召开。会上,中国信通院发布了2024年《高质量数字化转型产品及服务全景图(上半年度)》和《高质量数字化转型技术解决方案(上半年度)》等多项…

网络编程篇:UDP协议

一 UDP协议格式 16位源端口号:表示数据从哪里来。16位目的端口号:表示数据要到哪里去。16位UDP长度:表示整个数据报(UDP首部UDP数据)的长度。16位UDP检验和:如果UDP报文的检验和出错,就会直接将…

【Kubernetes】常见面试题汇总(五十三)

目录 118. pod 状态为 ErrlmagePull ? 119.探测存活 pod 状态为 CrashLoopBackOff ? 特别说明: 题目 1-68 属于【Kubernetes】的常规概念题,即 “ 汇总(一)~(二十二)” 。…

MongoDB聚合操作及索引底层原理

目录 链接:https://note.youdao.com/ynoteshare/index.html?id=50fdb657a9b06950fa255a82555b44a6&type=note&_time=1727951783296 本节课的内容: 聚合操作: 聚合管道操作: ​编辑 $match 进行文档筛选 ​编辑 将筛选和投影结合使用: ​编辑 多条件匹配: …

Springboot + netty + rabbitmq + myBatis

目录 0.为什么用消息队列1.代码文件创建结构2.pom.xml文件3.三个配置文件开发和生产环境4.Rabbitmq 基础配置类 TtlQueueConfig5.建立netty服务器 rabbitmq消息生产者6.建立常规队列的消费者 Consumer7.建立死信队列的消费者 DeadLetterConsumer8.建立mapper.xml文件9.建立map…