【数据库】01——精通数据库需要掌握这九个维度

数据库技术
415
0
0
2022-12-08
前 言 🍉 作者简介:半旧518,长跑型选手,立志坚持写10年博客,专注于java后端 ☕专栏简介:相当硬核,黑皮书《数据库系统概念》读书笔记,讲解: 1.数据库系统的基本概念(数据库设计过程、关系型数据库理论、数据库应用的设计与开发…) 2.大数据分析(大数据存储系统,键值存储,Nosql系统,MapReduce,Apache Spark,流数据和图数据库等…) 3.数据库系统的实现技术(数据存储结构,缓冲区管理,索引结构,查询执行算法,查询优化算法,事务的原子性、一致性、隔离型、持久性等基本概念,并发控制与故障恢复技术…) 4.并行和分布式数据库(集中式、客户-服务器、并行和分布式,基于云系统的计算机体系结构…) 5.更多数据库高级主题(LSM树及其变种、位图索引、空间索引、动态散列等索引结构的拓展,高级应用开发中的性能调整,应用程序移植和标准化,数据库与区块链等…) 🌰 文章简介:全面深入介绍数据库系统应用,数据库系统的目标,数据视图,数据库语言,数据库设计思想,数据库引擎,数据库的应用体系结构,数据库的用户与语言,数据库的发展历程九个维度,带你真正理解数据库,知道精通数据库要学习什么内容。该专栏将会把这些维度一网打尽。

文章目录

  • 1.数据库简介
  • 1.1.什么是数据库?
  • 1.2 哪些数据需要被管理?
  • 1.3 为什么需要数据库语言?
  • 1.4 数据库给人类生活带来的改变在哪?
  • 1.5 我们用数据库可以干什么?
  • 2.数据库系统的目标——安全、方便的进行数据存储与访问
  • 3.数据视图——将数据库从复杂变简单
  • 3.1 数据模型:描述数据的方式
  • 3.2 数据抽象:屏蔽复杂细节
  • 3.3 实例和模式
  • 4.数据库语言——定义和操作数据
  • 4.1 数据定义语言
  • 4.2 数据操作语言
  • 4.3 从应用程序访问数据库
  • 5 数据库设计有哪些步骤
  • 6.数据库引擎——如何存储、查询并保证数据安全
  • 6.1 存储管理器
  • 6.2 查询处理器
  • 6.3 事务管理
  • 7 数据库的应用体系结构
  • 8 数据库用户和管理员
  • 8.1 数据库用户和用户界面
  • 8.2 数据库管理员
  • 9 数据库系统的历史

1.数据库简介

1.1.什么是数据库?

数据库管理系统就是由互相关联的数据集合和一组用于访问这些数据的程序组成,简称数据库。即,数据库=数据+程序。数据库的目标就是方便、高效、安全的存储、管理数据信息。

img

1.2 哪些数据需要被管理?

  • 高价值的数据
  • 庞大数据量的数据集合
  • 常常被多个用户、系统访问的数据集合

1.3 为什么需要数据库语言?

早期的数据库简单,被作为办公室后台系统进行维护,用户通过打印报告的纸质文档作为输入数据,键盘输入就可与其交互,现在数据库越来越复杂,我们需要筛选过滤,范围查找等各种复杂操作,因此我们开发了数据库语言供程序员与其交互。

img

1.4 数据库给人类生活带来的改变在哪?

数据库使数据与用户更直接的相关联。在没有数据库之前,每一个银行客户都必须在交易时与出纳员打交道,而现在ATM机可以直接与用户交互。

img

1.5 我们用数据库可以干什么?

有两种使用数据库的方式。

  • OLTP(联机事务处理,online transaction processing),大量的用户使用数据库,每个用户只检索少量数据,进行小的更新。
  • 数据分析(data anaytics),对数据进行分析,给出结论,推到规则或决策程序,用于驱动业务决策。

2.数据库系统的目标——安全、方便的进行数据存储与访问

