【连载】关系型数据库是如何工作的?(7) - 数据库架构视图
2016-05-09 09:37
441 查看
现在我们可以看看数据库内部都有什么组件。一个数据库就是容易访问和修改的信息集合,实际上,一组简单的文件就可以做到。最简单的数据库SQLite就是由一组简单文件组成的,并且是一组精心设计的一组文件,它允许你:
通过事务保证数据的安全性和一致性;
即时海量数据也能保证快速处理数据。
通常,一个数据的组件视图如下:
在写下这部分内容之前,我阅读了很多书籍和论文,每一个都有其特有的方式来描述数据库。因此就不要纠结我怎么组织数据库,或者我怎么命名这些组件,因为我已经为此考虑良久来适合这篇文章。不同的组件并不重要,重要的是将一个数据库划分为多个组件及其之间的联系。
网络管理器:网络IO是一个很重要的议题,尤其对于分布式数据库,因此一些数据库有它们自己的网络管理器。
文件系统管理器:磁盘IO是数据库的第一瓶颈,因此用一个管理器来完美的处理操作系统文件系统,甚至取而代之就极其重要。
内存管理器:为了避免磁盘IO的瓶颈,一个大的内存是必要的。但是如果你处理一个很大的内存,那就需要一个高效的管理器,尤其是当你有大量并发的使用内存的查询请求时。
安全管理器:用于管理身份认证和用户权限。
客户端管理器:用于管理客户端连接。
…
恢复管理器:宕机后保证数据状态的一致性,并正常重启;
监控管理器:记录数据库的行为,并提供工具来监控;
数据库管理器:存储元数据(像表的名字和结构),并提供工具管理数据库、Schemas、表空间…
…
查询重写器:预优化查询;
查询优化器:优化查询;
查询执行器:编译并执行查询语句;
缓存管理器:在从磁盘读或写之前,把数据先放入内存;
数据访问管理器:访问在磁盘上的数据。
这篇文章的其余部分,我会聚焦于一个数据库如何管理一个查询的一下过程:
客户端管理
查询管理
数据管理(包括数据恢复)
下一章节我们首先介绍客户端管理。
通过事务保证数据的安全性和一致性;
即时海量数据也能保证快速处理数据。
通常,一个数据的组件视图如下:
在写下这部分内容之前,我阅读了很多书籍和论文,每一个都有其特有的方式来描述数据库。因此就不要纠结我怎么组织数据库,或者我怎么命名这些组件,因为我已经为此考虑良久来适合这篇文章。不同的组件并不重要,重要的是将一个数据库划分为多个组件及其之间的联系。
核心组件
进程管理器:许多数据库都包含一个被管理的进程或线程池。而且为了支持纳秒,很多数据库使用它们自己的线程而不是操作系统线程。网络管理器:网络IO是一个很重要的议题,尤其对于分布式数据库,因此一些数据库有它们自己的网络管理器。
文件系统管理器:磁盘IO是数据库的第一瓶颈,因此用一个管理器来完美的处理操作系统文件系统,甚至取而代之就极其重要。
内存管理器:为了避免磁盘IO的瓶颈,一个大的内存是必要的。但是如果你处理一个很大的内存,那就需要一个高效的管理器,尤其是当你有大量并发的使用内存的查询请求时。
安全管理器:用于管理身份认证和用户权限。
客户端管理器:用于管理客户端连接。
…
工具
备份管理器:保护和恢复数据;恢复管理器:宕机后保证数据状态的一致性,并正常重启;
监控管理器:记录数据库的行为,并提供工具来监控;
数据库管理器:存储元数据(像表的名字和结构),并提供工具管理数据库、Schemas、表空间…
…
查询管理
查询解析器:检查查询语句是否有效;查询重写器:预优化查询;
查询优化器:优化查询;
查询执行器:编译并执行查询语句;
数据管理
事务管理器:处理事务;缓存管理器:在从磁盘读或写之前,把数据先放入内存;
数据访问管理器:访问在磁盘上的数据。
这篇文章的其余部分,我会聚焦于一个数据库如何管理一个查询的一下过程:
客户端管理
查询管理
数据管理(包括数据恢复)
下一章节我们首先介绍客户端管理。
相关文章推荐
- MySQL中的integer 数据类型
- MySQL存储过程
- mysql中int、bigint、smallint 和 tinyint的区别与长度
- mysql load data 导出、导入 csv
- source命令执行SQL脚本文件
- MySQL创建用户及权限控制
- MySQL管理数据表
- linux下mysql添加用户
- mysql procedure
- mysql触发器
- MySQL 备份和恢复策略
- mac下安装mysql(转载)
- mysql 修改编码 Linux/Mac/Unix/通用(杜绝修改后无法启动的情况!)
- MySQL数据的导出、导入(mysql内部命令:mysqldump、mysql)
- mysql数据行转列
- Linux下修改MySQL编码的方法
- MySQL Server 日志
- MySQL 安全事宜
- MySQL 备份与恢复