一、DBMS内核
Parser:编译器,或者说是语法分析器
Grant checking:授权检查器,用来检查特定用户的权限问题
Semantic analysis and query treatment ( DDL QL DML DCL ):语义分析和查询处理,核心中的核心,SQL语句的功能实现
Access management:访问管理,将表和文件进行映射
Concurrency control:并发控制
Recovery mechanism:恢复机制
二、DBMS的进程结构
1、单进程结构,Single process structure
2、多进程结构,Multi processes structure
一个应用进程对应一个DBMS核心进程,每当一个应用进程需要访问数据库的时候,就会发起一个连接请求,系统就会生成一个DBMS核心进程,并创建管道进行交互。
3、多线程结构,Multi threads structure
在操作系统中创建进程需要消耗大量的系统资源,如果使用多进程结构,每次对新的应用程序都创建一个新的DBMS核心进程,那么操作系统的资源将会很快耗尽。这里,可以使用多线程结构来进行优化。线程可以看成一个轻量级的进程,一个进程里可以包含多个线程,每个线程消耗的系统资源要比进程少很多。
同一个进程中的多个线程共享进程的数据,在DBMS核心进程中有如下的共享内容:
DAEMON:用来监听来自应用程序的请求,对每个新的应用程序的连接请求建立一个线程;
catalog:目录,记录数据库中表的信息;
lock table:锁表,在并发控制的时候发挥作用;
buffer:缓冲区;
三、Database Access Management
数据库访问管理所要做的是将对数据库的访问转换成操作系统中的文件对象的访问。数据库访问管理,也就是物理层上的文件结构定义和文件的存取路径将会直接影响数据库的查询速度。没有一种文件结构是可以一劳永逸的,所以我们需要考虑一下几个问题:
1)访问类型,Access Types
Query all or most records of a file (>15%):查询的元组数量占文件的15%以上,我们就认为是这种类型,一般这种大量查询可以使用堆文件进行存储;
Query some special record
Query some records (<15%)
Scope query:范围查询
Update
2)文件存储结构,File Organization
堆文件:顺序扫描进行查询,适合查询超过15%的查询操作
Hash文件:查询效率高,适合查询特殊查询操作
索引文件:堆文件 and B+树索引,适用面最广,也最常用
动态Hash:映射空间随着数据量的大小进行改变
Raw disk:注意文件的逻辑顺序和物理顺序是两个概念,一般来说,物理顺序是由操作系统控制的。使用Raw disk可以自己确定文件在磁盘的存储位置,一次申请连续存储空间,按属性值连续存储,也被称为Clustering index,簇集索引。
3)索引技术
四、查询优化
关系型数据库在刚提出的时候是遭到反对的,因为使用关系型数据库在查询的时候效率很低,比如一个10000条元组的表和50000条元组的表进行连接,那么就会产生5亿条元组,这是不可接受的。但是,为什么现在关系型数据库成为了主流呢?因为其查询优化技术有了长足的发展。
查询优化会将用户的SQL语言进行重写,生成效率更高的查询语言进行查询,其根本目标就是使用尽量少的资源,尽量快的将查询结果返回给用户。
可以分为两步优化:Algebra Optimization(代数优化,就是重写);Operation Optimization(操作优化)
举个例子:计算x^2 + 2xy + y^2,可以先进行代数优化将之转换成等价的(x+y)^2,所谓操作优化就是选择合适的加法和乘法实现方式。
代数优化的基本目标是对用户的查询操作进行改写,将之生成更优的形式。基本原则是将一元操作尽可能的向下压;寻找合并公共子表达式。
操作优化的目标是将每个操作如投影,连接操作等如何选择更好的算法进行实现。下面以连接运算为例。
连接操作的方法一:嵌套循环,算法复杂度为O(nm)。
连接操作的方法二:归并扫描,前提按照连接属性的值进行了外排序。
连接操作的方法三:基于B+索引的循环,通过B+树进行查找,而不用单纯遍历。
四、恢复机制
数据库的恢复机制指:预防数据库出现差错;发生故障后,可以进行恢复,将数据库变为稳定的状态。
恢复机制有两个基本的原则:冗余是必须的,也就是要进行必要的备份工作;能够预测所有的可能故障情况。
恢复机制的实现方法:
1) Periodical dumping
Periodical dumping:每隔一段时间将整个数据库备份一次。
这种方法有一个缺点就是完整备份数据库不可能经常进行,这样在两次备份中出现差错会导致中间很多的更新操作的丢失。
解决方法很简单,就是在间断性备份的基础上加上增量备份 Backup + Incremental dumping。由于增量的数据量较少,可以较多次的进行备份操作。虽然依然存在丢失更新,但是由于间隔短,所以丢失的内容较少。早期使用,适合小型的数据库。
2)Backup + Log
备份加日志,所谓日志,其实就是流水帐,记录备份一来,用户对数据库做的所有改变。不会产生丢失更新的问题。
五、事务处理机制
对数据库的操作是以事务为单位进行运行的,如果没有显示的指明Transaction,则默认每条SQL为一个事务。
一个事务(Transaction)就是一组SQL语句,具有如下特性ACID:
一致性(Consistent):事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构(如 B 树索引或双向链表)都必须是正确的;
隔离性(Insulation):同时运行的事务不能相互干扰;
六、并发控制
并发是指在多用户数据库管理系统里,允许多个事务同时对数据库进行访问。
支持并发的好处:提高系统的利用率和减少响应时间;由于事务很有可能访问数据库的不同内容,所以并发会极大的提高效率。
1)并发中可能会出现的三种冲突
2)可串行化理论
可串行化理论是用来判别并行运算的结果是否正确的依据。并发控制的目标就是并发结果是可串行化的。
可串行化是指 {T 1 ,T 2 ,…T n }这n个事务的并发结果如果和其串行运行结果的其中一个相等(n!中的任意一个),那么我们就认为,这次的并发执行的结果是正确的。
3)封锁法
加锁机制是最常见的并发控制策略,其核心思想就是:在并发的事务对数据库中数据进行访问的时候需要提前加锁,如果是没有冲突的话,那么各自锁上自己占用的资源,如果产生了冲突,那么就按照先抢到锁的先运行的方法来执行,其实就是一种通过锁机制强行串行化的方法,从而保证并发结果是可串行化的。
(a)X locks
系统中只有一种锁,就是排他锁,事务对数据的读或写都要申请排他锁。
定理:并行调度是Well-formed + 2PL,则可证明其并行结果是可串行化的。
(well-formed:每个事务都很守规矩,即每次读写数据前都会先申请锁)
(2PL:事务在读写数据前会先统一进行申请锁,最后再统一释放锁,也就是说在释放锁资源后不再继续申请锁)
(b)(S,X) locks
我们知道,多个事务同时读一个数据是没有冲突的,所以如果只是单纯的排他锁的话,系统的效率就会很低。为了进一步提高效率,提出了(S,X) locks。
S locks:读操作申请
X locks:写操作申请
(c)(S,U,X) locks
我们知道,在更新操作的时候,很多情况下是先把数据读取出来再对对其修改,最后写回。我们可以在写回前定义一个U锁,在写回的时候再升级成X锁。也就是见缝插针,尽量推迟X锁的加锁时间,在update期间允许读操作,可以进一步提高效率。
4)死锁和活锁
死锁(Dead lock):多个并发运行的事务之间出现循环等待,即每个事务拥有部分锁资源,又渴望获得对方的锁资源,导致任何一个事务都没法获得全部资源来完成整个事务,称为死锁。
例如下面的例子,Ta申请了R1的锁,Tb申请了R2的锁,这两者是没有冲突的,你申请你的,我申请我的。之后Ta又申请了R2的锁,Tb又申请了R1的锁,这个时候就很尴尬了,因为两者都会进入等待,等待自己的锁被释放,于是进入了循环等待,两个事务都没法获得全部的资源。
活锁(Live Lock):尽管其他事务都在有限长的时间内获得了锁资源,但是由于系统调度的问题,某个事务等待了很久依然没有获得该资源,称为活锁。
例如下面的例子,对于数据R,T1,T2申请得到了S锁,进行读操作,这时T来申请X锁,发现有S锁,于是进行等待,之后又有T3,T4...来进行读操作,根据定义可以继续申请到S锁,这样T在下一次重新申请的时候依然会发现R上还是有S锁,又要继续等待,这就称为活锁,也被称为饿死现象。
解决方案:
对于活锁,解决方案比较简单,可以采用FIFO,先进先出的调度方案来进行解决。
对于死锁,有两类解决方案,如下。
(1) Solving(permit it occurs, but can solve it)
(2) Prevention(don’t let it occur)
数据库原理及应用-数据库管理系统 DBMS
标签:多个 关系 direct record 好的 时间设置 程序 统一 设置
小编还为您整理了以下内容,可能对您也有帮助:
什么是数据库管理系统(DBMS)?它有什么功能?
数据库管理系统(database management system)是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称dbms。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。用户通过dbms访问数据库中的数据,数据库管理员也通过dbms进行数据库的维护工作。它可使多个应用程序和用户用不同的方法在同时或不同时刻去建立,修改和询问数据库。DBMS提供数据定义语言DDL(Data Definition Language)与数据操作语言DML(Data Manipulation Language),供用户定义数据库的模式结构与权限约束,实现对数据的追加、删除等操作。
数据库管理系统的功能:
1、数据定义功能 2、数据操纵功能 3、数据库的运行管理功能 4、数据库的建立和维护功能(数据的安全性保护、数据的完整性控制、并发控制、数据库恢复)
什么是数据库管理系统(DBMS)?它有什么功能?
数据库管理系统(英语:database management system,缩写:DBMS)即数据库管理软件,是一种针对对象数据库,为管理数据库而设计的大型计算机软件管理系统。
具有代表性的数据管理系统有:Oracle、Microsoft SQL Server、Access、MySQL及PostgreSQL等。通常数据库管理师会使用数据库管理系统来创建数据库系统。
现代DBMS使用不同的数据库模型追踪实体、属性和关系。在个人计算机、大型计算机和主机上应用最广泛的数据库管理系统是关系型DBMS(relational DBMS)。在关系型数据模型中,用二维表格表示数据库中的数据。这些表格称为关系。
扩展资料:
数据库管理系统是一套计算机程序,以控制数据库的分类及数据的访问。一套数据库包括模型语言、最优化的数据结构、查询语言撰写报表程序以及交易机制:
1、模型语言。
用以因应该数据库管理系统的数据模型,来定义各数据库的schema。最常用的三大类分别为层次结构式、网络式及关系式的模型。一个数据库管理系统可提供一种、两种,甚至全部三种方式,也可能提供其他形式。
最适合的模型要视乎个别应用程序、交易进行比率及查询经常使用的程度等。现时最常使用的则是SQL所支持,相似于关系式模型但又有些微违背的方式。很多数据库管理系统也支持ODBC,以支持程序编写员以标准方法访问该数据库管理系统。
2、最优化的数据结构(字段、纪录及文件)。
以支持在永久存储设备(permanent data storage device,即比主存(volatile main memory)慢得多)上存储极大量的数据。
3、查询语言及撰写报表的程序。
让用户可以交互方式查问数据库,进行数据分析及依用户的权限来更新数据。
它必须控制数据的保安,以防止不获授权的用户观看甚至更新数据库的数据。用户可以提供有效的密码来访问整个数据库或其中一部分。譬如员工数据库包括所有员工数据的数据,但某组用户可能只被批准查看薪金相关的数据,其他的又可能只可以访问工作履历及病历数据。
如果该数据库管理系统向用户提供可输入更新数据库甚至进行查询的交互途径,则此能力可以用来管理个人的数据库。可是,它不一定提供审核或其他在多用户环境中所需要的各种控制机制。这些机制可能要整套应用程序都为数据输入或更新而修改才能提供。
4、交易机制(最好可以保证ACID特性)。
在多用户同时访问之下仍维持数据完整性(data integrity),与及提供故障排除(fault tolerance)。
数据库管理系统依靠不容许超过一名用户在同一时间更新同一项纪录来维持数据库的完整性。数据库管理系统可以用唯一索引来避免重复纪录。譬如不能有两位顾客有同一个顾客编号(主键)在数据库中存在。
参考资料来源:百度百科——数据库管理系统
数据库原理及应用
数据库原理是按照数据结构来组织、存储和管理数据的仓库,二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。应用在管理信息系统、办公自动化系统、决策支持系统等各类信息系统。
数据库系统(database systems),是由数据库及其管理软件组成的系统。它是为适应数据处理的需要而发展起来的一种较为理想的数据处理的核心机构。它是一个实际可运行的存储、维护和应用系统提供数据的软件系统,是存储介质、处理对象和管理系统的集合体。
数据库特点
数据的结构化,数据的共享性好,数据的性好,数据存储粒度小,数据管理系统,为用户提供了友好的接口。数据库系统的核心和基础,是数据模型,现有的数据库系统均是基于某种数据模型的。数据库系统的核心是数据库管理系统。
数据库系统一般由数据库、数据库管理系统(DBMS)、应用系统、数据库管理员和用户构成。DBMS是数据库系统的基础和核心。
什么是DBMS?主要功能有那些?
dbms是一个数据库管理系统,它由以下几个模块组成
1.数据定义
有DDL翻译处理程序(包括外模式、模式、存储模式处理程序)、保密定义处理程序(如授权定义处理程序)、完整性约束定义处理程序等。这些程序接收相应的定义,进行语法、语义检查,把它们翻译为内部格式存储在数据字典中。DDL翻译程序还根据模式定义负责建立数据库的框架(即形成一个空库),等待装入数据。
2.数据操纵
有DML处理程序、终端查询语言解释程序、数据存取程序、数据更新程序等。DML处理程序或终端查询语言解释程序对用户数据操纵请求进行语法、语义检查,有数据存取或更新程序完成对数据库的存取操作。
3.数据库运行管理
有系统初启程序,负责初始化DBMS,建立DBMS的系统缓冲区,系统工作区,打开数据字典等等。还有安全性控制,完整性检查、并发控制、事务管理、运行日志管理等程序模块,在数据库运行过程中监视着对数据库的所有操作,控制管理数据库资源,处理多用户的并发操作等。它们一方面保证用户事务的正常运行及其原子性,一方面保证数据库的安全性和完整性。
4.数据库组织、存储和管理
有文件读写与维护程序、存取路径(如索引)管理程序、缓冲区管理程序(包括缓冲区读、写、淘汰模块),这些程序负责维护数据库的数据和存取路径,提供有效的存取方法。
5.数据库建立、维护和其他