想象如果没有数据库,一个大学要怎么在计算机中存储学生、教师、课程等数据?

那只能够将数据存储在操作系统的文件中,并且编写对应的程序对于这些数据进行读写操作。至少需要有:

  • 增加学生、教师和课程。
  • 为课程注册学生,产生班级花名册
  • 为学生填成绩,算绩点。

当需求增多,新的应用程序就需要被加入系统中,比如学校需要开设新的专业,就业为这个专业新建新的永久性文件(或者在现有文件增加新的数据),为了满足这个新专业数据处理的特殊规则,就需要编写新的程序。久而久之,越来越多的程序和文件会被添加到操作系统。

这种文件处理系统(file-processing system)在传统操作系统中是被支持的。

它有什么问题?

  • 数据冗余与不一致。比如学生半旧的地址信息可能重复出现在音乐课和美术课的文件中,更新了音乐课中半旧的地址,又可能忘记了美术表的地址更新。
  • 数据访问困难,比如需要筛选分数超过60分的学生,就需要手动进行过滤或者编写程序完成。筛选性别为男的学生又需要重复上面的过程。
  • 数据孤立,不同的数据分布于不同的文件,并且文件的数据组织结构还可能不同,想要检索适当的数据很困难。
  • 完整性问题,比如要求每个系的财务账户余额不能小于0,需要编写对应的程序完成,这些财务数据还跨文件。问题会变得越来越复杂。
  • 原子性问题一致性问题安全性问题

总结起来就是三个特点,不好存,不好取,不安全。数据库就是为了解决这些问题的。

3.数据视图——将数据库从复杂变简单

数据的存储与维护是复杂的,对于用户当然不需要知道这些无聊枯燥的过程,数据库系统为用户提供了抽象视图,隐藏数据存储维护的某些细节。

3.1 数据模型:描述数据的方式

数据库的基础是数据模型,是一个描述数据、数据关系、数据语义和一致性约束概念工具的集合。可以分为四类。

  • 关系模型(relational model),使用表来表示数据与数据之间的联系。表也被称为关系
  • 实体、联系模型(entity-relationship model),实体是现实世界中的一件“事情”或者一个“物体”。实体-联系模型包括数据实体与数据之间的联系,在数据库设计阶段广泛应用,后续文章会详细介绍。

img

  • 半结构化模型。结构化的数据模型可以有效的支持数据查询的响应,但是无法支持数据结构的动态修改。半结构化模型允许相同类型的数据项含有不同的属性集,比如json和xml。
半结构化模型可以有效的处理以下场景: (1)数据缺失 例如,在公司人事档案库中,已婚雇员会有配偶项信息,而未婚的雇员则无该项信息 (2)单值和集合值属性兼容 在传统查询语言如SQL、OQL、XSQL中, 单值和集合值属性是不兼容的,即集合不能按单值处理,单值也不能按集合处理。半结构化模型可以解决该问题。 (3)查询对象类型各异 在WWW 和异构信息源集成时,会有不少内容相同而类型各异的问题。如一信息源上的电话信息是用字符串表示,而另一信息源上则可能用整数表示。有些电话信息上可能带区号,而有些则不带。又如WWW上的主页,相同实体的类型差异也很大。如主页里的朋友项,有的是用字符串给出名字,有的则带有简单描述信息或是指向其朋友的网络地址。这就要求查询处理时有宽松的类型限制或没有类型检查。 (4)异构的查询返回结果 半结构化数据的同类实体查询会出现不同的结果对象,选择语句的返回结果可能因数据源的不同而异。 (5) 查询的对象结构未知
  • 基于对象的数据模型。 java,c++等面向对象语言成为主导的软件开发语言,工程师们通过过程已经将对象的概念很好的整合到了关系型数据库中。

关系型数据模型是大多数数据库的理论基础。

3.2 数据抽象:屏蔽复杂细节

