第四课补充01——数据库系统的立体视图

数据库系统架构

一、数据库系统的分类:面向对象型、关系型、对象关系型

1、面向对象型数据库(OODBS)

(1)面向对象型数据库系统是一种持久的、可共享对象库的存储器和管理器;是基于OO的思想,因此这类数据库也有封装、类、类层次等概念

(2)目前流行的开源面向对象数据库:DB4O

2、关系型数据库(RDBMS)

(1)关系型数据库基于表的特性,方便用户使用查询语言SQL进行增删改查,目前流行的主流开源产品是MySQL

3、对象关系型数据库

(1)这个概念里保留了关系型数据库的结构,但允许关系表里中的列含有一个复杂的对象,这些对象能够捆绑处理复杂数据的处理过程(一种存储过程),并且SQL能够允许调用与关系型同等的“对象方法”。

(2)目前主流的数据库厂商或多或少都支持了部分面向对象的概念,在Mysql里也引入了OpenGIS(开放的地理数据互操作规范)的支持。

二、关系型数据库的系统架构

1、数据库管理系统和操作系统有很多类似的地方,例如:

(1)支持大量的用户同时读写一份数据(表),这需要合理的处理并发情况=====================》采用缓存技术(buffer)才能提供大并发量下的快速访问。并发访问要求数据库系统的内存管理系统采用类似操作系统的虚拟内存管理方式和算法。

(2)数据库管理系统的网络方面==========》网络协议被设计成能够高速解析客户端的查询

2、DBMS的基本功能模块

(1)网络客户端连接
(1.1)客户端连接到DBMS有两种方式,一种是通过通信方式,另一种是通过接口连接,接口方式连接到DBMS的,数据库系统已经成为应用系统一部分,即称为嵌入式数据库系统。
(1.2)网络通信方式连接到DBMS的,一般采用通用的连接器:例如,ODBC  JDBC .NET等连接。
(1.3)不管是网络通信方式,还是接口直连内嵌式数据库系统,应用程序客户端都要发送SQL命令(查询语句或预处理语句)到数据库系统,获取命令的执行结果集,解析和处理结果集,最后展示给用户。
(2)SQL解析和优化(Parser+Optimizer)
(2.1)SQL接口——SQL处理——SQL优化——SQL执行
(2.2)查询接口也就是SQL接口(SQL Interface),接收SQL语句
(2.3)SQL语句处理,包括:语句合法性检查——语义检查——获得对象解析锁——数据访问权限的核对,这四个步骤。其中:
        (2.3.1)语句合法性检查:在高速缓存里找不到对应的SQL语句时,才开始检查SQL的合法性。语法检查的过程中,不会对SQL语句中包含            的表名、列表做解析,仅仅是语法上的检查;
        (2.3.2)语义检查:SQL符合语法后,接着对语义检查,也就是对语句中的字段、表等内容做检查,确定字段、表是否在数据库里。如果语法和语义同时有错误,系统会先提示语法错误,等语法完全正确后再提示说列名或表名错误。
        (2.3.3)获得对象解析锁:数据库的主要任务之一是:保证大量并发情况下的数据完整性,当语法和语义都正确后,系统会对我们需要查询的对象加锁,这主要是为了保证数据的一致性,防止查询过程中,其他用户对这个对象结构做改变。
        (2.3.4)数据访问权限的核对:语法和语义检查后,服务器还会做权限核对,如果连接服务器的用户不具有数据库访问权限,客户端就不能够获取这些数据。需要注意:数据库服务器是先进行语法和语义检查,然后才检查访问权限。
(2.4)SQL优化:数据库查询优化器(Optimize)是RDBMS服务器的一个组成部分,查询优化器的任务是:通过产生可供选择的执行计划,找到最低估算开销的执行计划,来优化一条SQL语句。当一条SQL被送入RDBMS服务器后,将会别解析并提交给数据库查询优化器。查询优化器将会进行查询重写和表达式评估,以产生可供选择的执行计划。产生可供选择的执行计划的数量,取决于RDBMS中定义的计划空间的大小
(2.5)SQL执行:大部分关系型数据库服务器进程在接到客户端SQL后,不会直接去数据库查询,而是先在数据库的高速缓存中查找,是否存在相同语句的执行计划。如果在数据库高速缓存中,刚好有其他人使用这个查询语句的话,服务器进程会直接把这个数据传递给客户端,省去后续工作。

因此,采用高速数据缓存且命中率较高的情况下,可以提高SQL语句的查询效率,一方面是从内存中读取数据比从硬盘中的数据文件读取效率高;另一方面,也是因为这个语句解析的原因。

