关系数据库的实现
来源:互联网 发布:滴滴架构 知乎 编辑:程序博客网 时间:2024/06/08 07:53
一:RDBMS系统查询处理的一般过程
当用户输入一个查询SQl语句时,SQL语句首先回送到解析器,进行解析和编译处理。编译后的查询接着送到查询优化器,优化器将利用数据库存储信息产生一个高效可可执行计划,来决定具体是从索引还是文件扫描取数据,可执行计划被表示为关系代数操作符树的形式——树中的每个节点通常对应一个具体的关系操作符。通过调用下层的计划执行器即可完成查询赋值,得到结果。
二:数据的存储与组织管理
磁盘管理器:
在DBMS体系结构中,大多数的商用数据库采用磁盘空间管理器实现底层磁盘空间的管理,磁盘空间管理器隐藏了底层硬件与OS文件系统(一般大型DB会让OS分配一个大的OS文件,系统自己管理此文件;小型的系统如嵌入式系统可以使用OS文件系统)的细节,以页为单位代替块为单位实现数据的存储。BD中的文件记录(如一个关系表)可以存储在若干个不同的页中,每个页可以存储多个记录,一个大的记录也可占用多个页。
文件的页组织形式:
在关系数据库中关系表、索引等都是一个个的文件组织的,文件所包含的页可以有如下几种组织形式:
堆文件:堆文件是一个无序文件,文件中每个页的大小相同,由于堆文件是无序的,所以只能反复取下一个记录的方式来取出文件中的所以记录。堆文件中每个记录有一个唯一的标示rid。堆文件组织一般依据页链表或页目录实现。
排序文件:为实现按搜索键排序记录集而设计。为实现按搜索键快速获取记录,DB系统一般用指针把记录连接起来。
索引文件:索引一般用于帮助查找满足条件的记录的一种辅助数据结构。从实现观点看,索引是一种特殊的类型的记录文件。
页的记录标示格式
页中的记录可以采用定长记录或变长记录
记录的表示格式
一般每个记录除了存储字段信息外还有一个记录的首部,用了存储记录层次的一般管理信息,包括记录长度、时间戳、指向记录模式的指针。
缓冲区管理
缓冲区管理主要用于管理缓冲区,缓冲区的置换策略有LRU:最近最久未使用的替换,FIFO:选择最早的替换,MRU:置换策略与LRU相同。
三 数据库索引技术
索引技术主要有:顺序索引,B+树索引,散列索引,位图索引,多维空间索引。
四 关系操作符赋值与查询优化
查询处理的一般过程:
查询优化器会列根据直接扫描或是根据索引,列举出可执行的计划方案,然后根据计划代价评估选出代价最小的计划。查询执行器根据计划方案对关系操作符进行赋值。
五 事务的并发控制
事务:是DBMS中一个科执行的,具有一定偏序的动作序列。
事务调度:指对一组来自多个不同的事务动作执行流的一种偏序序列的安排。分为串行调度与非串行调度。
可串行化调度:当一个包含一组提交事务的调度S执行时,如果对任何一致性DB造成的影响,与某个包含同组事务的串行调度相同,就程S是可串行化的调度。
交替的执行不同事务的动作,是DBMS并发响应多用户请求,提高系统性能的必然要求;一般DBMS必须能确保只允许可串行化和可恢复的调度,以及在撤销事务时,不会导致已提交事务的动作丢失。为实现此目标一般使用基于封锁的并发控制或基于优化的并发控制。
基于封锁的并行控制:DBMS跟踪管理事务封锁请求的部分是锁管理器。所管理器维护一个锁表,锁表是一个以DB元素作为键值的散列表,每个表项包含对应DB元素当前的封锁模式、持有当前锁的事务计数和等待锁的事务指针队列。同时还维护一个事务表,每个事务在该表中占一个描述表项,包含了一个事务目前持有的锁的元素列表。
锁包括两阶段封锁协议与拓展的锁协议。
拓展的封锁协议主要有B+树封锁方法的树协议,和多粒度封锁。
基于优化的并发控制:基于封锁的协议时一个悲观保守的协议,基于优化的是一种乐观的协议,即认为绝大部分不会有冲突发生。基于优化的方法主要有基于有效确认和基于时间戳。
SQL事务的基本特征
每个DBMS事务有三个基本特征,即存取模式,诊断大小,孤立级。
孤立级即事务的级别有四个级别:未提交的读、提交的读、可重复的读、可串行化。
- 关系数据库的实现
- JAVA实现关系数据库的翻页
- 一种关系数据库实现的Tree数据结构
- 一种关系数据库实现的Tree数据结构
- 数据库实现同数据结构的关系
- ECMALL数据库关系模型的实现
- 关系数据库实现的一些基本技术
- 数据库设计实现严格的一对一关系
- 关系数据库关系的完整性
- 利用ODBC实现Domino和关系数据库的互操作
- JAVA实现关系数据库的翻页(转)
- JAVA实现关系数据库的翻页 by masse@CSDN:
- 利用ODBC实现Domino和关系数据库的互操作
- 数据库模型设计——关系的实现
- ecmall 数据库关系模型的实现2
- 数据库模型设计——关系的实现
- 关于一个关系型数据库的实现原理参考
- 关系型数据库管理系统:事务处理Durability(持久性)的实现
- 导出Android应用程序数据库。
- Geeks面试题: Longest Palindromic Subsequence
- 无法定位程序输入点FlsGetValue于动态链接库KERNEL32.dll
- 使用Java操作LDAP案例
- 让IO7下的table cell从最左边开始
- 关系数据库的实现
- Oracle的备份操作
- VisualNet图形化的电力综合布线管理系统的应用实例展示
- 人生顿悟之那绝不是人脉
- linux系统监控工具之top命令详解
- 为什么有时类的析构函数要定义为protected呢?
- mac系统下发布qt第三方的应用程序(opencv)
- flex socket.readObject() //flex读取java服务器端发送过来的对象
- Windbg内核调试下调试应用层