为了能够使数据库中的数据被高效地检索,数据库的开发人员不得不使用复杂的数据结构来表示数据。而数据库的用户多没受过专业的计算机训练,需要对他们进行如下几个层次的数据抽象,让不同层次的用户关注自己这层的事情,屏蔽不需要的内容。

  • 物理层。物理层描述数据实际上是如何存储的。
  • 逻辑层。逻辑层描述存储什么样的数据以及数据之间联系。
  • 视图层。逻辑层尽管采用了相对简单的结构,但是还是具有一定的复杂性,数据库系统的用户可能并不需要这部分的数据,只需要一部分的数据,以用户友好,需要的方式展现出来。

img

3.3 实例和模式

数据库的整体设计被成为模式(schema),这就相当于一个模板。数据库在某一个特定时刻存储的数据总和被称为实例(instance).举个栗子,数据库的模式就像是变量的定义,而变量在每个时刻都会特定的值,这个值对应是数据库模式的一个实例。

按照不同的抽象层次划分,数据库有几种模式。物理模式在物理层描述数据库的设计,逻辑模式在逻辑层描述数据库的设计,数据库在视图层也可以有几种模式,通常被称为子模式,它用于描述数据库的不同视图。一般与程序员打交道的是逻辑模式。

4.数据库语言——定义和操作数据

数据库的定义语言DDL与数据库的操作语言DML都是数据库系统的操作语言,他们都是SQL语言的一部分,关系型数据库几乎都使用SQL语言。

4.1 数据定义语言

数据定义语言DDL用来进行数据存储和定义。数据库中的数据必须满足一致性约束,常见的约束有:

  • 域约束。如,整数型、字符型、日期、时间等。
  • 引用完整性。一个course中记录的dept_name必须出现在department关系中某个记录的dept_name属性中。
  • 授权。不同的用户在数据库中的不同数据值上允许不同的访问类型。常见的是,读权限,插入权限、更新权限、删除权限。

DDL的输出会被放在数据字典中,数据字典也包含元数据,也就是关于数据的数据。数据字典可以被看做一种特殊的表,这种表只能有数据库系统本身(不是常规的用户)来访问和修改。在读取和修改实际的数据前,数据库系统先要参考数据字典。

SQL数据定义语言可以参考:

create table department
	(dept_name char(20),
	building char(15),
	bugetn numeric(12,2));

我们还可以加完整性约束,后续文章会详细介绍。

4.2 数据操作语言

DML可以对数据进行访问和操作( 增删改查)。有以下两种类型。

  • 过程化DML(procedural DML),要求用户指定需要什么数据以及如何获得这些数据。
  • 声明式的DML(declarative DML),也被称为非过程化的DML,只要用户指定需要什么数据,而不必指明如何获取这些数据。

声明式的DML通常更加易学易用,由于用户不指明如何获得数据,数据库系统必须要提供一种访问数据的高效途径。

最常用的数据库查询语言SQL是非过程化的。举个栗子,一个常见的SQL查询语句如下。

select instructor.name
from instructor
where instructor.dept_name = 'History';

4.3 从应用程序访问数据库

很显然,sql语句只可以下发给数据库进行数据的访问与操作,对于从用户输入数据,输出到显示器或者网络上等活它不管,需要高级宿主语言比如C、C++,JAVA来完成。高级宿主语言要想和将SQL指令发送给数据库,数据库就必须提供接口。对于C语言等其他几种语言,开放数据库连接(ODBC)标准定义提供了接口,JDBC标准为java语言提供了相应的接口。

5 数据库设计有哪些步骤