(3)存储引擎
三级结构对数据库的组织从内到外分三个层次描述:内模式、概念模式、外模式。内模式是真正存储数据的,概念模式和外模式仅是一种逻辑表示数据的方法,但却可以放心大胆使用它们,这是靠DBMS的映射功能实现的。
查询优化和查询解析实现了概念模式的功能,然而对数据库数据的访问归根到底是需要访问磁盘上的物理文件的。

MySQL数据库系统

在功能上,MySQL是基于组件的模块化设计,事实上,MySQL架构既不是严格基于组件也不是真正的模块化.。从严格意义上来说,MySQL系统是基于函数库和数据结构的方式来整合代码。

MySQL子系统和核心库

MySQL包含以下子系统和核心库:

——网络连接和网络通信协议子系统(TCP/IP协议,该子系统为其他子系统提供数据包的读 写 解析和发送)

——线程、进程和内存分配子系统(线程子系统跟踪各类线程以保证当客户端发送请求过来时,服务器拥有线程来处理它)

——查询解析和查询优化子系统

——存储引擎接口子系统

——各类存储引擎子系统

——安全管理子系统(数据库系统抵御外部攻击的第一防线,依赖用户验证和访问权限控制来保护服务器)

——日志子系统

——其他子系统,例如复制功能,错误处理等

——mysys核心库文件

(1)子系统之间的联系,例子:一个客户端通过网络连接MySQL服务器,做SQL查询操作等,子系统协作过程:
(1.1)网络连接子系统执行一系列与网络协议有关的底层任务;

(1.2)网络连接子系统调用线程子系统,线程系统提供一个线程来处理该连接,这个线程就称为连接线程(连接线程可能来自线程缓存thread cache,也可能是新创建的);

(1.3)连接线程:
        (1.3.1)首先调用安全管理子系统来验证用户访问的合法性(用户是否有权限访问数据库、密码是否正确等):
        (1.3.2)连接线程确认连接合法后,将获得的数据(SQL语句)根据情况做分发,如果查询和上次查询一模一样,直接从query cache中取值;如果不能直接利用缓存获取查询,则会调用解析子系统对SQL语句进行解析。同时,如果配置了日志功能,还会调用日志系统去记录此次信息(SQL语句、执行时间、执行的用户等);
        (1.3.3)解析子系统将解析结果传给优化子系统,优化SQL语句。同时,涉及到一个安全问题:用户是否有权访问特点的表?这里将再次调用安全管理子系统,确认权限后才可以对表进行操作。
(1.4)对表进行操作,将一系列请求发往存储引擎接口子系统。发往子系统的请求可以认为是增删改查等SQL操作
        (1.4.1)存储引擎接口子系统将一系列请求自动转化为某个具体的存储引擎子系统方法(例如,innodb存储引擎子系统)。所谓自动,其实就是面向对象编程里的多态。简单来说,调用者感觉在和接口子系统互动,但实际上处理的却是某个具体存储子系统,例如innodb存储引擎子系统。
        (1.4.2)顺利的话,响应存储子系统模块会把执行SQL的结果发往客户端;不顺利,则发送报错信息。最后,服务器将控制权交回给连接线程,连接线程做清理工作,并再次等待客户端的连接或其他查询,直到客户端输入quit命令为止,此次会话才算结束。

(1.5)补充-1:mysql日常90%的工作如上描述过程在运转,但有例外,例如:如果服务器扮演复制功能,则它的复制子系统还会不停读取二进制日志文件;如果服务器扮演的是从服务器角色,从服务器还将启动两个线程,分别是SQL线程和IO线程,它们共同接受主服务器传过来的语句并更新从服务器。    

(1.6)补充-2:所有子系统的协作运行,都是核心库在默默提供支持。MySQL将一些常用且基础的API放在一起,形成核心库。

来自为知笔记(Wiz)

时间: 2024-12-28 00:36:51

第四课补充01——数据库系统的立体视图的相关文章

第五课补充01——持久化

