关系型数据库进阶之总体架构
一提到关系型数据库,我们可以看到它被在各个地方使用。有很多不同的关系型数据库,从最小的SQLite到复杂的Teradata。有很多文章在介绍如何使用数据库,但是很少有文章去深入地介绍它是如何工作的。假如你搜索“关系型数据库是如何工作的”这样的关键词,你会发现深入介绍的文章并不多。有时候,我们不禁会问,关系型数据库是不是太旧了,以至于都没有什么人来深入分析其中的内容?
作为一个开发者,我们需要有一点好奇心去深入看看我们每天使用的数据库内部是怎么样,假如你一直没有时间或者机会去深入了解其中的原理,那么本文将会是你的一个很好的选择。本文之所以称之为“进阶”是因为我们不会介绍如何去使用一些Query,而是假设你已经有了这些基础的知识,我们更注重其中的机理讲解。
一个数据库其实是信息的集合,而这个集合是可以很方便地访问和修改的。假如往简单的方面来想,那么它就是一系列的文件。事实上,最简单的数据库,比如SQLite其实就是一堆文件。当然SQLite又不是简简单单的一堆文件,因为它允许你:
- 使用transaction来保证数据的安全和连贯
- 能够很快的处理数据,哪怕是很大的百万量级的数据
总得来说,一个数据库可以由下图几个部分组成:
从这张图可以看出,总得核心有以下几个部分:
核心的组件:
- 进程管理: 很多数据库都有一个进程/线程池需要管理。更有甚者,为了做到纳秒级的效率,很多数据库都使用他们自己的线程而不是系统的线程。
- 网络管理:网络的I/O其实对数据库来说很重要,尤其是在分布式数据库中更为明显。这也是为什么很多数据库都有他们自己的管理者。
- 文件系统管理:数据库的第一个瓶颈就在于磁盘的I/O。需要一个文件系统管理来处理相关的内容,甚至取代系统的文件系统。
- 内存管理:为了避免磁盘I/O的损失,就需要大量的RAM。随之而来的就是,当你处理大量的内存的时候,你就需要一个高效的内存管理。尤其是你同时有很多query在使用内存的时候。
- 安全管理:主要管理用户的认证。
- 客户端管理:管理客户端的连接
工具:
- 备份管理:保存和还原数据库。
- 恢复管理:在数据库崩溃后能够以一致的状态启动数据库。
- 监测管理:记录数据的运行log,并且提供相应的检测工具。
- Admin管理:用于存储元数据比如表的名字,结构,以及管理数据库,schema,表格空间等等。
Query管理:
- Query的解析:检查一个query是否有效
- Query的重写:预先优化一个query
- Query的优化:优化一个query
- Query的执行:编译和执行query
数据的管理:
- Transaction管理:处理transcation
- cache的管理:在使用数据之前把数据放到内存,以及在写到磁盘之前把数据放到内存中
- 数据访问的管理:如何从磁盘访问数据
本文就从宏观介绍了数据库的组成部分,我们将在后面的文章中来分别主要介绍以下的内容:
- 客户端管理
- 查询管理
- 数据管理
Recent Comments