数据库的设计需要考虑很多问题,但主要是数据库模式的设计,这里我们将讨论数据库模式的设计和查询语句的编写。 (1)需求确定。数据库设计的初始阶段是和领域专家、数据库用户充分讨论,形成数据库用户需求说明书文档,说明数据库用户的数据需求,以及将怎样构造数据库用户满足这些需求。 (2)概念设计。下一步,设计者要选择一个数据模型,将需求转换成一个数据库的概念模式,形成企业的详细综述,再复审这个模式,确保满足所有的数据需求并且需求之间没有冲突。 从关系模型角度,这个阶段还需要涉及数据库应该包含哪些属性,以及如何组织这些属性到各个表中。前者主要是决策,后者主要是计算机科学问题,解决方法主要有两种,一种是使用实体-联系模型,另一种是使用一套算法,后续我们将详细介绍。 一个开发完整的概念模式还将指出企业的功能需求。也就是用户需要做哪些增删改查,进行复审,确保其满足需求。 (3)逻辑设计。将高层的概念映射到要实现的数据库系统的系统模型上。 (4)物理设计。说明数据库的物理特性,包括文件的组织形式和内部存储特征。

6.数据库引擎——如何存储、查询并保证数据安全

数据库系统大致可以分为以下功能模块:存储管理器、查询处理器和事务管理部件。

数据库的存储管理十分重要,因为企业数据库的大小通常达到数百个gigabyte(千兆字节),甚至达到terabyte(万亿字节)。最大的企业数据库规模达到数个petabyte(千万亿字节)。计算机主存存储不了这么多信息,而且系统奔溃时主存会丢失,因此,信息被存储在磁盘中。从磁盘读取数据速度是很慢的,因此,固态硬盘也被越来越多的应用到了数据库的存储中。

查询处理器也很重要,他简化和促进了用户对数据的访问,使得用户能够获得很高的性能,同时有不必要了解系统实现的物理层细节和负担。

事务处理器同样也很重要,它使应用开发人员能够把一系列的数据库操作当作一个单元来看待,保证数据的安全性。、

传统的数据库引擎是集中式的计算机系统,而现代数据库引擎则非常注重并发数据存储和并发查询处理。

6.1 存储管理器

存储管理器是存储数据,并对应用程序以及向系统提交的查询之间的提供查询接口的部件。它主要负责数据库中数据的存储、检索和更新。

存储管理器部件主要包括。

  • 权限及完整性管理器。检测用户访问权限与数据是否满足一致性约束。
  • 事务管理器。保证即使系统发生了故障,数据库也保持在一致状态。并且保证并发事务的执行不发生冲突。
  • 文件管理器。管理磁盘存储空间的分配,管理用于磁盘上所存储信息的数据结构。
  • 缓冲区管理器。负责将数据从磁盘上取到内存中,并决定哪些数据应该被缓冲存储在内存中。
  • 数据文件(data file)。存储数据库自身。
  • 数据字典(data dictionary)。它存储关于数据库结构的元数据,特别是数据库模式。
  • 索引。更快的访问数据。

6.2 查询处理器

查询处理器包括。

  • DDL解释器。解释DDL并将其记录在数据字典中。
  • DML编译器。翻译DML语句为存储引擎能够理解的低级指令。它还执行查询优化,选出代价最小的执行计划。
  • 查询执行引擎。执行 DML编译器产生的低级指令。

6.3 事务管理

事务的原子性和持久性都是数据库系统的自身职责,确切的说,是恢复管理器的职责。如果事务总能被成功的执行,那么自然可以保证原子性。但是如果一系列的事务不总成功被执行完毕,为了保证原子性,失败的事务不应该对数据库产生任何影响,在这种情况下,数据库系统需要进行故障恢复,也就是它必须检测系统故障并且将数据库恢复到故障发生以前的状态。

另外,当几个事务并发对数据库进行更新时,即使每个单独的事务是正确的,对数据库的一致性也可能被破坏。并发控制管理器控制并发事务间的相互影响。保证数据库的一致性。事务管理器包括并发控制管理器和恢复管理器。

7 数据库的应用体系结构

现在我们终于可以来给出数据库的体系结构图了。

img

上面的数据库体系结构是集中式的。虽然有多个cpu进行并行存储,但是所有cpu都i访问一个公共的共享内存。为了扩展到更大的数据库规模和更高的处理速度,研究人员又设计了包括多台机器的集群上的并行数据库(paraller database)。

8 数据库用户和管理员

8.1 数据库用户和用户界面

