沈阳网站制作公司,两学一做网站 新闻,合肥大建设,山东诚祥建设集团公司网站文章目录6 数据库管理系统6.1 数据库管理系统结构简介6.2 进程结构6.2.1 进程的分类6.2.2 线程的由来6.2.3 建立进程的过程6.3 数据目录6 数据库管理系统
6.1 数据库管理系统结构简介
数据库管理系统DBMS是数据库系统的核心。而目前市场上我们接触到的商品化DBMS大多数是关系…
文章目录6 数据库管理系统6.1 数据库管理系统结构简介6.2 进程结构6.2.1 进程的分类6.2.2 线程的由来6.2.3 建立进程的过程6.3 数据目录6 数据库管理系统
6.1 数据库管理系统结构简介
数据库管理系统DBMS是数据库系统的核心。而目前市场上我们接触到的商品化DBMS大多数是关系型DBMS简称RDBMS小部分为对象关系型DBMS简称ORDBMS。
我们来看一下解释执行的RDBMS结构如下所示 如果有学过操作系统的同学对这种结构实际上很熟悉其中红色框框部分的内容很像是操作系统。而操作系统对外提供一层自底向上的接口同样地数据库也是如此。
DMBS提供给用户许多接口这些接口有交互式接口、嵌入式接口、自然语言查询接口等诸多种类比较大的分类即为UFI即席访问即交互式接口和API。目前比较流行API的就有JDBC、ODBC等。某些程序在代码中使用到了上述的接口当连接数据库时数据库会将程序中使用到接口的代码抽取出对应的数据库语句然后转换为一种最基本的数据库语言如SQL。
当SQL被抽取出来时首先DBMS会先检查该SQL的访问权限检查该用户是否有权访问语法树中所涉及的数据对象。如果授权通过则继续执行如果不通过则驳回访问。如应用中SQL语句要求连接数据库检查某张表如果该用户没有权限访问这张表则驳回请求。
结果以上的操作后SQL语句就进入语法树进行语义分析和处理。不同类型的SQL语句对应做出不同的处理。对于DDL来说要考虑存储路径存储方式等问题对于DQL来说要考虑查询效率等问题除此之外一些并发控制和恢复机制也需要关注。
在每个过程中每一层都会给上一层提供一个原子操作即原语如果在这里你不知道是什么也不影响这是操作系统中的知识。
在以上的叙述中我们一直处于物理层外当进入操作系统时就进入物理层内了。
DBMS实际上是建立在操作系统之上的软件系统是操作系统的用户。在操作系统中我们知道计算机中的硬件和软件包括资源都是由操作系统来管理的。如果DBMS想要访问磁盘就必须要通过系统调用来请求操作系统为自己服务。 系统调用 系统调用实际上是指当软件涉及到对资源或处理器上的请求时就必须请求操作系统来帮忙解决而这个请求的方式我们就叫系统调用。 如果DBMS想要访问硬盘资源当请求操作系统后操作系统会取来物理块为其访问所以物理块中解释的工作就是DBMS自己干了。 物理块 物理块是磁盘结构你可以理解为一个磁盘是由许多物理块构成的一个物理块能存放固定大小的资源在后面我们会详细讲述磁盘的结构现在先这样记住即可。 在这里要说明的是单纯从SQL的逻辑来讲并发控制和恢复并不是每个数据库系统都必须的只有在大型商业的多用户访问数据库才是必须的。
6.2 进程结构
同样的DBMS是以进程为单位在操作系统之上运行的系统软件。DBMS的进程通常分为两类前台进程和后台进程。
6.2.1 进程的分类
专为单个事务服务的DBMS核心进程也被称为前台进程
每个事务都有一个与之对应的DBMS的核心进程它是事务的执行者并代表事务与用户和系统对话。由于DBMS核心进程可以和用户直接对话所以我们一般也叫他前台进程。 事务是什么我们后面会讲述现在通俗地理解就是事务就是多个操作共同完成一件事。 为公共服务的后台进程
后台进程无法和用户直接对话而由DBMS调用。一般我们将一些公共操作或事务无法承担的操作由后台进程来执行如写入数据库后更新后的内容一般交给事务提交后执行、预先读取可能用到的物理块、异常结束事务的善后处理等。
前台进程由于是为事务服务所以寿命和事务一样而后台进程是常驻进程。一般不影响事务的提交其执行时间由系统掌控如在适当时间成批写入数据库的更新内容。 前台进程和后台进程在windows上的理解你可以理解为前台进程就是听歌后台进程就是你打开任务管理器然后发现后台莫名其妙多了几个和你听歌无关却随着你听歌开起的进程。 DBMS进程的通信方式如下所示我们这里也稍作讲解
不管我们用什么语言写的软件当我们要调用数据库时应用开启作为一个进程调用数据库数据库也会创建一个核心进程创建完成后DBMS就会为这两个进程之间构建一个通讯的管道在操作系统中我们有一个pipe它是单向的通讯机制所以如果要实行双向通讯机制的话我们就要再创建一个管道。这样的话一个作为写管道一个作为读管道。如图 管道通信要求当管道中的数据写满才能取走取空才能继续写入。当未写满数据时就要去取管道的数据时进程会堵塞。
6.2.2 线程的由来
进程是有缺点的对于进程来说其创建、撤销、切换、通信的开销都较大而且由于CPU的处理能力和内存空间的限制计算机系统可并发运行的进程数是有限制的如果是一个单核CPU只能并行地运行一个进程。但是如果并发的进程数过多则进程切换频繁、系统开销增大处理效率反而下降。操作系统一般设有并发度的限制并且做为上限。
最后一点是进程不利于事务共享内存空间。从以上的叙述我们可以知道应用和进程是单连接的也就是说进程是有各自的独立内存空间受操作系统保护不能访问彼此的内存空间。 进程创建删除开销大的原因在于创建进程时要在进程表中填入一条元组这条元组在操作系统中我们称其为进程控制块PCB。对于进程撤销时要将PCB从进程表中删除。 进程切换开销大的原因在于在操作系统中存在虚拟内存技术对于固定内存来说其电脑运行的程序内存往往大于运行内存。而之所以能够如此是因为其能通过对程序的切割将程序所需的部分置于内存而程序暂时不需要的部分置于磁盘而内存中如果马上需要磁盘部分的应用数据就需要通过一种叫做MMU存储管理单元来查找所在位置。如果你频繁切换进程那就要导致操作系统每次都要修改MMU这种修改操作在操作系统中被称为上下文切换代价非常昂贵。 进程通信开销大的原因在于对于DBMS来说其使用管道通信的方式管道通信根据我们上面所说其必须写满才能取取空才能写这实际上是一种互斥的方式效率非常慢。 在DBMS中不利于事务共享是十分不利的因为DBMS中同一个数据可能在很多位置有用到比如一条元组就有可能同时被数据字典、缓冲区、锁表等同时记录。 还有就是并发和并行的区别。并发是指同一时间下CPU以极快的速度轮流为各进程服务造成“同时”服务的假象而并行是指同一时间下多个CPU分别为多个进程服务是真正意义上的”同时“。 基于上面所说在现代操作系统中实际上允许我们在进程之内开辟线程用线程来作为并发运行的基本调度单位。
你可以理解为线程就像一条大电缆你剁开里面可以看到很多小电缆。
在很久以前还没有引入进程之前系统中的各个程序只能串行执行。比如你想要边听歌边开QQ这是不可能做到的只能先做一件事再做一件事。
后来引入进程后系统中的各个程序可以并发执行。也就是说可以同时听歌和开QQ。但是即使引入了进程也不能在QQ中同时视频聊天和传输文件。这是因为操作系统每一次执行都是按照进程为单位来执行的。
从上面的例子来看进程是程序的一次执行。但是这些功能显然不可能是由一个程序顺序处理就能实现的。
有的进程可能需要“同时做很多事”而传统的进程只能串行地执行一系列程序。为此引入了线程来提高并发度。
在传统中进程是程序执行流的最小单位也就是说CPU每次执行任务最少执行一个进程。而后在现在CPU每次执行任务最少执行一个线程线程是进程的子集。也就是说引入线程后线程成为了程序执行流的最小单位。
综上所述我们可以把线程理解为“轻量级进程”。线程是一个基本的CPU执行单元也是程序执行流的最小单位。引入线程之后不仅是进程之间可以并发进程内的各线程之间也可以并发从而进一步提升了系统的并发度使得一个进程内也可以并发处理各种任务如QQ视频、文字聊天、传文件。引入线程后进程只作为除CPU之外的系统资源的分配单元如打印机、内存地址空间等都是分配给进程的。
综上所述我们可以总结出下面几点
线程的主要资源来源于进程属于线程本身的专用资源很少。描述线程的状态表TCB要比进程的状态表PCB容易的多。线程之间可以通过内存通信。线程切换的开销要比进程切换低的多甚至不需要通过操作系统。
当我们开启DBMS的进程后DBMS会立马初始化这个进程然后出现以下的东西 Daemon线程 起一个监控的作用他会监视应用程序访问数据库的一些请求。比如我们和SQL的ip地址和端口号连接的时候Daemon线程就在监视是否连接成功。 catalogue目录 他是一种原数据我们存储在数据库的数据提炼的大纲数据就是目录。比如我们写select* from emp;数据库如何查看有无这张表就是通过目录去查找。 封锁表 用来控制对锁的申请他是一个公共的资源 buffer缓冲区 内存的缓冲
6.2.3 建立进程的过程
DBMS建立进程的过程如下图所示 假如我们现在有一个应用程序如果其想要连接数据库它可以通过某种接口连接拿Java写的应用程序举例其用的就是JDBC通过connect方法视图连接数据库时Daemon就会捕获连接请求从而为这个应用程序对应的进程建立一个相应的DBMS核心进程并在两个进程之间建立一条用于进程通信的管道。建立完成后后面的过程就如同我们在6.1所讲结果操作后数据库把结果通过管道传回应用程序。
Daemon线程实际上在这个过程中扮演着监听的角色一旦两个进程建立管道后其就会消失等待下一个应用程序的进程来连接数据库。
6.3 数据目录
数据目录是一组关于数据的数据也叫元数据。在高级程序设计语言中程序中的数据一般容易失效一个变量在函数用完就会被回收。而在DBMS的任务是管理大量的、共享的、持久数据。有关数据的定义和描述必须长期保存在系统中一般把这些元数据组成若干表称为数据目录由系统管理和使用。
数据目录会在初始化数据库的时候由系统自动生成。数据目录是被频繁访问的数据同时也是十分重要的数据数据目录没有建立的时候任何SQL无法查询无法生效所以数据目录影响全局。一般DBMS不会让你更新数据目录DBMS会自动帮你更新他只允许你查询就够了。