1. 多数据库,默认16个库:默认在0库: 2. 2种持久化机制:rdb(快照模式).aof(日志模式) (1) rdb持久化,2种方式:手动命令save和后台save 手动命令save会阻塞客户端的进程请求,直到save执行完成,因为redis本身是单线程的执行方式: bgsave方式保存,是fork一个子进程来执行数据保存, fork出的子进程进行bgsave的同时,父进程继续处理客户端的新请求,因此就涉及到新数据同步问题:父进程和子进程之间通过copy on write机制进行数据同步(主

第六课补充01——主从复制原理,哨兵机制

[主从复制] 一. redis的复制 ## redis2.8版本后的复制机制,是采用增量复制的 ##复制过程:同步(全量or增量)——命令传播 1.同步流程: 2.全量同步过程: 3.增量同步过程: [哨兵机制] 简介 sentinel是redis高可用的解决方案,sentinel系统(N个sentinel实例,N >= 1)可以监视一个或者多个redis master服务,以及这些master服务的所有从服务:当某个master服务下线时,自动将该master下的某个从服务升级为master服

第三课补充01——set类型 sorted类型命令操作详解,redis管道及事务

1. set类型的命令操作: (1)sadd命令:向key指定的set集合添加成员 ##sadd命令:是设置set集合类型的数据,sadd  <key> <mumber> [<mumber>] ##<key>不存在的时候,sadd命令创建key并向集合添加成员: ##注意,成员之间空格分隔,如果用逗号,则表示是同一个成员 ##set集合里,member是不重复的 (2)smove命令:是原子操作,将指定的member从source移动到desitinatio

第二课补充01——redis-cli命令行详解、string类型、list类型、hash类型命令操作详解

一. redis-cli命令行参数 1.-x参数:从标准输入读取一个参数: [问题] [解决] 因为echo命令是默认带有回车\n的,不带回车需要echo –n命令: echo -n "haha"|redis-cli -x set name,从标准输入读入一个参数到redis,就不会有回车符: 2.-r参数:重复执行一个命令指定的次数: -i参数:设置命令执行的间隔: 例子:每隔1秒执行一次,一共执行3次info命令 3.-rdb文件:获取指定redis实例的rdb文件,保存到本地 可

【Linux探索之旅】第三部分第四课:后台运行及合并多个终端

内容简介 1.第三部分第四课:后台运行及合并多个终端 2.第三部分第五课预告:延时执行,唯慢不破 后台运行及合并多个终端 上一课(<[Linux探索之旅]第三部分第三课:监视系统活动,滴水不漏>)中,我们简单介绍了进程,也学习了如何列出系统中的进程,如何过滤列表结果,还有如何结束进程. 这一课我们继续乘胜追击,一路向北,来学习进程的后台运行. 我们使用的终端让我们难免有一种感觉:我们每次只能在一个终端中运行一个进程.但其实这是大错特错的. 终端还可以运行后台进程.要使进程一个在后台运行,有几种

Octave Tutorial(《Machine Learning》)之第四课《绘图数据》

第四课 Plotting Data 绘图数据 t = [0,0.01,0.98]; y1 = sin(2*pi*4*t); y2 = cos(2*pi*4*t); plot(t,y1);(绘制图1) hold on;(图1不消失) plot(t,y2,'r');(用红色绘制图2) xlable('time')(横轴名称) ylable('value')(纵轴名称) legend('sin','cos')(标记两条函数曲线) title('my plot') print -dpng 'myPlot

Kali Linux Web 渗透测试视频教程—第十四课-arp欺骗、嗅探、dns欺骗、session劫持

Kali Linux Web 渗透测试视频教程—第十四课-arp欺骗.嗅探.dns欺骗.session劫持 文/玄魂 目录 Kali Linux Web 渗透测试—第十四课-arp欺骗.嗅探.dns欺骗.session劫持      1 关于嗅探.arp欺骗.会话劫持.............................................................. 1 视频教程地址:http://edu.51cto.com/course/course_id-1887.h

第四课 文件系统(下)

====================第四课 文件系统(下)==================== 一.sync/fsync/fdatasync------------------------ 1. 大多数磁盘I/O都通过缓冲进行, 写入文件其实只是写入缓冲区,直到缓冲区满, 才将其排入写队列. 2. 延迟写降低了写操作的次数,提高了写操作的效率, 但可能导致磁盘文件与缓冲区数据不同步. 3. sync/fsync/fdatasync用于强制磁盘文件与缓冲区同步. 4. sync将所有被修改

【连载】创业能力培训第四课总结

创业能力培训第四课总结 以一个故事开头: 老师问:3加4等于多少? 学生答:3加4等于8 老师说了3句话: 1.很好! 2.离答案很接近了哦! 3.还有没有人有别的答案? 表扬,保持其积极性. 具备什么样的条件才能创业 一.明确的创业动机和目标 1.人无我有 2.人有我优 3.人优我特 二.熟悉所要创业的领域(行业.市场.客户等) 三.一定的创业资源(部分即可) 四.一定的知识技能 五.拥有创业精神 创业3要素: 1.机会 2.资源 3.团队 团队: 1.才能互补 2.责任共担 3.共同的创业目