数据库系统把用户分成了四种,不同用户访问不同类型的数据库界面。

  • 初学者用户。提供典型的表格界面。
  • 应用程序员,提供工具共应用程序员开发用户界面。
  • 老练用户。不需要编写程序来同系统交互。提供查询语句或者数据分析软件。

8.2 数据库管理员

数据库管理员(Database Adminitrator,DBA)对数据和访问数据的程序进行集中控制。他们的作用包括:

  • 模式定义。通过执行DDL编写一系列定义语句来创建最初的数据库模式。
  • 存储结构及存取方法定义,DBA可以具体说明与数据物理组织及索引创建相关的一些参数。
  • 模式及物理组织的修改。由DBA对模式和物理组织进行修改。以反映机构的需求变化,或者为了提高性能选择不同的物理组织。
  • 数据访问授权。授予不同用户类型的权限。
  • 日常维护。数据库管理员的日常维护工作包括:周期性的备份数据库到远程服务器上,确保在正常运转时有足够的存储空间,适时升级存储空间。监视数据库上运行的作业,并确保数据库性能。

9 数据库系统的历史

数据库最早起源于20世纪初,Herman Hollerith发明穿孔卡片,记录美国人口普查数据,采用机械系统来存储卡片的显示结果。

img

20世纪50年代到60年代初,磁带被开发来数据存储。它只能顺序读取,数据规模可以比内存大很多。

img

20世纪60年代末和70年代初,硬盘广泛用于存储数据。磁盘任何位置都可以在几十毫秒内访问到,数据摆脱了顺序访问的限制。

img

Edgar Codd在1970年撰写了关系模型论文,至此关系型数据库诞生,关系型数据库其简单性和对程序员屏蔽所有实现细节对程序员充满了诱惑力。

20世纪70年代末和80年代。第一个关系型数据库SQL/DS诞生,同一时期,Oracle的第一个版本诞生了。到80年代默契,关系型数据库打败了层级和网状数据库,独占鳌头。

80年代,人们还对分布式和并行数据库有了很多研究。

img

20世纪90年代。数据库最开始设计时时为了支持决策,80年代数据库的支柱却是查询密集、更新密集的事务处理。90年代,数据库决策概念再次大火,数据分析工具有了更加广泛的应用,与此同时,互联网在这一时期爆炸式发展,数据库逐渐要求高性能,高可用,高可靠。

img

21世纪第一个十年。XML发展成数据交换的标准,紧随其后,适用于javascript与其他语言交换数据的格式JSON开始重要起来。数据库系统增加了对这两种格式数据的支持。空间数据在导航等系统广泛应用,数据库系统也增加了对这些数据的支持。

img

开源数据PostSQL和MySQL的使用不断增长,“Auto-admin”特性被加到数据库中,使其能够自动重新配置,以适应不断变化的工作负载。减少了数据库管理的工作。

img

社交网络平台的发展,也促进数据库从表格化到图形数据库的发展。

在第一个十年的后期,数据挖掘应用变得特别普遍,适合数据挖掘市场的数据库系统被开发出来,如“列存储”,将表按列进行存储,而不是按照主流数据库进行行存储。

img

各种各样的新的数据密集型应用以及对快速开发的需求,特别是新兴的公司的需求,导致了"NoSQL"的诞生。NoSQL的数据脱离关系型的严格一致性支持,是的分布式数据库具有更大的灵活性,它的特点是“最终一致性”。

img

21世纪的第二个10年,NoSQL尽管带来了高可用性和可伸缩性,但是渐渐被发现其不一致性使得程序员和数据库管理员的工作越来越复杂,应用系统逐渐演化为提供特性以支持一致性的更加严格的概念,并且继续支持高可用和可伸缩性。

各个企业越来越多的外包他们的数据存储和管理,企业开始把数据存储在“云”服务中。这使企业节约了成本,但是也产生了新的问题,主要输数据安全、责任以及所有权的问题。网络安全面临新的挑战。

img